(CS231n)RNN,LSTM,GRU总结
导语
-
Stanford 课程
一、 RNN介绍
<img style=“border-radius: 0.3125em;src=“https://colah.github.io/posts/2015-08-Understanding-LSTMs/img/RNN-rolled.png””>
RNN 应用类型
1)one to one
Vanilla mode of processing without RNN, from fixed-sized input to fixed-sized output (例如 图像分类)
2)one to many
Sequence output (例如 image captioning 输入一张图片,输出一段语句)
3)many to one
Sequence input (例如 sentiment analysis 输入一段话,分类是积极地还是消极的)
4)many to many
Sequence input and Sequence output (例如 机器翻译:读入一段英语,翻译出一段法语)
5)many to many
Synced sequence input and output (例如 给视频的每一帧分类)
二、 长期依赖问题(Long-Term Dependencies)
随着间隔的不断增大,RNN会出现“梯度消失”或“梯度爆炸现象”,这就是RNN的长期依赖问题。
然而,幸运的是,LSTM没有这个问题。
三、 LSTM网络
-
输入门(Input Gate)
-
遗忘门(Forgetr Gate)
-
输出们(Output Gate)
**(1)遗忘门 **
该门会读取ht-1和xt的信息,通过sigmoid层输出一个介于0 到 1 之间的数值,作为给每个在细胞状态Ct-1中的数字,0 表示“完全舍弃”,1 表示“完全保留”。
(2)输入门
下一步是确定什么样的新信息被存放在细胞状态中。这里包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,Ct,会被加入到状态中。下一步,我们会讲这两个信息来产生对状态的更新。
现在来更新旧细胞的状态,由Ct-1更新为Ct,更新方式为:(1)把旧状态Ct-1与ft相乘(回顾一下,ft就是遗忘门,输出遗忘程度,即0到1之间的值),丢弃掉需要丢弃的信息(如遗忘门输出0,则相乘后变成0,该信息就被丢弃了);(2)然后再加上it与候选值相乘(计算公式见上图)。这两者合并后就变成一个新的候选值。
(3) 输出门(Output Gate)
最后我们要确定输出什么值,首先,通过一个sigmoid层来确定细胞状态的哪个部分将要输出出去,接着,把细胞状态通过 tanh 进行处理(得到一个介于-1到1之间的值)并将它和 sigmoid的输出结果相乘,最终将会仅仅输出我们需要的那部分信息。
四、 LSTM的变体
- Peephole connection
上面的图例中,我们增加了 peephole 到每个门上,但是许多论文会加入部分的 peephole 而非所有都加。
- coupled 忘记和输入门
不同于之前是分开确定什么忘记和需要添加什么新的信息,这里是一同做出决定。我们仅仅会当我们将要输入在当前位置时忘记。我们仅仅输入新的值到那些我们已经忘记旧的信息的那些状态 。
- Gated Recurrent Unit(GRU)
它将忘记门和输入门合成了一个单一的 更新门。同样还混合了细胞状态和隐藏状态,和其他一些改动。最终的模型比标准的 LSTM 模型要简单,也是非常流行的变体。
五、总结
LSTM在RNN中获得重要成功。
哪里会有更加重大的突破?====注意力机制