現(xiàn)在憋活,您已經(jīng)了解了深度學(xué)習(xí)在醫(yī)學(xué)圖像分類問題上的一些前沿應(yīng)用岂津。
本文將介紹第一課第一周6-10節(jié)的內(nèi)容。主要講解構(gòu)建一個分類模型去識別胸片的腫塊悦即。以及分類模型將面臨的三個挑戰(zhàn):類不平衡挑戰(zhàn)吮成、多任務(wù)挑戰(zhàn)和數(shù)據(jù)集大小挑戰(zhàn)。本節(jié)重點解決類不平衡挑戰(zhàn)盐欺。詳細介紹了loss的算法赁豆,以及為何要做加權(quán)l(xiāng)oss。以及在作業(yè)中冗美,手把手帶你寫加權(quán)l(xiāng)oss.
我們將介紹如何為使用胸部X光片檢測多個疾病的醫(yī)學(xué)成像任務(wù)構(gòu)建自己的深度學(xué)習(xí)模型魔种。
我們將介紹一個胸部X光解釋模型的訓(xùn)練過程,并看看在這個過程中你將面臨的關(guān)鍵挑戰(zhàn)粉洼,以及你如何成功地應(yīng)對這些挑戰(zhàn)节预。
我們先來看看胸部X光片的判讀任務(wù)叶摄。胸部X光片是醫(yī)學(xué)上最常見的診斷成像方法之一,大約一年有20億個胸部X光片安拟。
胸部X光檢查對于發(fā)現(xiàn)許多疾病至關(guān)重要蛤吓,包括肺炎和肺癌,這些疾病每年影響著全世界數(shù)百萬人糠赦。
現(xiàn)在会傲,一位接受過胸部X光片解釋訓(xùn)練的放射科醫(yī)生會查看胸部X光片,觀察肺部拙泽、心臟和其他區(qū)域淌山,以尋找可能提示患者是否患有肺炎、肺癌或其他疾病的線索顾瞻。
讓我們看看一個叫做腫塊(Mass)的異常泼疑。我不打算首先定義什么是腫塊,但讓我們看三張包含腫塊的胸部X光片和三張正常的胸部X光片荷荤。
所以退渗,你大概知道什么是腫塊了嗎?腫塊被定義為病變或換句話說蕴纳,在胸部X光片上看到的直徑大于3厘米的組織損傷会油。讓我們看看如何訓(xùn)練我們的算法來識別 mass。
Training, prediction, and loss
我們有胸部X光片的圖像袱蚓,想通過一個算法去識別它們是否含有腫塊钞啸。
這個算法可以有不同的名字几蜻。您可能聽說過深度學(xué)習(xí)算法或模型喇潘、神經(jīng)網(wǎng)絡(luò)或卷積神經(jīng)網(wǎng)絡(luò)等術(shù)語。
該算法以分數(shù)的形式生成輸出梭稚,分數(shù)是圖像包含腫塊的概率颖低。
上圖中第一幅圖像實際上有腫塊,但算法輸出的腫塊的概率為0.48弧烤,而下面那個正常的圖像腫塊的概率被輸出為0.51忱屑。
因此,當訓(xùn)練還沒有開始暇昂,這些分數(shù)莺戒,這些概率輸出將不符合期望的標簽。因此急波,我們要去訓(xùn)練它从铲。
假設(shè) mass 的期望標簽是1,normal的標簽是0澄暮。您可以看到0.48與1相距甚遠名段,而0.51與期望的0標簽相差甚遠阱扬。
我們可以通過計算一個損失函數(shù)來測量這個誤差。
損失函數(shù)測量我們的輸出概率和期望的標簽之間的誤差伸辟。第一幅圖像的誤差為0.32麻惶, 第二幅為0.31。損失值的計算之后會講信夫。
當我們算法迭代幾次后窃蹋,一組新的圖像和期望的標簽被呈現(xiàn)給該算法,因為它學(xué)會隨著時間的推移產(chǎn)生更接近所需標簽的分數(shù)静稻。
這里脐彩,第一幅圖像的概率增加到了0.6,越來越接近1姊扔, 第二幅圖像的概率降到了0.3惠奸, 越來越接近0。loss值也越來越小恰梢。
三個挑戰(zhàn)
我們將討論醫(yī)學(xué)圖像訓(xùn)練算法的三個關(guān)鍵挑戰(zhàn):類不平衡挑戰(zhàn)佛南、多任務(wù)挑戰(zhàn)和數(shù)據(jù)集大小挑戰(zhàn)。對于每一個挑戰(zhàn)嵌言,我們將介紹一到兩種應(yīng)對方法嗅回。
- 類別不平衡:可以使用加權(quán)的 loss weighted loss, 或者是均衡采樣(resampling)
- 多任務(wù): 多標簽loss
- 數(shù)據(jù)集大小: 遷移學(xué)習(xí) + 數(shù)據(jù)增強
類別不平衡
我們更詳細的來討論一下類別不平衡摧茴。在醫(yī)學(xué)數(shù)據(jù)集中绵载,非疾病和疾病的例子并不相同。
這反映了現(xiàn)實世界中疾病的流行率或頻率苛白,在這里我們看到正常人的例子比腫塊的例子多得多娃豹,特別是當我們觀察健康人群的X光時。在一個醫(yī)學(xué)數(shù)據(jù)集中购裙,你可能會看到正常例子是腫瘤例子的100倍懂版。
損失函數(shù)的計算
繼續(xù)上邊的類別不平衡的例子,這就給算法學(xué)習(xí)帶來了一個問題躏率,即大多數(shù)情況下算法都會抓住正常的例子躯畴。如圖,剛開始model為每個人預(yù)測一個非常低的患病概率薇芝,并且不能確定一個例子什么地方有疾病蓬抄。
讓我們看看如何將這個問題追溯到我們用來訓(xùn)練算法的損失函數(shù)。我們還將了解如何在數(shù)據(jù)不平衡的情況下修改這個損失函數(shù)夯到。
這個損失叫做二進制交叉熵損失嚷缭,它衡量的是一個分類模型的性能,它的輸出在0到1之間黄娘,讓我們看一個例子峭状,看看這個損失函數(shù)是如何計算的克滴。
關(guān)于交叉熵損失函數(shù),我們之前也介紹過优床,歡迎閱讀
這里我們有一個胸部x光片的例子劝赔,其中包含一個腫塊,算法輸出的概率為0.2胆敞。這里的0.2是根據(jù)算法Y等于1的概率着帽,這個例子是腫塊的概率。現(xiàn)在移层,我們可以用損失函數(shù)來計算這個例子中的loss仍翰。
如圖所示,
上圖中观话,label=0,所以是一個陰性例子予借。我們計算loss使用 y=0 那一行的公式。網(wǎng)絡(luò)輸出的概率是0.7频蛔,但是我們要計算的y=0的概率灵迫,為1-0.7=0.3, 因此
我們已經(jīng)學(xué)會了如何計算一個例子的loss,讓我們來看看它是如何應(yīng)用到一堆例子中的晦溪。
這里我們有六個正常的例子和兩個腫塊(mass)的例子瀑粥。 注意這里的P2、P3三圆、P4是患者id狞换,當訓(xùn)練還沒有開始時,假設(shè)算法對所有的例子產(chǎn)生了0.5的輸出概率舟肉,然后可以計算每個例子的損失修噪。
對于一個normal的例子,我們將使用log(1-0.5)度气,結(jié)果是0.3割按。對于一個mass例子膨报,我們將使用log0.5磷籍,也是0.3。
我們計算總的loss
loss = 2 mass * 0.3 + 6 noraml * 0.3
所以請注意现柠,大部分對損失的貢獻是來自 normal 的例子院领,而不是來自 mass 的例子。
因此够吩,該算法在不增加 mass 樣本的相對權(quán)重的前提下比然,對更新后的樣本進行優(yōu)化以得到正常樣本。實際上周循,這并不能產(chǎn)生很好的分類器强法。這就是類別不平衡的問題万俗。
解決類不平衡問題的方法是修改損失函數(shù),對正常類和 mass 類進行不同的加權(quán)饮怯。Wp是我們分配給 mass 例子的權(quán)重闰歪,Wn指正常例子的權(quán)重。
這里蓖墅。我們的
數(shù)量越多的類別權(quán)重越低库倘,數(shù)量越少的樣本權(quán)重越高。
然后论矾,你可以看到教翩,如果你把 2 個 mass 例子中的總損耗加起來,我們得到0.45贪壳,6個正常的例子的總loss也是0.45饱亿。
從正類和負類得到的損失貢獻是相同的。因此闰靴,這是一個使用權(quán)重修改損失的想法路捧,在這種方法中稱為加權(quán)損失,以解決類不平衡問題传黄。
學(xué)到這里杰扫,我們應(yīng)該完成第二次作業(yè)
本周作業(yè)解讀 加權(quán)l(xiāng)oss
作業(yè)文件:AI4M_C1_W1_lecture_ex_02
- 首先,我們認為的構(gòu)造y_true, y_pred_1, y_pred_2.分別表示標簽膘掰,model1的輸出章姓,model2的輸出
y_true = np.array(
[[1],
[1],
[1],
[0]])
print(f"y_true: \n{y_true}")
# Make model predictions that are always 0.9 for all examples
y_pred_1 = 0.9 * np.ones(y_true.shape)
print(f"y_pred_1: \n{y_pred_1}")
print()
y_pred_2 = 0.1 * np.ones(y_true.shape)
print(f"y_pred_2: \n{y_pred_2}")
y_true:
[[1]
[1]
[1]
[0]]
y_pred_1:
[[0.9]
[0.9]
[0.9]
[0.9]]
y_pred_2:
[[0.1]
[0.1]
[0.1]
[0.1]]
- 我們來計算兩個model的loss
loss_reg_1 = -1 * np.sum(y_true * np.log(y_pred_1)) + \
-1 * np.sum((1 - y_true) * np.log(1 - y_pred_1))
注意
: 從上面圖中的公式如何轉(zhuǎn)到這里的公式的。喜歡研究的同學(xué)可以深入探討一下识埋。頭疼的同學(xué)凡伊,可以直接調(diào)用這個的公式。
+ When the model 1 always predicts 0.9, the regular loss is 2.6187
- When the model 2 always predicts 0.1, the regular loss is 7.0131
我們這里遇到了類別不平衡窒舟,例子中有3個陽性系忙,1個陰性。當預(yù)測值始終為0.1時比始終為0.9惠豺,損失函數(shù)會產(chǎn)生更大的loss值(model2的結(jié)果)银还,因為數(shù)據(jù)是不平衡的。
當類不平衡具有更多正標簽時洁墙,正則損失函數(shù)意味著預(yù)測值高達0.9的模型比預(yù)測值低達0.1的模型表現(xiàn)更好
- 設(shè)置類別權(quán)重
因此蛹疯,為了解決這個問題,我們需要給不同的類別不同的權(quán)重热监。
由圖可見捺弦,兩個model的loss一樣,由于您使用了加權(quán)損失,因此無論模型始終預(yù)測 0.9 還是始終預(yù)測 0.1列吼,計算出的損失都相同幽崩。
是不是很神奇。雖然加權(quán)損失很簡單寞钥,初學(xué)者都聽過歉铝。但是仔細去了解其中的原理,親自實踐凑耻,你會掌握的更牢靠太示。
思考:我們這里只計算了一個類別的loss, 當有多個類別時應(yīng)該怎么計算呢?
感興趣的朋友香浩,自行查看代碼类缤,這里及不介紹了~~
歡迎繼續(xù)閱讀下一次內(nèi)容~~