深度學習的幾種權重初始化

       因爲梯度是指數級變化的,所以深度神經網絡很容易出現梯度消失或者梯度爆炸的問題。針對這個問題的很有效的方法是更加謹慎地選擇隨機初始化參數。

      主要討論四種權重初始化方法:把w初始化爲0、對w隨機初始化、Xavier initialization、He initialization(在ReLu網絡中最常用)

  1. 把w初始化爲0

         parameters= np.zeros()

         如果只是在線性迴歸的話這樣初始化是可以的,但是在神經網絡中把w初始化爲0是不可以的,因爲這樣會導致每一層的神經網絡學習到的東西是一樣的,並且在bp的時候每一層內的神經元也是相同的。

     2.對w隨機初始化

        parameters= np.random.randn()*0.01

        早期最常用的方法,乘以0.01是因爲要把w隨機初始化到一個相對比較小的值。但是隨機初始化也有缺點,np.random.randn()其實是一個均值爲0,方差爲1的高斯分佈中採樣。當神經網絡的層數增多時,會發現越往後面的層的激活函數(如使用tanH)的輸出值幾乎都接近於0,這會導致梯度消失。

     3.Xavier initialization

      parameters= np.random.randn()* np.sqrt(1 / layers_dims[l - 1])  # layers_dims[l - 1]是前一層神經元的數量

      Xavier initialization就是儘可能的讓輸入和輸出服從相同的分佈,這樣就能夠避免後面層的激活函數的輸出值趨向於0。這種方法適用於激活函數是tanh,但不適合於激活函數是ReLu。

     4.He initialization   

     parameters= np.random.randn()* np.sqrt(2 / layers_dims[l - 1])

     這種方法是由何愷明大神提出的,吳恩達老師也經常使用的方法。在激活函數是ReLu中,效果很好,是目前權重初始化最常用的方法。

      實際上,以上這些公式只是給出了權重初始化的一個起點,給出了初始化權重矩陣的默認值,可以給公式添加一個乘數參數,將該參數作爲調參的一部分,雖然這個調參應該優先級很低。

    注:使用Batch Normalization Layer可以有效降低深度網絡對weight初始化的依賴。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章