转载:http://blog.csdn.net/lujiandong1/article/details/53320174
在本章中,我们尝试使用我们犹如苦力般的学习算法——基于反向传播随机梯度下降来训练深度网络。但是这会产生问题,因为我们的深度神经网络并不能比浅层网络性能好太多。
1.如果说,深度学习的训练过程中遇到了梯度发散,也即前面的层学习正常,后面层的权重基本上不进行更新,导致的是后面的层基本上学习不到东西。那么其实,后面的层的参数基本上就是我们的随机初始化后的参数,相当于对输入的样本同一做了一个映射。只是后面的层有进行学习,那么在这种情况下,DL的效果和浅层的效果其实是类似的。解释:为什么梯度发散会不利于学习,梯度一旦发散就等价于浅层网络的学习,那么使用DL就没有任何优势。
2.在深度网络中,不同的层学习的速度差异很大,因为学习速率= 激活值*残差,而残差是从上层的残差加权得到的,也与激活函数有关。尤其是,在网络中后面的层学习的情况很好的时候,先前的层次常常会在训练时停滞不变,基本上学不到东西。这种停滞并不是因为运气不好。而是,有着更加根本的原因是的学习的速度下降了,这些原因和基于梯度的学习技术相关。梯度发散的本质原因还是基于BP的反向传播算法,先天不足。同理也会存在梯度爆炸问题。
3.不稳定的梯度问题(梯度收敛和梯度爆炸): 根本的问题其实并非是梯度消失问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。唯一让所有层都接近相同的学习速度的方式是所有这些项的乘积都能得到一种平衡。是不是可以考虑对于不同的层使用不同的学习率。如果没有某种机制或者更加本质的保证来达成平衡,那网络就很容易不稳定了。简而言之,真实的问题就是神经网络受限于不稳定梯度的问题。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。一般会发现在 sigmoid网络中前面的层的梯度指数级地消失。所以在这些层上的学习速度就会变得很慢了。这种减速不是偶然现象:也是我们采用的训练的方法决定的。