醫學模型深度學習訓練的挑戰
作者|Rishiraj Acharya 編譯|VK 來源|Medium
在醫學數據集的訓練算法期間面臨的許多問題中,這三個最常見:
類別不均衡
多任務
數據集大小
對于這些問題,我將分享一些解決問題的技術。
類別不均衡挑戰
在現實世界中,我們看到的健康人比患病的人要多得多,這也反映在醫學數據集中。健康和患病類別的例子數量并不平均。這反映了疾病在現實世界中的頻率。在醫療數據集和信用卡欺詐數據集中,你可能會看到正常樣本的數量是異常樣本的一百倍。
結果,很容易被誤認為是模型表現出色,而實際上卻并非如此。如果使用accuracy_score準確度這樣的簡單度量,就會發生這種情況。準確度對于這類數據集來說不是一個很好的度量標準,因為標簽嚴重傾斜,所以一個只輸出正常標簽的神經網絡的準確率甚至還能略高于90%。
解決方案:
我們可以定義更有用的指標,例如F1度量或"精確度/召回率"。精度定義為"真正例個數/(真正例個數+假正例個數)"。假正例很多時這是一個很好的度量。另一方面,召回率定義為"真正例個數/(真正例個數+假反例個數)"。當假反例本很多時這是一個很好的度量。醫療領域的大多數模型就是這種情況。但是,我們經常需要同時考慮假正例個數和假反例個數,這就是F1度量的功能。它在精確度(Precision)和召回率(Recall)之間取得均衡,由公式2 * ((Precision*Recall) / (Precision+Recall))給出。
處理類不均衡的另一種流行技術是"重采樣"。這是從多數類(樣本過多的那一類)中刪除示例(稱為欠采樣)或在少數類中添加示例(稱為過采樣)以在這兩個類之間取得均衡的行為。盡管它們可以通過使用復雜的重采樣技術來解決,但它們具有自己的缺點,如信息丟失和過擬合。
多任務挑戰
在現實世界中,通常僅預測健康或患病是不夠的。我們經常需要將醫療數據分為多個類別或標簽。例如,僅從心律中檢測出心律失常并沒有那么有市場,對患者進行分析判斷得到哪種心律失常更有價值。例如病狀可能是房顫,室上性心動過速或任何其他類型。
從理論上講,可以為需要分類的每個標簽訓練單獨的神經網絡模型,但是這對于寫代碼來說非常不切實際。如果我們可以將所有這些分類模型組合到一個返回多個預測的單個深度神經網絡中,就比較有價值。
解決方案:
我們使用一種稱為"多類別分類"或"多標簽分類"的方法來應對這一挑戰,它們之間略有不同。在多類別中,數據樣本的類別是互斥的,而在多標簽中,數據樣本可以屬于多個類別。在醫學領域,我們通常使用多標簽分類,因為如果患者被診斷為肺不張(肺的膨脹不全),則并不意味著他/她就不會有心臟肥大。我們將模型最后一層的分數再傳遞給Sigmoid激活函數。這會把最后一層的每個分數轉換為0到1之間的值,而與其他分數無關。
對于多標簽分類,我們選擇的損失函數變為binary_crossentropy,其中由于我們使用了Sigmoid激活函數,因此每個標簽都被視為獨立的伯努利分布。在需要多類的情況下,可以用損失函數設置為categorical_crossentropy的softmax激活函數來替換Sigmoid激活函數。
數據集大小挑戰
處理醫學數據集的主要挑戰是這些數據集的大小。大型訓練數據除了具有良好的體系結構外,還對模型的性能起著重要的作用,并且可用于疾病的患者數據數量往往不夠。低數據集大小是導致高偏差和高方差的主要原因。這導致模型的推廣和優化困難。
解決方案:
為了解決模型優化的困難,我們使用一種稱為"遷移學習"的方法,其中我們使用從相關網絡較低層中學習來訓練較高層,而無需它們從頭開始學習。由于先前的訓練,較低的圖層可以用作良好的特征提取器,因此我們可以根據數據集對其進行微調。該技術優化速度更快,并減少了訓練新模型所需的數據量。
為了解決模型泛化的困難,我們使用一種稱為"數據增強"的技術,將數據提供給模型之前,不是復制相同的示例,而是對示例進行一些隨機轉換。這樣,我們可以使模型對于大小或亮度等微小變化保持不變。諸如水平或垂直翻轉圖像,更改圖像的亮度或對比度,將圖像旋轉或縮放到一定程度之類的做法都有助于數據擴充。此技術在小型數據集中避免過度擬合非常有用。
作者:Pans
鏈接:https://juejin.im/post/5ec2632b518825213940eb9e
來源:掘金
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處