LSTM和GRU cs224n

https://zhuanlan.zhihu.com/p/28297161 (图解LSTM和GRU清晰)
通过机器翻译来介绍LSTM和GRU

传统做法

需要的两个平行语料库,然后基于统计分析的模型
在这里插入图片描述
这种方法是很难的,因为涉及到多对多以及很多的句法对齐。如果很容易就不会由后面的改进了。
这里他提出了一个思想我觉得很重要:
end-to-end model: 这还只是传统机器翻译系统的冰山一角,有许多细节没有涉及到,还需要大量的人肉特征工程,总之是非常复杂的系统。其中每个环节都是独立不同的机器学习问题。这些独立的模型各自为政,并不以一个统一的优化目标为最终目标。

而深度学习则提供了一个统一的模型,一个统一的最终目标函数。在优化目标函数的过程中,得到一个end to end的完整的joint模型。传统机器翻译系统与深度学习是截然相反的,对齐模型、词序模型、语言模型……一堆独立的模型无法联合训练。

RNN

在这里插入图片描述
红圈所示特征表示必须能捕捉整个原文短语的语义,但是RNN无法记住太久之前的事情,大概五六个单词就到极限了。所以这不是个实用的模型。(因为梯度弥散)
上图中:
Encoder是:
h t = ϕ ( h t − 1 , x t ) = f ( W ( h h ) h t − 1 + W ( h x ) x t ) h_t = \phi (h_{t-1}, x_t) = f (W^{(hh)} h_{t-1} + W^{(hx)} x_t) ht=ϕ(ht1,xt)=f(W(hh)ht1+W(hx)xt)
Decoder是:
e q u a t i o n h t = ϕ ( h t − 1 ) = f ( W ( h h ) h t − 1 ) {equation} h_t = \phi (h_{t-1}) = f (W^{(hh)} h_{t-1}) equationht=ϕ(ht1)=f(W(hh)ht1)
y t = s o f t m a x ( W ( S ) h t ) y_t = softmax (W^{(S)}h_t) yt=softmax(W(S)ht)
最小化所有训练实例上的交叉熵误差:
max ⁡ θ 1 N ∑ n = 1 N log ⁡ p θ ( y ( n ) ∣ x ( n ) ) \max_{\theta} \dfrac {1}{N} \sum_{n=1}^{N} \log p_{\theta} (y^{(n)}|x^{(n)}) θmaxN1n=1Nlogpθ(y(n)x(n))
如何终止decoder:softmax分类器会中有个代表句子终止的类。

拓展

  1. train different weights for encoding and decoding
  2. compute every hidden state in decoder from:
  • 前一个时刻的隐藏层
  • encoder的最后一个隐藏层(c=hT)
  • 前一个预测结果 y t − 1 y_{t−1} yt1(为了避免不要出现重复的词)
    3、使用深度RNN
    4、使用 bi-directional encoder(这跟逆序训练的意思差不多)
    优点:
    end-to-end
    我们不需要给真正的语法,而是让模型去capture grammar
    缺点:
    它没有办法重新调整次序,也没有办法记忆encoder中的前面的词。

其中第2点的示意图:
在这里插入图片描述在这里插入图片描述
第3点的示意图:
在这里插入图片描述

GRU(Gated Recurrent Units)

其主要特点:

  • 模型学习何时遗忘从而将记忆保持很久
  • 允许误差根据输入的不同而不同。
    其主要公式如下
    update gate:
    z t = σ ( W ( z ) x t + U ( z ) h t − 1 ) z_t=\sigma\left(W^{(z)}x_t+U^{(z)}h_{t-1}\right) zt=σ(W(z)xt+U(z)ht1)
    reset gate:
    r t = σ ( W ( r ) x t + U ( r ) h t − 1 ) r_t=\sigma\left(W^{(r)}x_t+U^{(r)}h_{t-1}\right) rt=σ(W(r)xt+U(r)ht1)
    new memory content:
    h ~ t = tanh ⁡ ( r t ∘ U h t − 1 + W x t ) \tilde{h}_{t} = \operatorname{tanh}(r_{t}\circ Uh_{t-1} + Wx_{t} ) h~t=tanh(rtUht1+Wxt)
    finale content:
    h t = ( 1 − z t ) ∘ h ~ t + z t ∘ h t − 1 h_{t} = (1 - z_{t}) \circ \tilde{h}_{t} + z_{t} \circ h_{t-1} ht=(1zt)h~t+ztht1
    这里的意思是,之前的记忆由reset gate控制,如果reset gate元素都是0,则遗忘之前的事情。比如电影评论的情感分析,“有个文艺的少男爱死了一个平凡的少女,这个平凡的少女也爱死了那个文艺的少男,可两个人就是无法相会巴拉巴拉,真是个无聊的电影”。无论前面说了多少话,起决定性作用的可能就是“无聊”这个词。那么一些GRU可能会说,我遇到了一个情感强烈的词语,我不想让它被之前的记忆冲淡(求和),所以我把reset gate设为0,之前的记忆不起作用,把这个情感词汇写成新的记忆。
    而update gate的作用是调节最后的更新,到底时刻t的记忆多少来自之前,多少来自当前。

我一开始以为这个图解释的很清楚,但是原来gate的作用是连续的不是0/1的。
在这里插入图片描述

LSTM(Long-Short-Term-Memories)

LSTM与GRU动机相似,只不过单元结构有点不同。GRU的单元结构如下:
在这里插入图片描述
LSTM单元结构如下:
在这里插入图片描述
在这里插入图片描述
自己的理解:

GRULSTM
update gate调节上一层输出与当前层输出的权重,即其各自的重要程度
reset gate调节上一层输出在当前词的权重(注意层与词的区别)
input gate调节当前词的权重
forget gate分离机制,调节上一层输出的权重
output gate用来gate记忆的tanh激活值,实际上跟updategate一样
new memory generation正常的RNN操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值