Seq2Seq和Attention机制详解

一、Seq2Seq简介

seq2seq模型最早可追溯到2014年的两篇paper [1, 2],主要用于机器翻译任务(MT)。
seq2seq 是一个Encoder–Decoder 结构的网络,它的输入是一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。
由于encoder与decoder两端处理的都是序列数据,所以被称为sequence-to-sequence,简称seq2seq。另外,目前应用最多的编/解码器是RNN(LSTM,GRU),但编/解码器并不限于RNN,如也有人拿MLP作为编码器。
paper[1, 2]的主要结构如下图:
在这里插入图片描述
Seq2Seq模型对于短文本的翻译来说效果很好,但是其也存在一定的缺点,如果文本稍长一些,就很容易丢失文本的一些信息,为了解决这个问题,Attention应运而生。

二、Seq2Seq with Attention

attention模型最早出现于cv领域,而首次用于解决nlp问题是在2014年[3],seq2seq+attention 应用于机器翻译任务。以英译汉为例,当解码器对英文进行解码时,是一个词一个词生成的,而所生成的每个词对应的英文部分应该是不同,换句话说就是,解码器解码时不同step所分配的注意力是不同的。 再举一个例子,如看图说话(用一句话描述一幅图),所生成的词语应该对应图中的不同部分,即解码器在解码时,应该给图中“合适”的部位,分配更多的注意力(权重)

paper[3]的主要结构如下图:
在这里插入图片描述
红圈标识的是编码器,其中h代表源文本的语义表示;紫圈标识的解码器,其中s代表目标文本的序列状态。c表示注意力向量,用来在解码时,控制源文本不同位置的attention分配。
Seq2Seq Attention
公式
(7) p ( y t ∣ y &lt; t , x ) = s o f t m a x ( W s s ^ t ) p(y_t|y_{&lt;t},x)=softmax(W_s\hat s_t) p(yty<t,x)=softmax(Wss^t),计算最后的输出概率。
(以上的步骤是luong在paper[4]里改良的decoder计算方式,paper[3]中在计算中加入了 c t c_t ct})

Attention扩展

luong在paper[4] 提出了一种attention改良方案,将attention划分为了两种形式:global, local.
global方式认为attention应该在所有源文本上进行,而local方式认为attention仅应该在部分源文本上进行。global理念与paper[3]相同,具体计算方式如下图所示:
在这里插入图片描述
其中“concat” 与 paper[3] 中的计算方式相同。
第一种:dot
在这里插入图片描述

输入是encoder的所有hidden states H: 大小为 (hid dim, sequence length) 。decoder在一个时间点上的hidden state, s: 大小为 (hid dim, 1)

第一步:旋转H为(sequence length, hid dim) 与s做点乘得到一个 大小为(sequence length, 1)的分数。

第二步:对分数做softmax得到一个合为1的权重

第三步:将H与第二步得到的权重做点乘得到一个大小为(hid dim, 1)的context vector。

第二种:general
在这里插入图片描述
输入是encoder的所有hidden states H: 大小为 (hid dim1, sequence length) 。decoder在一个时间点上的hidden state, s: 大小为 (hid dim2, 1)。此处两个hidden state的纬度并不一样。

第一步:旋转H为(sequence length, hid dim1) 与 Wa 大小为[ hid dim1, hid dim 2)] 做点乘, 再和s做点乘得到一个 大小为(sequence length, 1)的分数。

第二步:对分数做softmax得到一个合为1的权重。

第三步:将H与第二步得到的权重做点乘得到一个大小为(hid dim, 1)的context vector。

需要注意的地方

  • decoder 端的stst初始化: s 0 = t a n h ( W h b 1 ) s_0=tanh(Wh^1_b) s0=tanh(Whb1), 取encoder的反向RNN的初态的非线性,作为decoder的初态
  • teacher forcing模式与测试时(生成模式)不同,所以训练过程不能完全都用teacher forcing,teacher forcing 与 生成模式应按比例分配
  • beamsearch 只是在测试的时候用到
  • 如果encoder 与 decoder 的序列都很长,显存装不下。可考虑对decoder端进行截断,分步优化(pytorch中 使用 state = state.detach())
  • coding时,尽量别用for循环,会极大降低计算效率

总结

Attention与传统的Seq2Seq模型主要有以下两点不同:

  • encoder提供了更多的数据给到decoder,encoder会把所有的节点的hidden state提供给decoder,而不仅仅只是encoder最后一个节点的hidden state 。
  • decoder并不是直接把所有encoder提供的hidden state作为输入,而是采取一种选择机制,把最符合当前位置的hidden state选出来,具体的步骤如下:
    • 确定哪一个hidden state与当前节点关系最为密切;
    • 计算每一个hidden state的分数值;
    • 对每个分数值做一个softmax的计算,这能让相关性高的hidden state的分数值更大,相关性低的hidden state的分数值更低。

计算细节汇总如下:
p ( y t ∣ y &lt; t , x ) = s o f t m a x ( W s s ^ t   ) p(y_t|y&lt;t,x)=softmax(W_s\hat s_t~) p(yty<t,x)=softmax(Wss^t )
s ^ t   = t a n h ( W c [ c t ; s t ] ) \hat s_t~=tanh(W_c[c_t;s_t]) s^t =tanh(Wc[ct;st])
s t = f d ( y t − 1 , s t − 1 ) s_t=f_d(y_{t−1},s_{t−1}) st=fd(yt1,st1)
c t = ∑ α t j h j c_t=∑α_{tj}h_j ct=αtjhj
α i j = s o f t m a x ( e i j ) α_{ij}=softmax(e_{ij}) αij=softmax(eij)
e t j = a ( s t − 1 , h j ) = v a T t a n h ( W s t − 1 + U h j ) e_{tj}=a(s_{t−1},h_j)=v^T_atanh(Ws_{t−1}+Uh_j) etj=a(st1,hj)=vaTtanh(Wst1+Uhj)
h t = f e ( x t , h t − 1 ) h_t=f_e(x_t,h{t−1}) ht=fe(xt,ht1) 注: f e f_e fe 可使用LSTM, GRu, Bi-LSTM 等

参考文献:

[1] Sutskever I, Vinyals O, Le Q V. Sequence to sequence learning with neural networks[C]//Advances in neural information processing systems. 2014.
[2] Cho K, Van Merriënboer B, Gulcehre C, et al. Learning phrase representations using RNN encoder-decoder for statistical machine translation[J]. arXiv, 2014.
[3] Bahdanau D, Cho K, Bengio Y. Neural machine translation by jointly learning to align and translate[J]. arXiv, 2014. & ICLR, 2015.
[4] Luong M T, Pham H, Manning C D. Effective approaches to attention-based neural machine translation[J]. arXiv, 2015.

参考网址:

真正的完全图解Seq2Seq Attention模型(非常好)
seq2seq + attention 详解(非常好)
Attention机制详解(有动图)
【机器学习】【seq2seq模型与attention机制,Beam Search】
【论文笔记】Effective Approaches to Attention-based Neural Machine Translation

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Seq2Seq-Attention模型是一种结合了序列到序列(seq2seq)模型和注意力机制的网络模型。它最早用于机器翻译任务,可以将一个可变长度的输入序列转换为一个固定长度的向量表示,然后再将这个向量表示转换为一个可变长度的输出序列。\[2\] 在传统的seq2seq模型中,当输入序列较长时,往往会丢失一些重要的信息。为了解决这个问题,Attention机制被引入。Attention机制可以使模型在生成输出序列的过程中,对输入序列的不同部分分配不同的注意力权重,从而更加关注输入序列中与当前输出相关的部分。这样,模型可以更好地捕捉到输入序列中的重要信息,提高翻译的准确性和流畅性。\[3\] 在Seq2Seq-Attention模型中,注意力机制的引入使得模型能够更好地处理时间序列数据。通过对输入序列中不同时间步的信息进行加权,模型可以更好地理解序列中的时序关系,并在生成输出序列时更准确地预测下一个时间步的值。这使得Seq2Seq-Attention模型在时间序列预测任务中表现出色。\[1\] 总结起来,Seq2Seq-Attention模型是一种结合了序列到序列模型和注意力机制的网络模型,它可以更好地处理时间序列数据,并在时间序列预测任务中取得较好的效果。 #### 引用[.reference_title] - *1* [keras seq2seq_在Keras中建立具有Luong注意的Seq2Seq LSTM以进行时间序列预测](https://blog.csdn.net/weixin_26752765/article/details/108132790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Seq2SeqAttention机制详解](https://blog.csdn.net/vivian_ll/article/details/89227812)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值