【DL小结4】seq2seq与attention机制

seq2seq概述

seq2seq模型是以编码(Encode)和解码(Decode)为代表的架构方式,顾名思义是根据输入序列X来生成输出序列Y。encode意思是将输入序列转化成一个固定长度的向量(语义向量,context vector),decode意思是将语义向量解码成输出序列。
【DL小结4】seq2seq与attention机制

编码阶段

纯粹的RNN/LSTM/GRU
【DL小结4】seq2seq与attention机制
【DL小结4】seq2seq与attention机制

解码阶段

【DL小结4】seq2seq与attention机制

【DL小结4】seq2seq与attention机制

由上图可以发现Seq2seq中Decoder的公式和RNN基本一样,差別只在于Decoder多了一个语义向量C 。

目标函数

【DL小结4】seq2seq与attention机制
【DL小结4】seq2seq与attention机制

seq2seq存在的问题

在Seq2seq模型中,Encoder将输入句子压缩成固定长度的语义向量,如果句子很长,效果就会不好
【DL小结4】seq2seq与attention机制

Attention机制

Attention model 用来帮助解決seq2seq在句子过长时效果不佳的问题

相比于之前的encoder-decoder模型,attention模型最大的区别就在于它不再要求编码器将所有输入信息都编码进一个固定长度的向量中。而是替输入句的每个文字都创造一个语义向量,好处是每个语义向量能够被更有效的解码。
【DL小结4】seq2seq与attention机制

如何计算每个语义向量

每个语义向量cic_i 是由编码时的隐藏向量序列(h1,,hTx)(h_1,…,h_{T_x})按权重相加得到的。权重αijα_{ij}的值越高,表示第i个输出在第j个输入上分配的注意力越多,在生成第i个输出的时候受第j个输入的影响也就越大。

Attention model的关键
由固定的中间语义表示c换成了根据当前输出单词来调整成加入注意力模型的变化的cic_i

【DL小结4】seq2seq与attention机制

如何权重αijα_{ij}

【DL小结4】seq2seq与attention机制

Attention model存在的问题

  • 不能平行化
  • 忽略了输入句中文字间和目标句中文字间的关系

参考教程