神經網絡中的模型初始化


在神經網絡中,通常需要隨機初始化模型參數。下面我們來解釋這樣做的原因。

回顧多層感知機。為了方便解釋,假設輸出層只保留一個輸出單元

且隱藏層使用相同的激活函數。如果將每個隱藏單元的參數都初始化為相等的值,那么在正向傳播時每個隱藏單元將根據相同的輸入計算出相同的值,並傳遞至輸出層。在反向傳播中,每個隱藏單元的參數梯度值相等。因此,這些參數在使用基於梯度的優化算法迭代后值依然相等。之后的迭代也是如此。在這種情況下,無論隱藏單元有多少,隱藏層本質上只有1個隱藏單元在發揮作用。因此,正如在前面的實驗中所做的那樣,我們通常將神經網絡的模型參數,特別是權重參數,進行隨機初始化。

o_1(刪去o_2o_3以及指向它們的箭頭),且隱藏層使用相同的激活函數。如果將每個隱藏單元的參數都初始化為相等的值,那么在正向傳播時每個隱藏單元將根據相同的輸入計算出相同的值,並傳遞至輸出層。在反向傳播中,每個隱藏單元的參數梯度值相等。因此,這些參數在使用基於梯度的優化算法迭代后值依然相等。之后的迭代也是如此。在這種情況下,無論隱藏單元有多少,隱藏層本質上只有1個隱藏單元在發揮作用。因此,正如在前面的實驗中所做的那樣,我們通常將神經網絡的模型參數,特別是權重參數,進行隨機初始化。

 

PyTorch的默認隨機初始化

隨機初始化模型參數的方法有很多。在線性回歸的簡潔實現中,我們使用torch.nn.init.normal_()使模型net的權重參數采用正態分布的隨機初始化方式。不過,PyTorch中nn.Module的模塊參數都采取了較為合理的初始化策略(不同類型的layer具體采樣的哪一種初始化方法的可參考源代碼),因此一般不用我們考慮。

Xavier隨機初始化

還有一種比較常用的隨機初始化方法叫作Xavier隨機初始化[1]。 

 

假設某全連接層的輸入個數為a,輸出個數為b,Xavier隨機初始化將使該層中權重參數的每個元素都隨機采樣於均勻分布:

 

 

它的設計主要考慮到,模型參數初始化后,每層輸出的方差不該受該層輸入個數影響,且每層梯度的方差也不該受該層輸出個數影響。

 

小結

  • 深度模型有關數值穩定性的典型問題是衰減和爆炸。當神經網絡的層數較多時,模型的數值穩定性容易變差。
  • 我們通常需要隨機初始化神經網絡的模型參數,如權重參數。

參考文獻

[1] Glorot, X., & Bengio, Y. (2010, March). Understanding the difficulty of training deep feedforward neural networks. In Proceedings of the thirteenth international conference on artificial intelligence and statistics (pp. 249-256).

——摘自李沐《動手學深度學習》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM