0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在深度學(xué)習(xí)實(shí)踐中的調(diào)試過程

深度學(xué)習(xí)自然語言處理 ? 來源:深度學(xué)習(xí)自然語言處理 ? 作者:土豆 ? 2020-08-28 09:57 ? 次閱讀


前言 接觸深度學(xué)習(xí)也有一兩年了,一直沒有將一些實(shí)戰(zhàn)經(jīng)驗(yàn)整理一下形成文字。本文打算用來記錄一些在深度學(xué)習(xí)實(shí)踐中的調(diào)試過程,記錄一些經(jīng)驗(yàn)之談。因?yàn)槟壳吧疃葘W(xué)習(xí)業(yè)界的理論基礎(chǔ)尚且薄弱,很多工程實(shí)踐中的問題沒法用理論解釋得很好,這里的只是實(shí)踐中的一些經(jīng)驗(yàn)之談,以供參考以及排錯(cuò)。本文將持續(xù)更新。 需要強(qiáng)調(diào)的是,本文的很多單純只是經(jīng)驗(yàn),在盡可能列出參考文獻(xiàn)的同時(shí)卻并無嚴(yán)格理論驗(yàn)證,希望大家見諒。歡迎大家集思廣益,共同維護(hù)這個(gè)經(jīng)驗(yàn)集,為整個(gè)社區(qū)貢獻(xiàn)微弱力量。


1、在分類問題中,損失函數(shù)及其快速得下降為0.0000 在分類問題中,我們一般采用的是交叉熵[1]作為損失函數(shù),如式(1.1)所示 其中和是預(yù)測(cè)結(jié)果,以概率分布的形式表達(dá),如等,一般是通過softmax層實(shí)現(xiàn),和是樣本真實(shí)標(biāo)簽,在單分類問題中,采用的是獨(dú)熱編碼[2],只有一個(gè)分量是為1的,如。(公式第二行是向量化表達(dá))我們發(fā)現(xiàn),交叉熵?fù)p失的下確界是0,但是永遠(yuǎn)都不可能達(dá)到0,因?yàn)橐_(dá)到0,那么所有的預(yù)測(cè)向量分布就必須完全和真實(shí)標(biāo)簽一致,退化為獨(dú)熱編碼。但是實(shí)際上在神經(jīng)網(wǎng)絡(luò)中,經(jīng)過了softmax層之后,是不可能使得除了目標(biāo)分量的其他所有分量為0的(這個(gè)這里只是拋出了結(jié)論,討論需要比較長(zhǎng)的篇幅。),因此永遠(yuǎn)不可能達(dá)到0的,正是因?yàn)槿绱?,交叉熵?fù)p失可以一直優(yōu)化,這也是其比MSE損失優(yōu)的一個(gè)點(diǎn)之一。 既然注意到了不可能為0,我們就可以分析,這肯定是自己程序問題,我們將經(jīng)過softmax之前的logit打印出,如: 發(fā)現(xiàn)了沒有,這些值都很大,而softmax函數(shù)為: 我們會(huì)發(fā)現(xiàn),過大或者過小的指數(shù)項(xiàng),比如1023,會(huì)涉及到計(jì)算,這個(gè)數(shù)值在TensorFlow或者大部分框架中是溢出的,顯示為inf,因此就會(huì)把該分量拉成1,而其他變成了0。這種操作是會(huì)導(dǎo)致嚴(yán)重的過擬合的。因此,一般來說,logit值不能太大,否則將會(huì)出現(xiàn)數(shù)值計(jì)算問題。 那么如何解決?出現(xiàn)這種問題的情況很多時(shí)候是因?yàn)?a target="_blank">參數(shù)初始化導(dǎo)致的數(shù)值計(jì)算問題,比如都采用了方差過小的高斯分布進(jìn)行初始化,那么就會(huì)把網(wǎng)絡(luò)的輸出的范圍拉的特別大,導(dǎo)致以上的問題。因此在參數(shù)初始化中,確保每一層的初始化都是在一定范圍內(nèi)的,可以考慮采用Xavier初始化,Kaiming初始化等。(這個(gè)初始化的影響我們將會(huì)以后討論,這是一個(gè)新的話題。)
2、在正則化的過程中對(duì)神經(jīng)網(wǎng)絡(luò)的偏置也進(jìn)行了正則 一般來說,我們常用的是二范數(shù)正則,也即是嶺回歸,如式子(2.1) 一般來說,我們只會(huì)對(duì)神經(jīng)網(wǎng)絡(luò)的權(quán)值進(jìn)行正則操作,使得權(quán)值具有一定的稀疏性[21]或者控制其尺寸,使得其不至于幅度太大[3],減少模型的容量以減少過擬合的風(fēng)險(xiǎn)。同時(shí),我們注意到神經(jīng)網(wǎng)絡(luò)中每一層的權(quán)值的作用是調(diào)節(jié)每一層超平面的方向(因?yàn)榫褪瞧浞ㄏ蛄浚?,因此只要比例一致,不?huì)影響超平面的形狀的。但是,我們必須注意到,每一層中的偏置是調(diào)節(jié)每一層超平面的平移長(zhǎng)度的,如果你對(duì)偏置進(jìn)行了正則,那么我們的可能就會(huì)變得很小,或者很稀疏,這樣就導(dǎo)致你的每一層的超平面只能局限于很小的一個(gè)范圍內(nèi),使得模型的容量大大減少,一般會(huì)導(dǎo)致欠擬合[7]的現(xiàn)象。 因此,一般我們不會(huì)對(duì)偏置進(jìn)行正則的,注意了。
3、學(xué)習(xí)率太大導(dǎo)致不收斂 不收斂是個(gè)范圍很大的問題,有很多可能性,其中有一種是和網(wǎng)絡(luò)結(jié)構(gòu)無關(guān)的原因,就是學(xué)習(xí)率設(shè)置的太大了,如下圖所示,太大的學(xué)習(xí)率將會(huì)導(dǎo)致嚴(yán)重的抖動(dòng),使得無法收斂,甚至在某些情況下可能使得損失變得越來越大直到無窮。這個(gè)時(shí)候請(qǐng)調(diào)整你的學(xué)習(xí)率,嘗試是否可以收斂。當(dāng)然,這里的“太大”目前沒有理論可以衡量,不過我喜歡從的Adam優(yōu)化器[4]開始進(jìn)行嘗試優(yōu)化。

下圖展示了過大過小的學(xué)習(xí)率對(duì)模型性能的影響曲線圖:


4、別在softmax層前面的輸入施加了激活函數(shù) softmax函數(shù)如式(4.1)所示: 假設(shè)我們的網(wǎng)絡(luò)提取出來的最后的特征向量是,如果我們最后的分類的類別有類,那么我們會(huì)用一個(gè)全連接層將其映射到對(duì)應(yīng)維度的空間里面,如式(4.2)。 那么,這個(gè)全連接層雖然說可以看成是分類器,但是我們最好把它看成是上一層的“近線性可分特征”的一個(gè)維度轉(zhuǎn)換(有點(diǎn)繞,意思是我們這里只是一個(gè)維度的轉(zhuǎn)換,而不涉及到kernel),不管怎么說,這個(gè)時(shí)候,我們的輸出是不能有激活函數(shù)的,如下式是不可以的: 這時(shí)候的輸出,具有和分類類別相同的維度,在很多框架中被稱之為logits值,這個(gè)值一般是在實(shí)數(shù)范圍內(nèi)的,一般不會(huì)太大,參考筆記第一點(diǎn)的情況。
5、檢查原數(shù)據(jù)輸入的值范圍 原始數(shù)據(jù)輸入可能千奇百怪,每個(gè)特征維的值范圍可能有著數(shù)量級(jí)上的差別,這個(gè)時(shí)候如果我們不對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,將會(huì)大大增大設(shè)計(jì)網(wǎng)絡(luò)的負(fù)擔(dān)。一般來說我們希望輸入的數(shù)據(jù)是中心對(duì)齊的,也即是0均值的[5],可以加速網(wǎng)絡(luò)收斂的速度。同時(shí),我們希望不同維度上的數(shù)值范圍是一致的,可以采用一些歸一化[6]的手段進(jìn)行處理(這個(gè)時(shí)候假設(shè)每個(gè)維度重要性是一樣的,比如我們圖片的三個(gè)通道等)。
6、別忘了對(duì)你的訓(xùn)練數(shù)據(jù)進(jìn)行打亂 經(jīng)常,你的訓(xùn)練過程非常完美,能夠很好地?cái)M合訓(xùn)練數(shù)據(jù),但是在測(cè)試過程中確實(shí)一塌糊涂,是的,你的模型這個(gè)時(shí)候過擬合[7]了。這個(gè)時(shí)候你會(huì)檢查模型的有效性,不過在進(jìn)行這一步之前,不妨先檢查下你的數(shù)據(jù)加載器(Data Loader)是否是正常設(shè)計(jì)的。 一般來說,我們的訓(xùn)練數(shù)據(jù)在訓(xùn)練過程中,每一個(gè)epoch[8]中,都是需要進(jìn)行打亂(shuffle)的,很多框架的數(shù)據(jù)加載器參數(shù)列表中都會(huì)有這項(xiàng)選項(xiàng),比如pytorch的DataLoader類[9]。為什么需要打亂呢?那是因?yàn)槿绻淮騺y我們的訓(xùn)練數(shù)據(jù),我們的模型就有可能學(xué)習(xí)到訓(xùn)練數(shù)據(jù)的個(gè)體與個(gè)體之間特定的排列順序,而這種排列順序,在很多情況下是無用的,會(huì)導(dǎo)致過擬合的糟糕現(xiàn)象。因此,我們?cè)谟?xùn)練過程中,在每一個(gè)epoch訓(xùn)練中都對(duì)訓(xùn)練集進(jìn)行打亂,以確保模型不能“記憶”樣本之間的特定排序。這其實(shí)也是正則的一種手段。 在訓(xùn)練中,大概如:
7、一個(gè)batch中,label不要全部相同 這個(gè)情況有點(diǎn)類似與筆記的第六點(diǎn),我們需要盡量給訓(xùn)練過程中人為引入不確定性,這是很多正則手段,包括dropout,stochastic depth等的思路,這樣能夠有效地減少過擬合的風(fēng)險(xiǎn)。因此,一個(gè)batch中,盡量確保你的樣本是來自于各個(gè)類的(針對(duì)分類問題而言),這樣你的模型會(huì)減少執(zhí)著與某個(gè)類別的概率,減少過擬合風(fēng)險(xiǎn),同時(shí)也會(huì)加快收斂速度。
8、少用vanilla SGD優(yōu)化器 在高維度情況下的優(yōu)化,其優(yōu)化平面會(huì)出現(xiàn)很多鞍點(diǎn)(既是梯度為0,但卻不是極點(diǎn)),通常,鞍點(diǎn)會(huì)比局部極值更容易出現(xiàn)(直觀感受就是,因?yàn)楦呔S度情況下,一個(gè)點(diǎn)周圍有很多維度,如果是極值點(diǎn),那么就需要其他所有維度都是朝向同一個(gè)方向“彎曲”的,而這個(gè)要比鞍點(diǎn)的各個(gè)方向“彎曲”的情況可能要小),因此這個(gè)時(shí)候我們更擔(dān)心陷于鞍點(diǎn),而不是局部極小值點(diǎn)(當(dāng)然局部極小值點(diǎn)也是一個(gè)大麻煩,不過鞍點(diǎn)更麻煩)。如果采用普通的SGD優(yōu)化器,那么就會(huì)陷于任何一個(gè)梯度為0的點(diǎn),也就是說,極有可能會(huì)陷于鞍點(diǎn)。如果要使用SGD方法,建議使用帶有momentum的SGD方法,可以有效避免陷入鞍點(diǎn)的風(fēng)險(xiǎn)。

下圖是某個(gè)函數(shù)的三維曲線圖和等高線圖,我們可以看到有若干個(gè)局部最優(yōu)點(diǎn)和鞍點(diǎn),這些點(diǎn)對(duì)于vanilla SGD來說是不容易處理的。


9、檢查各層梯度,對(duì)梯度爆炸進(jìn)行截?cái)? 有些時(shí)候,你會(huì)發(fā)現(xiàn)在訓(xùn)練過程中,你的損失突然變得特別大,或者特別小,這個(gè)時(shí)候不妨檢查下每一層的梯度(用tensorboard的distribution可以很好地檢查),很可能是發(fā)生了梯度爆炸(gradient explosion)的情況,特別是在存在LSTM等時(shí)序的網(wǎng)絡(luò)中,很容易出現(xiàn)這種情況。因此,這個(gè)時(shí)候我們會(huì)用梯度截?cái)噙M(jìn)行處理,操作很簡(jiǎn)單粗暴,就是設(shè)置一個(gè)閾值,把超過這個(gè)閾值的梯度全部拉到這個(gè)閾值,如下圖所示:

在tensorflow中也提供了相應(yīng)的API供梯度截?cái)嗍褂肹10],如:

tf.clip_by_value( t, clip_value_min, # 指定截?cái)嘧钚≈?clip_value_max, # 指定截?cái)嘧畲笾?name=None) 具體使用見[11],在應(yīng)用梯度之前,對(duì)梯度截?cái)噙M(jìn)行處理。 10、檢查你的樣本label 有些時(shí)候,你的訓(xùn)練過程可以很好地收斂,當(dāng)使用MSE損失[12]的時(shí)候甚至可能達(dá)到0.0000的情況。但是,當(dāng)你把模型拿到測(cè)試集中評(píng)估的時(shí)候,卻發(fā)現(xiàn)性能極差,仿佛沒有訓(xùn)練一樣。這是過擬合嗎?顯然是的,但是這可能并不是你的模型的問題,請(qǐng)檢查你的數(shù)據(jù)加載中訓(xùn)練集的樣本標(biāo)簽是否正確對(duì)應(yīng)。 這個(gè)問題很白癡,但是卻真的很容易在數(shù)據(jù)加載過程中因?yàn)榉N種原因把label信息和對(duì)應(yīng)樣本給混掉。根據(jù)文獻(xiàn)[13]中的實(shí)驗(yàn),用MSE損失的情況下,就算是你的label完全隨機(jī)的,和樣本一點(diǎn)關(guān)系都沒有,也可以通過基于SGD的優(yōu)化算法達(dá)到0.0000損失的。因此,請(qǐng)務(wù)必確保你的樣本label是正確的。 11、分類問題中的分類置信度問題 在分類問題中我們一般都是采用的是交叉熵?fù)p失,如式子(1.1)所示,在一些實(shí)驗(yàn)中,如果我們繪制出訓(xùn)練損失和分類準(zhǔn)確度的曲線圖,我們可能會(huì)有下圖這種情況[14]:

其中上圖為分類損失,紫色為訓(xùn)練損失,藍(lán)色為測(cè)試損失,下圖為分類準(zhǔn)確度,綠色為訓(xùn)練準(zhǔn)確度,藍(lán)色為測(cè)試準(zhǔn)確度。我們不難發(fā)現(xiàn)一個(gè)比較有意思的現(xiàn)象,就是當(dāng)測(cè)試損失開始到最低點(diǎn),開始向上反彈的時(shí)候,其測(cè)試準(zhǔn)確度卻還是上升的,而不是下降。這是為什么呢?為什么分類準(zhǔn)確度不會(huì)順著分類損失的增大而減少呢? 這個(gè)涉及到了分類過程中對(duì)某個(gè)類的“置信程度”的多少,比如: 模型是對(duì)第一類相當(dāng)確信的,但是在第二種情況: 這對(duì)第一類的置信程度就很低了,雖然按照貝葉斯決策,還是會(huì)選擇第一類作為決策結(jié)果。因此這就是導(dǎo)致以上現(xiàn)象的原因,在那個(gè)拐點(diǎn)后面,這個(gè)模型對(duì)于分類的置信程度其實(shí)已經(jīng)變得很差了,雖然對(duì)于準(zhǔn)確度而言,其還能分類正確。但是這其實(shí)正是過擬合的一種表現(xiàn),模型已經(jīng)對(duì)自己的分類結(jié)果不確信了。 12、少在太小的批次中使用BatchNorm層 Batch Normalization[15],中文譯作批規(guī)范化,在深度學(xué)習(xí)中是一種加快收斂速度,提高性能的一個(gè)利器,其本質(zhì)和我們對(duì)輸入的原數(shù)據(jù)進(jìn)行0均值單位方差規(guī)范化差不多,是以batch為單位,對(duì)中間層的輸出進(jìn)行規(guī)范化,可以緩和內(nèi)部協(xié)方差偏移(Internal Covariate Shift)的現(xiàn)象。其基本公式很簡(jiǎn)單,如下: 不過這里并不打算對(duì)BN進(jìn)行詳細(xì)講解,只是想告訴大家,因?yàn)锽N操作在訓(xùn)練過程中是對(duì)每個(gè)batch進(jìn)行處理的,從每個(gè)batch中求得均值和方差才能進(jìn)行操作。如果你的batch特別?。ū热缡鞘芟抻?a target="_blank">硬件條件或者網(wǎng)絡(luò)要求小batch),那么BN層的batch均值和方差可能就會(huì)不能很好符合整個(gè)訓(xùn)練集的統(tǒng)計(jì)特征,導(dǎo)致差的性能。實(shí)際上,實(shí)驗(yàn)[16]說明了這個(gè)關(guān)系,當(dāng)batch小于16時(shí),性能大幅度下降。

因此,少在太小的batch中使用BN層,如果實(shí)在要使用,在發(fā)生性能問題時(shí)優(yōu)先檢查BN層。 13、數(shù)值計(jì)算問題,出現(xiàn)Nan Nan(Not An Number)是一個(gè)在數(shù)值計(jì)算中容易出現(xiàn)的問題,在深度學(xué)習(xí)中因?yàn)樯婕暗胶芏鄵p失函數(shù),有些損失函數(shù)的定義域并不是整個(gè)實(shí)數(shù),比如常用的對(duì)數(shù),因此一不小心就會(huì)出現(xiàn)Nan。在深度學(xué)習(xí)中,如果某一層出現(xiàn)了Nan,那么是具有傳遞性的,后面的層也會(huì)出現(xiàn)Nan,因此可以通過二分法對(duì)此進(jìn)行排錯(cuò)。 一般來說,在深度學(xué)習(xí)中出現(xiàn)Nan是由于除0異?;蛘呤且?yàn)閾p失函數(shù)中的(比如交叉熵,KL散度)對(duì)數(shù)操作中,輸入小于或者等于0了,一般等于0的情況比較多,因此通常會(huì): 這里的是個(gè)很小的值,一般取即可,可以防止因?yàn)閷?duì)數(shù)操作中輸入0導(dǎo)致的Nan異常。 需要注意的是,有些時(shí)候因?yàn)閰?shù)初始化或者學(xué)習(xí)率太大也會(huì)導(dǎo)致數(shù)值計(jì)算溢出,這也是會(huì)出現(xiàn)Nan的,一般這樣會(huì)出現(xiàn)在較前面的層里面。 14、BN層放置的位置問題 BN層有兩種常見的放置位置,如下圖所示:第一個(gè)是放在激活函數(shù)之前:

第二個(gè)是放在激活函數(shù)之后:

在原始BN的論文[15]中,Batch Norm(BN)層是位于激活層之前的,因?yàn)槭菍?duì)原始的,未經(jīng)過激活的logit數(shù)據(jù)進(jìn)行數(shù)據(jù)分布的重整。然而,不少實(shí)驗(yàn)證實(shí)似乎BN層放在激活層之后效果會(huì)更好,這個(gè)原因目前不明。Update 2020/5/18: 在新的文獻(xiàn)[28]中,作者嘗試解釋了以下BN用法的原因,有興趣的讀者可以移步去細(xì)讀下。 傳統(tǒng)用法:

graph LR weights --> BatchNorm BatchNorm --> ReLU [28]的作者提出的用法:

graph LR ReLU --> BatchNorm+dropout BatchNorm+dropout --> weights 15、dropout層應(yīng)用在卷積層中可能導(dǎo)致更差的性能 dropout[19]是hinton大神與2012年提出的一種神經(jīng)網(wǎng)絡(luò)正則手段,其可以簡(jiǎn)單解釋為在訓(xùn)練過程中,按一定概率讓神經(jīng)網(wǎng)絡(luò)中的某些神經(jīng)元輸出為0,其原因可以有幾個(gè)解釋,一個(gè)是作為一種集成模型進(jìn)行解釋,另一個(gè)可以看成是在特征提取學(xué)習(xí)過程中給數(shù)據(jù)加入噪聲,可以看成是一種數(shù)據(jù)增強(qiáng)的正則手段。 在原始論文中,dropout被應(yīng)用于全連接層中,而沒有應(yīng)用在卷積層中,Hinton的解釋是因?yàn)榫矸e層參數(shù)并不多,過擬合風(fēng)險(xiǎn)較小不適合采用dropout這種大殺器的正則手段。有人也認(rèn)為因?yàn)榫矸e網(wǎng)絡(luò)是局部感知的,用dropout正則對(duì)于其在后層中對(duì)于全局信息的獲取可能具有負(fù)作用[20]。 不過在一些工作中,也有人將dropout層應(yīng)用在卷積層中的[17-18],其層次安排為:,不過其丟棄率都是選擇的較小數(shù)如,等,個(gè)人覺得這里的作用大概是對(duì)中間數(shù)據(jù)進(jìn)行加入噪聲,以便于數(shù)據(jù)增強(qiáng)的正則手段。個(gè)人建議是可以嘗試在卷積層中使用少量的dropout,用較小的丟棄率,但是最后別忘了扔掉這些dropout再進(jìn)行一些探索,也許可以具有更好的效果。 16、較小的batch size可以提供較好的泛化 現(xiàn)代的深度學(xué)習(xí)優(yōu)化器基本上都是基于SGD算法進(jìn)行修改而成的,在每一次訓(xùn)練中都是以一個(gè)batch size為單位進(jìn)行訓(xùn)練的,在這個(gè)過程中相當(dāng)于在統(tǒng)計(jì)這個(gè)batch中樣本的一些統(tǒng)計(jì)特性,因此batch size是會(huì)影響模型的超曲線形狀的。 一般來說較大的batch size比如128,256會(huì)和整個(gè)訓(xùn)練集的統(tǒng)計(jì)性質(zhì)更相近,從而使得具有較少的多樣性,而較小的batch size 比如16,32,因?yàn)閎atch size較小,不同batch之間的差異性較大,這種差異性可以看成是正則手段,有機(jī)會(huì)提高模型的泛化性能。(不過有些文章似乎不同意這個(gè)觀點(diǎn),認(rèn)為較大batch size有較好性能,個(gè)人建議是大batch size和小batch size都可以跑跑,有可能能提升性能。) 17、初始化權(quán)值不能初始化為全0 這個(gè)應(yīng)該是老生常談了,但是初學(xué)者經(jīng)常會(huì)出現(xiàn)這種錯(cuò)誤,在初始化權(quán)值的時(shí)候?qū)?quán)值全部初始化為了0,在反向傳播的過程中,對(duì)于某個(gè)權(quán)值的更新公式為[22]: 這個(gè)公式推導(dǎo)具體參見[22],這里不累述了,我們可以發(fā)現(xiàn),當(dāng)初始化權(quán)值參數(shù)全部為0的時(shí)候,我們的將全部為0,這個(gè)時(shí)候?qū)τ谀硞€(gè)權(quán)值的梯度也就變?yōu)榱?,因此整個(gè)網(wǎng)絡(luò)的任何參數(shù)都得不到更新,將會(huì)導(dǎo)致訓(xùn)練無法進(jìn)行。 而對(duì)于偏置的初始化不同,對(duì)于偏置的更新公式如[22]: 我們可以發(fā)現(xiàn),對(duì)于偏置的更新而言,不依賴與初始值,因此偏置的初始化可以初始化為全0。 18、別忘了你的偏置 這個(gè)也是初學(xué)者很容易犯的錯(cuò)誤,就是忘記給每一層添加偏置。我們?cè)诠P記第二點(diǎn)中提到了神經(jīng)網(wǎng)絡(luò)中偏置的作用,總的來說就是對(duì)超平面進(jìn)行平移的,因此一般來說,我們的神經(jīng)網(wǎng)絡(luò)都是需要添加偏置的,不然你的超平面就只能是通過原點(diǎn)的了,這樣大大減少了模型的容量,經(jīng)常會(huì)使得模型欠擬合。 19、驗(yàn)證準(zhǔn)確率遠(yuǎn)大于測(cè)試準(zhǔn)確率 有些時(shí)候,你發(fā)現(xiàn)你的驗(yàn)證集準(zhǔn)確率遠(yuǎn)大于測(cè)試集的準(zhǔn)確率,在排除了代碼問題和操作問題之后,其實(shí)也可能是因?yàn)橛?xùn)練集和測(cè)試集劃分的問題。一般來說,你的驗(yàn)證集是從訓(xùn)練集中劃分出來的[23],因此你的驗(yàn)證集和訓(xùn)練集可以視為是同分布的,但是并不能確保你的訓(xùn)練集和測(cè)試集是同分布的,如果訓(xùn)練集和測(cè)試集的分布差的比較大,就可能出現(xiàn)這種情況。這個(gè)時(shí)候,可以考慮遷移學(xué)習(xí)中的一些方法。 20、KL散度出現(xiàn)負(fù)數(shù) Kullback–Leibler散度,簡(jiǎn)稱KL散度[24],也稱為相對(duì)熵,是一種用于度量?jī)蓚€(gè)分布之間相似性的常用手段,公式如(20.1),其中第二行形式的變形描述了相對(duì)熵的特性。 我們注意到KL散度是不可能為負(fù)數(shù)的,其中是定義在同一個(gè)概率空間[25]里面的同型的分布,維度相同。從相對(duì)熵的定義來看,這個(gè)公式描述了用分布去近似所造成的不一致性的程度。在深度學(xué)習(xí)和機(jī)器學(xué)習(xí)中,一般是用來描述兩個(gè)維度相同的概率分布之間的相似度。注意到,這里的都是概率分布,因此是需要經(jīng)過softmax層的,才能保證概率和為1,不然可能會(huì)出現(xiàn)KL散度為負(fù)數(shù)的笑話。 而且,在一些框架如Pytorch中,其輸入值需要是log_softmax而目標(biāo)值需要是softmax值,也就說輸入值需要進(jìn)行對(duì)數(shù)操作后再轉(zhuǎn)變?yōu)楦怕史植糩27]。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4262

    瀏覽量

    62243
  • DEBUG
    +關(guān)注

    關(guān)注

    3

    文章

    89

    瀏覽量

    19813
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5442

    瀏覽量

    120800

原文標(biāo)題:深度學(xué)習(xí)debug實(shí)踐中的一些經(jīng)驗(yàn)之談

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    NRF51822調(diào)試過程中遇到哪些問題呢

    NRF51822調(diào)試過程中遇到哪些問題呢?如何去解決這些問題呢?
    發(fā)表于 01-26 07:02

    ADμC812 芯片實(shí)踐中幾點(diǎn)注意

    ADμC812 芯片實(shí)踐中幾點(diǎn)注意
    發(fā)表于 05-16 14:16 ?10次下載

    EDA 技術(shù)在教學(xué)實(shí)踐中的應(yīng)用2

    EDA 技術(shù)在教學(xué)實(shí)踐中的應(yīng)用2 摘 要: EDA 電子技術(shù)教學(xué)實(shí)踐中的應(yīng)用是現(xiàn)代教育發(fā)展的一種趨勢(shì), 本文通過數(shù)字式測(cè)溫儀這一綜合性設(shè)計(jì)實(shí)例,比較全面地說明
    發(fā)表于 12-07 13:50 ?0次下載

    電源設(shè)計(jì)調(diào)試過程中的異?,F(xiàn)象分析

    調(diào)試過程中所看到的一些異?,F(xiàn)象,以及后來的解決辦法。其實(shí)很多工程師認(rèn)為設(shè)計(jì)電源是非常重經(jīng)驗(yàn)的一門技術(shù),要見多識(shí)廣。這種經(jīng)
    發(fā)表于 10-09 10:49 ?1681次閱讀

    APM四軸 初級(jí)安裝調(diào)試過程

    ACM四軸 安裝調(diào)試過程 此教程主要講解軟件調(diào)試 首先要確認(rèn)自己想飛哪種模式,X還是十模式 根據(jù)自己的飛行模式插好線 本章以X模式為例
    發(fā)表于 11-03 10:23 ?6次下載

    單片機(jī)調(diào)試過程中調(diào)試組件導(dǎo)致的問題

    單片機(jī)調(diào)試過程中,經(jīng)常會(huì)遇到類似第3只眼的問題。何謂第3只眼呢?
    的頭像 發(fā)表于 12-30 17:12 ?7329次閱讀
    單片機(jī)<b class='flag-5'>調(diào)試過程中</b>的<b class='flag-5'>調(diào)試</b>組件導(dǎo)致的問題

    淺析STM32調(diào)試過程中的幾個(gè)相關(guān)問題

    總的來講,單片機(jī)調(diào)試是單片機(jī)開發(fā)工作必不可少的環(huán)節(jié)。不管你愿不愿意,調(diào)試過程中總會(huì)有各種不期而遇的問題出現(xiàn)在我們面前來磨礪我們。這里分享幾點(diǎn)STM32調(diào)試過程中與開發(fā)工具及IDE有關(guān)的幾個(gè)常見問題,以供參考。
    的頭像 發(fā)表于 01-21 13:50 ?5328次閱讀

    光纖涂覆機(jī)科研及工程實(shí)踐中詳細(xì)應(yīng)用步驟(圖文)

    光纖涂覆機(jī)科研及工程實(shí)踐中詳細(xì)應(yīng)用步驟(圖文)國(guó)產(chǎn)光纖涂覆機(jī)
    發(fā)表于 02-27 14:30 ?681次閱讀

    直接阻抗匹配的調(diào)試過程

    直接匹配阻抗,天線與射頻芯片在同一塊板子,調(diào)試步驟與50歐姆阻抗匹配調(diào)試天線參數(shù)差不多,多了一部分射頻芯片端的濾波部分的參數(shù)計(jì)算。下面介紹調(diào)試過程。
    的頭像 發(fā)表于 10-03 16:18 ?9437次閱讀
    直接阻抗匹配的<b class='flag-5'>調(diào)試過程</b>

    S7-1200系列PLC調(diào)試過程小結(jié)

    S7-1200系列PLC調(diào)試過程小結(jié)
    發(fā)表于 12-20 09:25 ?3次下載

    電磁流量計(jì)調(diào)試過程中存在的問題以及解決措施

    對(duì)流量計(jì)內(nèi)部設(shè)置參數(shù)進(jìn)行仔細(xì)檢查,還需要調(diào)試顯示數(shù)據(jù)情況和信號(hào)反饋情況,查看它們是否處于正常運(yùn)行狀態(tài)下。接下來就詳細(xì)介紹電磁流量計(jì)調(diào)試過程中存在的問題以及解決措施。
    的頭像 發(fā)表于 10-27 09:08 ?1395次閱讀

    機(jī)器學(xué)習(xí)構(gòu)建ML模型實(shí)踐

    實(shí)踐中的機(jī)器學(xué)習(xí):構(gòu)建 ML 模型
    的頭像 發(fā)表于 07-05 16:30 ?658次閱讀

    深度學(xué)習(xí)框架pytorch入門與實(shí)踐

    深度學(xué)習(xí)框架pytorch入門與實(shí)踐 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)
    的頭像 發(fā)表于 08-17 16:03 ?1519次閱讀

    GPU深度學(xué)習(xí)的應(yīng)用與優(yōu)勢(shì)

    人工智能的飛速發(fā)展,深度學(xué)習(xí)作為其重要分支,正在推動(dòng)著諸多領(lǐng)域的創(chuàng)新。在這個(gè)過程中,GPU扮演著不可或缺的角色。就像超級(jí)英雄電影的主角一樣,GPU
    的頭像 發(fā)表于 12-06 08:27 ?1159次閱讀
    GPU<b class='flag-5'>在</b><b class='flag-5'>深度</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>中</b>的應(yīng)用與優(yōu)勢(shì)

    深度學(xué)習(xí)的模型優(yōu)化與調(diào)試方法

    深度學(xué)習(xí)模型訓(xùn)練過程中,往往會(huì)遇到各種問題和挑戰(zhàn),如過擬合、欠擬合、梯度消失或爆炸等。因此,對(duì)深度學(xué)習(xí)
    的頭像 發(fā)表于 07-01 11:41 ?581次閱讀