Keras(三十一)seq2seq+attention模型理论

38 篇文章 2 订阅
35 篇文章 11 订阅

一,原始seq2seq模型

1,seq2seq模型的本质

seq2seq属于encoder-decoder 结构的一种,这里看看常见的encoder-decoder结构,也就是编码-解码模型。基本思想就是利用两个RNN,一个RNN作为encoder,另一个RNN作为decoder

2,encoder

encoder负责将输入序列压缩成指定长度的向量, 这个向量就可以看成是这个序列的语义,这个过程称为编码,如下图,获取语义向量最简单的方式就是直接将最后一个输入的隐状态作为语义向量C。 也可以对最后一个隐含状态做一个变换得到语义向量,还可以将输入序列的所有隐含状态做一个变换得到语义变量。
在这里插入图片描述

3,decoder

decoder则负责根据语义向量生成指定的序列,这个过程也称为解码, 如下图,最简单的方式是将encoder得到的语义变量作为初始状态输入到decoder的RNN中,得到输出序列。可以看到上一时刻的输出会作为当前时刻的输入,而且其中语义向量C只作为初始状态参与运算,后面的运算都与语义向量C无关。
在这里插入图片描述

4,seq2seq中Encoder-Decoder结构

seq2seq 作为 2015 - 2016 年较为流行的机器翻译模型,如下入所示,seq2seq模型包含 Encoder和Decoder两部分,分别为RNN模型或LSTM等其变种等模型,Encoder输出S隐含状态,该隐藏状态和初始值NULL一同输入到Docoder模型中,作为Docoder的输入值。
在这里插入图片描述

5,原始seq2seq的缺点

当编码长度越长,前面离隐藏状态远的信息就会被稀释,这样的状态就不能被保存在隐藏状态S中,会影响翻译的质量。

详细信息:https://baijiahao.baidu.com/s?id=1650496167914890612

二,基于attention的seq2seq模型

1,模型结构
a,encoder_outputs

Enoder中每一步的输出都属于encoder_outputs

b,hidden_state

Decoder中每一步的输出都属于hidden_state

c,context_vector

Decoder中每一步的hidden_state去和encoder_ouputs计算attetion,attetion是一个向量,代表着权重,Encoder中的encoder_outputs的元素个数应该和attetion向量的长度相等,attention向量中的每一个都代表着Encoder输出的权重。attetion权重和encoder_outputs做加权求和,得到了一个context_vector,再将context_vector和input一起输入给每一步的Decoder做词语的生成,生成后下一步的hidden_state再和encoder_outputs计算attetion权重,并做加权求和得到context_vector,和input输入给下一步的Decoder,以此类推。
在这里插入图片描述

2,计算模型
a,计算符号

在这里插入图片描述

b,attention权重sore的计算

在这里插入图片描述
注:

  • 1, 在Babdanau注意力计算sore中,因为EO是Encoder的多步结果,H为Decoder的某一部的结果,维度并不对应,tf会将H拷贝EO长度的份数,并分别和EO的每一个向量做加法运算。sore得到了一个和EO长度一样的一个向量。
  • 2,将得到的score代码softmax激活函数,得到0-1的数字,这是可以称之为权重。
  • 3,将得到的权重和EO做加权求和,得到一个context,此时EO是一个矩阵,attention_weights是一个向量,得到的context是一个向量。
  • 4,将context和经过enbding的x拼接到一起,输入给下一步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值