从seq2seq到transformer机制的探索
传统的seq2seq模型本质上是一个encoder-decoder结构,编码器和解码器两部分内部使用rnn网络,编码器和解码器中间通过语义变量相连接。
这样做的目的是通过编码器将整个序列数据的信息编码成一个语义变量,然后解码器通过语义变量和前一个时刻解码器的输出来得到当前时刻的输出。传统的seq2seq模型有以下两种结构区别在于解码器如何使用语义变量。


但是传统的seq2seq模型中的编码器会将序列中所有时刻的序列数据转化为一个固定长度的语义变量,然后对于不同时刻的输出编码器共用同一个语义变量。这就会导致如下问题:
1 对于不同长度的序列数据全部有损压缩成固定长度的语义变量,对于较长的序列数据,压缩必然会损失大量信息。
2 将不同时刻的序列数据转化为一个语义变量,对于编码器和解码器来说,无法并行计算。
3 编码器将不同时刻的序列数据转化为一个语义变量并传递给解码器,对于解码器来说,每一个时刻共用同一个语义变量,输入没有针对性,必然会造成输入的冗余和信息损失。
注意力机制
注意力机制的目的是为了克服encoder对任意句子只能输出一个固定长度的表征,而这个表征在遇到长句子时则显得包含信息不够。
引入注意力机制的seq2seq模型会在根据解码器当前的位置对编码器时刻的输出编码器和解码器之间生成的多个语义变量,这样一来每一个时刻对应的语义变量能够更加有针对性的保存当前时刻的语义信息。语义变量的数量会随着序列长度的增加而增加,这就避免了较长的序列数据所产生的数据丢失问题,
对于每一个时刻,注意力机制首先会根据解码器当前的计算位置计算编码器不同时刻的输出对于当前数据的影响的权重,然后根据计算得到的权重不同时刻编码器得到的输出进行加权就和,从而得到解码器当前时刻对应的语义变量。

浙公网安备 33010602011771号