第一部分:梯度消失问题描述
我们以多层单神经元为例,同时,为了简化问题描述,我们省略偏置b:
假设我们现在想要更新参数w1:
那么通过链式法则求导就是:
假设我们使用的是sigmoid函数:
那么sigmoid的求导函数图像为:
倒数的范围为0~1/4,而不是0~1之间,如果是0~1之间,那么上面的这四个求导下来,变化幅度不大而且真实,但是现在是每个求导都是被缩减到原先1/4的水平,到最前面w1的时候就变成了1/256,这个时候缩小的太快了,导致直接近似变成0了,也就是所谓的“梯度消失”,这个梯度的意思指的是多个连续相乘。
第二部分:梯度爆炸问题描述
还是以第一部分为例:
如果我们刚开始初始化的w比较大,那么三个连乘之后的数将会变得非常大,也就是所谓的“梯度爆炸”
第三部分:总结梯度消失和梯度爆炸
无论是梯度消失还是梯度爆炸,都是“梯度信号的一种严重失真!”
它们产生的原因都是因为:“神经网络的串联式结构”、“反向传播算法”、“不合适的激活函数”以及“权重初始值设置不太好”等。
梯度消失:导致网络退化(因为前面那几层的参数几乎为零,也就是前面几层神经元都失去了作用,相当于摆设)
梯度爆炸:导致网络不稳定(传到前面的神经元就会变得太大,需要来回调整,非常不稳定)