選自Manas Blog
作者:Manas George
機器之心編譯
參與:蔣思源
本文假定各位讀者了解一些神經網絡的基礎,包括一些基本的前向與反向傳播的表達式。本文很大一部分是進行基礎的代數操作,只有少量的基本統計數據。如果讀者希望先複習一點神經網絡相關的知識,可以閱讀以下機器之心曾發過的基礎教程。本文嘗試用 Glorot 和 Bengio 在他們論文中使用的推導以探討深度神經網絡中的權重初始化問題,並更好地說明為什麼他們的方法解決了神經網絡面臨的訓練問題。
梯度消失問題
起初,阻礙深度神經網絡訓練效率的最大問題之一就是極端的梯度情況。如果我們了解最初廣泛作為神經網絡激活函數的 Sigmoid 函數圖像,很顯然在函數的上下界附近梯度趨近於 0、激活值趨近於 0 或 1。但激活值處於這些極端區域時,我們稱神經元已經飽和。在訓練深度神經網絡中,最後一個隱藏層往往會快速飽和至 0,所以隨著梯度趨向於 0,前一層的反向梯度將會變得更小。因為極小的梯度無法給優化算法提供必要的優化信息,所以前面的隱藏層權重基本得不到更新。這顯然是一個大問題,早期的隱藏層應該需要識別數據集中的局部特徵,因此後續的層級才能用來在更高的抽象層次上構建更複雜的特徵。如果前面層級的梯度基本影響不到權重的更新,那麼模型將學不到任何信息。
在以下 Sigmoid 激活函數(藍線)和它的導數(紅線)中,我們可以看到飽和的區域為淺紅色的區域。該區域令 Sigmoid 函數的導數接近為 0,且不能提供有效的優化信息。
Glorot 和 Bengio
在 Xavier Glorot 和 Yoshua Bengio 2010 年的論文 Understanding the difficulty of training deep feedforward neural networks 中,他們從理論上探討了權重初始化對梯度消失的影響。該論文第一部分比較了激活函數,並解釋了常用的 Sigmoid 函數為何對飽和問題如此敏感。他們還表示雙曲正切函數和 softsign(x/(1+|x|)) 激活函數在這方面有更好的表現。
該論文的第二部分考慮了全連接網絡的權重初始化問題,為從均勻分布中採樣初始化權重提供了理論性分析。該分析的直觀性解釋可以分為兩部分,首先對於前向傳播,我們需要確保所有層的激活值方差近似相等,因此每一個訓練樣本傳播經過網絡的信息才能保持平滑的屬性。同樣對於反向傳播,每層梯度保持近似的方差將允許信息平滑地反向流動以更新權重。近似方差的梯度同樣確保誤差數據能反饋到所有層級,因此它是整個訓練過程中的關鍵。
為了形式化這些概念,首先我們必須定義各個符號與表達式的意義:
a^L 為第 L 層的激活值向量,它的維度為 n_L × 1,其中 n_L 為第 L 層單元數。
W^L 為第 L 層的權重矩陣,它的維度為 n_L × n_L-1,其中每一個元素 W_jk 表示前一層第 j 個神經元連接到後一層第 k 個神經元的權重。
b^L 表示第 L 層的偏置項向量,它的維度和 a^L 相同。
z^L 表示第 L 層激活函數的加權輸入向量,即 z^L = W^L × a^L-1 + b^L。
C 為我們嘗試優化的損失函數。Glorot 和 Bengio 使用條件對數似然函數−logP(y|x) 作為損失函數,但該函數的具體表達式在本文並不重要。
σ 為激活函數,因此 a^L = σ(z^L),其中該函數應用到輸入向量的每一個元素。
n_L 為第 L 層的神經元數量。
x 為神經網絡的輸入向量。
δ^L=δC/δz^L 為損失函數對第 L 層加權輸入向量的梯度,同樣也成為誤差方向。
下面的分析適用於層級數為 d 的全連接神經網絡,且具有在零點為單位梯度的對稱激活函數。偏置項初始化為 0,且在初始階段激活函數近似表達為函數 f(x) = x。
我們假設權重、激活值、加權輸入、網絡的原始輸入和梯度都服從獨立分布,它們的參數都僅取決於所需要考慮的層級。在這樣的假設下,第 L 層權重的方差可以表示為 Var[W^L],其它如激活值或梯度等變量的方差表達式同理可得。
前向傳播
對於前向傳播,我們希望所有層都保持激活值的輸入和輸出方差相等,因此激活值在網絡的傳遞中不會放大或縮小。若考慮第 L 層第 j 個單元的加權輸入 z_j:
在上面的化簡過程中,我們需要使用定理「兩個獨立隨機變量和的方差等於這兩個變量方差的和」,且前面我們假設了加權的激活值與其它變量相互獨立。此外,若假設當前層的權重獨立於前一層的激活值,乘積的方差可擴展等價於方差的乘積。兩個獨立隨機變量乘積的方差等於方差的乘積還要加上對應的均值項,不過由於我們假設激活值與權重都服從均值為 0 的分布,因此均值項可以省略。
由於激活函數是對稱的,因此輸入為 0 的激活值為 0。此外,若假設零點的導數為 1,那麼我們在初始化階段就可以恆等地近似表達 σ 激活函數,其中偏置項為零,加權輸入向量的期望同樣為零。在這個假設下,a^L ≈ z^L,因此我們可以將前面的方程式簡化表達為:
因此如果我們希望所有加權輸入的方差相等,乘數項必須為 1,最簡單的方法是確保 Var[W^m+1] = 1/n_m。同樣對於所有層級 L,n_in 為輸入到層級的單元數(輸入端數),那麼我們希望有:
反向傳播
對於反向傳播,我們梯度的方差在各個層級中都相等,所以梯度才不會出現消失或爆炸等問題。我們使用反向傳播方程式作為我們的出發點:
與前向傳播相似,我們假設初始階段的梯度與權重是相互獨立的,且使用前面解釋的方差恆等式。此外,我們假設加權輸入 z^L 的均值為 0,且在初始化階段激活函數的導數σ′(z_j) 逼近為 1。為了確保在反向傳播中保持一致的方差,我們服從約束條件 Var[W^m] = 1/n_m。對於層級 L 和層級輸出單元數 n_out,該表達式可以寫為:
結語
在一般條件下,一個層級的輸入端和輸出端數量並不會相等。因此作為一種權衡,Glorot 和 Bengio 建議使用輸入端和輸出端數量的均值,即提出了以下方程式:
如果從均勻分布採樣,那麼分布的區間可以選為 [-a, a],其中 a =(6/n_out + n_in)^0.5。其中特定項 6^0.5 來源於區間 [-a, a] 內均勻分布的方差 a^2/3。當然權重也可以從均值為 0、方差服從上述表達式的正態分布中採樣。
在本論文之前,一般標準的初始化技術是從區間 [-1/n^0.5, 1/n^0.5] 內均勻分布中採樣權重。這樣會使權重之間的方差變為 Var[W^L] = 1/3n^L,把該方差代入我們用於反向傳播的方程後,我們能發現在傳遞的過程中梯度會減小。大概每層會減小 1/3 左右,這個梯度消失的效果也可以在實驗中證明。該論文發現新的初始化方法能確保梯度在各層之間保持相對穩定,且此初始化方法目前是大多數深度學習模型所採用的。
有意思的是,本論文假設了一個在零點有單位梯度的對稱激活函數。但實際上,本論文的實驗結果可以使用 tanh 激活函數表示,它同時滿足這兩個假設。
對於像 ReLU 等激活函數,它們也進行了必要的調整。由於 ReLU 激活函數在值域上有一半為零,所以可以通過加倍權重的方差進行補償,這種啟發式的方法與 He 等人的詳細分析結果相匹配,即 Var[W^L] = 4/(n_out + n_in)。
logistic 激活函數
在前向傳播的推導中,我們將激活函數近似地等價於初始化階段中的單位函數。對於 logistic 激活函數,因為函數在零點的導數為 1/4、函數值為 0,所以我們可以等效計算為 x/4 + 1/2。我們在零點展開泰勒級數,並帶入計算:
其餘的步驟都是等價的,除了前面的因子 1/16。
在反向傳播中有類似的過程,我們忽略了激活函數的導數,因為在前面的假設中導數為 0。如果我們插入修正值 1/4,那麼我們同樣可以得到因子 1/16。由於這個因子在兩個傳播過程都相同,那麼我們可以將它添加到輸入端數量和輸出端數量以構建約束項:
以下是權重初始化的參數:
原文連結:https://www.mnsgrg.com/2017/12/21/xavier-initialization/
本文為機器之心編譯,轉載請聯繫本公眾號獲得授權。
✄---
加入機器之心(全職記者/實習生):hr@jiqizhixin.com
投稿或尋求報導:content@jiqizhixin.com
廣告&商務合作:bd@jiqizhixin.com