爲何不可將神經網絡的參數全都初始化成0?

爲何不可將神經網絡的參數全都初始化成0?

證明如下:

 

如圖所示。所以其實可以看出,當你把所有參數都初始化爲0的時候,同一hidden layer的參數的更新幅度是一樣的。又因爲它們的初值也一樣(都是0),所以導致隱藏層的參數永遠一樣,這就意味着你同一隱藏層每個神經元輸入一樣、經過同樣的sigmoid激活,又得到一樣的輸出(設a4=a5=a),然後再乘以一樣的參數。對於圖中x4、x5組成的hidden layer而言,由於w64=w65=w,所以可將w提出來,即

$$x_6 = w_{64}a_4 + w_{65}a_5 = w(a_4+a_5) = w*a*2$$

所以,看到了吧。你同一個隱藏層裏即使有n個神經元,其作用也只不過是相當於在輸出結果上乘以了“n”。這樣的情況在每個隱藏層都會出現,每個隱藏層都退化成一個神經元,那麼結果就和線性迴歸沒什麼區別了。

 

再進一步更確切地說,其實你只需將第一層input layer的參數(本例中爲[w41,w42,w43,w51,w52,w53])都設爲0,然後將後續每層隱藏層的參數都設成同一個數(不一定都是0),就可以造成這種,輸入都一樣,經一樣的激活函數激活得到一樣的輸出,再乘以一樣的權重傳遞給下一個hidden layer一樣的值只有的效果。這肯定是你不想要的。

仔細想想,這種情況到底是怎麼產生的呢?其實還是因爲“0”這個奇妙的數字——是誰,可以讓不同的input,乘以它之後,全都變得一樣呢?只有0能做到,這也是0的威力。所以我們以後初始化的時候,還是離“0”遠一點爲妙呀!

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