【DL小结4】seq2seq与attention机制
seq2seq概述
seq2seq模型是以编码(Encode)和解码(Decode)为代表的架构方式,顾名思义是根据输入序列X来生成输出序列Y。encode意思是将输入序列转化成一个固定长度的向量(语义向量,context vector),decode意思是将语义向量解码成输出序列。
编码阶段
纯粹的RNN/LSTM/GRU
解码阶段
由上图可以发现Seq2seq中Decoder的公式和RNN基本一样,差別只在于Decoder多了一个语义向量C 。
目标函数
seq2seq存在的问题
在Seq2seq模型中,Encoder将输入句子压缩成固定长度的语义向量,如果句子很长,效果就会不好。
Attention机制
Attention model 用来帮助解決seq2seq在句子过长时效果不佳的问题。
相比于之前的encoder-decoder模型,attention模型最大的区别就在于它不再要求编码器将所有输入信息都编码进一个固定长度的向量中。而是替输入句的每个文字都创造一个语义向量,好处是每个语义向量能够被更有效的解码。
如何计算每个语义向量
每个语义向量 是由编码时的隐藏向量序列按权重相加得到的。权重的值越高,表示第i个输出在第j个输入上分配的注意力越多,在生成第i个输出的时候受第j个输入的影响也就越大。
Attention model的关键:
由固定的中间语义表示c换成了根据当前输出单词来调整成加入注意力模型的变化的
如何权重
Attention model存在的问题
- 不能平行化
- 忽略了输入句中文字间和目标句中文字间的关系。
参考教程
- Seq2seq pay Attention to Self Attention: Part 1(中文版)
https://medium.com/@bgg/seq2seq-pay-attention-to-self-attention-part-1-中文版-2714bbd92727 - 深度学习之seq2seq模型以及Attention机制 - hank的DL之路 - 博客园
https://www.cnblogs.com/DLlearning/p/7834018.html