- 梯度爆炸与梯度消失的原因:
简单地说,根据链式法则,如果每一层神经元对上一层的输出的偏导乘上权重结果都小于1的话( ),那么即使这个结果是0.99,在经过足够多层传播之后,误差对输入层的偏导会趋于0(
)。下面是数学推导推导。
假设网络输出层中的第 个神经元输出为
,而要学习的目标为
。这里的
表示时序,与输入无关,可以理解为网络的第
层。

若采用平方误差作为损失函数,第 个输出神经元对应的损失为
将损失 对输出
求偏导
根据链式法则,我们知道,第 层的梯度可以根据第
层的梯度求出来

这里用 表示第
层的第
个神经元,
表示第
层的第
个神经元。
进一步,第 层的梯度可以由第
层的梯度计算出来

这实际上是一个递归嵌套的式子,如果我们对 做进一步展开,可以得到式子
![\vartheta_{i}(t-q)=y_{i}'(t-q)\sum_{j}w_{ij}[y_{j}'(t-q+1)\sum_{k}w_{jk}\vartheta_{k}(t-q+2))]](https://i-blog.csdnimg.cn/blog_migrate/038998d09dd65075c23559f3f888a728.png)
最终,可以一直展开到第 层。
把所有的加法都移到最外层,可以得到

表示的是第
层中神经元的下标(即第
层第
个神经元),
表示第
层的下标。
对应输出层,
对应第
层。实际上展开式就是从网络的第
层到
层,每一层都取出一个神经元来进行排列组合的结果。这个式子并不准确,因为
时实际是损失
对输出层的偏导,即
,
并没有应用权重,把它修正一下

这样,我们就得到了第 层和第
层的梯度之间的关系

在上面的式子中,由于加法项正负号之间可能互相抵消。因此,比值的量级主要受最后的乘法项影响。如果对于所有的 有

则梯度会随着反向传播层数的增加而呈指数增长,导致梯度爆炸。
如果对于所有的 有

则在经过多层的传播后,梯度会趋向于0,导致梯度消失。
2. 解决方法:
以sigmoid函数为例子,sigmoid函数使得输出在[0,1]之间。
事实上x到了一定大小,经过sigmoid函数的输出范围就很小了,参考下图
如果输入很大,其对应的斜率就很小,我们知道,其斜率(梯度)在反向传播中是权值学习速率。在深度网络中,如果网络的激活输出很大,其梯度就很小,学习速率就很慢。假设每层学习梯度都小于0.25,网络有n层,因为链式求导(第一层偏移量的梯度=激活层斜率1x权值1x激活层斜率2x…激活层斜率(n-1)x权值(n-1)x激活层斜率n)的原因,第一层的梯度小于0.25的n次方,所以学习速率就慢,对于最后一层只需对自身求导1次,梯度就大,学习速率就快。这会造成的影响是在一个很大的深度网络中,浅层基本不学习,权值变化小,后面几层一直在学习,结果就是,后面几层基本可以表示整个网络,失去了深度的意义。
梯度消失的影响:
(1)浅层基本不学习,后面几层一直在学习,失去深度的意义。
(2)无法收敛。
如何解决:
(1)第一个阶段就是逐层预训练方法,为了解决深层神经网络的训练问题,一种有效的手段是采取无监督逐层训练(unsupervised layer-wise training)。其基本思想是每次训练一层隐节点,训练时将上一层隐节点的输出作为输入,而本层隐节点的输出作为下一层隐节点的输入,这被称之为“预训练”(pre-training);在预训练完成后,再对整个网络进行“微调”(fine-tunning)训练。在使用无监督训练时,首先训练第一层,这是关于训练样本的RBM模型,可按标准的RBM进行训练;然后,将第一层预训练号的隐节点视为第二层的输入节点,对第二层进行预训练;各层预训练完成后,再利用BP算法对整个网络进行训练。虽然也解决了一些问题,但并没有特别火。事实上,“