往期回顾
在上一篇文章中,我们介绍了循环神经网络以及它的训练算法。我们也介绍了循环神经网络很难训练的原因,这导致了它在实际应用中,很难处理长距离的依赖。在本文中,我们将介绍一种改进之后的循环神经网络:长短时记忆网络(Long Short Term Memory Network, LSTM),它成功的解决了原始循环神经网络的缺陷,成为当前最流行的RNN,在语音识别、图片描述、自然语言处理等许多领域中成功应用。但不幸的一面是,LSTM的结构很复杂,因此,我们需要花上一些力气,才能把LSTM以及它的训练算法弄明白。在搞清楚LSTM之后,我们再介绍一种LSTM的变体:GRU (Gated Recurrent Unit)。 它的结构比LSTM简单,而效果却和LSTM一样好,因此,它正在逐渐流行起来。最后,我们仍然会动手实现一个LSTM。
长短时记忆网络是啥
我们首先了解一下长短时记忆网络产生的背景。回顾一下零基础入门深度学习(5) - 循环神经网络中推导的,误差项沿时间反向传播的公式:
δTk=δTt∏i=kt−1diag[f′(neti)]W(1)
我们可以根据下面的不等式,来获取 δTk 的模的上界(模可以看做对 δTk 中每一项值的大小的度量):
∥δTk∥⩽⩽∥δTt∥∏i=kt−1∥diag[f′(neti)]∥∥W∥∥δTt∥(βfβW)t−k(2)(3)
我们可以看到,误差项 δ 从t时刻传递到k时刻,其值的上界是 βfβw 的指数函数。 βfβw 分别是对角矩阵 diag[f′(neti)] 和矩阵W模的上界。显然,除非 βfβw 乘积的值位于1附近,否则,当t-k很大时(也就是误差传递很多个时刻时),整个式子的值就会变得极小(当 βf