论文笔记:GRU----RNN Encoder-Decoder
<<Learning Phrase Representations using RNN Encoder–Decoderfor Statistical Machine Translation>>
这篇论文在传统的Encoder-Decoder模型上使用RNN,模型结构如下:
看图就知道要说什么了,亮点在于文章对隐层节点的创新:
先回顾下传统的 naive RNN:
看图就行,不多说。
再让我们回顾下传统的LSTM:
可以看到,
LSTM需要更新四组参数:分别是input gate 、forget gate 、 output gate 、还有对input内容进行处理的gate
更新方式如下:
OK,现在我们对比下LSTM和RNN:
我们可以将LSTM看成保存2组隐层信息的RNN,一组是C,一组是h。从C和h的更新公式来看,我们倾向于:
把C看成是不怎么容易改变的持久记忆;正是有了C,LSTM才可以克服长时间记忆的瓶颈。
而h看成改变的比较大的工作记忆。
好勒,那么 GRU又是什么呢?
如果用最简单的图来表示。我们倾向于表示成这样:
注意:这里的h 应该和LSTM里的C是比较类似的,也就是GRU保存的更多还是长期的记忆,因此和naive RNN相比也是可以克服长期记忆的瓶颈。
在具体点:
左下角是LSTM,右边是GRU。
从这张图我们可以看出GRU的一些结构:
为了突出参数的个数,我将不同组参数用不同的箭头颜色来表示
可以看到,传统的LSTM需要更新4组参数,而GRU只需要更新3组参数。这是GRU相较于LSTM一个很大的优势。
下面回归数学,看看GRU的更新方法:
GRU有两个门: Reset 门 和 Update门:
reset门:Reset主要用来决定是否要更新记忆库里的记忆h,当reset=0.将会将之前的记忆全部洗掉,=1则保留全部之前的记忆。也就是说,reset门允许hidden state去洗掉和未来工作无关的记忆,使得保留下来的长期记忆更加紧凑和有用。
也就是reset门通过 输入X和上一次的隐状态h_t-1来进行计算
update 门:Update控制了要从过去记忆中提取哪些记忆放到当前记忆中以及当前输入有多少需要放到记忆中。
计算方式和Reset一样
接着,我们注意下h‘的计算:
也就是说h’是通过当前输入X和通过reset门之后的记忆来计算的。
最后的h_t的公式为:
通过update门对h和h'同时进行操作得到最后结果。
注意到,论文给的公式都是具体到每一个hidden unit,rj zj hj等
由于每一个隐层单元都具有独立的reset门和update 门,使得不同隐层单元可以独立学会捕捉时间维度上的依赖关系:也就是说,那些用来捕捉短期记忆的单元将会使它的reset gate经常处于**状态。而那些偏向于保存长期的单元将会经常让update gate处于**状态,究竟哪些单元保存什么信息,交给机器在训练过程中学就行了。
可以看到,变换前后h_t-1和h_t的变化不会太大,因此同样可以保留大部分的长期记忆。还减少了参数,何乐而不为呢。
GG.