梯度消失

梯度消失是传统神经网络训练中非常致命的一个问题,其本质是由于链式法则的乘法特性导致的。比如之前神经网络中最流行的激活函数之一Sigmoid,其表达式如下:

                                                  

把这个函数的导数画出来,如图:

                                                                                   

对于Sigmoid,导数的最大值在输入为0处,值为0.25.考虑一个激活函数都是Sigmoid的多层神经网络,则梯度向后传导时,没经过一个Sigmoid就需要乘以一个小于0.25的梯度。而每乘以一个小于0.25的梯度,则梯度的值又变得更小一些。况且在优化的过程中,每个激活层输入都在0附近的概率非常的低。也就是说随着层数的加深,梯度的衰减会非常的大,迅速接近0,这就是梯度消失的现象。

数学公式解释

可以参考接下来的博客:

https://blog.csdn.net/qq_25737169/article/details/78847691

梯度消失_第1张图片

在深层网络中的体现

离输出层越近的参数,梯度越大,成了主要在学习的参数;而远离输出层的参数则只能在接近0的梯度则以一个非常小的速率进行学习。这种情况相当于一个恶性循环,因为靠近输出层的节点的值都是由前面那些学习速率慢的层执行前向运算得来。而前向层因为学习速率慢,所以参数未必学到了什么特征,所以这些后面层的输入随机性会比较强,这样相当于在一个有随机性的数据上进行学习,即时学习速率再快,最后也未必能真的学到有用的特征。,这一过程又会让前面层的参数更难学到有效的值。

解决方法

因为导致梯度消失的根本原因是小于0的梯度连续做乘法。现在看来解决的思路主要有两种:第一种是第1章里提到过的逐层无监督训练+后向传播微调,这个办法其实严格来说并不是针对梯度消失问题,只是预先找到一个很好的初始化位置,降低上一段说的靠近输出层一直在“瞎学”的风险。加上这个方法训练起来也比较麻烦,如今几乎没人用了。更为主流的方法是,第二种方法,ReLU等可以避免梯度衰减的激活函数。


参考书籍:深度学习与计算机视觉

你可能感兴趣的:(深度学习基础知识)