梯度消失的原因?
在训练神经网络时,为了让损失函数越来越小,常用优化的方法是梯度下降。梯度下降法简单的来说就是在权重的负梯度方向更新权重,一直到梯度收敛为零。(实际过程中,会通过设定一个超参数叫做最大跌代数来控制,如果迭代次数太小,结果就会不准确,如果迭代次数太大,那么训练过程会非常长。)
这里就需要计算参数的梯度,方法是用反向传播
同时一般情况下神经网络在权重初始化时,会按照高斯分布,平均值为0标准差为1这样进行初始化,所以权重矩阵也是小于1的。
由上面的例子可以看出,对第一层的权重求的偏导,就有五个小于1的数相乘,那么当层数越多,这就会以指数级迅速减小
越靠前的层数,由于离损失越远,梯度计算式中包含的激活函数的导数就越多,那么训练也就越慢。
(那么梯度爆炸,也就是同样的道理,当激活函数的导数大于1的时候,它会呈指数级的增长)
解决方案?
梯度消失:
逐层“预训练”(pre-training)+对整个网络进行“微调”(fine-tunning)选择合适的激活函数batch normalization 批规范化:通过对每一层的输出规范为均值和方差一致的方法,消除了 w 带来的放大缩小的影响残差结构LSTM