1、什么是梯度消失(gradient vanishing)?
参数更新过小,在每次更新时几乎不会移动,导致模型无法学习。
2、什么是梯度爆炸(gradient exploding)?
参数更新过大,破坏了模型的稳定收敛。
3、利用梯度截断来缓解梯度爆炸问题
4、门控循环单元(GRU)与普通的循环神经网络之间的关键区别是:GRU支持隐状态门控。模型有专门的机制来确定应该何时来更新隐状态,以及何时重置隐状态。这些机制是可学习的。
5、长短期记忆网络(LSTM)引入记忆元,记忆元的设计目的是用于记录附加的信息。为了控制记忆元,需要许多门,输入门、遗忘门和输出门。
6、GRU和LSTM中的门控设计策略,能够有助于缓解梯度消失或梯度爆炸问题。主要是解决长序列梯度计算中幂指数大小的问题(长序列意味着高阶乘积计算,容易导致梯度极大或极小),可以通过门控设计来直接减少高阶乘积大小(直接替换高阶乘积计算,替换为合理数值),从而缓解梯度消失或梯度爆炸问题。
7、循环神经网络的梯度爆炸和梯度消失的具体原因分析:
循环神经网络中,通过时间反向传播(backpropagation through time,BPTT)实际上是循环神经网络中反向传播技术的一个特定应用。
(1)它要求我们将循环神经网络的计算图以此展开一个时间步,以获得模型变量和参数之间的依赖关系
(2)然后,基于链式法则,应用反向传播来计算和存储梯度。
(3)由于序列可能相当长,因此依赖关系链也可能相当长。
例如,某个1000个字符的序列,其第一个词元可能会对最后位置的词元产生重大影响。这在计算上是不可行的,它需要的时间和内存都太多了,并且还需要超过1000个矩阵的乘积才能得到非常难以捉摸的梯度。这个过程充满可计算与统计的不确定性。
8、循环神经网络的梯度分析
分析一个简化的模型,此模型描述了循环神经网络工作原理,模型中忽略了隐状态及其更新方式的细节。
在简化模型中,将时间步的隐状态表示为,输入表示为,输出表示为。和分别表示隐藏层和输出层的权重。和分别表示隐藏层和输出层的变换。
前向传播的计算:
.
反向传播的计算:
上式中第一项和第二项很容易计算,第三项是比较难计算的,我们需要循环的计算参数对的影响。
经过推导(此处省略推导过程),得到:
其中当很大时,链就很长,其中代表的乘积阶数就会很高。
这样就会导致最终的梯度会因为其中的高阶数的乘积变得很敏感,容易产生非常大的数(梯度爆炸)和非常小的数(梯度消失)。
9、梯度计算的细节分析
这里我们具体讨论通过时间反向传播(backpropagation through time,BPTT)的细节。我们将展示目标函数对于所有模型参数的梯度计算方法。
出于简单的目的,我们以一个没有偏置参数的循环神经网络,其在隐藏层中的激活函数使用恒等函数()。
对于时间步,单个样本的输入及其标签分别为和。计算隐状态和输出的公式为
其中,权重参数为,和。
目标函数为:
。
通常,训练这个模型需要对这些参数分别进行梯度计算:、和。
其中:
从中可以看到,这个简单的线性例子已经展现出长序列模型的一些关键问题:
它陷入到了的潜在的非常大的指数幂。在这个指数幂中,小于1的特征值将会消失(出现梯度消失),大于1的特征值将会发散(出现梯度爆炸)。
10、GRU和LSTM中的门控设计策略对于缓解梯度消失或梯度爆炸问题的原理和机制
(1)GRU门控设计策略
支持隐状态的门控。 这意味着模型有专门的机制来确定应该何时更新隐状态, 以及应该何时重置隐状态。 这些机制是可学习的,并且能够解决了上面列出的问题。 例如,如果第一个词元非常重要, 模型将学会在第一次观测之后不更新隐状态。 同样,模型也可以学会跳过不相关的临时观测。 最后,模型还将学会在需要的时候重置隐状态。
下面具体讨论各类门控的作用。
重置门有助于捕获序列中的短期依赖关系。
更新门有助于捕获序列中的长期依赖关系。
重置门的数学表达式:
对于给定的时间步,假设输入是一个小批量(样本数,输入数),前一个时间步的隐状态是(隐藏单元数)。
那么,重置门和更新门的计算方式如下所示:
其中,、、和是权重参数,,是偏置参数。表示sigmoid函数,将输入值转换到区间(0,1)内。
将重置门与常规隐状态更新机制集成,得到时间步的候选隐状态:
。
候选隐状态结合更新门,形成新的隐状态:
。
每当更新门接近1时,模型就倾向只保留旧状态。 此时,来自的信息基本上被忽略, 从而有效地跳过了依赖链条中的时间步。 相反,当接近0时, 新的隐状态就会接近候选隐状态。 这些设计可以帮助我们处理循环神经网络中的梯度消失问题, 并更好地捕获时间步距离很长的序列的依赖关系。 例如,如果整个子序列的所有时间步的更新门都接近于1, 则无论序列的长度如何,在序列起始时间步的旧隐状态都将很容易保留并传递到序列结束。