權重的初始化,決定了模型訓練的起點。一個良好的初始化可以加快訓練過程,同時避免模型收斂至局部最小值。為了在訓練過程中避免使得權重的變化總沿著同一個方向,我們盡量避免將所有權重都初始化為同一個值,如全0矩陣或全1矩陣。
往往我們使用均勻分布或者正則分布初始化權重矩陣。在使用tensorflow框架時,keras為我們提供了許多封裝好的層,其中常見的有Dense全連接層,Conv2D卷積層等等。查閱文檔我們發現默認的權重初始化都使用了glorot uniform :
Wij?U(?6n+m,6n+m)W_{ij} \rightsquigarrow U(-\sqrt{\frac{6}{n+m}} , \sqrt{\frac{6}{n+m}})Wij??U(?n+m6??,n+m6??)
其中,n為inputs的個數,m為outputs的個數。在由輸入輸出個數決定的 [-limit, limit] 的范圍中使用均勻分布初始化。
除了默認的使用glorot uniform初始化矩陣以外,keras還封裝了例如Glorot Normal, RandomNormal,RandomUniform等等權重初始化的方式。