理解LSTM

注意:请先看解释GRU的博客,否则不容易看懂本文

1. 引入

GRU(门控循环单元)允许我们在序列学习中,学习非常深的连接。

其他类型的单元,也能做到这个效果,比如本文要讲的LSTM,它甚至比GRU的效果要好(更通用,更强大)。

下面是对GRU做的一个总结,需要深入了解的,可以先看(补充GRU博客链接)。

理解LSTM

2. LSTM

LSTM是长短记忆网络(Long Short Term Memory units),LSTM的发明者在paper中详细论述了梯度消失问题的根本以及解决方法。

个人感觉,LSTM和GRU是比较类似的。所以先看懂GRU,会更容易理解LSTM。

LSTM和GRU相比,有两个不同点(特点):

  1. 在LSTM中,a不等于c

  2. LSTM中,有两个门控

我们来看LSTM的式子(如下),Andrew NG说式子比流程图更容易理解,所以我们这里先讲式子,而大部分解释LSTM的文章,都是直接讲流程图的。

理解LSTM

下面对公式进行一个最简单的解释:

  1. 式(1)用于更新记忆细胞的值,会在式(5)中进行更新

  2. 式(2)(3)(4)是3个门值

  • update gate: 更新门
  • forgate gate: 遗忘门
  • output gate:输出门
  1. 式(5)中进行更新记忆细胞的值,更新时,会根据两个门值来进行(update gate和forgate gate)

  2. 式(6)计算本时刻的**函数输出值a,即下一时刻的输入

我们把这个图展开(这里展开了3个时刻)

理解LSTM

通过图中红色的线,我们可以发现,知道我们正确的设置了遗忘门(forget gate)和更新门(update gate),LSTM很容易把c<0>的值一直往下传递。比如c<0>可以一直传递到c<3>(c<3>=c<0>)。

从红色的这条线,就能发现,LSTM非常擅长长时间记忆某个值,即便经过了很长时间的传递。

3. 窥孔连接

上面2中讲述的LSTM,可能和其他某些资料中描述的LSTM有些不同(唯一的不同点,在下图公式中,用红色标注出来了)。

我们会发现,有些资料中讲述的LSTM,在输出门的计算上,还会考虑上一个时刻的记忆细胞c的值,这就是所谓“窥孔连接”(Peephole connection)。

理解LSTM

“窥孔连接”,就是说,门值不仅仅取决于a和x,还取决于上一个时刻记忆细胞的值。

4. 什么时候用GRU,什么时候用LSTM

关于什么时候用GRU,什么时候用LSTM,其实没有统一的准则。而且从深度学习历史上,我们要知道,LSTM是在GRU之前出现的。

GRU是源于在复杂情况下,对LSTM模型做出的简化。所以:

  1. GRU是个更简单的模型(相对于LSTM),所以用GRU更容易创建复杂网络,更容易适应规模更大的问题

  2. GRU只有两个门,所以在计算上也会比LSTM快

  3. LSTM会更加强大,因为它有3个门,而GRU只有2个

如果你在首次实验模型时,要从LSTM/GRU中选一个,目前大部分人还是会默认选择LSTM。但现在越来越多的团队也逐渐开始接受了GRU。

参考

  • [1] Andrew Ng, sequence model class