神经网络权值初始化

1. 为什么权值初始化是个问题?

反向传播算法中,费用函数对于权值矩阵的梯度决定了更新的速率:

如果要避免梯度消失,首先即某一层的激活函数输出值不能为0

其次,

则激活函数的导数不能为0,即激活函数不能饱和

再次,当我们有多层神经网络时(深度神经网络中),根据链式法则得到的是激活函数导数的连乘积,因此激活函数导数不能太靠近0,否则乘方之后会导致浅层梯度为0,梯度消失。

归纳为:

(1)每一层的激活函数输出都不可为0

(2)激活函数不能饱和

(3)激活函数导数不能太小

2. 不同初始化方法

(1)相同权值:

在前向传播过程中:所有的输入都没用,而从第二层开始,所有的神经元都有相同的输入,最终产生相同的预测值

反向传播过程:由可得,除了分类结果落在的那个神经元以外,其他的所有神经元会有相同的梯度,在反向传播的时候也会有相同的结果,这样失去了有多个神经元的意义,费用函数J也会收敛慢。

(2)大随机数权值:

如果使用大随机数,由可得:

很大或很小,那么激活函数中,a趋近于0或1

根据梯度公式,会趋近于0,使得梯度趋近于0,产生梯度消失问题,无法收敛

(3)小随机数权值:

初始化为小于1的,符合高斯分布的随机数,但是这样又有其他缺点:

,而sigmoid函数的导数g'的图像如图所示:


当神经网络的层数变得很大的时候,由于这个导数的最大值只是1/4,会导致梯度变化是1/4的高次方,依然导致梯度消失。

(4)xavior初始化

xavior理论推导:参考1参考2

这种初始化适合于激活函数对于0对称,在0附近保持线性

假设每一个输入值符合,的正态分布(这个通过数据归一化处理可以做到)

同时假设

对于可得:

对于激活函数tanh(Z)而言,落在0附近[-1,1]的线性区域内的一阶导数为1.

那么有

那么对于正向传播中第N层的系数有:

如果在正向传播中希望每层的输出与初始输入层同分布,那么必须要求

由正向传播推广到反向传播可得

当隐藏层都有相同神经元时,可得:

如果是均匀分布,则可推得

当然也可以是正态分布,只要方差符合条件即可

(5)He初始化

CNN经常使用Relu函数作为激活函数,激活函数不符合xavior对于参数初始化的要求,于是需要重新设计初始化权重。

(6)lecun初始化

lecun初始化与xavior初始化没有本质区别

(7)batch normalization

在每次喂入activation function之前,都把Z做正则化处理,正则化层参与back propagation

(8)LSUV初始化

https://arxiv.org/abs/1511.06422

你可能感兴趣的:(神经网络权值初始化)