Seq2Seq Attention模型

seq2seq 是一个Encoder–Decoder 结构的网络,它的输入一个序列,输出也是一个序列, Encoder 中将一个可变长度的信号序列变为固定长度的向量表达,Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。(seq2seq实现的方法有很多,比如MLP,CNN,RNN等)


编码器: 可变长度的输入序列------------->固定长度的向量

解码器: 固定长度的向量------------------->可变长度的目标序列

                       

 

 (7)

            

                                                  encoder                                                                              decoder

                                                                            

以上图为例,

Encoder用的是是双向RNN,当RNN单元循环回来的时候都会有一个输出给了你将要翻译的词对应的attend,而此时肯定是它的最下方的词应该是注意力最集中的,所以它对应的权重肯定是最大的。

 

这里的权重分配公式为:

 

640?wx_fmt=png

从最上面下来的是640?wx_fmt=png640?wx_fmt=png是第j个Encoder隐层出来的记忆单元。

 

所有的分打出来后,要做下归一化:

640?wx_fmt=png

这个跟Softmax差不多。

 

然后对他们进行求和传送给640?wx_fmt=png

640?wx_fmt=png

 

这个注意力机制大大提高了机器翻译的能力当然也包括其他的领域。

 

   

                      

 

从左边Encoder开始,输入转换为word embedding, 进入LSTM。LSTM会在每一个时间点上输出hidden states。如图中的h1,h2,...,h8。

 

 

 

Decoder的hidden state与Encoder所有的hidden states作为输入,放入Attention模块开始计算一个context vector。之后会介绍attention的计算方法。

接下来进入右侧Decoder,输入为(1) 句首 <sos>符号,原始context vector(为0),以及从encoder最后一个hidden state: h8。LSTM的是输出是一个hidden state。(当然还有cell state,这里没用到,不提。)

Decoder的hidden state与Encoder所有的hidden states作为输入,放入Attention模块开始计算一个context vector。之后会介绍attention的计算方法。

下一个时间点

来到时间点2,之前的context vector可以作为输入和目标的单词串起来作为lstm的输入。之后又回到一个hiddn state。以此循环。

 

另一方面,context vector和decoder的hidden state合起来通过一系列非线性转换以及softmax最后计算出概率。

在luong中提到了三种score的计算方法。这里图解前两种:

Attention score function: 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。

 

Attention score function: 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。

 

完结

看懂一个模型的最好办法就是在心里想一遍从输入到模型到输出每一个步骤里,tensor是如何流动的。

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值