神經網絡常見的優化措施

原文:https://blog.csdn.net/nini_coded/article/details/79304498 

 

欠擬合與過擬合問題是機器學習中的經典問題,儘管相關的討論和預防方法非常多,但目前在許多任務中仍經常會出現過擬合等問題,還沒有找到一個十分通用、有效的解決方法。不過總體上看,現在人們常用的一些很簡潔的方法基本上能夠較好地解決欠擬合與過擬合問題,總結如下。

欠擬合與過擬合的概念的成因比較簡單,觀點統一,這裏不再介紹。現在常用的判斷方法是從訓練集中隨機選一部分作爲一個驗證集,採用K折交叉驗證的方式,用訓練集訓練的同時在驗證集上測試算法效果。在缺少有效預防欠擬合和過擬合措施的情況下,隨着模型擬合能力的增強,錯誤率在訓練集上逐漸減小,而在驗證集上先減小後增大;當兩者的誤差率都較大時,處於欠擬合狀態(high bias, low variance);當驗證集誤差率達到最低點時,說明擬合效果最好,由最低點增大時,處與過擬合狀態(high variance, low bias)。下圖的橫座標用擬合函數多項式的階數籠統地表徵模型擬合能力: 


下面詳細介紹預防解決模型欠擬合與過擬合的常用方法及原理:

欠擬合 
因爲對於給定數據集,欠擬合的成因大多是模型不夠複雜、擬合函數的能力不夠。 
爲此可以增加迭代次數繼續訓練、嘗試換用其他算法、增加模型的參數數量和複雜程度,或者採用Boosting等集成方法。

過擬合 
過擬合成因是給定的數據集相對過於簡單,使得模型在擬合函數時過分地考慮了噪聲等不必要的數據間的關聯。或者說相對於給定數據集,模型過於複雜、擬合能力過強。方法如下:

1.數據擴增: 
人爲增加數據量,可以用重採樣、上採樣、增加隨機噪聲、GAN、圖像數據的空間變換(平移旋轉鏡像)、尺度變換(縮放裁剪)、顏色變換、增加噪聲、改變分辨率、對比度、亮度等。其中增加噪聲,可以在原始數據上直接加入隨機噪聲(更接近真實環境),也可以在權重上增加噪聲。

2.直接降低模型複雜度: 
即減少模型參數數量。例如:對於LR,減少目標函數的因子數;對於DT,減少樹的深度、剪枝等;對於DNN,減少層數和每層權向量長度。

3.針對神經網絡,採用dropout方法: 
間接減少參數數量,也相當於進行了數據擴增。弱化了各個參數(特徵)之間的單一聯繫,使起作用的特徵有更多組合,使從而模型不過分依賴某個特徵。

4.提前停止訓練: 
也就是減少訓練的迭代次數。從上面的誤差率曲線圖可以看出,理論上能夠找到一個訓練程度,此時驗證集誤差率最低,視爲擬合效果最好的點。

5.多模型投票方法: 
類似集成學習方法的思想,不同模型可能會從不同角度去擬合,互相之間取長補短,即使單獨使用某個模型已出現過擬合,但綜合起來卻有可能減低過擬合程度,起到正則作用,提高了泛化效果。特別是使用多個非常簡單的模型,更不容易產生過擬合。

以下是一系列常用的正則化方法:

秉承奧卡姆剃刀原理,許多正則化項(懲罰項)的引入,是爲了使算法學習到更簡單的模型,也就是讓最終學習到的參數絕對值變小(即參數長度變短:shrinkage),因爲這樣可以讓模型在較小的參數空間中搜尋最優參數,從而簡化了模型。而且若sigmoid作爲激活函數,當參數權值較小時,激活函數工作在線性區,此時模型的擬合能力較弱,也降低了過擬合的可能性。

從貝葉斯理論角度看,加入正則項相當於引入了一個參數的先驗信息,即人爲給參數的選擇增加了一些規則(先驗),把人們的知識數學化告訴給模型的損失函數,從而縮小了解空間傾向於產生唯一解,使擬合出錯的概率變小,同時解決了逆問題的不適定性(多解問題)。不同的正則化項具有不同先驗分佈,具體介紹如下。

6.L0正則化: 
損失函數後面加上在加入L0範數 λ||w||0λ||w||0,也就是權向量中非零參數的個數。 
它的特點是可以實現參數的稀疏性,使儘可能多的參數值爲0,這與稀疏編碼的思想吻合。但它的缺點是在優化時是NP難問題,很難優化。因此實際任務中更常用L1範數。

7.L1正則化: 
損失函數L0L0後面加上參數(權向量ww)的L1範數項:λ||w||1=λ∑ni=1||wi||1λ||w||1=λ∑i=1n||wi||1 , 其中 nn 是權向量 ww 的長度(參數數量),λλ 是正則化參數,用來調和L0L0 與正則項,此時損失函數如下: 
L=L0+λ||w||1
L=L0+λ||w||1

L1正則項等價於先驗概率服從拉普拉斯分佈;此時若針對線性迴歸就是Lasso Regression。L1範數是L0範數的最優凸近似,比L0範數容易優化,而且也可以很好地實現參數稀疏性,常別稱作“稀疏規則算子”,因此相對L0正則化更常用。同時L1和L0因爲具有使參數稀疏的特點,常用於特徵選擇。
8.L2正則化: 
損失函數L0L0後面加上參數L2範數的平方項:λ2n||w||22=λ2n∑ni=1w2iλ2n||w||22=λ2n∑i=1nwi2  ,其大小由參數weight-decay(權值衰減)調節,此時損失函數如下: 
L=L0+λ2n||w||22
L=L0+λ2n||w||22

其中分母有無nn均可,L2正則項等價於先驗概率服從高斯分佈;此時針對線性迴歸就是Ridge Regression,即常說的“嶺迴歸”。與L0,L1不同的是,L2很難使某些參數達到0,它只能使參數接近0。如今在許多問題中,更常用L2正則是因爲:一方面我們通常想考慮更多的參數對問題的影響(因此不能讓參數稀疏),另一方面在優化時,L2範數有利於解決condition number: k(A)=||A||||A−1||k(A)=||A||||A−1||  太大(遠大於1)的情況下(此時存在某些參數,對結果有過大的影響)矩陣求逆很困難的問題,這使得優化求解變得更快更穩定。 
現在有些任務中會同時使用L1和L2正則項,用各自的兩個正則化參數去權衡“部分稀疏”與“整體接近0”這一對trade-off問題。 
 
上圖可以看出,服從拉普拉斯分佈的L1正則項更傾向於產生稀疏參數,而服從高斯分佈的L2正則項在0處相對比較平滑,在參數絕對值較大處抑制效果更好,使整體數據的分佈更接近0。
9.(針對DNN)batch normalization:即BN,既能夠提高泛化能力,又大大提高訓練速度,現在被廣泛應用在DNN中的激活層之前。BN的提出最初是針對DNN在訓練過程中會出現數據內部的協方差偏移現象,導致輸出數據分佈發生額外的改變,並隨着層數的增加偏移加劇,使得模型不得不根據輸出分佈的改變重新學習,這又導致訓練速度減慢。 
公式如下: 
 
具體過程:首先對某層的輸入樣本做白化處理,等價於零均值化處理(均值爲0,方差爲1),使輸入樣本之間互不相關,且每層的輸入服從相同分佈,克服了內部協方差偏移的影響。採用分批處理數據的方式,減少了計算量。

主要優勢:減小了梯度對參數大小和初始值的依賴,將參數值(特徵)縮放在[0,1]區間(若針對Relu還限制了輸出的範圍),這樣反向傳播時梯度控制在1左右,使網絡即使在較高學習率下也不易發生梯度爆炸或彌散(也預防了在使用sigmoid作爲激活函數時訓練容易陷入梯度極小飽和或極大的極端情況)。
--------------------- 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章