在神经网络的学习中,权重的初始值特别重要,经常关系到神经网络的学习能否成功。
第一点,权重初始值不能设置为0,严格说权重初始值不能设为同样的值,是因为在误差反向传播法中,所有权重值都会进行相同的更新(参考我的博客:“深度学习:简单计算图的反向传播传递导数计算”中乘法节点反向传播的规则),所以为了防止“权重均一化”,必须随机生成初始值。
第二点,当激活函数为sigmoid或tanh等S型曲线函数时,初始值使用Xavier初始值(Xavier初始值是以激活函数是线性函数为前提而推导出来的。因为sigmoid函数和tanh函数左右对称,且中央附近可以视作线性函数,所以适合使用Xavier初始值。Xavier初始值:与前一层有n个节点连接时,初始值使用标准差为 的分布n 个节点使用标准差为 1/根号n 的高斯分布进行初始化使用Xavier初始值后,前一层的节点数越多,要设定为目标节点的初始值的权重尺度就越小)。当激活函数使用ReLu时,权重初始值使用He初始值(当前一层的节点数为n时,He初始值使用标准差为2/根号n的高斯分布,可以解释为,因为ReLU的负值区域的值为0,为了使它更有广度,所以需要Xavier初始值2倍的系数)。
第三点,若设定了合适的权重初始值,则各层的激活值分布会有适当的广度,从而可以顺利地进行学习。Batch Normalization方法可以强制性地调整激活值(激活函数的输出数据)的分布,使各层拥有合适的广度。
Batch Norm的优点:
• 可以使学习快速进行(可以增大学习率)。
• 不那么依赖初始值(对于初始值不用那么神经质)。
• 抑制过拟合(降低Dropout等的必要性)。
上式做的是将将mini-batch的输入数据{x1, x2, … , xm}变换为均值为0、方差为1的数据 ,非常简单。通过将这个处理插入到激活函数的前面(或者后面),可以减小数据分布的偏向。接着,Batch Norm层会对正规化后的数据进行缩放和平移的变换,用数学式可以如下表示。
几乎所有的情况下都是使用Batch Norm时学习进行得更快。同时也可以发现,实际上,在不使用Batch Norm的情况下,如果不赋予一个尺度好的初始值,学习将完全无法进行。