文献阅读:Transformer [Attention Is All You Need]
本文最后更新于 636 天前,其中的信息可能已经有所发展或是发生改变。

[原文链接(arxiv)] [原文链接(官方)] [GITHUB] 注:影印版和正式版本稍有不同,但不影响主体内容

主要参考:[李沐] [Jay Alammar]

[PPT下载]

摘要与结论

本文在摘要首先提出了Transformer和其它基于序列转录模型的不同点:

  • 其它模型:通常依赖于复杂的循环或卷积,通常在encoder和decoder之间使用注意力机制
  • Transformer:仅仅使用了注意力机制,没有使用卷积或循环

模型的评估依据:机器翻译任务

结果:

  • be superior in quality 更高的质量
  • more parallelizable 高并发
  • require significantly less time to train 训练时间更短
  • generalize well 泛化性好

结论:

  • 第一个仅仅使用注意力机制的序列转录模型:将之前的循环层都换成了multi-headed self-attention
  • 扩展性:除了对文本的处理外,还能够高效地处理规模较大的输入和输出,例如图片、音频和视频
  • 目标:使生成更少地时序化,即提高并行度

介绍与背景

这部分对比了常见模型与Transformer的区别,从而介绍Transformer思路与架构的由来

RNN

给一个序列,它将按一定长度为单位从左向右有序推进,例如输入是一个句子,则它的单位即为“词”,对于第$t$个词,将产生输出$h_t$,即“隐藏状态”,$h_t$由前一个词的隐藏状态$h_{t-1}$和当前词$t$决定

时序是RNN的优点,但也成为了它的缺点,这使之难以并行化。当计算$h_t$时必须保证$h_{t-1}$已经计算完成了,对于拥有成千上万线程的GPU或TPU而言,无法并行计算从而使计算的性能较差

此外,因为历史信息一步步向后传递,如果时序较长,早期的时序信息将在后面被丢弃。如果不想丢弃历史信息,那么$h_t$将会比较大,对内存或显存容量有极大的挑战

Attention

注意力机制的作用在于将encoder内的信息有效传递给decoder,即忽视输入或输出序列内的距离,因此它在RNN中被广泛应用

Transformer

不再使用循环神经层,取而代之的是纯依赖于注意力机制,因此使之能够并行化

CNN

CNN的优点是可以有多个输出通道,每个输出通道可以去识别不一样的模式。于是Transformer提出了Multi-Headed Attention以模拟CNN多输出通道的效果

有很多工作致力于用CNN来代替RNN,但CNN对于比较长的序列难以很好地处理,每次处理的内容有限,需要用很多层卷积来处理相隔较远的两块内容。而Transformer的注意力机制可以同时看到所有内容,从而消除了这个问题

模型架构

这部分介绍了Transformer的整体架构

Fig. 1 The Transformer – model architecture.

Encoder & Decoder

  • Encoder:将输入$(x_1, x_2, … , x_n)$表示为$(z_1, z_2, … , z_n)$,每个$z_t$对应$x_t$的向量表示
  • Decoder:根据$z$,生成一个$(y_1, y_2, … , y_n)$

对于Encoder而言一次性可以获得全部的输入;而对Decoder而言只能一个一个生成,这个过程即为auto-regressive(自回归),其输出亦是其输入——过去时刻的输出作为当前时刻的输入

[Fig .1]中左边浅灰色区域即Encoder的结构,右边浅灰色区域为Decoder的结构

Encoder

参数:

  • $N$:层数,在本文中$N=6$
  • $d_{model}$:输出维度,在本文中$d_{model}=512$

结构:

每1层Encoder有2个子层,前者为multi-head self-attention,后者为position-wise FFN,二者各使用残差连接并相加,同时每个子层之后使用LayerNorm归一化,于是我们得到了每个子层的输出为

$LayerNorm(x+Sublayer(x))$

需要注意的是,因为残差连接需要输入输出维度即$d_{model}$一致,因此每一层包括嵌入层在内的输出都需要将维度和$d_{model}$保持一致

最终,Encoder的输出作为Decoder的输入进入Decoder区域

Decoder

参数:

  • $N$:层数,在本文中$N=6$

结构:

每1层Decoder有3个子层,一为masked multi-head attention,二为multi-head attention,三为position-wise FFN,后二者与Encoder相同,且此三者皆与Encoder一致地使用了残差连接相加及LayerNorm归一化

需要注意的是Decoder区域下方的Outputs,此处为auto-regressive,即之前时刻Decoder的输出作为当前时刻$t$时Decoder的输入,这边的一个问题attention机制可以看到整个时序的输入,而我们只需要当前时刻之前时序的输入,故而这边较之Encoder多了一层masked multi-head attention,它将$t$时刻之后输入的wight置为0;此外,Encoder的输出作为Decoder在0时刻的输入

Attention

参数:

  • Query:即输入
  • Key:词典库的Key
  • Value:词典库的Value

Attention的过程即求Query和Key的相似度,其相似度越大对应的权重也越大,然后将Key对应的Value加权和即为输出Output

Fig. 2: (left) Scaled Dot-Product Attention. (right) Multi-Head Attention consists of several
attention layers running in parallel.

Scaled Dot-Product Attention

本段提出了两种注意力机制:

  • additive attention:加型注意力机制,用于Query和Key不等长的情况
  • dot-product attention:点积型注意力机制,实现较为简单,也是本文所采用的方法
Fig. 3 Scaled Dot-Product Attention

如Fig. 3所示为dot-product attention的MatMul流程,Fig. 2(left)所示为Scaled Dot-Product Attention的总流程,首先将$Q_{n*d_k}$矩阵与$K_{m*d_k}^T$矩阵进行内积,获得一个$W_{n*m}$矩阵,即余弦,将之作为Query与Key的相似度,越大则相似度越大,正交为零即无关

Fig. 3第一行计算所获得的的结果将乘以$\frac{1}{\sqrt{d_k}}$,即Fig. 2(left)中的Scale,这步是为了防止上一步相乘所获得的结果太大以至于经过softmax后会过于极端从而导致后续梯度过小难以继续计算

之后进入Fig. 2(lefft)中的Mask,因为我们只需要$t$时刻之前的输入,而我们现在获得的$W_{n*m}$有着全部时刻的内容,因此我们需要将$t$时刻之后的内容擦除屏蔽,Mask层的作用即是将$t$时刻后的数据变为一个极大的负数,这样在Softmax做指数时会变为0

Attention有着全部时刻内容的特点使它规避了前文提到的CNN和RNN的缺点,之所以说只需要$t$时刻之前的输入,因为我们现在相当于再给Attention进行一场预测未来的考试,如果它已知未来时刻发生了什么(也就是Ground Truth),那么这场考试就没有意义了,就相当于给了答案再开卷考,这无疑对锻炼预测能力是没有任何收益的,故而我们现在要把答案没收

Softmax层有三个步骤:

  • 对矩阵中每一项使用exp求幂,确保没有负数的同时能够保证不丢失信息
  • 对矩阵的每一行求和,获得规范化常数
  • 对矩阵每一行的值除以规范化常数,使得矩阵每一行的和为1

其公式为:

$softmax(X_{ij})=\frac{exp(X_{ij})}{\sum_kexp(X_{ik})}$

Fig. 2(left)的最后一步即Fig. 3的第二行,经过Softmax获得权重矩阵$W_{n*m}$,$W_{n*m}$中每一行都是Query的权重,于是我们将之和$V_{m*d_v}$相乘,这个过程实际是一个加权和,从而获得Scaled Dot-Product Attention的输出${Output}_{n*d_v}$,${Output}_{n*d_v}$的每一行是每个Query的结果

整个Fig. 2(left)的流程可以表达为公式:

$Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V$

Muti-Head Attention

$h$个并行的Fig. 2(left)组成了Fig. 2(right)中的Scaled Dot-Product Attention部分

Muti-Head Attention的三个输入,即Value、Key及Query经过Linear投影到低维度,原先三者维度都为$d_{model}$,Linear将三者维度分为投影为$d_v$、$d_k$及$d_k$,其中$d_v=d_k=d_{model}/h$,即初始化权重$QW_i^Q,KW_i^K,VW_i^V$,之后并行地进入Scaled Dot-Product Attention

之所以为$h$头,实际是给$h$次学习权重矩阵$W$的机会,同时可以进行并行计算,这使它获得了CNN的特点:可以去学习多个特征能力

$d_v=d_k=d_{model}/h$的原因,也是因为后面会将学习到的$h$个权重矩阵连接起来,从而我们获得如下公式:

$MultiHead(Q,K,V)=Concat({head}_1,…,{head}_h)W^O$

where ${head}_i=Attention(QW_i^Q,KW_i^K,VW_i^V)$

$W_i^Q\in \mathbb{R}^{d_{model}*d_k},W_i^K\in \mathbb{R}^{d_{model}*d_k},W_i^V\in \mathbb{R}^{d_{model}*d_v},W^O\in \mathbb{R}^{hd_v*d_{model}}$

因为是self-attention,我们的输入只有$X$,而attention需要Query、Value、Key三个输入,存在如下的线性变换:

Fig .4 linear transformation

在这边我们初始化权重矩阵组$W$,我们可以将$W$初始化为均值为0方差为1的矩阵,$W$矩阵组也是Attention所需要去不断迭代学习的内容

Position-wise Feed-Forward Networks

实质类似于一个只作用于最后一个维度的单隐藏层MLP,它对每一个词都作用一次,因此有前缀Position-wise

公式如下:

$FFN(x)=max(0,xW_1+b_1)W_2+b_2$

其中,$xW_1+b_1$为一个线性层,令$max(0,xW_1+b_1)=y$,$y$是一个ReLU激活层,$yW_2+b_2$又是一个线性层,$x$是长为$d_{model}$的向量,在本文中$W_1$将$x$投影为$d_{ff}=2048$,因为输出有残差连接,因此输出时又将其投影为$d_{model}=512$

Position-wise Feed-Forward Networks的作用是为了给模型加入非线性的因素,因此使用了一个非线性的激活函数ReLU,从而使模型具有能够处理更复杂信息的能力

此外Position-wise FFN处理的是局部的信息,与之相对应的,self-attention处理的是完整且全局的信息序列

Positional Encoding

到目前为止Transformer依旧没有时序的能力,它对输入的处理依旧是并行化的,所以它的输出也是无序的,为了让它能够获得RNN的时序能力,这边采用了位置编码技术

就像数字在计算机存储方式一样,位置编码便是将位置通过某种方式转化为和输入$X$等长的向量,转换方式如下:

$PE_{pos,2i}=\sin(pos/10000^{2i/d_{model}})$

$PE_{pos,2i+1}=\cos(pos/10000^{2i/d_{model}})$

Fig .5 Positional Encoding

转换出来的与输入$X$等长的向量与输入$X$做一个简单的相加,从而使模型不仅拥有了学习词与词之间关系的能力,还拥有了学习词与词之间位置关系的能力

结语

整个Transformer的核心部分就到此结束了,剩下的都是一些实验数据,Transformer的简单结构让它像MLP一样能够去适配多种多样的任务,相同的语义空间使它拥有多模态的能力,但也是因为它结构的简单所以导致如果想要用它去拟合一些复杂的函数的话需要数倍于甚至数十倍于其它模型,它能够得到一个更好的结果,但是它的训练时长必然要付出代价

但目前(2023-4-27)位置,Transformer以及它所衍生的模型在整个深度学习领域几乎占了主导的地位,像如日中天的GPT,它越来越有着大一统的能力,这对于工业界确实是一件好事,但对于学术界而言就不那么好了

此外在Google之后的一篇文章Attention is not all you need中用数学否定了这篇文章的标题,当然这也是显而易见的,残差连接和MLP在Transformer起着同样至关重要的作用

毕竟写这些东西一开始也没想着给别人看,所以不如PPT做的“精致”,有些东西在演讲稿里写了这边没写,而又有很多细节在这里写了而演讲稿没写,半小时的演讲也就只能讲个大概哈哈,反正现在先告一段落了,之后看其它文章如果发现这里有需要补充的地方在去补充吧

(其实我iPad上笔记比这篇文章详细很多,但懒得用计算机画图哈哈)

上一篇