前语

Transformer是由论文《Attention is All You Need》提出的,论文链接如下:

[1706.03762] Attention Is All You Need (arxiv.org)

这篇论文提出了一种新的神经网络架构:Transformer,只是依赖于注意力机制就可处理序列数据,从而摒弃了 RNN 或 CNN 。这个新的网络结构,刷爆了各大翻译任务,一同创造了多项新的记录,现在大热的 Bert 便是基于 Transformer 构建的。

在本文中,咱们从零来具体解读什么是Transformer模型。

1. Transformer 全体结构

首要介绍 Transformer 的全体结构

Transformer在做一个什么事情?

从零详细解读什么是Transformer模型
由上图可知,它是一个“输入—处理—输出”的过程,输入“我 爱 你”会输出一个“I LOVE YOU”,相当于机器翻译的过程。那咱们继续细化 Transformer:

从零详细解读什么是Transformer模型
由上图可知,当我输入一个文本的时分,该文本数据会先经过一个叫Encoders的模块,对该文本进行编码,然后将编码后的数据再传入一个叫Decoders的模块进行解码,解码后就得到了翻译后的文本,对应的咱们称Encoders为编码器,Decoders为解码器。所以,Transformer由encoders(编码器)和decoders(解码器)构成;,是一个编码-解码的结构;类似于seq2seq;让咱们继续来细化 Transformer:

从零详细解读什么是Transformer模型

由上图咱们看到,Encoders由6个相同的小Encoder组成,Decoders由6个相同的小Decoder组成。在编码部分,每一个的小编码器的输入是前一个小编码器的输出,而每一个小解码器的输入不光是它的前一个解码器的输出,还包括了整个编码部分的输出。,6个Encoder/Decoder结构完全相同,可是Encoder和Decoder结构是不同的。

注意了:6个Encoder/Decoder的结构相同可是参数不同;(也便是说,练习的时分,不是练习一个然后copy5个,而是6个都在练习);其次,6个是能够改变的,相当所以个N。

那每一个小编码器里边又是什么呢?

咱们扩大一个encoder,发现里边的结构是一个自注意力机制加上一个前馈神经网络。如下图:

从零详细解读什么是Transformer模型

原论文中的的图如下:

从零详细解读什么是Transformer模型

2. Encoder具体介绍

能够把单个的encoder分为三个部分:输入部分,注意力机制和前馈神经网络;如下图:

从零详细解读什么是Transformer模型

2.1 输入部分

输入部分分为两个小部分:embedding和方位嵌入;

Embedding: Embedding 是一个将离散变量转为连续向量表明的一个方法。在神经网络中,embedding 是非常有用的,因为它不光能够削减离散变量的空间维数,一同还能够有意义的表明该变量。

方位Embedding: 以下图RNN为例,关于一切的时间步,都同享一套参数

从零详细解读什么是Transformer模型
而Transformer是并行的,一切单词是能够一同处理的,不像RNN,输入完“我”,等处理完“我”,再输入“爱”;这样做增快了速度,但疏忽了单词间先后关系;所以需求方位编码。

方位 Embedding 用PE表明,PE维度与单词 Embedding 是相同的。PE 能够经过练习得到,也能够运用某种公式核算得到。在 Transformer 中采用了后者,核算公式如下:

从零详细解读什么是Transformer模型
其间,pos 表明单词在语句中的方位,d 表明 PE的维度 (与词 Embedding 相同),2i 表明偶数的维度,2i+1 表明奇数维度 (即 2i≤d, 2i+1≤d)。在偶数方位运用sin,在奇数方位运用cos;如下图:

从零详细解读什么是Transformer模型
例如“爱”这个字,在512个维度编码中,偶数位是sin,奇数位是cos,得到方位编码之后,将方位编码512维度和词(字)向量的512维度相加,得到终究的512维度作为终究的输入。

从零详细解读什么是Transformer模型

为什么方位嵌入有用?或有什么优点

凭借上述公式,咱们能够得到一个特定方位的d_modeld\_{model}维的方位向量,而且凭借三角函数的性质:

从零详细解读什么是Transformer模型

咱们能够得到:

从零详细解读什么是Transformer模型
能够看出,关于pos+k方位的方位向量某一维2i或2i+1而言,能够表明为,pos方位与k方位的方位向量的2i与2i+1维的线性组合,这样的线性组合意味着方位向量中蕴含了相对方位信息。

可是这种相对方位信息会在注意力机制那里消失

2.2 self-attention自注意力机制

注意力机制是transformer的核心操作。

首要介绍下最基本的注意力机制

从零详细解读什么是Transformer模型
人类在看一张图片时,有比较重视的部分和不怎么重视的部分,赤色越深代表很受重视。核算公式如下:

Attention(Q,K,V)=softmax(QKTdk)Attention(Q,K,V)=softmax(\frac{QK^{T} }{\sqrt{d_{k} } } )

从公式中,能够重视Q,K,V三个矩阵,从公式角度来看,拿上面的图片举比如:

从零详细解读什么是Transformer模型

把区域分为4个区域,婴儿和左上、左下、右上、右下别离点乘得到某个值,得到的值看哪个比较大,大的就更重视,再和V相乘,得到加权和。

在Transformer中如何运用

Self-Attention是 Transformer 的要点,所以咱们要点重视 Multi-Head Attention 以及 Self-Attention,首要咱们具体了解一下 Self-Attention 的内部逻辑。

2.2.1 Self-attention结构

从零详细解读什么是Transformer模型

上图是 Self-Attention 的结构,在核算的时分需求用到矩阵Q(查询),K(键值),V(值) 。在实际中,Self-Attention 接纳的是输入或许上一个 Encoder block 的输出。而Q,K,V正是经过 Self-Attention 的输入进行线性变换得到的。

2.2.2 Q,K,V的核算

从零详细解读什么是Transformer模型
如上图所示,X1X_{1}WQW^{Q}相乘,就得到Q的值,以此类推K,V

得到矩阵 Q, K, V之后就能够核算出 Self-Attention 的输出了,核算的公式如下:

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q,K,V)=softmax(\frac{QK^{T} }{\sqrt{d_{k} } } )V

从零详细解读什么是Transformer模型

dkd_{k}是Q,K矩阵的列数,即向量维度

公式中核算矩阵Q和K每一行向量的内积,为了避免内积过大,因此除以dkd_{k}的平方根。Q乘以K的转置后,得到的矩阵队伍数都为 n,n 为语句单词数,这个矩阵能够表明单词之间的 attention 强度。下图为Q乘以KTK^{T},1234 表明的是语句中的单词

从零详细解读什么是Transformer模型
得到QKTQK^{T}之后,运用 Softmax 核算每一个单词关于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1

从零详细解读什么是Transformer模型
得到 Softmax 矩阵之后能够和V相乘,得到终究的输出Z

从零详细解读什么是Transformer模型

上图中 Softmax 矩阵的第 1 行表明单词 1 与其他一切单词的 attention 系数,终究单词 1 的输出Z1Z_{1}等于一切单词ii的值ViV_{i}依据 attention 系数的份额加在一同得到,如下图所示:

从零详细解读什么是Transformer模型

2.2.3 Multi-head Attention

Multi-Head Attention 是由多个 Self-Attention 组合形成的,论文中Multi-Head Attention结构图如下:

从零详细解读什么是Transformer模型
从上图能够看到 Multi-Head Attention 包括多个 Self-Attention 层,首要将输入X别离传递到 h 个不同的 Self-Attention 中,核算得到 h 个输出矩阵Z。下图是 h=8 时分的状况,此时会得到 8 个输出矩阵Z。

从零详细解读什么是Transformer模型

得到8个输出矩阵Z1Z_{1}Z8Z_{8}之后,Multi-Head Attention 将它们Concat在一同,然后传入一个Linear层,得到 Multi-Head Attention 终究的输出:

从零详细解读什么是Transformer模型
能够看到 Multi-Head Attention 输出的矩阵Z与其输入的矩阵X的维度是相同的。

2.3 前馈神经网络

Feed Forward 层比较简单,是一个两层的全衔接层,第一层的激活函数为 Relu,第二层不运用激活函数,对应的公式如下:

max(0,XW1+b1)W2+b2max(0,XW_{1} +b_{1} )W_{2} +b_{2}

2.4 Add&Normalize

Add & Norm 层由 Add 和 Norm 两部分组成,其核算公式如下:

从零详细解读什么是Transformer模型

其间X表明 Multi-Head Attention 或许 Feed Forward 的输入,MultiHeadAttention(X) 和 FeedForward(X) 表明输出 (输出与输入X 维度是相同的,所以能够相加)。

Add指X+MultiHeadAttention(X),是一种残差衔接,一般用于解决多层网络练习的问题,能够让网络只重视当时差异的部分,在 ResNet 中经常用到:

从零详细解读什么是Transformer模型
上图代表残差,X作为输入,经过两层网络,这两层网络统一为一个函数F(X),假如没有残差网络,直接F(X)输出就能够了,有了残差网络后,把X和F(X)对位相加,得到真实的输出。

残差的作用

依据后向传播的链式法则:

从零详细解读什么是Transformer模型
确保了梯度不会为0,缓解了梯度消失的呈现

3. Decoder具体介绍

Decoder的结构图如下:

从零详细解读什么是Transformer模型

上图赤色部分为 Transformer 的 Decoder block 结构,与 Encoder block 类似,可是存在一些差异:

  • 包括两个 Multi-Head Attention 层。
  • 第一个 Multi-Head Attention 层采用了Masked 操作
  • 第二个 Multi-Head Attention 层的K, V矩阵运用 Encoder 的编码信息矩阵C进行核算,而Q运用上一个 Decoder block 的输出核算。
  • 最终有一个 Softmax 层核算下一个翻译单词的概率。

3.1 Masked Multi-Head Attention

为什么采用Mask操作?

在翻译的过程中是次序翻译的,即翻译完第 i 个单词,才能够翻译第 i+1 个单词。经过 Masked 操作能够避免第 i 个单词知道 i+1 个单词之后的信息。下面以 “我有一只猫” 翻译成 “I have a cat” 为例,了解一下 Masked 操作。

在 Decoder 的时分,是需求依据之前的翻译,求解当时最有或许的翻译,如下图所示。首要依据输入 “Begin” 猜测出第一个单词为 “I”,然后依据输入 “Begin I” 猜测下一个单词 “have”。

从零详细解读什么是Transformer模型

Decoder 能够在练习的过程中运用 Teacher Forcing 而且并行化练习,即将正确的单词序列 (Begin I have a cat) 和对应输出 (I have a cat end) 传递到 Decoder。那么在猜测第 i 个输出时,就要将第 i+1 之后的单词掩盖住,注意 Mask 操作是在 Self-Attention 的 Softmax 之前运用的,下面用 0 1 2 3 4 5 别离表明 “Begin I have a cat end”

第一步:是 Decoder 的输入矩阵和Mask矩阵,输入矩阵包括 “Begin I have a cat” (0, 1, 2, 3, 4) 五个单词的表明向量,Mask 是一个 55 的矩阵。在Mask 能够发现单词 0 只能运用单词 0 的信息,而单词 1 能够运用单词 0, 1 的信息,即只能运用之前的信息。

从零详细解读什么是Transformer模型

第二步: 接下来的操作和之前的 Self-Attention 相同,经过输入矩阵X核算得到Q,K,V矩阵。然后核算Q和KTK^{T}的乘积QKTQK^{T}

从零详细解读什么是Transformer模型
第三步: 在得到QKTQK^{T}之后需求进行 Softmax,核算 attention score,咱们在 Softmax 之前需求运用Mask矩阵遮挡住每一个单词之后的信息,遮挡操作如下:

从零详细解读什么是Transformer模型
得到Mask QKTQK^{T}之后在Mask QKTQK^{T}上进行Softmax,每一行的和都为 1。可是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。

第四步: 运用Mask QKTQK^{T}与矩阵 V相乘,得到输出Z,则单词 1 的输出向量Z1Z_{1} 是只包括单词 1 信息的。

从零详细解读什么是Transformer模型
第五步: 经过上述步骤就能够得到一个 Mask Self-Attention 的输出矩阵ZiZ_{i},然后和 Encoder 类似,经过 Multi-Head Attention 拼接多个输出ZiZ_{i},然后核算得到第一个 Multi-Head Attention 的输出Z,Z与输入X维度相同。

3.2 第二个Multi-Head Attention

其间 Self-Attention 的K, V矩阵不是运用 上一个 Decoder block 的输出核算的,而是运用Encoder 的编码信息矩阵 C 核算的。

依据 Encoder 的输出C核算得到K,V,依据上一个 Decoder block 的输出 Z核算Q(假如是第一个 Decoder block 则运用输入矩阵X进行核算),后续的核算方法与之前描绘的共同。

这样做的优点是在 Decoder 的时分,每一位单词都能够使用到 Encoder 一切单词的信息 (这些信息无需Mask)。

4. 总结

  • Transformer 本身是不能使用单词的次序信息的,因此需求在输入中增加方位 Embedding,否则 Transformer 便是一个词袋模型了。
  • Transformer 的要点是 Self-Attention 结构,其间用到的Q, K, V矩阵经过输出进行线性变换得到。
  • Transformer 中 Multi-Head Attention 中有多个 Self-Attention,能够捕获单词之间多种维度上的相关系数 attention score。

参考:

  • 论文:[1706.03762] Attention Is All You Need (arxiv.org)
  • 什么是Transformer? – 知乎 (zhihu.com)
  • Transformer模型详解(图解最完整版) – 知乎 (zhihu.com)