目标:让梯度值在合理的范围内。例如【1e-6,1e3】。应对梯度消失和梯度爆炸。
一 解决方法:
1.将乘法变加法
(1)resnet (2)lstm
2.归一化
(1)梯度归一化 (2)梯度裁剪
3.合理的初始权重和激活函数
让每层的方差是常数:(正向传播和反向传播均要求)
1.将每层的输出和梯度都看做随机变量
2.让他们的均值和方差都保持一致
以上做法可以解决度消失和梯度爆炸问题。
二 为什么要权重初始化:
1.在训练开始的时候更容易有数值不稳定
2.使用N(0,0.01)可能对小网络有用,但是不能保证深度学习神经网络。
三 Xavier初始化方法
首先计算前向传播输出的均值和方差
1.计算正向均值
2.计算正向方差
3.计算反向均值和方差
要求是输出方差等于输入的方差。
上图就是Xavier初始化方法的思想。
四 假设线性的激活函数
加上激活函数,计算前向和反向的输出的均值和方差,要求他们的均值和方差都保持一致。
那么要想使激活函数均值和方差都保持一致,激活函数为y=x理论上最好。
可以看出,上式从数学上完美地解释了sigmoid为何存在缺陷。是因为其输出的方差与输入的方差不相等,使得深度网络每次迭代计算值不在合理范围内,导致深度网络多次计算迭代后梯度消失,爆炸。根据此原理可对sigmod做出改进,上下看来真是数学之美。