GRU,LSTM

总结自吴恩达老师的网易深度学习工程师微专业

  • 介绍GRU之前,首先我们先直观的理解一下梯度消失(Gradient Vanishing)问题。

RNN在NLP中具有很大的应用价值,但是其存在一个很大的缺陷,那就是梯度消失的问题。例如下面的例句中:
The cat, which already ate …,was full;
The cats, which already ate …,were full.
在这两个句子中,cat对应着was,cats对应着were,(中间存在很多很长省略的单词),句子中存在长期依赖(long-term dependencies),前面的单词对后面的单词有很重要的影响。但是我们目前所见到的基本的RNN模型,是不擅长捕获这种长期依赖关系的。
和基本的深度神经网络结构类似,输出 y y y得到的梯度很难通过反向传播再传播回去,也就是很难对前面几层的权重产生影响,所以RNN也有同样的问题,也就是很难让网络记住前面的单词是单数或者复数,进而对后面的输出产生影响。
对于梯度消失问题,在RNN的结构中是我们首要关心的问题,也更难解决; 虽然梯度爆炸在RNN中也会出现,但对于梯度爆炸问题,因为参数会指数级的梯度,会让我们的网络参数变得很大,得到很多的Nan或者数值溢出,所以梯度爆炸是很容易发现的,我们的解决方法就是用梯度修剪(gradient clipping),也就是观察梯度向量,如果其大于某个阈值,则对其进行缩放,保证它不会太大。

1. GRU

  • 一个包含一个更新门 Γ u \Gamma_u Γu的GRU简化版本如下图示:
    在这里插入图片描述
    公式如下:
    c ~ &lt; t &gt; = t a n h ( W c [ c &lt; t − 1 &gt; , x &lt; t &gt; ] + b c ) \tilde c^{&lt;t&gt;}=tanh(W_c[c^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_c) c~<t>=tanh(Wc[c<t1>,x<t>]+bc)
    Γ u = σ ( W u [ c &lt; t − 1 &gt; , x &lt; t &gt; ] + b u ) \Gamma_u=\sigma(W_u[c^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_u) Γu=σ(Wu[c<t1>,x<t>]+bu)
    c &lt; t &gt; = Γ u ∗ c ~ &lt; t &gt; + ( 1 − Γ u ) ∗ c &lt; t − 1 &gt; c^{&lt;t&gt;}=\Gamma_u*\tilde c^{&lt;t&gt;}+(1-\Gamma_u)*c^{&lt;t-1&gt;} c<t>=Γuc~<t>+(1Γu)c<t1>
  • 完整的GRU单元存在着 Γ u , Γ r \Gamma_u, \Gamma_r Γu,Γr两个门,决定着每个时间步的候选值,图示如下:
    在这里插入图片描述
    公式如下:
    Γ r = σ ( W r [ c &lt; t − 1 &gt; , x &lt; t &gt; ] + b r ) \Gamma_r=\sigma(W_r[c^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_r) Γr=σ(Wr[c<t1>,x<t>]+br)
    c ~ &lt; t &gt; = t a n h ( W c [ Γ r ∗ c &lt; t − 1 &gt; , x &lt; t &gt; ] + b c ) \tilde c^{&lt;t&gt;}=tanh(W_c[\Gamma_r*c^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_c) c~<t>=tanh(Wc[Γrc<t1>,x<t>]+bc)
    Γ u = σ ( W u [ c &lt; t − 1 &gt; , x &lt; t &gt; ] + b u ) \Gamma_u=\sigma(W_u[c^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_u) Γu=σ(Wu[c<t1>,x<t>]+bu)
    c &lt; t &gt; = Γ u ∗ c ~ &lt; t &gt; + ( 1 − Γ u ) ∗ c &lt; t − 1 &gt; c^{&lt;t&gt;}=\Gamma_u*\tilde c^{&lt;t&gt;}+(1-\Gamma_u)*c^{&lt;t-1&gt;} c<t>=Γuc~<t>+(1Γu)c<t1>

2. LSTM

GRU能够让我们在序列中学习到更深的联系,LSTM(long short-term memory)对捕捉序列中更深层次的联系要比GRU更加有效,当然也更复杂。
LSTM中,使用了单独的更新门 Γ u Γ_u Γu和遗忘门 Γ f Γ_f Γf,以及一个输出门 Γ o Γ_o Γo,LSTM单元的可视化图如下所示:
引自Andrew Ng老师
c ~ &lt; t &gt; = t a n h ( W c [ a &lt; t − 1 &gt; , x &lt; t &gt; ] + b c ) \tilde c^{&lt;t&gt;}=tanh(W_c[a^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_c) c~<t>=tanh(Wc[a<t1>,x<t>]+bc)
Γ u = σ ( W u [ a &lt; t − 1 &gt; , x &lt; t &gt; ] + b u ) \Gamma_u=\sigma(W_u[a^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_u) Γu=σ(Wu[a<t1>,x<t>]+bu)
Γ f = σ ( W f [ a &lt; t − 1 &gt; , x &lt; t &gt; ] + b f ) \Gamma_f=\sigma(W_f[a^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_f) Γf=σ(Wf[a<t1>,x<t>]+bf)
Γ o = σ ( W o [ a &lt; t − 1 &gt; , x &lt; t &gt; ] + b o ) \Gamma_o=\sigma(W_o[a^{&lt;t-1&gt;},x^{&lt;t&gt;}]+b_o) Γo=σ(Wo[a<t1>,x<t>]+bo)
c &lt; t &gt; = Γ u ∗ c ~ &lt; t &gt; + Γ f ∗ c &lt; t − 1 &gt; c^{&lt;t&gt;}=\Gamma_u*\tilde c^{&lt;t&gt;}+\Gamma_f*c^{&lt;t-1&gt;} c<t>=Γuc~<t>+Γfc<t1>
a &lt; t &gt; = Γ o ∗ t a n h ( c &lt; t &gt; ) a^{&lt;t&gt;}=\Gamma_o*tanh(c^{&lt;t&gt;}) a<t>=Γotanh(c<t>)
在实际使用时,几个门值不仅仅取决于 a &lt; t − 1 &gt; a^{&lt;t-1&gt;} a<t1> x &lt; t − 1 &gt; x^{&lt;t-1&gt;} x<t1> ,还可能会取决于上一个记忆细胞的值 c &lt; t − 1 &gt; c^{&lt;t-1&gt;} c<t1> ,这也叫做peephole connection。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值