LSTM是专门为避免梯度消失而发明的。可以假设使用恒定误差旋转木马(CEC)来做到这一点,在下图中(来自Greff等人)对应于细胞周围的回路。
(来源:deeplearning4j.org)
而且我知道该部分可以看作是一种身份函数,因此导数为1,并且梯度保持恒定。
我不明白的是它不会因其他激活功能而消失吗?输入,输出和忘记门使用S形,其导数最大为0.25,而g和h传统上为tanh。反向传播如何使梯度不消失?
LSTM是专门为避免梯度消失而发明的。可以假设使用恒定误差旋转木马(CEC)来做到这一点,在下图中(来自Greff等人)对应于细胞周围的回路。
(来源:deeplearning4j.org)
而且我知道该部分可以看作是一种身份函数,因此导数为1,并且梯度保持恒定。
我不明白的是它不会因其他激活功能而消失吗?输入,输出和忘记门使用S形,其导数最大为0.25,而g和h传统上为tanh。反向传播如何使梯度不消失?
Answers:
在一维情况下最好解释消失梯度。多维更复杂,但本质上是相似的。您可以在这篇出色的论文中对其进行回顾[1]。
假设我们有一个隐藏的状态时间步牛逼。如果我们使事情简单,并消除偏差和输入,我们有 h t = σ (w h t − 1)。 然后你可以证明
[1] Pascanu,Razvan,Tomas Mikolov和Yoshua Bengio。“关于训练递归神经网络的困难。” ICML(3)28(2013):1310-1318。
[2]拜耳,贾斯汀·西蒙。学习序列表示。Diss。慕尼黑,慕尼黑工业大学,Diss。,2015,2015。
Greff等人的LSTM块的图片。(2015年)描述了作者称为香草LSTM的一种变体。这与Hochreiter&Schmidhuber(1997)的最初定义有些不同。最初的定义不包括忘记门和窥孔连接。
原始论文中使用了“恒定误差轮播”一词来表示单元状态的循环连接。考虑最初的定义,当输入门打开时,单元状态仅通过加法改变。单元状态相对于较早时间步的单元状态的梯度为零。
错误可能仍会通过输出门和激活功能进入CEC。激活功能会在将误差添加到CEC之前稍微降低误差的大小。CEC是唯一可以使错误保持不变的位置。同样,当输入门打开时,错误会通过输入门,激活函数和仿射变换而退出,从而减小了误差的幅度。
因此,当错误通过LSTM层反向传播时(但仅当它进入和退出CEC时),该错误会减少。重要的是,无论CEC行驶多长时间,它都不会改变。这解决了基本RNN中每个时间步都应用仿射变换和非线性的问题,这意味着输入和输出之间的时间距离越长,误差就越小。
http://www.felixgers.de/papers/phd.pdf 请参阅第2.2和3.2.2节,其中介绍了截断的错误部分。如果错误从单元存储器中泄漏出来(即,如果存在关闭/激活的输入门),则它们不会传播错误,但只会在该时刻基于错误更新门的权重。之后,在进一步的反向传播期间将其设为零。这是种破解,但这样做的原因是沿门的错误流随时间而衰减。