目标:让梯度值在合理的范围内。例如【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做出改进,上下看来真是数学之美。
五 结论: 合理的权重初始值和激活函数的选取可以提升数值的稳定性。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)