Transformer

dctwan / 2023-05-19 / 原文

arXiv:1706.03762

1.问题提出

Sequence-to-Sequence,输入是序列,输出也是序列,没有固定的数量关系,输出序列的数量是由模型决定的

image-20230519073253272

解决seq2seq问题的基本的框架是Encoder-Decoder,以机器翻译作为例子直观理解

  • Encoder

    编码器,接受输入语言A的某个句子序列,通过Encoder产生这个语言A这个句子对应的语义信息

  • Decoder

    解码器,根据Encoder生成的语义信息,使用Decoder生成目标语言B对应的句子

另一种理解,机器翻译Encoder-Decoder模型模拟人工进行翻译的情形,人读懂语言A某个句子的意思(语义信息)之后,根据这个句子意思,使用语言B将这个句子的意思表达出来

2.整体架构

image-20230519085745639 image-20230519085647287

3.Encoder

针对原始输入序列,产生中间信息(不同的问题,产生不同的中间信息,在机器翻译问题中,产生的是语义信息),为Decoder服务

3.1 整体结构

image-20230519085843106

3.2 工作原理

image-20230519090533195
  1. 对于输入序列,首先进行Self-attention和residual处理
  2. 对上一步输出进行layer normalization处理
  3. 对上一步输出送入FC和residual处理
  4. 最后再进行layer normalization处理产生block输出,可作为下一个block的输入

4.Decoder

根据Encoder生成的中间信息,产生输出序列

4.1 整体结构

image-20230519091238159

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

image-20230519091416884

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处理

image-20230519091814114

除了Masked Self-attention之外的流程,和Encoder是相类似的

4.3 Cross Attention

Decoder的Self-attention的输出作为q,Encoder输出向量序列作为k、v,作attention运算,再送入后面的流程进行处理

image-20230519095457516

对注意力机制的理解,参考https://blog.csdn.net/malefactor/article/details/78767781

因此,下图从Encoder过来是2个输入(k和v),从Decoder过来是1个输入(q)

image-20230519095949256

5.训练过程

对于Decoder的每次输出和标签作交叉熵损失,使用梯度下降优化算法,训练使用Teacher Forcing方式

image-20230519100355617

训练过程中将真实标签作为Decoder的输入

6.进一步学习

  • 各种训练的tips
  • 阅读论文
  • 各种应用