权重的初始化,决定了模型训练的起点。一个良好的初始化可以加快训练过程,同时避免模型收敛至局部最小值。为了在训练过程中避免使得权重的变化总沿着同一个方向,我们尽量避免将所有权重都初始化为同一个值,如全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等等权重初始化的方式。