- 参数初始化的几个基本条件
什么样的初始化参数才是最好的呢?这里直接引入几个参 数初始化的要求:
Glorot条件:优秀的初始化应该保证以下两个条件:
(1)各个层的激活值h(输出值)的方差要保持一致
(2)各个层对状态Z的梯度的方差要保持一致
- 关于方差的三个客观事实
既然要保持上面的两个方差在各个网络层中不改变,那 也就是它实际上是会改变的,关于为什么会改变的公式推导,这里不详细说明了,直接引入三个基本的客观事实(两有关一无关):
(1)各个层激活值h(输出值)的方差与网络的层数有关
(2)关于状态Z的梯度的方差与网络的层数有关
(3)各个层参数W的梯度的方差与层数无关
参考论文:http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf
- 参数初始化的几点要求
(1)参数不能全部初始化为0,也不能全部初始化同一个值,为什么,请参见“对称失效”;
(2)最好保证参数初始化的均值为0,正负交错,正负参数大致上数量相等;
(3)初始化参数不能太大或者是太小,参数太小会导致特征在每层间逐渐缩小而难以产生作用,参数太大会导致数据在逐层间传递时逐渐放大而导致梯度消失发散,不能训练
(4)如果有可能满足Glorot条件也是不错的
上面的几点要求中,(1)(2)(3)基本上是硬性要求,这也就衍生出了一系列的参数初始化方法,什么正态标准化等诸如此类的标准化方法。
-
常见的参数初始化方法
(1)正态化的Glorot初始化——glorot_normal
(2)标准化的Glorot初始化——glorot_uniform
(3)Glorot初始化器的缺点因为Xavier的推导过程是基于几个假设的,其中一个是激活函数是线性的,这并不适用于ReLU,sigmoid等非线性激活函数;另一个是激活值关于0对称,这个不适用于sigmoid函数和ReLU函数它们不是关于0对称的。
-
Batch Normalization
BN是将输入的数据分布变成高斯分布,这样可以保证每一层神经网络的输入保持相同分布。
优点
随着网络层数的增加,分布逐渐发生偏移,之所以收敛慢,是因为整体分布往非线性函数取值区间的上下限靠近。这会导致反向传播时梯度消失。BN就是通过规范化的手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值0方差1的标准正态分布,使得激活输入值落入非线性函数中比较敏感的区域。可以让梯度变大,学习收敛速度快,能大大加快收敛速度。