久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

深度學(xué)習(xí)debug實(shí)踐中的一些經(jīng)驗(yàn)之談

 520jefferson 2020-08-17

作者:土豆

鏈接:https://zhuanlan.zhihu.com/p/158739701
編輯:王萌 澳門城市大學(xué)(深度學(xué)習(xí)沖鴨公眾號(hào))
本文僅作學(xué)術(shù)分享,,若侵權(quán),,請(qǐng)聯(lián)系后臺(tái)刪文處理
前言

接觸深度學(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ù)測結(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ù)測向量分布就必須完全和真實(shí)標(biāo)簽一致,,退化為獨(dú)熱編碼,。但是實(shí)際上在神經(jīng)網(wǎng)絡(luò)中,經(jīng)過了softmax層之后,,是不可能使得除了目標(biāo)分量的其他所有分量為0的(這個(gè)這里只是拋出了結(jié)論,,討論需要比較長的篇幅。),,因此永遠(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)?strong>參數(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é)每一層超平面的平移長度的,,如果你對(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ù),,但是在測試過程中確實(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)?/strong>

有些時(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)行處理,,操作很簡單粗暴,,就是設(shè)置一個(gè)閾值,把超過這個(gè)閾值的梯度全部拉到這個(gè)閾值,,如下圖所示:


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







tf.clip_by_value( t, clip_value_min, # 指定截?cái)嘧钚≈?/code> clip_value_max, # 指定截?cái)嘧畲笾?/code> 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)你把模型拿到測試集中評(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)色為測試損失,下圖為分類準(zhǔn)確度,,綠色為訓(xùn)練準(zhǔn)確度,,藍(lán)色為測試準(zhǔn)確度。我們不難發(fā)現(xiàn)一個(gè)比較有意思的現(xiàn)象,,就是當(dāng)測試損失開始到最低點(diǎn),,開始向上反彈的時(shí)候,其測試準(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)象,。其基本公式很簡單,,如下:


不過這里并不打算對(duì)BN進(jìn)行詳細(xì)講解,只是想告訴大家,,因?yàn)锽N操作在訓(xùn)練過程中是對(duì)每個(gè)batch進(jìn)行處理的,,從每個(gè)batch中求得均值和方差才能進(jìn)行操作。如果你的batch特別?。ū热缡鞘芟抻谟布l件或者網(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ò)正則手段,,其可以簡單解釋為在訓(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)大于測試準(zhǔn)確率

有些時(shí)候,,你發(fā)現(xiàn)你的驗(yàn)證集準(zhǔn)確率遠(yuǎn)大于測試集的準(zhǔn)確率,,在排除了代碼問題和操作問題之后,其實(shí)也可能是因?yàn)橛?xùn)練集和測試集劃分的問題,。一般來說,,你的驗(yàn)證集是從訓(xùn)練集中劃分出來的[23],因此你的驗(yàn)證集和訓(xùn)練集可以視為是同分布的,,但是并不能確保你的訓(xùn)練集和測試集是同分布的,,如果訓(xùn)練集和測試集的分布差的比較大,就可能出現(xiàn)這種情況,。這個(gè)時(shí)候,,可以考慮遷移學(xué)習(xí)中的一些方法。

20,、KL散度出現(xiàn)負(fù)數(shù)

Kullback–Leibler散度,,簡稱KL散度[24],也稱為相對(duì)熵,,是一種用于度量兩個(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],。

參考資料

[1] Janocha K, Czarnecki W M. On loss functions for deep neural networks in classification[J]. arXiv preprint arXiv:1702.05659, 2017.(Overview about loss function used in DNN)
[2] tf.one_hot()進(jìn)行獨(dú)熱編碼
[3] 曲線擬合問題與L2正則
[4] Kinga D, Adam J B. A method for stochastic optimization[C]//International Conference on Learning Representations (ICLR). 2015, 5.
[5] 深度學(xué)習(xí)系列:深度學(xué)習(xí)中激活函數(shù)的選擇
[6] 機(jī)器學(xué)習(xí)之特征歸一化(normalization)
[7] 機(jī)器學(xué)習(xí)模型的容量,過擬合與欠擬合
[8] 在機(jī)器學(xué)習(xí)中epoch, iteration, batch_size的區(qū)別
[9] Pytorch Dataloader doc
[10] tf.clip_by_value
[11] 梯度截?cái)嗟膖ensorflow實(shí)現(xiàn)
[12] 均方誤差(MSE)和均方根誤差(RMSE)和平均絕對(duì)誤差(MAE)
[13]. Du S S, Zhai X, Poczos B, et al. Gradient Descent Provably Optimizes Over-parameterized Neural Networks[J]. arXiv preprint arXiv:1810.02054, 2018.
[14] The inconsistency between the loss curve and metric curve?
[15] Ioffe S, Szegedy C. Batch normalization: accelerating deep network training by reducing internal covariate shift[C]// International Conference on International Conference on Machine Learning. JMLR.org, 2015:448-456.
[16] Wu Y, He K. Group normalization[J]. arXiv preprint arXiv:1803.08494, 2018.
[17] Park S, Kwak N. Analysis on the dropout effect in convolutional neural networks[C]//Asian Conference on Computer Vision. Springer, Cham, 2016: 189-204.
[18] Where should I place dropout layers in a neural network?
[19] Hinton G E, Srivastava N, Krizhevsky A, et al. Improving neural networks by preventing co-adaptation of feature detectors[J]. arXiv preprint arXiv:1207.0580, 2012.
[20] Why do I never see dropout applied in convolutional layers?
[21] L1正則
[22] 深度學(xué)習(xí)系列:反向傳播算法的公式推導(dǎo)
[23] 訓(xùn)練集,、測試集,、檢驗(yàn)集的區(qū)別與交叉檢驗(yàn)
[24] Kullback–Leibler divergence
[25] Probability space
[26] 如何理解K-L散度(相對(duì)熵)
[27] KL Divergence produces negative values
[28] Chen G, Chen P, Shi Y, et al. Rethinking the Usage of Batch Normalization and Dropout in the Training of Deep Neural Networks[J]. arXiv preprint arXiv:1905.05928, 2019.
[29] https://forums./t/rethinking-batchnorm-dropout-combine-together-for-independent-component-layer/46232

如有問題請(qǐng)指出,聯(lián)系方式:
E-mail: [email protected]
QQ: 973926198
github: https://github.com/FesianXu

說個(gè)正事哈


由于微信平臺(tái)算法改版,,公號(hào)內(nèi)容將不再以時(shí)間排序展示,,如果大家想第一時(shí)間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點(diǎn)點(diǎn)【在看】,。星標(biāo)具體步驟為:

(1)點(diǎn)擊頁面最上方深度學(xué)習(xí)自然語言處理”,,進(jìn)入公眾號(hào)主頁。

(2)點(diǎn)擊右上角的小點(diǎn)點(diǎn),,在彈出頁面點(diǎn)擊“設(shè)為星標(biāo)”,,就可以啦。

感謝支持,,比心,。

投稿或交流學(xué)習(xí),備注:昵稱-學(xué)校(公司)-方向,,進(jìn)入DL&NLP交流群,。

方向有很多:機(jī)器學(xué)習(xí)、深度學(xué)習(xí),,python,,情感分析、意見挖掘,、句法分析,、機(jī)器翻譯、人機(jī)對(duì)話,、知識(shí)圖譜,、語音識(shí)別等。

記得備注呦


推薦兩個(gè)專輯給大家:
專輯 | 李宏毅人類語言處理2020筆記
專輯 | NLP論文解讀

整理不易,,還望給個(gè)在看,!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多