深度 | 通過方差分析詳解最流行的Xavier權重初始化方法

2021-02-13 機器之心

選自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

相關焦點

  • AI初識:參數初始化-深度學習成功的開始
    在Xavier Glorot和Yoshua Bengio提出xavier初始化方法的論文【1】中就對不同的激活函數使用不同的數據集做過實驗。上面是一個四層的神經網絡在sigmoid函數激活下的訓練過程,可以看到最深的layer4層剛開始的時候很快就進入了飽和區域(激活值很低),其他幾層則比較平穩,在訓練的後期才能進行正常的更新。為什麼會這樣呢?
  • 可視化超參數作用機制(二):權重初始化
    在這篇文章中,我將展示恰當地初始化深度神經網絡的權重的重要性。我們將從一個樸素的初始化方案開始,並著手解決它的問題,例如梯度消失/爆炸,以(重新)發現兩種流行的初始化方案:Xavier / Glorot和He。
  • 吳恩達深度學習筆記(37)-神經網絡的權重初始化再解析
    神經網絡的權重初始化(Weight Initialization for Deep NetworksVanishing / Exploding gradients)上節課,我們學習了深度神經網絡如何產生梯度消失和梯度爆炸問題,最終針對該問題,我們想出了一個不完整的解決方案,雖然不能徹底解決問題,卻很有用,有助於我們為神經網絡更謹慎地選擇隨機初始化參數
  • 《神經網絡和深度學習》系列文章二十八:權重初始化
    使用神經網絡識別手寫數字反向傳播算法是如何工作的改進神經網絡的學習方法改進神經網絡的學習方式交叉熵損失函數用交叉熵解決手寫數字識別問題交叉熵意味著什麼?它從哪裡來?Softmax過擬合正則化為什么正則化能夠降低過擬合?
  • 神經網絡中的權重初始化一覽:從基礎到Kaiming
    如果我們首先通過將權重矩陣a的各隨機選擇值除以√512來對其進行縮小,那麼生成輸出y的某個元素的輸入元素與權重乘積的方差通常只有1 /√512。  現在回想起來,發現我們自己的權重初始化策略還是很直觀的。但你可能會驚訝地發現,就在2010年,這還不是初始化權重層的傳統方法。
  • CS231N 07: 數據處理、權重初始化、正則化
    在訓練完畢後,雖然不知道網絡中每個權重的最終值應該是多少,但如果數據經過了恰當的歸一化的話,就可以假設大約一半權重為正數,一半為負數。這樣,一個看似合理地嘗試是把權重的初始化為0,因為從期望上看,0是最合理的猜測。但是這個做法錯誤的!因為如果網絡中的每個神經元都計算出同樣的輸出,然後它們就會在反向傳播中計算出同樣的梯度,從而進行同樣的參數更新。
  • 吳恩達深度學習課補充教程:交互式demo助你理解神經網絡初始化
    初始化對深度神經網絡的收斂有重要影響。優秀的初始化模式可以加速訓練,但是需要小心操作以避免常見的陷阱。deeplearning.ai 最新上線了 AI Notes 欄目,以長文的形式作為《深度學習專項課程》的補充。其具備交互式的 demo,有助於讀者輕鬆掌握深度學習基礎概念。AI Notes 的第一篇教程就是「初始化神經網絡」。
  • 吳恩達深度學習課最新補充教程:交互式demo助你輕鬆理解神經網絡初始化
    deeplearning.ai 最新上線了 AI Notes 欄目,以長文的形式作為《深度學習專項課程》的補充。其具備交互式的 demo,有助於讀者輕鬆掌握深度學習基礎概念。AI Notes 的第一篇教程就是「初始化神經網絡」。這篇教程共包括四部分:有效初始化的重要性、梯度爆炸或消失問題、什麼是恰當的初始化,以及 Xavier 初始化的數學證明。1.
  • caffe詳解之卷積層
    " #權值初始化。 默認為「constant",值全為0,很多時候我們用"xavier"算法來進行初始化,也可以設置為」gaussian"    }    bias_filler {      type: "constant" #偏置項的初始化。
  • 如何有效地對神經網絡參數進行初始化
    神經網絡的初始化是訓練流程的重要基礎環節,會對模型的性能、收斂性、收斂速度等產生重要的影響。本文是deeplearning.ai的一篇技術博客,文章指出,對初始化值的大小選取不當,  可能造成梯度爆炸或梯度消失等問題,並提出了針對性的解決方法。 初始化會對深度神經網絡模型的訓練時間和收斂性產生重大影響。
  • 但何愷明的初始化方法堪比「還魂丹」
    論文地址:https://arxiv.org/pdf/1502.01852.pdf初始化方法初始化一直是深度學習研究中的重要領域,特別是隨著架構和非線性研究的不斷發展,一個好的初始化方法可能決定著網絡最終的質量。
  • 一文概覽深度學習中的五大正則化方法和七大優化策略
    選自arXiv 機器之心編譯 深度學習中的正則化與優化策略一直是非常重要的部分,它們很大程度上決定了模型的泛化與收斂等性能。本文主要以深度卷積網絡為例,探討了深度學習中的五項正則化與七項優化策略,並重點解釋了當前最為流行的 Adam 優化算法。
  • 詳解深度學習中的Normalization,BN/LN/WN
    本文從 Normalization 的背景講起,用一個公式概括 Normalization 的基本思想與通用框架,將各大主流方法一一對號入座進行深入的對比分析,並從參數和數據的伸縮不變性的角度探討 Normalization 有效的深層原因。
  • SPSS: 方差成分分析/方差分量分析
    通過方差成分分析可考察各層次因素的變異大小,提供可能減少數據變異的方法。,可打開Variance Components: Options(方差成分分析:選項)對話框,見圖10-15。☆Method(方法),估計方差成分的方法,共有4種。
  • 如何充分利用BERT微調權重初始化,使數據順序和提前停止的操作
    一些權重初始化在整體上與其他的初始化相比,它們在多個任務上的建模效果更好。實驗裝置在4個不同的GLUE二進位分類日期集上多次微調BERT。其中三個很小(MRPC,RTE和CoLA),另一個很大(SST)。
  • 【Deep Learning】深度學習調參技巧的總結
    還有一次給word embedding初始化,最開始使用了TensorFlow中默認的initializer(即glorot_uniform_initializer,也就是大家經常說的無腦使用xavier),訓練速度慢不說,結果也不好。改為uniform,訓練速度飆升,結果也飆升。
  • 【深度學習】梯度消失和梯度爆炸問題的最完整解析
    這種不幸的行為是很久以前就憑經驗觀察到了,這也是深度神經網絡在2000年代初期被大量拋棄的原因之一。目前尚不清楚是什麼原因導致在訓練DNN時使梯度如此不穩定,但是Xavier Glorot和Yoshua Bengio在2010年的一篇論文中闡明了一些觀點1。作者發現了一些疑點,包括流行的邏輯sigmoid激活函數和當時最流行的權重初始化技術(即平均值為0且標準差為1的正態分布)。
  • 深度學習調參有哪些技巧?
    還有一次給word embedding初始化,最開始使用了TensorFlow中默認的initializer(即glorot_uniform_initializer,也就是大家經常說的無腦使用xavier),訓練速度慢不說,結果也不好。改為uniform,訓練速度飆升,結果也飆升。
  • 深度學習最常用的學習算法:Adam優化算法
    聽說你了解深度學習最常用的學習算法:Adam優化算法?-深度學習世界。深度學習常常需要大量的時間和機算資源進行訓練,這也是困擾深度學習算法開發的重大原因。雖然我們可以採用分布式並行訓練加速模型的學習,但所需的計算資源並沒有絲毫減少。而唯有需要資源更少、令模型收斂更快的最優化算法,才能從根本上加速機器的學習速度和效果,Adam 算法正為此而生!