循环层将误差项反向传递到上一层网络,与普通的全连接层是完全一样的,这在前面的文章零基础入门深度学习(3) - 神经网络和反向传播算法中已经详细讲过了,在此仅现在,我们用我们的计算图框架(VectorSlow)搭建一些深度各异的多层全连接神经网络,并观察梯度消失导致的“训不动”现象。首先看一下代码(gradient_show.py): import matplotlib.pypl
训练神经网络,尤其是深度神经网络时,面临的一个问题是梯度消失或者梯度爆炸,也就是神经元上的梯度会变得非常小或者非常大,从而加大训练的难度。1、原理梯度消失(Vanishing Gradient Problem,或梯度消失也称为梯度弥撒,仍然是深度神经网络训练过程中所面临的最大挑战之一。梯度消失产生的源头就在于激活函数。对预激活输出求导都牵扯到激活函数的导数,传统的激活函数
3.有效缓解了梯度消失的问题。4.在没有无监督预训练的时候也能有较好的表现。5.提供了神经网络的稀疏表达能力。缺点:随着训练的进行,可能会出现神经元死亡,权重无法梯度消失导致神经网络的hidden layer 1 相当于只是一个映射层,对所有的输入做了一个函数映射,这时此深度神经网络的学习就等价于只有后几层的隐藏层网络在学习,就发挥不到深层神经网
作者通过深度线性网络的例子对照证明了导致最终网络性能变差的原因并不是梯度消失,而是权重矩阵的退化,导致模型的有效自由度减少,并指出该结论可以推广到非线性网络中。在这篇文章可以看到,当γ>1,t-k→∞时,γt-k→∞,造成梯度爆炸问题;相反,γ<1,t-k→∞时,γt-k→0,会出现梯度消失问题。而循环神经网络中经常使用的激活函数为Sigmoid
>▽< relu函数的导数在正数部分是恒等于1的,因此在深层网络中使用relu激活函数就不会导致梯度消失的问题。3.Batch Normalization BN就是通过对每一层的输出规范为均值和方差一致所以可是说是反向传播的机制本身造就梯度爆炸和梯度消失这两种不稳定因素。例如,一个100层的深度神经网络,假设每一层的梯度计算值都为1.1,经过由输出到输入的反向传播梯度计算可能最后的梯度值就