反向傳播算法仍然是當前深度神經(jīng)網(wǎng)絡(luò)最受歡迎的模型最優(yōu)化方法。
反向傳播
反向傳播有前向和后向兩個操作構(gòu)成,前向操作利用當前的權(quán)重參數(shù)和輸入數(shù)據(jù),從下往上(即從輸入層到輸出層),求取預(yù)測結(jié)果,并利用預(yù)測結(jié)果與真實值求解出損失函數(shù)的值。反向操作則利用前向操作求解得到的損失函數(shù),從上往下(從輸出層到輸入層),反向求取每一層對應(yīng)的參數(shù)梯度,利用梯度下降法更新參數(shù),求解網(wǎng)絡(luò)的參數(shù)梯度。經(jīng)過前向和反向兩個操作后。完成了一次迭代過程。
損失函數(shù)
損失函數(shù)是機器學(xué)習(xí)中用于衡量模型一次預(yù)測結(jié)果好壞的函數(shù),它是一個非負實數(shù)值函數(shù),用L(Y,f(x))來表示,常用的損失函數(shù)包括4種。
(1)0-1損失函數(shù)。0-1損失函數(shù)比較的事預(yù)測值與真實值是否相同,0-1損失函數(shù)是一個非凸函數(shù),在求解的過程中,存在很多的不足,而且它只關(guān)心預(yù)測值和真實值是否相同,沒有考慮到預(yù)測值和真實值之間的距離,因此在實際應(yīng)用中,它通常是作為一個衡量指標,而不是最優(yōu)化的目標函數(shù)。
(2)平方損失函數(shù)。平方損失函數(shù)是線性回歸模型最常用的最優(yōu)化目標函數(shù)。
(3)對數(shù)損失函數(shù)。常用于分類模型的最優(yōu)化目標函數(shù)。
(4)Hinge損失函數(shù):有時也稱為最大間隔目標函數(shù)。
深度學(xué)習(xí)訓(xùn)練的難點主要為欠擬合和過擬合:
欠擬合-梯度消失
梯度消失也稱為梯度彌撒,仍然是深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中所面臨的最大挑戰(zhàn)之一。梯度消失產(chǎn)生的源頭就在于激活函數(shù)。對預(yù)激活輸出求導(dǎo)都牽扯到激活函數(shù)的導(dǎo)數(shù),傳統(tǒng)的激活函數(shù)及其導(dǎo)數(shù),rusigmoid和tanh函數(shù),它們的導(dǎo)數(shù)取值范圍都小于1。以sigmoid函數(shù)為例,它的取值范圍為[0,1/4],,也就是當激活函數(shù)求導(dǎo)后,它的取值都要比上一層減少1/4,梯度的計算是隨著層數(shù)的增加而呈現(xiàn)出指數(shù)級的遞減趨勢,離輸出層越遠,梯度減少越明顯。
目前幾種常用防止深度神經(jīng)網(wǎng)絡(luò)梯度消失的技巧:
(1) 采用更合理的激活函數(shù)。
(2)Batch Normalization:有ZCA標準化層和重參數(shù)化層構(gòu)成。ZCA標準化層是標準化預(yù)激活輸出,是的輸出的每一個維度都服從標準正態(tài)分布的形式,即均值為0,方差為1。重參數(shù)化層主要是對標準化后的預(yù)激活輸出結(jié)果執(zhí)行scale和shift操作,使得新的輸出值有任意的均值和方差,這樣梯度消失和非線性激活不再是一組矛盾關(guān)系,模型能夠?qū)崟r根據(jù)訓(xùn)練數(shù)據(jù)來動態(tài)決定激活層的非線性表達能力。
(3)深度殘差網(wǎng)絡(luò)。將深度殘差網(wǎng)絡(luò)與卷積神經(jīng)網(wǎng)絡(luò)相結(jié)合的網(wǎng)絡(luò)模型也簡稱為ResNet。
過擬合
過擬合一般是指在模型選擇中,選擇的模型參數(shù)過多,導(dǎo)致對訓(xùn)練數(shù)據(jù)的預(yù)測很好,但對位置數(shù)據(jù)的預(yù)測很差的現(xiàn)象。神經(jīng)網(wǎng)絡(luò),尤其是在深度神經(jīng)網(wǎng)絡(luò)領(lǐng)域,網(wǎng)絡(luò)的層數(shù)更深,結(jié)構(gòu)也更復(fù)雜,一般能達到數(shù)十層甚至上百層,而訓(xùn)練樣本往往相對較少,過擬合問題會更加嚴重。
正則化是目前機器學(xué)習(xí)中常用來解決過擬合的技巧,較為常見的正則化方法包括:對單模型,比如當驗證集的效果變化不明顯的時候可以提前終止迭代,或者采用L1正則化和L2正則化等。對多模型,可以利用boosting來集成提升,但在深度學(xué)習(xí)中,這種方法是不現(xiàn)實的,因為單個模型的訓(xùn)練已經(jīng)非常復(fù)雜耗時,并且即使訓(xùn)練處多個網(wǎng)絡(luò)模型,也難以在實際環(huán)境中做到快速集成。
Dropout結(jié)合了單模型和多模型的有點,它是當前深度學(xué)習(xí)領(lǐng)域解決過擬合的強有力的武器。如果不考慮時間復(fù)雜度,可以通過訓(xùn)練多個不同的網(wǎng)絡(luò)模型來集成提升效果,網(wǎng)絡(luò)結(jié)構(gòu)之間差別越大,提升效果也會越明顯。Dropout的思想是每一迭代的過程中,會隨機讓網(wǎng)絡(luò)某些節(jié)點(神經(jīng)元)不參與訓(xùn)練,同時把與這些暫時丟棄的神經(jīng)元相關(guān)的所有邊全部去掉,相應(yīng)的權(quán)重不會在這一次迭代中更新,每一次迭代訓(xùn)練都重復(fù)這個操作,這些丟棄的神經(jīng)元只是暫時不做更新,下一次還是會重新參與隨機化的Dropout。