LSTM的公式如下(省略bias)
要通过时间进行反向传播( backpropagation through time)来训练RNN,我们需要计算E关于的梯度。 总误差梯度等于每一时间步的误差梯度之和。对于时间t,我们可以使用链式法则来推导出误差梯度,如下:
上面的式子中,的具体形式如下:
上面的公式效果并不好,原因是cell state可能会增长得无法控制。为了防止这个无限增长,引入了forget gate,公式如下:
接下来看看完整的LSTM的梯度。上面我们提到递归导数是造成梯度消失的主要原因,因此我们来解释一下完整的导数。通过链式求导法则,我们可以得到
上述求导具体可以写为:
现在,如果我们要反向传播k个时间步,我们只要简单的将上述公式连乘k次就行。这与普通的RNN有很大的区别。对于普通的RNN,的最终要么总是大于1,要么总是在[0, 1]范围内,这将导致梯度消失或者梯度爆炸。而对于LSTM,在任何时间步,该值可以大于1,或者在[0, 1]范围内。因此,如果我们延伸到无穷的时间步,最终并不会收敛到0或者无穷。如果开始收敛到0,那么可以总是设置的值(或者其他gate的值)更高一些,使得的值接近1,从而防止了梯度消失(或者至少是,防止梯度不会那么快消失)。另外一个很重要的事情是,的值是网络学习到的(根据当前的输入和隐藏层)。因此,在这种情况下,网络会学会决定什么时候让梯度消失,什么时候保持梯度,都可以通过设置gate的值来决定。
- 为cell state的更新函数给出了一个更加“表现良好”的导数( The additive update function for the cell state gives a derivative thats much more ‘well behaved’)
- 门控函数(gating function)允许网络决定梯度消失多少,并且可以在每个时间步长取不同的值。它们所取的值是从当前输入和隐藏状态学习到的。( The gating functions allow the network to decide how much the gradient vanishes, and can take on different values at each time step. The values that they take on are learned functions of the current input and hidden state.)
- recursive partial derivative 是一个雅可比矩阵( Jacobian matrix)。
- 为了直观地理解递归权值矩阵的特征值的重要性,可以参考这篇文章。
- 对于LSTM的遗忘门(forget gate),递归导数仍然是许多0和1之间的数的和,然而在实践中,与RNN相比,这不是一个很大的问题。其中一个原因是我们的网络可以直接控制f的值。如果需要记住一些内容,网络可以很容易得将f取值高一点(如0.95左右)。因此,与tanh的导数值相比,这些值得收缩速度要慢的多。
- 为了完成完整的LSTM的推导,其实还有很多细节需要完成。本文不再赘述,感兴趣的可以参考这篇文章 PhD thesis of Alex Graves。