Transformer模型

2 阅读2分钟

Transformer模型

1. 简介

Transformer模型由Google提出,发表在NIPS 2017会议上。是一种完全基于注意力机制的模型,摒弃了RNN和CNN结构。并且很容易并行,训练速度较快,在WMT14 英语- 德语、英语 - 法语翻译任务上获得了SOTA的效果。

  • RNN缺点: 很难并行化,每一个时刻的输出,需要依赖上一个时刻的结果;
  • CNN优缺点: 很容易实现并行化;想要获取更多的上下文信息,需要叠多层卷积网络;

image.png

2. 模型结构

  • Transformer模型由 Encoder 和 Decoder 组成,并且分别堆叠了N层;注意:输入经过N层 Encoder 之后输入到每一层 Decoder 计算Attention;
  • Encoder 包括两个子层: (1)Self-Attention子层;(2)FNN子层;
  • Decoder 包括三个子层: (1)Mask Self-Attention子层;(2)Self-Attention子层;(3)FNN子层;
  • 每个子层后面,都加上了 残差连接(residual connection)层正则化(layer normalization) ,则最终的输出为:LayerNorm(x + Sublayer(x))

transformer模型结构.png

2.1 Self Attention

  • Transformer在RNN模型的基础上进行改进,使得计算每一个输出,可以并行; 使用Self-Attention优势.png

2.1.1 Scaled dot-product attention

  • Attention机制的本质是:给定一个query,和一系列<key, value>对,需要计算得到一个输出得分;注意: query, key, value都是向量; query, key维数为, value的维数为;
  • Scaled dot-product attention计算公式如下:
Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}}) V

上式中是矩阵;

注意:除以,是为了防止变化很大的时候,最终的计算结果变化较大;

例子:计算和其他词的Attention,得到输出
1. 每个输入,计算得到

image.png

2. 做内积

image.png

3. 计算softmax值,得到注意力权重

image.png

4. 注意力权重和,加权平均得到Attention输出

image.png

得到输出,可并行计算: image.png

2.1.2 Mask说明

  • Decoder第一个子层使用了Mask self-attention子层:主要是为了防止标签泄露,即在 时刻不能看到 时刻之后的信息;因为在infer阶段,只能看到已经生成的序列;
  • 一般使用一个上三角矩阵实现:即在计算softmax之前,将的计算结果赋值为,这样经过softmax之后计算得到的注意力权重趋于0; image.png image.png

2.2 Multi-Head Attention

  • 每一个头都是一个Scaled dot-product attention的计算;
  • 最终多个头的输出concat在一起,再经过一个linear层得到 Multi-Head Attention 输出;

image.png

2.3 Positional Encoding

  • transformer模型完全基于注意力机制,没有考虑序列顺序信息,因此引入的positional encoding;
  • 在得到每个词的Embedding之后,与位置编码向量相加;并且每个词的位置编码向量是固定的;
  • 位置编码向量,具体计算公式如下:
PE(pos,2i)=sin(pos/100002i/dmodel)PE(pos,2i+1)=cos(pos/100002i/dmodel)PE(pos, 2i) = sin(pos/10000^{2i/d_{model}}) \\ PE(pos, 2i+1) = cos(pos/10000^{2i/d_{model}})

上式中,代表词向量维度;代表单词的位置,代表第几维;

image.png

参考资料