前言
本文介紹了為什麼初始化很重要,總結了常用的幾種初始化方法:全零或等值初始化、正態初始化、均勻初始化、Xavier初始化、He初始化和Pre-trained初始化,並介紹了幾個還活躍的初始化方向:資料相關初始化、稀疏權重矩陣和隨機正交矩陣初始化。
為什麼初始化很重要
不正確初始化的權重會導致梯度消失或爆炸問題,從而對訓練過程產生負面影響。
對於梯度消失問題,權重更新很小,導致收斂速度變慢——這使得損失函式的優化變慢,在最壞的情況下,可能會阻止網路完全收斂。相反,使用過大的權重進行初始化可能會導致在前向傳播或反向傳播過程中梯度值爆炸。
常見的初始化方法
1. 全零或等值初始化
由於初始化的值全都相同,每個神經元學到的東西也相同,將導致“對稱性(Symmetry)”問題。
2. 正態初始化(Normal Initialization)
均值為零,標準差設定一個小值。
這樣的做好的好處就是有相同的偏差,權重有正有負。比較合理。
例:2012年AlexNet使用“均值為零、標準差設定為0.01、偏差為1的高斯(正常)噪聲進行初始化”的初始化方法。然而,這種正常的隨機初始化方法不適用於訓練非常深的網路,尤其是那些使用 ReLU啟用函式的網路,因為之前提到的梯度消失和爆炸問題。
3. 均勻初始化(Uniform Initialization)
均勻分佈的區間通常為【-1/sqrt(fan_in),1/sqrt(fan_in)】
其中fan_in表示輸入神經元的數量,fan_out表示輸出神經元的數量。
4. Xavier Initialization
來自論文《Understanding the difficulty of training deep feedforward neural networks》
根據sigmoid函式影像的特點
如果初始化值很小,那麼隨著層數的傳遞,方差就會趨於0,此時輸入值也變得越來越小,在sigmoid上就是在0附近,接近於線性,失去了非線性。
如果初始值很大,那麼隨著層數的傳遞,方差會迅速增加,此時輸入值變得很大,而sigmoid在大輸入值寫倒數趨近於0,反向傳播時會遇到梯度消失的問題。
針對這個問題,Xavier 和 Bengio提出了“Xavier”初始化,它在初始化權重時考慮了網路的大小(輸入和輸出單元的數量)。這種方法通過使權重與前一層中單元數的平方根成反比來確保權重保持在合理的值範圍內。
Xavier 的初始化有兩種變體。
Xavier Normal:正態分佈的均值為0、方差為sqrt( 2/(fan_in + fan_out) )。
Xavier Uniform:均勻分佈的區間為【-sqrt( 6/(fan_in + fan_out)) , sqrt( 6/(fan_in + fan_out)) 】。
Xavier 初始化適用於使用tanh、sigmoid為啟用函式的網路。
5. He Initialization
來自論文《Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification》
啟用函式的選擇最終在決定初始化方法的有效性方面發揮著重要作用。啟用函式是可微的,並將非線性特性引入神經網路,這對於解決機器學習和深度學習旨在解決的複雜任務至關重要。ReLU和leaky ReLU是常用的啟用函式,因為它們對消失/爆炸梯度問題相對魯棒。
Xavier在tanh函式上表現可以,但對 ReLU 等啟用函式效果不好,何凱明引入了一種更魯棒的權重初始化方法--He Initialization。
He Initialization也有兩種變體:
He Normal:正態分佈的均值為0、方差為sqrt( 2/fan_in )。
He Uniform:均勻分佈的區間為【-sqrt( 6/fan_in) , sqrt(6/fan_in) 】
He Initialization適用於使用ReLU、Leaky ReLU這樣的非線性啟用函式的網路。
He Initialization和Xavier Initialization 兩種方法都使用類似的理論分析:它們為從中提取初始引數的分佈找到了很好的方差。該方差適用於所使用的啟用函式,並且在不明確考慮分佈型別的情況下匯出。
圖來自何凱明的論文。
論文展示了何凱明改進的初始化策略(紅色)如何比 (P)ReLU 的 Xavier 方法(藍色)更快地降低錯誤率。
有關 Xavier 和 He 初始化方法的證明,請參閱 Pierre Ouannes 的文章《
6. Pre-trained
使用預訓練的權重作為初始化,相比於其它初始化,收斂速度更快,起點更好。
除了以上的初始化方法外,還包括有LeCun Initialization。方法跟He Initialization和Xavier Initialization類似,但基本沒怎麼看見用,這裡就不列出來了。
權重初始化仍然是一個活躍的研究領域。出現了幾個有趣的研究專案,包括資料相關初始化、稀疏權重矩陣和隨機正交矩陣初始化。
資料相關初始化
論文:Data-dependent Initializations of Convolutional Neural Networks
地址:https://arxiv.org/abs/1511.06856
稀疏權重矩陣初始化
地址:https://openai.com/blog/block-sparse-gpu-kernels/
隨機正交矩陣初始化
論文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks
地址:https://arxiv.org/abs/1312.6120
參考資料
1. https://medium.com/comet-ml/selecting-the-right-weight-initialization-for-your-deep-neural-network-780e20671b22
2. https://medium.com/analytics-vidhya/weights-initialization-in-neural-network-d962ac438bdb
3. Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification He, K. et al. (2015)
4. Understanding the difficulty of training deep feedforward neural networks
迎關注公眾號 CV技術指南 ,專注於計算機視覺的技術總結、最新技術跟蹤、經典論文解讀。
在公眾號中回覆關鍵字 “技術總結”可獲取公眾號原創技術總結文章的彙總pdf。
其它文章