循环神经网络中,通过时间反向传播(backpropagation through time,BPTT)实际上是循环神经网络中反向传播技术的一个特定应用。
(1)它要求我们将循环神经网络的计算图以此展开一个时间步,以获得模型变量和参数之间的依赖关系
(2)然后,基于链式法则,应用反向传播来计算和存储梯度。
(3)由于序列可能相当长,因此依赖关系链也可能相当长。
? ? ? ? 例如,某个1000个字符的序列,其第一个词元可能会对最后位置的词元产生重大影响。这在计算上是不可行的,它需要的时间和内存都太多了,并且还需要超过1000个矩阵的乘积才能得到非常难以捉摸的梯度。这个过程充满可计算与统计的不确定性。
循环神经网络的梯度分析
? ? ? ?分析一个简化的模型,此模型描述了循环神经网络工作原理,模型中忽略了隐状态及其更新方式的细节。
? ? ? 在简化模型中,将时间步的隐状态表示为,输入表示为,输出表示为。和分别表示隐藏层和输出层的权重。和分别表示隐藏层和输出层的变换。
前向传播的计算:
.
反向传播的计算:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
上式中第一项和第二项很容易计算,第三项是比较难计算的,我们需要循环的计算参数对的影响。
经过推导(此处省略推导过程),得到:
其中当很大时,链就很长,其中代表的乘积阶数就会很高。
? ? ? ?这样就会导致最终的梯度会因为其中的幂指数变得很敏感,容易产生非常大的数(梯度爆炸)和非常小的数(梯度消失)。