深度學習的優化:理論和算法《Optimization for deep learning: theory and algorithms》論文閱讀筆記 -3 神經網絡的特定問題

4.神經網絡特定問題

沒有任何經驗,訓練神經網絡來實現合理的準確度會變得非常有挑戰。人們通過幾十年的實驗和研究,可以訓練處非常大的神經網絡,并且有很多的tricks.

4.1 由于梯度消失或梯度爆炸導致收斂比較慢

已知的神經網絡訓練的困難時梯度消失或梯度爆炸,通常的描述梯度消失或梯度爆炸是來源于信號處理的視角。梯度下降可以視為反饋糾錯機制,最外層輸出將會傳遞回之前的層,并通過權重調整來降低誤差。

當網絡層數較多時,權重的乘積會使得乘積的結果越來越大或越來越小。乘積到無窮大或0 時的情況就是梯度爆炸和梯度消失。


企業微信截圖_40d31299-a4ee-4e6b-b372-2162509d9590.png

當w再0-0.8時會出現梯度消失,大于1.2時會出現梯度爆炸。

通常來說梯度消失或爆炸會導致很大的condation number 會導致選擇合適的步長 變得困難。

4.2 精細的初始化

接下來會討論在訓練神經網絡過程中三個主要的技巧。第一個是合理的初始化。
Naive initialization:

由于比較好的區域難以獲得,比較簡單的初始化方式包括以下幾種。

  1. 所有值都初始化為0,
  2. 選擇是只讓其中的一部分點設置為非0點
  3. 讓權重服從確定的隨機分布

上述的幾種初始化方式不一定總是有用,即使對某種特定的方式有用,也不一定對所有的方式有用。

LeCun initialization

對使用sigmoid 激活函數,使用初始化采用均值為0,方差為1/d_{l-1} ,也就是方差為1/fan-in, fan-in 是傳入weight的節點數。

理論推導如下:考慮一個線性神經元有m個input 分別是x1,x2...xm,y=\sum_jw_jx_i 假設input xi 均值為0 方差為1.那么y的均值為0 ,方差為\sqrt{\sum_{j=1}^mw_j^2} 。為了滿足y的方差也為1,選擇權重w的方差為1/m 期望為0。 上述的推導適用于現象的激活函數,如果使用tanh的激活函數。tanh 在0附近和線性函數非常接近。因此y=tanh(\sum_jw_jx_j) 的方差會近似等于1。

Pre-training and Xavier initialization

Xavier initialization (or Glorot initialization )
E(W_{ij}^l)=0 ,var(W_{ij}^l)=\frac2{d_{l-1}+d_l}
或者有些時候被寫作
var(W_{ij}^l)=2/(fan-in+fan-out)
fan-in和fan-out是輸入和輸出的維度。

Xavier initialization 可以推導如下:

對于前向傳播,根據LeCun initialization 方差可以設置為1/fan-in。對于線性網絡反向傳播。e^l=(W^{l+1})^Te^{l+1} 。方差可以設置為1/fan-out。為了平衡正向傳播和反向傳播。最終的方差為2/(fan-in+fan-out)。

Kaiming initialization

LeCun and Xacier initialization 是用于sigmoid activation functions。在接近0的地方梯度接近線性。 但是對于ReLu 這種激活函數,使用前面的兩種初始化方法就不說很合適。ReLu函數相當于把信號切了一半,因次有人提出了新的初始化方法
E(W_{ij}^l)=0 ,var(W_{ij}^l)=\frac2{d_{in}}\ or \ var(W_{ij}^l)=\frac2{d_{out}}
Kaiming initialization 沒有像Xavier initialization 一樣平衡信號的輸入和輸出。但是最近有人提議集合平均的方法來初始化方差 var(w)=c\sqrt{(fan-in)*(fan-out)} ,其中c是常數。

Infinite width networks with general non-linear activations

Kaiming 初始化方法不能直接應用到其他的非線性激活函數中。

Finite width networks.

Dynamical isometry.

Dynamical isometry for other networks.

Computing spectrum.

4.3 Normalization 方法

第二種方法是在算法的過程中進行normalization。這種方法可以視為初始化方法的擴展,一種表達的方式是batch normalization。這種方式現在已經成為標準的技術。

數據準備:對于線性回歸,通常對數據進行標準化。使的特征的分布均值為0,方差為1。來減少hessian matrix 的條件數。

Motivation of BatchNorm layerwise normalization

在比較深的神經網絡中,希望每一層的網絡都服從標準正態分布。未來實現這個目標。比較naive的方法是在更新完梯度之后normalize matrix。

Essence of BatchNorm

Add BN layers to original neural network。原始的BatchNorm paper生成 BatchNorm 減少 internal covariate shift。但是新的觀點認為BatchNorm 減少了Lipschitz constants.有人認為BatchNorm 會允許更大的學習率。不使用BatchNorm的話,會使得奇藝值更大。

Other normalization methods

對于Batch normalization.對每個mini-batch 規范化。但是如果mini-batches沒有相似的統計結果。那么BN的效果不會很好。研究者提出了其他normalization方法。例如weight normalization, layer normalization, instance normalization, group normalization and spectral normalization 和switchable normalization.

這些normalization 方法可以分為兩大類。第一類 是對神經網絡的輸出立即進行normalization.batchNorm normalize the rows. Layer normalization normalized the columns. Group normalization normalizes sub matrix that consists of a few columns and a few rows.

第二類是直接normalize weight metrics.

4.4 改變網絡結構

第三種方式是改變網絡結果。在2014年人們意識到網絡網絡層數越深。結果越好,因此增加網絡的深度變得非常普遍。然而,即使使用非常好的初始化和BN,訓練超過20-30層的網絡也是非常困難。在VGG中,56層的網絡在訓練集和測試集上的結果會比20 層的網絡更差。

ResNet: ResNet的關鍵是增加一個skip-connection在每層。
z^l=\phi(F(W^l,z^{l-1})+z^{l-1},\ l=1,2,...,L
F 代表原始的神經網絡。

ResNet 實現了非常大的成功。

其他結構:high-way netowrks, DenseNet and ResNext. 雖然這些結構是人類設計的,但最新的成功是直接使用神經網絡的自動搜索。制動搜素包括神經網絡的參數,State-of art architectures EfficientNet 可以實現更好的結果。

ResNet 的分析和初始化

skip connections 的好處有很多,包括更好的泛化能力,更好的信號傳播和更好的優化landscape。在ResNet中,梯度消失和梯度爆炸的情況可以避免,同時dynamic isometry可以在任何激活函數和初始化方法下實現。

4.5 訓練ultra-deep 神經網絡

有一些很少的方法來訓練深度神經網絡:

  1. Proper initialization,proper architecture BatchNorm.
  2. 非常精細的調整初始化點。
  3. 修正初始化方法和ResNet

除了上述方法,還有一些其他的設計來實現更好的神經網絡,

  • 數據預處理方法比如數據增強,adversrial training

  • 優化方法如(optimization algo,learning rate schedule , learning rate dacay)

  • 正則化方法(l2-norm,droo out)

  • 神經網絡架構,更深,更廣,連接模式,

  • 激活函數(RELU,Leak ReLU, tanh,swish等。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容