长短期记忆(LSTM(long short term memory)unit)
在上一个笔记中你已经学了GRU(门控循环单元)。它能够让你可以在序列中学习非常深的连接。其他类型的单元也可以让你做到这个,比如LSTM即长短时记忆网络,甚至比GRU更加有效,让我们看看。
这里是上个笔记中的式子,对于GRU我们有a^(
还有两个门:
更新门Γ_u(the update gate)
相关门Γ_r(the relevance gate)
̃c^(
LSTM是一个比GRU更加强大和通用的版本,这多亏了 Sepp Hochreiter和 Jurgen Schmidhuber,感谢那篇开创性的论文,它在序列模型上有着巨大影响。感觉这篇论文是挺难读懂的,虽然我认为这篇论文在深度学习社群有着重大的影响,它深入讨论了梯度消失的理论,我感觉大部分的人学到LSTM的细节是在其他的地方,而不是这篇论文。
这就是LSTM主要的式子(上图编号2所示),我们继续回到记忆细胞c上面来,使用̃c^(
注意了,在LSTM中我们不再有a^(
虽然你可以使用LSTM的变体,然后把这些东西(左边所示的GRU公式)都放回来,但是在更加典型的LSTM里面,我们先不那样做。
我们像以前那样有一个更新门Γ_u和表示更新的参数W_u,Γ_u=σ(W_u [a^(
然后这里(上图编号7所示)用遗忘门(the forget gate),我们叫它Γ_f,所以这个Γ_f=σ(W_f [a^(
然后我们有一个新的输出门,Γ_o=σ(W_o [a^(
于是记忆细胞的更新值c^(
所以这给了记忆细胞选择权去维持旧的值c^(
然后这个表示更新门(Γ_u=σ(W_u [a^(
遗忘门(Γ_f=σ(W_f [a^(
最后a^(
再提一下,这些式子就是控制LSTM行为的主要的式子了(上图编号1所示)。像之前一样用图片稍微解释一下,先让我把图画在这里(上图编号2所示)。如果图片过于复杂,别担心,我个人感觉式子比图片好理解,但是我画图只是因为它比较直观。
这个右上角的图的灵感来自于Chris Ola的一篇博客,标题是《理解LSTM网络》(Understanding LSTM Network),这里的这张图跟他博客上的图是很相似的,但关键的不同可能是这里的这张图用了a^(
这里其中一个元素很有意思,如你在这一堆图(上图编号8所示的一系列图片)中看到的,这是其中一个,再把他们连起来,就是把它们按时间次序连起来,这里(上图编号9所示)输入x^(<1>),然后x^(<2>),x^(<3>),然后你可以把这些单元依次连起来,这里输出了上一个时间的a,a会作为下一个时间步的输入,c同理。
在下面这一块,我把图简化了一下(相对上图编号2所示的图有所简化)。然后这有个有意思的事情,你会注意到上面这里有条线(上图编号10所示的线),这条线显示了只要你正确地设置了遗忘门和更新门,LSTM是相当容易把c^(<0>)的值(上图编号11所示)一直往下传递到右边,比如c^(<3>)=c^(<0>)(上图编号12所示)。
这就是为什么LSTM和GRU非常擅长于长时间记忆某个值,对于存在记忆细胞中的某个值,即使经过很长很长的时间步。
这就是LSTM,你可能会想到这里和一般使用的版本会有些不同,最常用的版本可能是门值不仅取决于a^(
如你所见LSTM主要的区别在于一个技术上的细节,比如这(上图编号13所示)有一个100维的向量,你有一个100维的隐藏的记忆细胞单元,然后比如第50个c^(
LSTM前向传播图:
LSTM反向传播计算:
门求偏导:
参数求偏导 :
为了计算db_f,db_u,db_c,db_o 需要各自对dΓ_f^(⟨t⟩),dΓ_u^(⟨t⟩),d̃c^(⟨t⟩),dΓ_o^(⟨t⟩) 求和。
最后,计算隐藏状态、记忆状态和输入的偏导数:
这就是LSTM,我们什么时候应该用GRU?什么时候用LSTM?这里没有统一的准则。
而且即使先讲解了GRU,在深度学习的历史上,LSTM也是更早出现的,而GRU是最近才发明出来的,它可能源于Pavia在更加复杂的LSTM模型中做出的简化。研究者们在很多不同问题上尝试了这两种模型,看看在不同的问题不同的算法中哪个模型更好,所以这不是个学术和高深的算法,我才想要把这两个模型展示给你。
GRU的优点是这是个更加简单的模型,所以更容易创建一个更大的网络,而且它只有两个门,在计算性上也运行得更快,然后它可以扩大模型的规模。
但是LSTM更加强大和灵活,因为它有三个门而不是两个。
如果你想选一个使用,我认为LSTM在历史进程上是个更优先的选择,所以如果你必须选一个,我感觉今天大部分的人还是会把LSTM作为默认的选择来尝试。虽然我认为最近几年GRU获得了很多支持,而且感觉越来越多的团队也正在使用GRU,因为它更加简单,而且还效果还不错,它更容易适应规模更加大的问题。
所以这就是LSTM,无论是GRU还是LSTM,你都可以用它们来构建捕获更加深层连接的神经网络。
(Hochreiter S, Schmidhuber J. Long Short-Term Memory[J]. Neural Computation, 1997, 9(8):1735-1780.)
閱讀更多 極客Array 的文章