【论文精读】Transformer:Attention Is All You Need

《动手学深度学习》关于Transformer和注意力机制的笔记

李沐《动手学深度学习》注意力机制


一、文章概览

(一)摘要

序列转录模型(sequence transduction models):序列转录也就是序列到序列的生成。input一个序列,output一个序列。e.g. 机器翻译:输入一句中文,输出一句英文。

研究背景: 主流的序列转录模型一般是基于包括encoder 和decoder的 RNN 或者 CNN 架构。性能最好的模型还通过注意力机制连接编码器和解码器。

主要工作:

  • 提出了一种新的简单网络架构——Transformer
  • Transformer完全基于注意力机制,完全不需要递归和卷积。

在这里插入图片描述

(二)结论部分

  • Transformer是第一个完全基于注意力的序列转换模型,用多头自注意力取代了编码器-解码器架构中最常用的循环层。
  • 对于翻译任务,Transformer 的训练速度明显快于基于循环层或卷积层的架构。
  • 未来可以将Transformer 扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意力机制,以有效地处理图像、音频和视频等大型输入和输出。

(三)引言

在2017年时,时序模型的常用方法有RNN, LSTM, GRU。(语言模型、编码器-解码器架构)

RNN的特点:从左往右一步一步计算,对第 t 个状态 ht,由 ht-1(历史信息)和 当前词 t 计算。

RNN的缺点:

  • 难以并行,时序信息是一步一步往后传递的;
  • 过早的历史信息可能被丢掉;
  • 一个大的 ht 存历史信息。每一个 计算步都需要存储,内存开销大。

attention在RNN的应用:在这篇文章之前,attention已经被成功的用在编码器-解码器里了,主要是用在怎么把 encoder 的信息有效的传给 decoder,它允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离。

Transformer的优点:

  • Transformer是一种避免重复的模型架构,完全依赖注意力机制来绘制输入和输出之间的全局依赖关系。
  • Transformer 可实现显着更高的并行化,并且在 8 个 P100 GPU 上进行短短 12 个小时的训练后,可以在翻译质量方面达到新的水平。

(四)相关工作

使用卷积神经网络替换循环神经网络从而减少时序计算:

  • 缺点:对于较长的序列难以建模
  • 优点:可以输出多个通道,每个通道可以识别不同的模式。

Transformer的注意力机制每一次可以看到所有的像素,一层能够看到整个序列。
Transformer 的 多头注意力机制(multi-head self-attention)模拟 CNNs 多通道输出的效果。

二、模型细节

(一)整体架构

序列模型里目前比较好的是编码器-解码器架构:

  • 编码器:将原始输入(x1, x2, … , xn)映射成 (z1, z2, …, zn)(机器学习可以理解的向量)

i.e., 一个句子有 n 个词,xt 是第 t 个词,zt 是第 t 个词的向量表示。

  • 解码器:将解码器的输出z生成一个长为 m 的序列(y1, y2, … , ym)

n和m可以一样,也可以不一样,比如说中英文互译,得到的句子不一定是相同的长度

Transformer 使用了 encoder-decoder架构,堆叠的 stacked self-attention and point-wise, fully-connected layers:

  • 左侧为编码器,右侧为解码器
  • Inputs是编码器的输入,解码器在做预测的时候是没有输入的,Outputs(Shifted right)指的是解码器在之前时刻的输出作为此时的输入,一个一个往右移。
  • Inputs ---- Input Embedding :输入经过一个 Embedding层转化成向量,得到的向量值和 Positional Encoding相加。
  • Encoder 的核心架构是N个 Transformer 的 block 叠在一起。其中Transformer 的block主要包括多头注意力机制、残差连接、normalization和前馈神经网络MLP。
  • encoder 的输出作为 decoder 的输入,decoder相对于encoder来说多了一个 Masked Multi-Head Attention
  • decoder的输出进入一个 Linear 层,做一个 softmax,得到最后的输出。

Linear + softmax: 一个标准的神经网络的做法

Transformer与标准的解码器编码器结构之间的区别:encoder、decoder 内部结构不同,encoder 的输出 如何作为 decoder 的输入有一些不一样。

在这里插入图片描述

(二)编码器和解码器块

Encoder:可以理解为6 个layer的重复,其中每个layer有 2 个 sub-layers

  • 第一个 sub-layer 是 multi-head self-attention
  • 第二个 sub-layer 是 simple, position-wise fully connected feed-forward network, 简称 MLP
  • 每个 sub-layer 的输出做 残差连接 和 LayerNorm,公式表达为LayerNorm( x + Sublayer(x) )
  • 残差联接需要输入输出维度一致,不一致需要做投影。简单起见,固定每一层的输出维度dmodel = 512

Decoder:可以理解为6 个layer的重复,其中每个layer有 3 个 sub-layers

  • 第一个 sub-layer 是 masked multi-head self-attention

带掩码 masked 的注意力机制:decoder 是 auto-regressive 自回归。当前时刻的输入是之前一些时刻的输出,做预测时,decoder 不能看到 之后时刻的输出。

  • 第二个 sub-layer 是 multi-head self-attention
  • 第三个 sub-layer 是 simple, position-wise fully connected feed-forward network, 简称 MLP
  • 每个 sub-layer 的输出做 残差连接 和 LayerNorm

(三)注意力层

注意力函数 是一个将一个 query 和一些 key - value 对映射成一个输出的函数,其中所有的 query、key、value 和 output 都是一些向量。

o u t p u t (输出) = v a l u e 的加权和 输出的维度 = v a l u e 的维度 v a l u e 的权重 = 查询 q u e r y 和对应的 k e y 的相似度 output(输出)=value的加权和\\ 输出的维度=value的维度\\ value的权重=查询 query 和对应的 key 的相似度 output(输出)=value的加权和输出的维度=value的维度value的权重=查询query和对应的key的相似度

缩放点积注意力机制:
查询 Q Q Q、键 K K K和值 V V V的缩放点积注意力:
s o f t m a x ( Q K T d k ) V softmax(\frac{QK^T}{\sqrt{d_k}})V softmax(dk QKT)V
为什么要除以 d k {\sqrt{d_k}} dk :防止softmax函数的梯度消失。

  • dk不是很大的时候,除不除以都行。
  • dk 比较大时 (2 个向量的长度比较长的时候),点积的值会比较大或者会比较小。当值比较大的时候,相对的差距会变大,导致最大值 softmax会更加靠近于1,剩下那些值就会更加靠近于0。值就会更加向两端靠拢,算梯度的时候,梯度比较小。
    在这里插入图片描述

怎么做mask:
把 t 时刻以后 Qt 和 Kt 的值换成一个很大的负数,如 1 ( − 10 ) 1 ^ (-10) 1(10),进入 softmax 后,权重为0。因此和 V 矩阵做矩阵乘法时,没看到 t 时刻以后的内容,只看 t 时刻之前的 key - value pair。

多头注意力机制:

投影其实就是一个输出维度比输入更小的线性层

原始的 value、key、query进入一个线形层,线形层把 value、key、query 投影到比较低的维度。然后再做一个 scaled dot product,执行 h 次会得到 h 个输出,把 h 个 输出向量全部合并 concat 在一起,最后做一次线性的投影 Linear,得到最终的输出。
在这里插入图片描述

为什么要做多头注意力机制:
先投影到低维,投影的 w 是可以学习的,multi-head attention 给 h 次机会去学习 不一样的投影的方法,使得在投影进去的度量空间里面能够去匹配不同模式需要的一些相似函数,然后把 h 个 heads 拼接起来,最后再做一次投影。有点像 CNN 多个输出通道的感觉。
在这里插入图片描述

Transformer在多头注意力机制的应用:

  • encoder 的注意力层:

    • 自注意力机制,key、value 和 query 其实就是一个东西
    • 不考虑 multi-head 和 有投影的情况:输出是输入的加权和,其权重来自每个向量与其它向量的相似度。
    • 考虑multi-head 和 有投影的情况:学习 h 个不一样的距离空间,使得输出变化。
  • decoder 的 masked multi-head attention层:

    • masked 体现在,看不到 t 时刻以后的输入
  • decoder 的 multi-head attention层:

    • 不再是 self-attention
    • key - value 是来自 encoder 的输出,query 是来自 decoder 里 masked multi-head attention 的输出
    • 实际上就是把编码器的输出根据我想要的东西给它拎出来

(四)Position-wise Feed-Forward Networks层

实际上就是作用在最后一个维度的 MLP,Point-wise的含义就是把一个 MLP 对每一个词 (position)作用一次,对每个词作用的是同样的 MLP。

单隐藏层的 MLP,中间 W1 扩维到4倍 2048,最后 W2 投影回到 512 维度大小,便于残差连接:
F F N = L i n e a r + R e L U + L i n e a r FFN= Linear + ReLU + Linear FFN=Linear+ReLU+Linear
在这里插入图片描述

RNN和Transformer的对比:

  • 不同点在于如何传递序列的信息:

    • RNN 是把上一个时刻的信息输出传入下一个时候做输入。
    • Transformer 通过一个 attention 层,去全局的拿到整个序列里面信息,再用 MLP 做语义的转换。
  • 相同点在于语义空间的转换及关注点

    • 都是用一个线性层 or 一个 MLP 来做语义空间的转换。
    • 关注点都是怎么有效的去使用序列的信息。

(五)Embeddings and Softmax层

embedding:将输入的一个词、词语 token 映射成 为一个长为 d 的向量,利用学习到的长为 d 的向量 来表示整个词、词语 token。

(六)Positional Encoding

attention 不会有时序信息,所以需要一个记录了时序信息的positional encoding,通过在嵌入层相加 的方式把时序信息加进数据。

三、注意力机制与CNN、RNN的对比

  • 每层计算复杂度:越低越好

    • 自注意力:O(n^2 *d) 主要是矩阵乘法,并行度高,Q(n * d) K(m * d)=Q * KT (n * m),因为自注意力的query、key 相同(m = n), 复杂度为O(n^2 * d)
    • 循环层:序列长度为 n ,一个 dense layer * 一个长为 d 的输入,然后要做 N 次,所以是 N 乘 D 平方
    • 卷积层:k 比较小,CNN与RNN的复杂度差不多
    • 严格的自注意力:query 只跟 最近的 r 个邻居计算
  • 序列运算量:(下一步计算,必须要等前面多少步计算完成) 越少,并行度越高

    • 自注意力:O(1),矩阵乘法的并行度高
    • 循环层:一步一步做运算,当前时刻的词 需要等待前面所有时刻计算完成,O(n),并行上是比较吃亏的
    • 卷积层:并行度高
  • maximum path length:(一个信息从一个数据点走到另外一个数据点要走多少步)越短越好

    • 自注意力:O(1),一个 query 和所有的 key 做运算。输出是所有 value 的加权和。任何 query 和任意一个很远的 key-value pair,只要一次就能过来

在这里插入图片描述

参考:Transformer论文逐段精读【论文精读】

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值