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初始化
这种初始化适合于激活函数对于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
网友评论