精品国产一区在线_av无码中文字幕无码王_天海翼三点刺激高潮不停_好硬好大好爽视频_欧美高清一区三区在线专区_香蕉黄色片

徐土豆
認(rèn)證:優(yōu)質(zhì)創(chuàng)作者
所在專題目錄 查看專題
深度學(xué)習(xí)debug沉思錄第一集
深度學(xué)習(xí)debug沉思錄第二集
作者動態(tài) 更多
給定計算預(yù)算下的最佳LLM模型尺寸與預(yù)訓(xùn)練數(shù)據(jù)量分配
05-19 09:33
大模型推理時的尺度擴(kuò)展定律
05-18 10:32
世界多胞體與世界模型
05-13 09:42
獎勵模型中的尺度擴(kuò)展定律和獎勵劫持
05-12 08:41
MeCo——給預(yù)訓(xùn)練數(shù)據(jù)增加源信息,就能減少33%的訓(xùn)練量并且提升效果
05-08 09:13

深度學(xué)習(xí)debug沉思錄第一集

接觸深度學(xué)習(xí)也有一兩年了,一直沒有將一些實戰(zhàn)經(jīng)驗整理一下形成文字。本文打算用來紀(jì)錄一些在深度學(xué)習(xí)實踐中的調(diào)試過程,紀(jì)錄一些經(jīng)驗之談。因為目前深度學(xué)習(xí)業(yè)界的理論基礎(chǔ)尚且薄弱,很多工程實踐中的問題沒法用理論解釋得很好,這里的只是實踐中的一些經(jīng)驗之談,以供參考以及排錯。本文將持續(xù)更新。需要強(qiáng)調(diào)的是,本文的很多單純只是經(jīng)驗,在盡可能列出參考文獻(xiàn)的同時卻并無嚴(yán)格理論驗證,希望大家見諒。本文轉(zhuǎn)載自徐飛翔的“深度學(xué)習(xí)debug沉思錄”。

版權(quán)聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接和本聲明。

文章目錄

  • 1. 在分類問題中,損失函數(shù)及其快速得下降為0.0000
  • 2. 在正則化的過程中對神經(jīng)網(wǎng)絡(luò)的偏置也進(jìn)行了正則
  • 3.學(xué)習(xí)率太大導(dǎo)致不收斂
  • 4. 別在softmax層前面的輸入施加了激活函數(shù)
  • 5.檢查原數(shù)據(jù)輸入的值范圍
  • 6. 別忘了對你的訓(xùn)練數(shù)據(jù)進(jìn)行打亂
  • 7. 一個batch中,label不要全部相同
  • 8.少用vanilla SGD優(yōu)化器
  • 9. 檢查各層梯度,對梯度爆炸進(jìn)行截斷
  • 10.檢查你的樣本label
  • 11.分類問題中的分類置信度問題
  • 12.少在太小的批次中使用BatchNorm層
  • 13.數(shù)值計算問題,出現(xiàn)Nan
  • 14. BN層放置的位置問題
  • 15. dropout層應(yīng)用在卷積層中可能導(dǎo)致更差的性能
  • 16. 較小的batch size可以提供較好的泛化
  • 17. 初始化權(quán)值不能初始化為全0
  • 18. 別忘了你的偏置
  • 19. 驗證準(zhǔn)確率遠(yuǎn)大于測試準(zhǔn)確率
  • 20. KL散度出現(xiàn)負(fù)數(shù)
  • Reference

1.在分類問題中,損失函數(shù)及其快速得下降為0.0000

在分類問題中,我們一般采用的是交叉熵[1]作為損失函數(shù),如式(1.1)所示

               (1.1)

其中是預(yù)測結(jié)果,以概率分布的形式表達(dá),如[ 0.2 , 0.3 , 0.3 , 0.2 ] [0.2,0.3,0.3,0.2][0.2,0.3,0.3,0.2]等,一般是通過softmax層實現(xiàn),是樣本真實標(biāo)簽,在單分類問題中,采用的是獨熱編碼[2],只有一個分量是為1的,如[ 0.0 , 1.0 , 0.0 , 0.0 ] [0.0,1.0,0.0,0.0][0.0,1.0,0.0,0.0]。(公式第二行是向量化表達(dá))

我們發(fā)現(xiàn),交叉熵?fù)p失的下確界是0,但是永遠(yuǎn)都不可能達(dá)到0,因為要達(dá)到0,那么所有的預(yù)測向量分布就必須完全和真實標(biāo)簽一致,退化為獨熱編碼。但是實際上在神經(jīng)網(wǎng)絡(luò)中,經(jīng)過了softmax層之后,是不可能使得除了目標(biāo)分量的其他所有分量為0的(這個這里只是拋出了結(jié)論,討論需要比較長的篇幅。),因此永遠(yuǎn)不可能達(dá)到0的,正是因為如此,交叉熵?fù)p失可以一直優(yōu)化,這也是其比MSE損失優(yōu)的一個點之一。

既然注意到了不可能為0,我們就可以分析,這肯定是自己程序問題,我們將經(jīng)過softmax之前的logit打印出,如:[ 1023 , − 201 , 1021 , 124 ] [1023,-201,1021,124]

既然注意到了不可能為0,我們就可以分析,這肯定是自己程序問題,我們將經(jīng)過softmax之前的logit打印出,如:

[ 1023 , − 201 , 1021 , 124 ] 

發(fā)現(xiàn)了沒有,這些值都很大,而softmax函數(shù)為:

(1.2)

我們會發(fā)現(xiàn),過大或者過小的指數(shù)項,比如1023,會涉及到計算,這個數(shù)值在TensorFlow或者大部分框架中是溢出的,顯示為inf,因此就會把該分量拉成1,而其他變成了0。這種操作是會導(dǎo)致嚴(yán)重的過擬合的。因此,一般來說,logit值不能太大,否則將會出現(xiàn)數(shù)值計算問題。

那么如何解決? 出現(xiàn)這種問題的情況很多時候是因為參數(shù)初始化導(dǎo)致的數(shù)值計算問題,比如都采用了方差過小的高斯分布進(jìn)行初始化,那么就會把網(wǎng)絡(luò)的輸出的范圍拉的特別大,導(dǎo)致以上的問題。因此在參數(shù)初始化中,確保每一層的初始化都是在一定范圍內(nèi)的,可以考慮采用Xavier初始化,Kaiming初始化等。(這個初始化的影響我們將會以后討論,這是一個新的話題。)

2.在正則化的過程中對神經(jīng)網(wǎng)絡(luò)的偏置也進(jìn)行了正則

一般來說,我們常用的是二范數(shù)正則,也即是嶺回歸,如式子(2.1)

       (2.1)

一般來說,我們只會對神經(jīng)網(wǎng)絡(luò)的權(quán)值進(jìn)行正則操作,使得權(quán)值具有一定的稀疏性[21]或者控制其尺寸,使得其不至于幅度太大[3],減少模型的容量以減少過擬合的風(fēng)險。同時,我們注意到神經(jīng)網(wǎng)絡(luò)中每一層的權(quán)值的作用是調(diào)節(jié)每一層超平面的方向(因為就是其法向量),因此只要比例一致,不會影響超平面的形狀的。但是,我們必須注意到,每一層中的偏置是調(diào)節(jié)每一層超平面的平移長度的,如果你對偏置進(jìn)行了正則,那么我們的b可能就會變得很小,或者很稀疏,這樣就導(dǎo)致你的每一層的超平面只能局限于很小的一個范圍內(nèi),使得模型的容量大大減少,一般會導(dǎo)致欠擬合[7]的現(xiàn)象。

因此,一般我們不會對偏置進(jìn)行正則的,注意了。

3.學(xué)習(xí)率太大導(dǎo)致不收斂

不收斂是個范圍很大的問題,有很多可能性,其中有一種是和網(wǎng)絡(luò)結(jié)構(gòu)無關(guān)的原因,就是學(xué)習(xí)率設(shè)置的太大了,如下圖所示,太大的學(xué)習(xí)率將會導(dǎo)致嚴(yán)重的抖動,使得無法收斂,甚至在某些情況下可能使得損失變得越來越大直到無窮。這個時候請調(diào)整你的學(xué)習(xí)率,嘗試是否可以收斂。當(dāng)然,這里的“太大”目前沒有理論可以衡量,不過我喜歡從的Adam優(yōu)化器[4]開始進(jìn)行嘗試優(yōu)化。

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

4.別在softmax層前面的輸入施加了激活函數(shù)

softmax函數(shù)如式(4.1)所示:

(4.1)

假設(shè)我們的網(wǎng)絡(luò)提取出來的最后的特征向量是,如果我們最后的分類的類別有n類,那么我們會用一個全連接層將其映射到對應(yīng)維度的空間里面,如式(4.2)。                            

      

那么,這個全連接層雖然說可以看成是分類器,但是我們最好把它看成是上一層的“近線性可分特征”的一個維度轉(zhuǎn)換(有點繞,意思是我們這里只是一個維度的轉(zhuǎn)換,而不涉及到kernel),不管怎么說,這個時候,我們的輸出是不能有激活函數(shù)的,如下式是不可以的

(4.3)

這時候的輸出,具有和分類類別相同的維度,在很多框架中被稱之為logits值,這個值一般是在實數(shù)范圍內(nèi)的,一般不會太大,參考筆記第一點的情況。

5.檢查原數(shù)據(jù)輸入的值范圍

原始數(shù)據(jù)輸入可能千奇百怪,每個特征維的值范圍可能有著數(shù)量級上的差別,這個時候如果我們不對數(shù)據(jù)進(jìn)行預(yù)處理,將會大大增大設(shè)計網(wǎng)絡(luò)的負(fù)擔(dān)。一般來說我們希望輸入的數(shù)據(jù)是中心對齊的,也即是0均值的[5],可以加速網(wǎng)絡(luò)收斂的速度。同時,我們希望不同維度上的數(shù)值范圍是一致的,可以采用一些歸一化[6]的手段進(jìn)行處理(這個時候假設(shè)每個維度重要性是一樣的,比如我們圖片的三個通道等)。

6.別忘了對你的訓(xùn)練數(shù)據(jù)進(jìn)行打亂

經(jīng)常,你的訓(xùn)練過程非常完美,能夠很好地擬合訓(xùn)練數(shù)據(jù),但是在測試過程中確實一塌糊涂,是的,你的模型這個時候過擬合[7]了。這個時候你會檢查模型的有效性,不過在進(jìn)行這一步之前,不妨先檢查下你的數(shù)據(jù)加載器(Data Loader)是否是正常設(shè)計的。

一般來說,我們的訓(xùn)練數(shù)據(jù)在訓(xùn)練過程中,每一個epoch[8]中,都是需要進(jìn)行打亂(shuffle)的,很多框架的數(shù)據(jù)加載器參數(shù)列表中都會有這項選項,比如pytorch的DataLoader類[9]。為什么需要打亂呢?那是因為如果不打亂我們的訓(xùn)練數(shù)據(jù),我們的模型就有可能學(xué)習(xí)到訓(xùn)練數(shù)據(jù)的個體與個體之間特定的排列順序,而這種排列順序,在很多情況下是無用的,會導(dǎo)致過擬合的糟糕現(xiàn)象。因此,我們在訓(xùn)練過程中,在每一個epoch訓(xùn)練中都對訓(xùn)練集進(jìn)行打亂,以確保模型不能“記憶”樣本之間的特定排序。這其實也是正則的一種手段。

在訓(xùn)練中,大概如:

7.一個batch中,label不要全部相同

這個情況有點類似與筆記的第六點,我們需要盡量給訓(xùn)練過程中人為引入不確定性,這是很多正則手段,包括dropout,stochastic depth等的思路,這樣能夠有效地減少過擬合的風(fēng)險。因此,一個batch中,盡量確保你的樣本是來自于各個類的(針對分類問題而言),這樣你的模型會減少執(zhí)著與某個類別的概率,減少過擬合風(fēng)險,同時也會加快收斂速度。

8.少用vanilla SGD優(yōu)化器

在高維度情況下的優(yōu)化,其優(yōu)化平面會出現(xiàn)很多鞍點(既是梯度為0,但卻不是極點),通常,鞍點會比局部極值更容易出現(xiàn)(直觀感受就是,因為高維度情況下,一個點周圍有很多維度,如果是極值點,那么就需要其他所有維度都是朝向同一個方向“彎曲”的,而這個要比鞍點的各個方向“彎曲”的情況可能要小),因此這個時候我們更擔(dān)心陷于鞍點,而不是局部極小值點(當(dāng)然局部極小值點也是一個大麻煩,不過鞍點更麻煩)。如果采用普通的SGD優(yōu)化器,那么就會陷于任何一個梯度為0的點,也就是說,極有可能會陷于鞍點。如果要使用SGD方法,建議使用帶有momentum的SGD方法,可以有效避免陷入鞍點的風(fēng)險。

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

9.檢查各層梯度,對梯度爆炸進(jìn)行截斷

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

在tensorflow中也提供了相應(yīng)的API供梯度截斷使用[10],如:

tf.clip_by_value(
t,
clip_value_min, # 指定截斷最小值
clip_value_max, # 指定截斷最大值
name=None
)

具體使用見[11],在應(yīng)用梯度之前,對梯度截斷進(jìn)行處理。

10.檢查你的樣本label

有些時候,你的訓(xùn)練過程可以很好地收斂,當(dāng)使用MSE損失[12]的時候甚至可能達(dá)到0.0000的情況。但是,當(dāng)你把模型拿到測試集中評估的時候,卻發(fā)現(xiàn)性能極差,仿佛沒有訓(xùn)練一樣。這是過擬合嗎?顯然是的,但是這可能并不是你的模型的問題,請檢查你的數(shù)據(jù)加載中訓(xùn)練集的樣本標(biāo)簽是否正確對應(yīng)。

這個問題很白癡,但是卻真的很容易在數(shù)據(jù)加載過程中因為種種原因把label信息和對應(yīng)樣本給混掉。根據(jù)文獻(xiàn)[13]中的實驗,用MSE損失的情況下,就算是你的label完全隨機(jī)的,和樣本一點關(guān)系都沒有,也可以通過基于SGD的優(yōu)化算法達(dá)到0.0000損失的。因此,請務(wù)必確保你的樣本label是正確的。

11.分類問題中的分類置信度問題

在分類問題中我們一般都是采用的是交叉熵?fù)p失,如式子(1.1)所示,在一些實驗中,如果我們繪制出訓(xùn)練損失和分類準(zhǔn)確度的曲線圖,我們可能會有下圖這種情況[14]:

其中上圖為分類損失,紫色為訓(xùn)練損失,藍(lán)色為測試損失,下圖為分類準(zhǔn)確度,綠色為訓(xùn)練準(zhǔn)確度,藍(lán)色為測試準(zhǔn)確度。我們不難發(fā)現(xiàn)一個比較有意思的現(xiàn)象,就是當(dāng)測試損失開始到最低點,開始向上反彈的時候,其測試準(zhǔn)確度卻還是上升的,而不是下降。 這是為什么呢?為什么分類準(zhǔn)確度不會順著分類損失的增大而減少呢?

這個涉及到了分類過程中對某個類的“置信程度”的多少,比如:

模型是對第一類相當(dāng)確信的,但是在第二種情況:

這對第一類的置信程度就很低了,雖然按照貝葉斯決策,還是會選擇第一類作為決策結(jié)果。因此這就是導(dǎo)致以上現(xiàn)象的原因,在那個拐點后面,這個模型對于分類的置信程度其實已經(jīng)變得很差了,雖然對于準(zhǔn)確度而言,其還能分類正確。 但是這其實正是過擬合的一種表現(xiàn),模型已經(jīng)對自己的分類結(jié)果不確信了。

12.少在太小的批次中使用BatchNorm層

Batch Normalization[15],中文譯作批規(guī)范化,在深度學(xué)習(xí)中是一種加快收斂速度,提高性能的一個利器,其本質(zhì)和我們對輸入的原數(shù)據(jù)進(jìn)行0均值單位方差規(guī)范化差不多,是以batch為單位,對中間層的輸出進(jìn)行規(guī)范化,可以緩和內(nèi)部協(xié)方差偏移(Internal Covariate Shift)的現(xiàn)象。其基本公式很簡單,如下:

                        

不過這里并不打算對BN進(jìn)行詳細(xì)講解,只是想告訴大家,因為BN操作在訓(xùn)練過程中是對每個batch進(jìn)行處理的,從每個batch中求得均值和方差才能進(jìn)行操作。如果你的batch特別小(比如是受限于硬件條件或者網(wǎng)絡(luò)要求小batch),那么BN層的batch均值和方差可能就會不能很好符合整個訓(xùn)練集的統(tǒng)計特征,導(dǎo)致差的性能。實際上,實驗[16]說明了這個關(guān)系,當(dāng)batch小于16時,性能大幅度下降。

因此,少在太小的batch中使用BN層,如果實在要使用,在發(fā)生性能問題時優(yōu)先檢查BN層。

13.數(shù)值計算問題,出現(xiàn)Nan

Nan(Not An Number)是一個在數(shù)值計算中容易出現(xiàn)的問題,在深度學(xué)習(xí)中因為涉及到很多損失函數(shù),有些損失函數(shù)的定義域并不是整個實數(shù),比如常用的對數(shù),因此一不小心就會出現(xiàn)Nan。在深度學(xué)習(xí)中,如果某一層出現(xiàn)了Nan,那么是具有傳遞性的,后面的層也會出現(xiàn)Nan,因此可以通過二分法對此進(jìn)行排錯。

一般來說,在深度學(xué)習(xí)中出現(xiàn)Nan是由于除0異常或者是因為損失函數(shù)中的(比如交叉熵,KL散度)對數(shù)操作中,輸入小于或者等于0了,一般等于0的情況比較多,因此通常會:

這里的是個很小的值,一般取即可,可以防止因為對數(shù)操作中輸入0導(dǎo)致的Nan異常。

需要注意的是,有些時候因為參數(shù)初始化或者學(xué)習(xí)率太大也會導(dǎo)致數(shù)值計算溢出,這也是會出現(xiàn)Nan的,一般這樣會出現(xiàn)在較前面的層里面。

14.BN層放置的位置問題

BN層有兩種常見的放置位置,如下圖所示: 第一個是放在激活函數(shù)之前:

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

在原始BN的論文[15]中,Batch Norm(BN)層是位于激活層之前的,因為是對原始的,未經(jīng)過激活的logit數(shù)據(jù)進(jìn)行數(shù)據(jù)分布的重整。然而,不少實驗證實似乎BN層放在激活層之后效果會更好,這個原因目前不明。 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,其原因可以有幾個解釋,一個是作為一種集成模型進(jìn)行解釋,另一個可以看成是在特征提取學(xué)習(xí)過程中給數(shù)據(jù)加入噪聲,可以看成是一種數(shù)據(jù)增強(qiáng)的正則手段。

在原始論文中,dropout被應(yīng)用于全連接層中,而沒有應(yīng)用在卷積層中,Hinton的解釋是因為卷積層參數(shù)并不多,過擬合風(fēng)險較小不適合采用dropout這種大殺器的正則手段。有人也認(rèn)為因為卷積網(wǎng)絡(luò)是局部感知的,用dropout正則對于其在后層中對于全局信息的獲取可能具有負(fù)作用[20]。

不過在一些工作中,也有人將dropout層應(yīng)用在卷積層中的[17-18],其層次安排為:

CONV->RELU->DROP,不過其丟棄率p都是選擇的較小數(shù)如0.1,0.2等,個人覺得這里的作用大概是對中間數(shù)據(jù)進(jìn)行加入噪聲,以便于數(shù)據(jù)增強(qiáng)的正則手段。

個人建議是可以嘗試在卷積層中使用少量的dropout,用較小的丟棄率,但是最后別忘了扔掉這些dropout再進(jìn)行一些探索,也許可以具有更好的效果。

16. 較小的batch size可以提供較好的泛化

現(xiàn)代的深度學(xué)習(xí)優(yōu)化器基本上都是基于SGD算法進(jìn)行修改而成的,在每一次訓(xùn)練中都是以一個batch size為單位進(jìn)行訓(xùn)練的,在這個過程中相當(dāng)于在統(tǒng)計這個batch中樣本的一些統(tǒng)計特性,因此batch size是會影響模型的超曲線形狀的。

一般來說較大的batch size比如128,256會和整個訓(xùn)練集的統(tǒng)計性質(zhì)更相近,從而使得具有較少的多樣性,而較小的batch size 比如16,32,因為batch size較小,不同batch之間的差異性較大,這種差異性可以看成是正則手段,有機(jī)會提高模型的泛化性能。(不過有些文章似乎不同意這個觀點,認(rèn)為較大batch size有較好性能,個人建議是大batch size和小batch size都可以跑跑,有可能能提升性能。

17. 初始化權(quán)值不能初始化為全0

這個應(yīng)該是老生常談了,但是初學(xué)者經(jīng)常會出現(xiàn)這種錯誤,在初始化權(quán)值的時候?qū)?quán)值全部初始化為了0,在反向傳播的過程中,對于某個權(quán)值的更新公式為[22]:

這個公式推導(dǎo)具體參見[22],這里不累述了,我們可以發(fā)現(xiàn),當(dāng)初始化權(quán)值參數(shù)全部為0的時候,我們的將全部為0,這個時候?qū)τ谀硞€權(quán)值的梯度也就變?yōu)榱?,因此整個網(wǎng)絡(luò)的任何參數(shù)都得不到更新,將會導(dǎo)致訓(xùn)練無法進(jìn)行。

對于偏置的初始化不同,對于偏置的更新公式如[22]:

我們可以發(fā)現(xiàn),對于偏置的更新而言,不依賴與初始值,因此偏置的初始化可以初始化為全0

18. 別忘了你的偏置

這個也是初學(xué)者很容易犯的錯誤,就是忘記給每一層添加偏置。我們在筆記第二點中提到了神經(jīng)網(wǎng)絡(luò)中偏置的作用,總的來說就是對超平面進(jìn)行平移的,因此一般來說,我們的神經(jīng)網(wǎng)絡(luò)都是需要添加偏置的,不然你的超平面就只能是通過原點的了,這樣大大減少了模型的容量,經(jīng)常會使得模型欠擬合。

19. 驗證準(zhǔn)確率遠(yuǎn)大于測試準(zhǔn)確率

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

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

Kullback–Leibler散度,簡稱KL散度[24],也稱為相對熵,是一種用于度量兩個分布之間相似性的常用手段,公式如(20.1),其中第二行形式的變形描述了相對熵的特性。

我們注意到KL散度是不可能為負(fù)數(shù)的,其中P,Q是定義在同一個概率空間[25]里面的同型的分布,維度相同。從相對熵的定義來看,這個公式描述了用分布Q去近似P所造成的不一致性的程度。在深度學(xué)習(xí)和機(jī)器學(xué)習(xí)中,一般是用來描述兩個維度相同的概率分布之間的相似度。注意到,這里的P,Q 都是概率分布,因此是需要經(jīng)過softmax層的,才能保證概率和為1,不然可能會出現(xiàn)KL散度為負(fù)數(shù)的笑話。

而且,在一些框架如Pytorch中,其輸入值需要是log_softmax而目標(biāo)值需要是softmax值,也就說輸入值需要進(jìn)行對數(shù)操作后再轉(zhuǎn)變?yōu)楦怕史植糩27]。

Reference

[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)行獨熱編碼

[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]. 梯度截斷的tensorflow實現(xiàn)

[12]. 均方誤差(MSE)和均方根誤差(RMSE)和平均絕對誤差(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)練集,測試集,檢驗集的區(qū)別與交叉檢驗

[24]. Kullback–Leibler divergence

[25]. Probability space

[26]. 如何理解K-L散度(相對熵)

[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.fast.ai/t/rethin...

未完待續(xù),敬請期待!!!

聲明:本內(nèi)容為作者獨立觀點,不代表電子星球立場。未經(jīng)允許不得轉(zhuǎn)載。授權(quán)事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內(nèi)容不錯的朋友,別忘了一鍵三連哦!
贊 4
收藏 3
關(guān)注 52
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧
主站蜘蛛池模板: 久久精品国产久精国产果冻传媒 | 日本va在线观看 | 国产一二级视频 | 精品久久999 | 在火车上和少妇做爰 | 夜鲁鲁鲁夜夜综合视频欧美 | 97超碰超碰 | 国产视频二区三区 | 白嫩少妇又嫩又爽又紧 | 天堂在线资源中文在线观看 | 日本爆乳无码中文字幕 | 国产a∨国片精品青草视频 日操夜干 | 涩涩视频在线观看免费 | 国产免费国产 | 日本ⅹxxxx久色视频免费观看 | 日本XXXWWW在线观看 | 91亚洲国产在人线播放午夜 | www.豆花| 国产精品久久久久久久久无码Aⅴ | 99久久精品国产系列 | 色丁香婷婷综合缴情综 | av在线官网| 视频一区视频二区在线观看 | 欧美性xxxmoive| 91精品国产福利 | 一本到无码av专区无码不卡 | 重囗味sm一区二区三区 | 亚洲日本VA在线视频观看 | 中文字幕在线视频播放 | chinese国产惩罚打屁股 | 无码手机线免费观看 | 久章草视频 | 回复术士的重启人生第2季在线观看免费 | 日本特级aⅴ一级毛片 | 一级中文免费 | 超碰97精品 | 极品美女高潮呻吟国产九色 | 毛片av在线免费观看 | 亚洲国产精品成人网址天堂 | 国产毛片黄色片 | 91国视频在线观看 |