Transformer
arXiv:1706.03762
1.问题提出
Sequence-to-Sequence,输入是序列,输出也是序列,没有固定的数量关系,输出序列的数量是由模型决定的
解决seq2seq问题的基本的框架是Encoder-Decoder,以机器翻译作为例子直观理解
-
Encoder
编码器,接受输入语言A的某个句子序列,通过Encoder产生这个语言A这个句子对应的语义信息
-
Decoder
解码器,根据Encoder生成的语义信息,使用Decoder生成目标语言B对应的句子
另一种理解,机器翻译Encoder-Decoder模型模拟人工进行翻译的情形,人读懂语言A某个句子的意思(语义信息)之后,根据这个句子意思,使用语言B将这个句子的意思表达出来
2.整体架构
3.Encoder
针对原始输入序列,产生中间信息(不同的问题,产生不同的中间信息,在机器翻译问题中,产生的是语义信息),为Decoder服务
3.1 整体结构
3.2 工作原理
- 对于输入序列,首先进行Self-attention和residual处理
- 对上一步输出进行layer normalization处理
- 对上一步输出送入FC和residual处理
- 最后再进行layer normalization处理产生block输出,可作为下一个block的输入
4.Decoder
根据Encoder生成的中间信息,产生输出序列
4.1 整体结构
4.2 工作原理
对Decoder输入一个开始标志(BEGIN),Decoder就开始运行,运行过程参考词语接龙理解
- 根据开始标志和中间信息,产生第一个输出\(\vec{o_1}\)
- 根据中间信息和\(\vec{o_1}\),产生第二个输出\(\vec{o_2}\)
- 以此类推,直到产生的输出是结束标志,输出结束
Masked Self-attention
对于Autoregressive型的Transformer,Decoder需要将上一次产生的输出作为下一次的输入,因此对于Decoder部分第一项Self-attention处理来说,当前输入向量之后没有东西,只能对当前输入向量之前的向量作Self-attention处理,称之为Masked Self-attention
Masked Self-attention示意图如下,\(\vec{a^2}\)只能考虑对\(\vec{a^1}\)和\(\vec{a^2}\)作Self-attention,\(\vec{a^3}\)只能考虑对\(\vec{a^1}\)、\(\vec{a^2}\)、\(\vec{a^3}\)作Self-attention处理
除了Masked Self-attention之外的流程,和Encoder是相类似的
4.3 Cross Attention
Decoder的Self-attention的输出作为q,Encoder输出向量序列作为k、v,作attention运算,再送入后面的流程进行处理
对注意力机制的理解,参考https://blog.csdn.net/malefactor/article/details/78767781
因此,下图从Encoder过来是2个输入(k和v),从Decoder过来是1个输入(q)
5.训练过程
对于Decoder的每次输出和标签作交叉熵损失,使用梯度下降优化算法,训练使用Teacher Forcing方式
训练过程中将真实标签作为Decoder的输入
6.进一步学习
- 各种训练的tips
- 阅读论文
- 各种应用