如何根據(jù)訓(xùn)練及驗(yàn)證損失曲線診斷我們的CNN,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡(jiǎn)單易行的方法。
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),富縣企業(yè)網(wǎng)站建設(shè),富縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,富縣網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,富縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
讓我們先談點(diǎn)簡(jiǎn)單的,如果不考慮debug,采取什么方式可以提升我們的訓(xùn)練精度呢?
吳恩達(dá)曾提出了這幾點(diǎn):
尋找更多的數(shù)據(jù)
讓網(wǎng)絡(luò)層數(shù)更深一些
在神經(jīng)網(wǎng)絡(luò)中采取一些新的方法
訓(xùn)練的時(shí)間更長(zhǎng)點(diǎn)(更多的迭代次數(shù))
改變batch-size
嘗試使用正則化技術(shù)(權(quán)重衰減)
權(quán)衡結(jié)果的偏置和方差(bias and variance)
使用更多的GPU
以上這些方法和之前的提到的訓(xùn)練神經(jīng)網(wǎng)絡(luò)的關(guān)于訓(xùn)練神經(jīng)網(wǎng)路的諸多技巧Tricks(完全總結(jié)版)的方法是類似的,是無關(guān)乎神經(jīng)網(wǎng)絡(luò)本身的通用的方法,而具體細(xì)化到自己所在的任務(wù)時(shí),我們需要對(duì)我們此刻所做的任務(wù)進(jìn)行單獨(dú)的Debug,來尋找問題所在。
那么我們?nèi)绾蜠ebug呢?和編寫程序類似,神經(jīng)網(wǎng)絡(luò)中的超參數(shù)相當(dāng)于我們的代碼,而神經(jīng)網(wǎng)絡(luò)的輸出信息相當(dāng)于代碼執(zhí)行的結(jié)果。
超參數(shù)是訓(xùn)練神經(jīng)網(wǎng)絡(luò)必不可少的變量,常見的超參數(shù)有:
學(xué)習(xí)速率(如何設(shè)置學(xué)習(xí)率)
batchsize
權(quán)重衰減系數(shù)
dropout系數(shù)
選擇適用的優(yōu)化器
是否使用batch-normalization
神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的結(jié)構(gòu)(比如神經(jīng)網(wǎng)絡(luò)的層數(shù),卷積的大小等等)
那么如何去調(diào)整這些參數(shù)呢?當(dāng)然是通過觀察神經(jīng)網(wǎng)絡(luò)的輸出信息來做出相應(yīng)的修改了,而觀察神經(jīng)網(wǎng)絡(luò)輸出信息的利器就是可視化。
觀察訓(xùn)練過程中各種參數(shù)的變化是非常重要的,首先最重要的當(dāng)屬損失曲線(loss curves)。
上圖所示是一個(gè)比較“完美”的損失曲線變化圖,在訓(xùn)練開始階段損失值下降幅度很大,說明學(xué)習(xí)率合適且進(jìn)行梯度下降過程,在學(xué)習(xí)到一定階段后,損失曲線趨于平穩(wěn),損失變化沒有一開始那么明顯。曲線中的毛刺是因?yàn)?code>batch-size的關(guān)系,batch-size
設(shè)置越大,毛刺越小,畢竟買個(gè)batch-size的數(shù)據(jù)相當(dāng)于不同的個(gè)體。
上圖也是一個(gè)正確的損失曲線,雖然看到變化趨勢(shì)并不是很明顯,但仍然可以看出曲線在慢慢下降,這個(gè)過程其實(shí)是一個(gè)fune-turning的階段。承接于尚一夫圖的損失曲線,這幅圖的損失值已經(jīng)很小了,雖然毛刺很多,但是總體趨勢(shì)是對(duì)的。
那么什么才是有問題的去曲線呢?借用CS231n中的PPT:
上圖中,左上角的圖像是顯然的學(xué)習(xí)不到任何東西(可能這樣看起來比較困難,可以適當(dāng)smooth一下),而第二個(gè)則是典型的過擬合現(xiàn)象;第三個(gè)是更嚴(yán)重的過擬合;第四個(gè)損失值沒有趨于平穩(wěn),很有可能是沒有訓(xùn)練夠;第五個(gè)經(jīng)歷了比較長(zhǎng)的iterate才慢慢收斂,顯然是初始化權(quán)重太小了;而最后一個(gè)越學(xué)習(xí)損失值越大,很有可能是“梯度向上”了。
上圖則展示了更多的錯(cuò)誤:左上一和二:沒有對(duì)數(shù)據(jù)集進(jìn)行洗牌,也就是每次訓(xùn)練都是采用同一個(gè)順序?qū)?shù)據(jù)集進(jìn)行讀??;右上一:訓(xùn)練的過程中突然發(fā)現(xiàn)曲線消失了,為什么?因?yàn)橛龅搅薾an值(在圖中是顯示不出來的),但我們要意識(shí)到這個(gè)問題,這個(gè)問題很有可能是模型設(shè)置的緣故;最后一個(gè)圖顯示較小比例的val集設(shè)置會(huì)導(dǎo)致統(tǒng)計(jì)不準(zhǔn)確,比較好的val設(shè)置比例是0.2。
上圖左邊的曲線圖可以明顯看到,一共訓(xùn)練了五次(五條曲線),但是在訓(xùn)練過程中卻發(fā)現(xiàn)“很難”收斂,也就是神經(jīng)網(wǎng)絡(luò)學(xué)地比較困難。為什么呢?原因很簡(jiǎn)單,很有可能使我們?cè)趕oftmax層之前加入了非線性激活函數(shù)(比如RELU),本來softmax函數(shù)希望我們輸入負(fù)數(shù)或者正數(shù)(負(fù)數(shù)輸入時(shí)Softmax期望輸出比較小,而輸入正數(shù)時(shí)softmax其實(shí)輸出比較大),但是relu只有0和1,那么輸入到softmax會(huì)造成信息的丟失,造成學(xué)習(xí)異常困難。
總結(jié)下,如果你認(rèn)為你的神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)沒有明顯錯(cuò)誤的,但損失曲線顯示仍然很奇怪,那么很有可能:
損失函數(shù)采用的有問題
訓(xùn)練的數(shù)據(jù)的載入方式可能有問題
優(yōu)化器(optimizer)可能有問題
一些其他的超參數(shù)設(shè)置可能有問題
總而言之,損失曲線是觀察神經(jīng)網(wǎng)絡(luò)是否有問題的一大利器,我們?cè)谟?xùn)練過程中非常有必要去觀察我們的損失曲線的變化,越及時(shí)越好!
除了損失函數(shù)曲線,準(zhǔn)確率曲線也是我們觀察的重點(diǎn),準(zhǔn)確率曲線不僅可以觀察到我們的神經(jīng)網(wǎng)絡(luò)是否往正確方向前進(jìn),更主要的是:觀察損失和準(zhǔn)確率的關(guān)系。因?yàn)槲覀冊(cè)诤饬恳粋€(gè)任務(wù)的時(shí)候使用的評(píng)價(jià)標(biāo)準(zhǔn)(metric)和使用的損失函數(shù)往往是不相同的,比較典型的例子是:
圖像分割中的IOU評(píng)價(jià)標(biāo)準(zhǔn)和DICE損失函數(shù)。
"Dice" is a a metric for model evaluation equal to intersection(A,B)/(A+B). Similar to IoU (IoU = intersection(A,B)/union(A,B)), it is used to assess a quality of image segmentation models. "Accuracy" is not really good for this task. For example, in this competition, you can quite easily get 99.9% accuracy of predicted pixels, but the performance of the models may be not as great as you think. Meanwhile, such metrics as dice or IoU can describe your models reasonably well, therefore they are most often used to asses publicly available models. The implementation of the metric used for score evaluation in this competition takes some time and requires additional post-processing, such as mask splitting. Therefore, it is not so common for quick model evaluation. Also, sometimes "soft dice" (dice with multiplication instead of intersection) is used as a loss function during training of image segmentation models.
當(dāng)然,還有隨機(jī)失活和權(quán)重衰減兩個(gè)比較重要的超參數(shù),這兩個(gè)參數(shù)通過觀察損失曲線觀察是不明顯滴,只有通過特定的評(píng)價(jià)標(biāo)準(zhǔn)曲線,設(shè)置好標(biāo)準(zhǔn)再進(jìn)行比較,才可以判斷出是否需要添加dropout
或者weight decay
。
標(biāo)準(zhǔn)化可能已經(jīng)是訓(xùn)練神經(jīng)網(wǎng)絡(luò)的一個(gè)標(biāo)準(zhǔn)流程了,不論是在數(shù)據(jù)中進(jìn)行標(biāo)準(zhǔn)化處理還是在網(wǎng)絡(luò)中添加批標(biāo)準(zhǔn)化層,都是一種標(biāo)準(zhǔn)化的方法(兩種使用一種即可)。
但是標(biāo)準(zhǔn)化技術(shù)通常只用于分類(以及衍生的一些應(yīng)用),但并不適合與那種對(duì)輸入圖像大小比較敏感以及風(fēng)格遷移生成類的任務(wù),不要問為什么,結(jié)果會(huì)給你答案..
關(guān)于如何根據(jù)訓(xùn)練及驗(yàn)證損失曲線診斷我們的CNN問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。