神經網路的初始化方法總結 | 又名「如何選擇合適的初始化方法」

 前言

本文介紹了為什麼初始化很重要,總結了常用的幾種初始化方法:全零或等值初始化、正態初始化、均勻初始化、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 的文章《如何初始化深度神經網路?Xavier 和 Kaiming 初始化》。

 

6. Pre-trained

使用預訓練的權重作為初始化,相比於其它初始化,收斂速度更快,起點更好。

 

除了以上的初始化方法外,還包括有LeCun Initialization。方法跟He Initialization和Xavier Initialization類似,但基本沒怎麼看見用,這裡就不列出來了。

 

權重初始化仍然是一個活躍的研究領域。出現了幾個有趣的研究項目,包括數據相關初始化、稀疏權重矩陣和隨機正交矩陣初始化。

數據相關初始化

論文:Data-dependent Initializations of Convolutional Neural Networks

地址://arxiv.org/abs/1511.06856

稀疏權重矩陣初始化

地址://openai.com/blog/block-sparse-gpu-kernels/

隨機正交矩陣初始化

論文:Exact solutions to the nonlinear dynamics of learning in deep linear neural networks

地址://arxiv.org/abs/1312.6120

 

參考資料

1. //medium.com/comet-ml/selecting-the-right-weight-initialization-for-your-deep-neural-network-780e20671b22

2. //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。

​​

 

其它文章

CV技術指南–精華文章匯總分類

歸一化方法總結       |  欠擬合與過擬合技術總結

NMS總結             |   損失函數技術總結

注意力機制技術總結   |   特徵金字塔技術總結   

池化技術總結          |  數據增強方法總結   

論文創新的常見思路總結    |    GPU多卡並行訓練總結

CNN結構演變總結(一)經典模型

CNN結構演變總結(二)輕量化模型

CNN結構演變總結(三)設計原則

CNN可視化技術總結(一)特徵圖可視化

CNN可視化技術總結(二)卷積核可視化

CNN可視化技術總結(三)類可視化

CNN可視化技術總結(四)可視化工具與項目

電腦視覺中的影像標註工具總結

各種 Optimizer 梯度下降優化演算法回顧和總結

CV方向的高效閱讀英文文獻方法總結

匯總 | 中國外經典開源數據集

Softmax 函數和它的誤解

提高機器學習模型性能的常用策略

Softmax 函數和它的誤解

資源分享 | SAHI:超大圖片中對小目標檢測的切片輔助超推理庫

電腦視覺中的影像標註工具總結

Batch Size對神經網路訓練的影響

PyTorch 中的 ModuleList 和 Sequential: 區別和使用場景

神經網路超參數的調參方法總結

使用 Ray 將 PyTorch 模型載入速度提高 340 倍

電腦視覺中的影像標註工具總結

卷積神經網路的複雜度分析

2021年小目標檢測最新研究綜述

經典論文系列–膠囊網路:新的深度學習網路

經典論文系列 | 目標檢測–CornerNet & 又名 anchor boxes的缺陷

文字識別OCR開源框架的對比–Tesseract vs EasyOCR

電腦視覺專業術語總結(一)構建電腦視覺的知識體系

電腦視覺中的小樣本學習綜述