梯度消失(爆炸)是指随着人工神经网络(ANN)层数的增加,前面各层的梯度grad(E(w))会逐渐减小,最后逐渐趋向于0。这是神经网络中存在的一个现象,具体表现为:训练时,前面各层的学习会显著慢(快)于后面层的学习。
对于这个现象,网上很多文章给出了解释,但我觉得大多不够条理或准确。下面我试给出数学推导和说明,希望能条理、准确的解释这个现象。
一.建立神经网络
为推导起来方便,我们将神经网络简化为下图所示,复杂的神经网络原理相同。
这是一个四层神经网络,输入是x,输出是y。各权重、偏置、输入、输出分别是
,
,
,
,最终输出y=
。激活函数是sigmoid,简称σ(欧美人有使用读音相近的希腊字母代替英语单词或短语的习惯)。前向传播算法的表达式是
,损失函数是E。
二.求梯度值
最前面一层grad(E(w1))的值为
。根据链式求导法则,可得
。其中,
,
。所以
。
三.分析梯度值
我们可以画出sigmoid函数导数的图形如下。从图上可以看出,导数的最大值为0.25,也就是导数值一般小于0.25。
我们一般使用标准方法来初始化各权重w,即初始w的分布是一个均值为0,标准差为1的高斯分布。因此,初始w的绝对值通常都小于1。
四.得出梯度消失(爆炸)的结论
我们称
是一个因子,从第三部分的分析可知,因子绝对值通常小于0.25。从第二部分的推导可知,梯度值表达式包含多个因子的乘积。并且,神经网络层数越多,梯度的结果中因子越多。多个绝对值小于0.25的数相乘,乘积绝对值是非常小的。所以随着层数的增多,前面层的梯度值会逐渐变小,直至趋向于0,这就是梯度消失。
这里训练神经网络用是后向传播(BP)算法,其更新策略为:
,其中η是学习速率。所以,当其它几个变量确定,并且梯度
非常小时,权重的更新速度很慢,学习也会很慢。
梯度爆炸的原因相同,只不过是发生在初始化权重很大的时候。当权重很大(比如10)时,根据前面推导,梯度爆炸是显而易见的。
五.sigmoid激活函数与梯度消失(爆炸)
当用sigmoid做激活函数时,发生更多的是梯度消失。因为要发生梯度爆炸,
的绝对值必须大于1,由此计算出w的数值变化范围很小,仅仅在此窄范围内会出现梯度爆炸问题。
梯度消失和梯度爆炸的发生,根本原因是BP算法的先天缺陷。因为梯度值中包含多个因子的乘积,造成了不稳定性的累积。当然,目前已经有很多方法来解决这个问题。
了解更多AI和金融模型,欢迎关注我的公众号和专栏。
微信公众号:曲曲菜
知乎专栏:AI和金融模型
原创作品,未标明作者不得转载。