文章链接
Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need. Advances in neural information processing systems, 30, 5998-6008. https://arxiv.org/pdf/1706.03762
简介
提出Transformer
模型架构,它完全基于注意力机制,摒弃了此前序列转导模型中普遍使用的循环神经网络(RNN
)和卷积神经网络(CNN
)结构。这是第一个完全依赖自注意力机制
来计算输入输出表示的转导模型。
摘要
当前主流的序列转导模型
都基于复杂的循环或卷积神经网络,包含编码器和解码器结构。性能最好的模型还通过注意力机制(attention mechanism)
连接编码器和解码器。
编码器和解码器
:编码器负责处理输入序列(比如源语言句子),将其转换成一系列向量表示,这些向量编码了输入的语义和结构信息。解码器则基于这些编码向量,逐个生成输出序列(比如目标语言句子)。
我们提出了一种新的简单网络架构Transformer
,它完全基于注意力机制,彻底摒弃了循环和卷积结构。在两个机器翻译任务上的实验表明,这些模型在质量上具有优势,同时具有更好的并行性,所需训练时间大大减少。
我们的模型在WMT2014
英德翻译任务上获得了28.4BLEU
分数,超过现有最佳结果(包括集成模型)2个BLEU
以上。在WMT2014
英法翻译任务上,我们的模型通过在8个GPU
上训练3.5天
,建立了新的单模型最高水平,达到了41.8 BLEU
分数,仅用了文献中最佳模型训练成本的一小部分。我们还通过将其成功应用于英语句法解析任务,展示了Transformer
具有良好的泛化能力,无论是在大规模还是受限训练数据的情况下都表现出色。
WMT2014英德翻译
:机器翻译领域的一个重要基准测试。该数据集包含约450万个英语-德语的平行句子对作为训练数据,通常使用newstest2014
作为测试集来评估模型性能。评估标准主要是BLEU分数,该分数越高表示机器翻译的质量越好。
BLEU (Bilingual Evaluation Understudy)
:一种评估机器翻译质量的指标,通过比较机器翻译结果和人工参考翻译的n-gram重合度
来打分。分数范围是0到1
,越接近1表示翻译质量越好。
创新点
- 提出了完全基于注意力机制的新架构,摒弃了
RNN
和CNN
结构 - 提出了多头注意力机制(
Multi-Head Attention
),允许模型关注不同子空间的信息 - 引入了位置编码(
Positional Encoding
),使模型能够处理序列的顺序信息 - 使用缩放点积注意力(
Scaled Dot-Product Attention
),提高了计算效率 - 采用残差连接(
Residual Connection
)和层归一化(Layer Normalization
),有利于深层网络训练 - 具有更好的并行性能,训练速度快,效果好,在多个任务上达到了(当时的)最好水平
主要内容
读前须知
- 论文解读尽可能的还原原文,若有不恰当之处,还请见谅;
- 排版上,插图会尽量贴近出处,而扩展图之类的,会放置末尾处;
- 左边👈有目录,可自行跳转至想看的部分;
- 代码超过30行,会折叠,想浏览代码可点击右边按钮展开;
- 部分专业术语翻译成中文可能不太恰当,此时会用括号标明它的英文原文,如感受野(
Receptive field
)。请注意,仅首次出现会标明;
介绍
循环神经网络,特别是长短期记忆网络(Long Short-Term Memory,LSTM)
和门控循环神经网络(Gated Recurrent Neural Networks)
,已经在序列建模和转导问题(如语言建模和机器翻译)中牢固确立了最先进的地位。此后,众多研究工作持续推进循环语言模型和编码器-解码器架构的边界。
长短期记忆网络:一种特殊的循环神经网络架构,设计用来解决普通RNN难以学习长期依赖关系的问题。它的核心是引入了一个记忆单元和三个控制门:输入门控制新信息进入记忆单元的程度,遗忘门决定丢弃多少旧信息,输出门控制记忆单元信息输出的多少。这种精细的门控机制让LSTM能够在长序列任务中表现出色。
门控循环神经网络:循环神经网络的一种改进版本,设计用来有效缓解传统RNN中的梯度消失问题,让网络能更好地处理长序列数据,捕捉长期依赖关系。它的典型代表是GRU(Gated Recurrent Unit),相比LSTM结构更简单但效果相当。
循环模型通常沿着输入和输出序列的符号位置进行计算。将位置与计算时间步骤对齐,它们生成一系列隐藏状态 ,作为前一个隐藏状态 和位置 的输入的函数。这种本质上的顺序特性
阻碍了训练样本内的并行化,这在序列较长时变得尤为关键,因为内存限制会限制跨样本的批处理。
最近的工作通过分解技巧和条件计算在计算效率方面取得了显著改进,后者还改善了模型性能。然而,顺序计算的基本约束仍然存在。
注意力机制(attention mechanisms)
已经成为各种序列建模和转导模型中不可或缺的组成部分,使模型能够建立与输入或输出序列中距离无关的依赖关系。然而,除了少数情况外,这种注意力机制都是与循环网络结合使用的。
在本工作中,我们提出了Transformer
,这是一种摒弃循环而完全依赖注意力机制
来捕获输入和输出之间全局依赖关系的模型架构。Transformer
允许更多的并行化,在经过仅仅12小时
的训练(使用8个 P100 GPU
)后,就能在翻译质量上达到新的最高水平。
背景
减少顺序计算的目标也构成了Extended Neural GPU
、ByteNet
和ConvS2S
的基础,这些模型都使用卷积神经网络作为基本构建模块,为所有输入和输出位置并行计算隐藏表示。
在这些模型中,将两个任意输入或输出位置的信号关联起来所需的操作数会随着位置之间的距离而增长:对于ConvS2S
是线性增长,对于ByteNet
则是对数增长。这使得学习远距离位置之间的依赖关系变得更加困难。
在Transformer
中,这种操作数被减少到常数级别
,尽管由于对注意力加权位置的平均化导致有效分辨率降低
,但我们通过多头注意力(Multi-Head Attention)
机制来抵消这种影响。
自注意力(Self-attention)
,有时也称为内部注意力(intra-attention)
,是一种将单个序列的不同位置关联起来以计算序列表示的注意力机制。自注意力已经在多种任务中成功应用,包括阅读理解、摘要生成、文本蕴涵和学习任务无关的句子表示。
基于循环注意力机制而非序列对齐循环的端到端记忆网络(End-to-end memory networks)
已经被证明在简单语言问答和语言建模任务上表现良好。
然而,据我们所知,Transformer
是第一个完全依赖自注意力来计算其输入和输出表示的转导模型,无需使用序列对齐的RNN
或卷积
。在接下来的章节中,我们将描述Transformer
,阐述选择自注意力的动机,并讨论它相比其他模型的优势。
模型架构
大多具有竞争力的神经序列转导模型都具有编码器-解码器结构。其中,编码器将符号表示的输入序列 映射为连续表示序列 。有了 后,解码器再逐个生成输出序列的符号 。在每一步,模型都是自回归的,在生成下一个符号时将之前生成的符号作为额外输入。
Transformer
遵循这种整体架构,对编码器和解码器都使用堆叠的自注意力
和逐点全连接层
,如图1所示(分别在左半部分和右半部分)。

编码器与解码器
编码器:编码器由 个相同的层堆叠而成。每一层都有两个子层:
-
多头自注意力机制(multi-head self-attention mechanism);
-
简单的、逐位置的全连接前馈网络;
全连接前馈网络
:最基本的神经网络架构,由多个全连接层顺序堆叠而成。每一层的每个神经元都与上一层的所有神经元相连,通过权重矩阵和偏置项进行线性变换,再经过非线性激活函数(如ReLU)进行处理。
我们在这两个子层的每一个周围都采用了残差连接,然后进行层标准化。即每个子层的输出是:
其中 是由子层本身实现的函数。为了便于这些残差连接,模型中所有的子层以及嵌入层产生的输出维度都是 。
残差连接(Residual Connection)
:一种网络架构设计,通过在深层神经网络中添加"捷径",让输入信息可以直接跳过某些层直达后面的层。这种设计有效缓解了深层网络的梯度消失问题,使得训练更深的网络成为可能,同时也能提升模型性能。
解码器:解码器同样由 个相同的层堆叠而成。除了编码器层中的两个子层外,解码器还插入了第三个子层,该层对解码器堆栈的输出执行多头注意力。
与编码器类似,我们在每个子层周围使用残差连接,然后进行层标准化。我们还修改了解码器堆栈中的自注意力子层,以防止位置关注后续位置。这种遮蔽与输出嵌入偏移一个位置的事实相结合,确保对位置 的预测只能依赖于位置小于 处的已知输出。
解码器堆栈
:由多个相同的解码器层叠加而成。每个解码器层包含三个主要部分:
- 带掩码的自注意力层,确保当前位置只能看到之前生成的内容
- 交叉注意力层,允许解码器访问编码器的输出信息
- 前馈神经网络层,进行特征变换
通过这种堆叠结构,解码器能够逐个生成输出序列的每个元素。
注意力
注意力函数可以描述为将一个查询(query
)和一组键值对(key
-value
pairs)映射到输出的过程,其中查询、键、值和输出都是向量
。输出是值的加权和
,其中分配给每个值的权重是通过查询和对应键的兼容函数计算得到的。
缩放点积注意力
我们称我们特别使用的注意力为"缩放点积注意力
(Scaled Dot-Product Attention
)"。输入包含维度为 的查询和键,以及维度为 的值。我们计算查询和所有键的点积,将每个点积除以 ,然后应用softmax
函数来获得值的权重。
实践中,我们同时计算一组查询的注意力函数,将其打包成矩阵 。键和值也同样打包成矩阵 和 。于是我们得到以下输出矩阵:
最常用的两种注意力函数是加性注意力
和点积(乘性)注意力
。除了缩放因子 外,点积注意力与我们的算法相同。加性注意力使用单隐层前馈网络
来计算兼容性函数。虽然这两种方法在理论复杂度上相似,但点积注意力
在实践中更快、更节省空间,因为它可以使用高度优化的矩阵乘法代码
来实现。
当 较小时,这两种机制表现相似。但对于较大的 值,在未经缩放的情况下,点积的量级会增大,将softmax
函数推入具有极小梯度的区域。为了抵消这种影响,我们将点积除以 。
多头注意力
我们发现,与使用 维度的单个注意力函数相比,将查询、键和值分别用不同的、学习得到的线性映射到 、 和 维度上,并行计算注意力 次会更有益
。然后将这些注意力输出的 维向量拼接起来,再经过一次线性映射得到最终输出,这种方式更有利。
这允许模型共同关注来自不同位置的不同表示子空间的信息,如图2所示。使用单个注意力头,平均化会抑制这种效果。

多头注意力的计算公式如下:
其中
这里,投影矩阵为
在本工作中,我们采用了 个并行注意力层(头)。对于每个注意力头,我们使用 维度。由于每个头的维度减小,总的计算成本与使用单个头的完整维度注意力相似。
基于位置的前馈网络
除了注意力子层外,编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络独立且相同地应用于每个位置。这包含两个线性变换和一个ReLU激活函数
:
虽然不同位置的线性变换相同,但层与层之间使用不同的参数。这种操作也可以描述为两个卷积核大小为1的卷积。输入和输出的维度是 ,内层的维度是 。
嵌入和Softmax
嵌入(Embedding)
:将离散的符号(如单词、字符)转换为连续的密集向量表示的过程。这些向量具有语义意义,相似的符号在向量空间中距离较近。例如,"猫"和"狗"的嵌入向量会比"猫"和"汽车"的更接近。
与其他序列转导模型类似,我们使用学习得到的嵌入
将输入标记和输出标记转换为维度 的向量。我们也使用普通的线性变换
和softmax函数
将解码器输出
转换为预测的下一个标记概率。
在我们的模型中,我们在两个嵌入层和softmax
前的线性变换中共享相同的权重矩阵。在嵌入层中,我们将这些权重乘以 。
表1:不同层类型的最大路径长度
、每层复杂度
和最小顺序操作数
。其中,n
是序列长度,d
是表示维度,k
是卷积核大小,r
是受限自注意力中的邻域大小。

位置编码
由于我们的模型不包含循环和卷积,为了让模型利用序列的顺序信息,我们必须注入一些关于标记在序列中相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加"位置编码
"。位置编码的维度与嵌入维度相同(),因此两者可以相加。
这里有多种位置编码可供选择,学习得到的和固定的都可以。在本工作中,我们使用不同频率的正弦和余弦函数:
其中pos
是位置,i
是维度。也就是说,位置编码的每个维度对应于一个正弦曲线。波长形成从2π
到10000·2π
的几何级数。我们选择这个函数是因为我们假设它能让模型轻松学习通过相对位置来关注,因为对于任何固定偏移量k
, 可以表示为 的线性函数。
我们还尝试了使用学习得到的位置嵌入,发现两种版本产生了几乎相同的结果(见表3)。我们选择正弦版本是因为它可能允许模型推断出比训练过程中遇到的序列长度更长的序列长度。
为什么选择自注意力机制
在本节中,我们将比较自注意力层
与循环层
和卷积层
在不同方面的特点。这些层通常用于将一个可变长度
的符号表示序列 映射到另一个等长序列 ,其中 ,比如典型序列转换编码器或解码器中的隐藏层。为论证使用自注意力的合理性,我们考虑三个期望目标:
-
每层的总计算复杂度;
-
可并行计算的数量,用所需的最小顺序操作数来衡量。
-
网络中长距离依赖的路径长度。
在许多序列转换任务中,学习长距离依赖关系
是一个关键挑战。影响学习这种依赖关系能力的一个重要因素是信号在网络中前向和后向传播所必须经过的路径长度。输入和输出序列中任意位置之间的这些路径越短,就越容易学习长距离依赖关系。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度。
如表1所示,自注意力层通过恒定数量的顺序执行操作
就能连接所有位置,而循环层则需要 个顺序操作。在计算复杂度方面,当序列长度 n
小于表示维度 d
时,自注意力层比循环层更快,这在机器翻译中使用的句子表示(如词片段和字节对编码)的最新模型中经常出现。
为了提高涉及超长序列任务的计算性能,可以将自注意力限制为仅考虑输入序列中以相应输出位置为中心的大小为 r
的邻域。这会将最大路径长度增加到 。我们计划在未来的工作中进一步研究这种方法。
单个核宽度为 的卷积层无法连接所有的输入和输出位置对。要实现这一点,在连续核的情况下需要 层卷积层堆叠,或在扩张卷积的情况下需要 层,这增加了网络中任意两个位置之间最长路径的长度。卷积层通常比循环层的计算开销更大,系数为 k
。然而,可分离卷积能显著降低复杂度至 。即使在 的情况下,可分离卷积的复杂度也等于自注意力层和逐点前馈层的组合,这正是我们在模型中采用的方法。
作为附加好处,自注意力可能产生更容易解释
的模型。我们检查了模型中的注意力分布
,并在附录中展示和讨论了示例。不仅是各个注意力头明显学会执行不同的任务,许多注意力头似乎表现出与句子句法和语义结构相关的行为。
训练
本节描述了我们模型的训练方案。
训练数据与批处理
我们在标准的 WMT 2014
英德数据集上进行训练,该数据集包含约450万个句子对。句子使用字节对编码(byte-pair encoding
)进行编码,共享源语言和目标语言的词表,包含约37000个词元。对于英法翻译,我们使用了明显更大的 WMT 2014
英法数据集,包含3600万个句子,并将词元分割成32000个词片(word-piece
)词表。句子对按照近似序列长度进行批处理。每个训练批次包含一组句子对,大约包含25000个源语言词元和25000个目标语言词元。
硬件与时间安排
我们使用一台配备8块 NVIDIA P100 GPU
的机器训练模型。对于使用文中描述的超参数的基础模型,每个训练步骤大约需要0.4秒。我们总共训练了100,000
步,即12小时。对于我们的大型模型(在表3的底部描述),每步用时1秒。大型模型训练了300,000步(3.5天)。
优化器
我们使用 Adam
优化器,参数设置为 , 和 。在训练过程中,我们根据以下公式调整学习率:
这相当于在前 warmup_steps
训练步骤中线性增加学习率,之后按步数的平方根的倒数比例降低学习率。我们使用 warmup_steps=4000
。
在Adam优化器中这三个参数的含义是:
是一阶动量的衰减率,控制历史梯度的影响程度。0.9意味着新的梯度占10%,过去的累积梯度占90%,使参数更新更平滑
是二阶动量的衰减率,用于控制学习率的自适应程度。0.98表示历史梯度平方的影响会更持久,让学习率调整更稳定
是一个很小的常数,添加到分母以防止除零,保证数值稳定性。通常取很小的值,对优化结果影响不大
这些是Adam常用的默认值,在实践中表现良好。
正则化
我们在训练期间采用三种类型的正则化:
-
残差丢弃:我们对每个子层的输出应用丢弃(
dropout
),然后再将其添加到子层输入并进行归一化。此外,我们对编码器和解码器堆栈中的嵌入和位置编码的和也应用丢弃。对于基础模型,我们使用 的丢弃率。 -
标签平滑:在训练期间,我们采用值为 的标签平滑。这会损害困惑度,因为模型学会了更加不确定,但能提高准确率和
BLEU
分数。
表2:Transformer
在英德和英法 newstest2014
测试中,以较少的训练成本达到了比之前最先进模型更好的 BLEU
分数。

结果
机器翻译
在 WMT 2014
英德翻译任务中,Transformer
大型模型(表2中的 Transformer (big)
)比之前报告的最佳模型(包括集成模型)的表现高出超过2.0个 BLEU
分,创造了新的 BLEU
分数记录:28.4。该模型的配置列在表3的最后一行。训练在8块 P100 GPU
上用时3.5天。即使是我们的基础模型也超越了所有先前发表的模型和集成模型,而且训练成本只是竞争模型的一小部分。
在 WMT 2014
英法翻译任务中,我们的大型模型达到了41.0的 BLEU
分数,超越了所有先前发表的单一模型,且训练成本不到之前最先进模型的四分之一。用于英法翻译的 Transformer
大型模型使用了 的丢弃率,而不是0.3。
对于基础模型,我们使用了通过平均最后5个检查点获得的单一模型,这些检查点以10分钟的间隔写入。对于大型模型,我们平均了最后20个检查点。我们使用束搜索,束宽为4,长度惩罚 。这些超参数是在开发集上实验后选择的。我们在推理过程中将最大输出长度设置为输入长度加50,但在可能的情况下提前终止。
表2总结了我们的结果,并将我们的翻译质量和训练成本与文献中的其他模型架构进行了比较。我们通过将训练时间、使用的 GPU
数量以及每个 GPU
的估计单精度浮点持续计算能力相乘来估算训练模型所使用的浮点运算次数。
模型变体
为了评估 Transformer
不同组件的重要性,我们以不同方式改变了基础模型,在英德翻译的开发集(newstest2013
)上测量性能变化。我们使用了如前一节所述的束搜索,但没有进行检查点平均。这些结果在表3中展示。
表3:Transformer
架构的变体。未列出的值与基础模型相同。所有指标都基于英德翻译开发集 newstest2013
。列出的困惑度是按照我们的字节对编码的每词片(per-wordpiece
)计算的,不应与每词(per-word
)困惑度进行比较。

在表3的(A)行中,我们改变了注意力头的数量以及注意力键值维度,同时保持计算量不变。虽然单头注意力比最佳设置低0.9 BLEU
,但头数过多时质量也会下降。
在表3的(B)行中,我们观察到减小注意力键的大小 会损害模型质量。这表明确定兼容性并不容易,可能需要比点积更复杂的兼容性函数。我们在(C)和(D)行中进一步观察到,正如预期的那样,更大的模型效果更好,且丢弃对避免过拟合非常有帮助。在(E)行中,我们用学习的位置嵌入替换了正弦位置编码,观察到与基础模型几乎相同的结果。
英语成分句法分析
为了评估Transformer
是否能够泛化到其他任务,我们在英语成分句法分析上进行了实验。这项任务具有特定的挑战:输出受到强结构约束,并且显著长于输入。此外,基于RNN
的序列到序列模型在小数据条件下无法达到最优水平。
我们在Penn Treebank
(宾夕法尼亚树库)的Wall Street Journal
(华尔街日报,简称WSJ
)部分训练了一个4层的transformer
模型,模型参数dmodel=1024
,训练数据约4万句。我们还在半监督设置下进行了训练,使用了更大的高可信度语料库和BerkleyParser
语料库,包含约1700万句。在仅使用WSJ
的设置中,我们使用了16K词汇量,在半监督设置中使用了32K词汇量。
我们仅在第22部分的开发集上进行了少量实验来选择dropout
(包括注意力和残差部分)、学习率和束搜索大小,其他所有参数均保持与英德翻译基础模型相同。在推理过程中,我们将最大输出长度增加到输入长度+300
。在WSJ
单独训练和半监督设置中,我们都使用了束大小为21
且α=0.3
的设置。
表4:Transformer
在英语成分句法分析上的良好泛化性能(结果基于WSJ
第23
部分)

我们的结果如表4
所示,尽管缺乏特定任务的调优,我们的模型表现出人意料地好,除了递归神经网络文法外,取得了优于所有先前报告模型的结果。
与RNN
序列到序列模型相比,即使仅在包含4万句的WSJ
训练集上训练,Transformer
的表现也优于BerkeleyParser
。
结论
在这项工作中,我们提出了Transformer
,这是第一个完全基于注意力机制的序列转换模型,它用多头自注意力机制取代了编码器-解码器架构中最常用的循环层。
对于翻译任务,Transformer
的训练速度明显快于基于循环层或卷积层的架构。在WMT 2014
英德翻译和WMT 2014
英法翻译任务上,我们都达到了新的最优水平。在前一个任务中,我们的最佳模型甚至超越了所有此前报告的集成模型的性能。
我们对基于注意力模型的未来充满期待,并计划将其应用于其他任务。我们计划将Transformer
扩展到涉及文本以外的输入和输出模态的问题,并研究局部的、受限制的注意力机制,以有效处理大规模输入和输出,如图像、音频和视频。使生成过程减少顺序依赖性也是我们的研究目标之一。
我们用于训练和评估模型的代码可在 https://github.com/tensorflow/tensor2tensor 获取。
致谢:我们感谢Nal Kalchbrenner
和Stephan Gouws
富有成效的评论、修正和启发。
注意力可视化
图3

图3:在编码器第5层(共6层)的自注意力机制中跟踪长距离依赖关系的示例。许多注意力头都关注动词"making"的远距离依赖,完成短语"making…more difficult"。此处仅显示针对单词"making"的注意力。不同颜色代表不同的注意力头。最佳以彩色查看。
图4

图4:两个位于第5层(共6层)的注意力头,显然参与了回指消解。上图:第5个头的完整注意力分布。下图:仅展示来自单词"its"的注意力分布(注意力头5和6)。注意这个词的注意力分布非常清晰明确。
图5

图5:许多注意力头表现出与句子结构相关的行为模式。我们在上面给出了两个这样的示例,来自编码器第5层(共6层)自注意力机制中的两个不同头。这些注意力头明显学会了执行不同的任务。
参考文献
-
Jimmy Lei Ba, Jamie Ryan Kiros, and Geoffrey E Hinton. Layer normalization. arXiv preprint arXiv:1607.06450, 2016.
-
Dzmitry Bahdanau, Kyunghyun Cho, and Yoshua Bengio. Neural machine translation by jointly learning to align and translate. CoRR, abs/1409.0473, 2014.
-
Denny Britz, Anna Goldie, Minh-Thang Luong, and Quoc V. Le. Massive exploration of neural machine translation architectures. CoRR, abs/1703.03906, 2017.
-
Jianpeng Cheng, Li Dong, and Mirella Lapata. Long short-term memory-networks for machine reading. arXiv preprint arXiv:1601.06733, 2016.
-
Kyunghyun Cho, Bart van Merrienboer, Caglar Gulcehre, Fethi Bougares, Holger Schwenk, and Yoshua Bengio. Learning phrase representations using rnn encoder-decoder for statistical machine translation. CoRR, abs/1406.1078, 2014.
-
Francois Chollet. Xception: Deep learning with depthwise separable convolutions. arXiv preprint arXiv:1610.02357, 2016.
-
Junyoung Chung, Çağlar Gülçehre, Kyunghyun Cho, and Yoshua Bengio. Empirical evaluation of gated recurrent neural networks on sequence modeling. CoRR, abs/1412.3555, 2014.
-
Chris Dyer, Adhiguna Kuncoro, Miguel Ballesteros, and Noah A. Smith. Recurrent neural network grammars. In Proc. of NAACL, 2016.
-
Jonas Gehring, Michael Auli, David Grangier, Denis Yarats, and Yann N. Dauphin. Convolutional sequence to sequence learning. arXiv preprint arXiv:1705.03122v2, 2017.
-
Alex Graves. Generating sequences with recurrent neural networks. arXiv preprint arXiv:1308.0850, 2013.
-
Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, pages 770-778, 2016.
-
Sepp Hochreiter, Yoshua Bengio, Paolo Frasconi, and Jürgen Schmidhuber. Gradient flow in recurrent nets: the difficulty of learning long-term dependencies, 2001.
-
Sepp Hochreiter and Jürgen Schmidhuber. Long short-term memory. Neural computation, 9(8):1735-1780, 1997.
-
Zhongqiang Huang and Mary Harper. Self-training PCFG grammars with latent annotations across languages. In Proceedings of the 2009 Conference on Empirical Methods in Natural Language Processing, pages 832-841. ACL, August 2009.
-
Rafal Jozefowicz, Oriol Vinyals, Mike Schuster, Noam Shazeer, and Yonghui Wu. Exploring the limits of language modeling. arXiv preprint arXiv:1602.02410, 2016.
-
Lukasz Kaiser and Samy Bengio. Can active memory replace attention? In Advances in Neural Information Processing Systems, (NIPS), 2016.
-
Lukasz Kaiser and Ilya Sutskever. Neural GPUs learn algorithms. In International Conference on Learning Representations (ICLR), 2016.
-
Nal Kalchbrenner, Lasse Espeholt, Karen Simonyan, Aaron van den Oord, Alex Graves, and Koray Kavukcuoglu. Neural machine translation in linear time. arXiv preprint arXiv:1610.10099v2, 2017.
-
Yoon Kim, Carl Denton, Luong Hoang, and Alexander M. Rush. Structured attention networks. In International Conference on Learning Representations, 2017.
-
Diederik Kingma and Jimmy Ba. Adam: A method for stochastic optimization. In ICLR, 2015.
-
Oleksii Kuchaiev and Boris Ginsburg. Factorization tricks for LSTM networks. arXiv preprint arXiv:1703.10722, 2017.
-
Zhouhan Lin, Minwei Feng, Cicero Nogueira dos Santos, Mo Yu, Bing Xiang, Bowen Zhou, and Yoshua Bengio. A structured self-attentive sentence embedding. arXiv preprint arXiv:1703.03130, 2017.
-
Minh-Thang Luong, Quoc V. Le, Ilya Sutskever, Oriol Vinyals, and Lukasz Kaiser. Multi-task sequence to sequence learning. arXiv preprint arXiv:1511.06114, 2015.
-
Minh-Thang Luong, Hieu Pham, and Christopher D Manning. Effective approaches to attention-based neural machine translation. arXiv preprint arXiv:1508.04025, 2015.
-
Mitchell P Marcus, Mary Ann Marcinkiewicz, and Beatrice Santorini. Building a large annotated corpus of english: The penn treebank. Computational linguistics, 19(2):313-330, 1993.
-
David McClosky, Eugene Charniak, and Mark Johnson. Effective self-training for parsing. In Proceedings of the Human Language Technology Conference of the NAACL, Main Conference, pages 152-159. ACL, June 2006.
-
Ankur Parikh, Oscar Täckström, Dipanjan Das, and Jakob Uszkoreit. A decomposable attention model. In Empirical Methods in Natural Language Processing, 2016.
-
Romain Paulus, Caiming Xiong, and Richard Socher. A deep reinforced model for abstractive summarization. arXiv preprint arXiv:1705.04304, 2017.
-
Slav Petrov, Leon Barrett, Romain Thibaux, and Dan Klein. Learning accurate, compact, and interpretable tree annotation. In Proceedings of the 21st International Conference on Computational Linguistics and 44th Annual Meeting of the ACL, pages 433-440. ACL, July 2006.
-
Ofir Press and Lior Wolf. Using the output embedding to improve language models. arXiv preprint arXiv:1608.05859, 2016.
-
Rico Sennrich, Barry Haddow, and Alexandra Birch. Neural machine translation of rare words with subword units. arXiv preprint arXiv:1508.07909, 2015.
-
Noam Shazeer, Azalia Mirhoseini, Krzysztof Maziarz, Andy Davis, Quoc Le, Geoffrey Hinton, and Jeff Dean. Outrageously large neural networks: The sparsely-gated mixture-of-experts layer. arXiv preprint arXiv:1701.06538, 2017.
-
Nitish Srivastava, Geoffrey E Hinton, Alex Krizhevsky, Ilya Sutskever, and Ruslan Salakhutdinov. Dropout: a simple way to prevent neural networks from overfitting. Journal of Machine Learning Research, 15(1):1929-1958, 2014.
-
Sainbayar Sukhbaatar, Arthur Szlam, Jason Weston, and Rob Fergus. End-to-end memory networks. In C. Cortes, N. D. Lawrence, D. D. Lee, M. Sugiyama, and R. Garnett, editors, Advances in Neural Information Processing Systems 28, pages 2440-2448. Curran Associates, Inc., 2015.
-
Ilya Sutskever, Oriol Vinyals, and Quoc VV Le. Sequence to sequence learning with neural networks. In Advances in Neural Information Processing Systems, pages 3104-3112, 2014.
-
Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, and Zbigniew Wojna. Rethinking the inception architecture for computer vision. CoRR, abs/1512.00567, 2015.
-
Vinyals & Kaiser, Koo, Petrov, Sutskever, and Hinton. Grammar as a foreign language. In Advances in Neural Information Processing Systems, 2015.
-
Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, et al. Google’s neural machine translation system: Bridging the gap between human and machine translation. arXiv preprint arXiv:1609.08144, 2016.
-
Jie Zhou, Ying Cao, Xuguang Wang, Peng Li, and Wei Xu. Deep recurrent models with fast-forward connections for neural machine translation. CoRR, abs/1606.04199, 2016.
-
Muhua Zhu, Yue Zhang, Wenliang Chen, Min Zhang, and Jingbo Zhu. Fast and accurate shift-reduce constituent parsing. In Proceedings of the 51st Annual Meeting of the ACL (Volume 1: Long Papers), pages 434-443. ACL, August 2013.
transformer发展
transformer模型变体
自2017
年发表的这篇奠基性论文《Attention is All You Need
》中提出的原始 transformer
架构之后,transformer的变体模型越来越多,同时适用的领域也越来越精细化,下表列出了近几年 transformer
的变体模型
及其特点等信息:
模型名称 | 发表年份 | 特点 | 优势 | 劣势 |
---|---|---|---|---|
BERT | 2018 | 双向编码预训练语言模型,使用遮掩语言模型(MLM)和下一句预测(NSP)任务 | 在多个NLP任务上取得了显著的性能提升 | 预训练和微调需要大量计算资源,缺乏对生成任务的支持 |
GPT | 2018 | 基于Transformer的单向自回归语言模型 | 在生成任务上表现出色,模型架构简单,易于扩展 | 单向性限制了对上下文信息的完整捕捉 |
GPT-2 | 2019 | 扩大了GPT的规模,参数量增加,生成更长的文本 | 文本生成更连贯,表现更佳 | 存在滥用风险,计算资源需求高 |
RoBERTa | 2019 | 改进了BERT,取消NSP任务,增加训练数据和训练时间 | 在多项NLP任务上超过了BERT的性能 | 训练成本高,依赖大量数据 |
ALBERT | 2019 | 引入参数共享和因子化嵌入,减少模型参数量 | 模型更小,训练速度更快,性能接近BERT | 参数共享可能限制模型的表达能力 |
XLNet | 2019 | 结合自回归和自编码的预训练方法,使用Transformer-XL作为基础 | 超越了BERT在多个任务上的性能,能够捕捉双向上下文 | 模型更复杂,训练难度增加 |
T5 | 2019 | 将所有NLP任务统一为“文本到文本”的框架,进行大规模预训练 | 在多项任务上表现出色,统一的架构便于迁移学习 | 模型体积庞大,训练和推理成本高 |
ELECTRA | 2020 | 使用替换词检测作为预训练任务,提高训练效率 | 在相同计算预算下,性能优于BERT | 训练过程更复杂,可能需要精细的超参数调节 |
Reformer | 2020 | 利用局部敏感哈希(LSH)和可逆残差网络,减少内存和计算需求 | 能处理长序列,降低计算复杂度和内存占用 | 实现复杂度增加,可能在某些任务上不稳定 |
Longformer | 2020 | 采用稀疏注意力机制,增强长序列处理能力 | 能有效处理长文档,在长序列任务上性能优异 | 对于短序列任务优势不明显,模型复杂度增加 |
Performer | 2020 | 使用随机特征映射近似软max注意力,实现线性计算复杂度 | 能够高效处理长序列,计算效率高 | 近似可能导致性能下降,在某些任务上效果不如精确注意力 |
Linformer | 2020 | 通过低秩投影将注意力机制的复杂度降为线性 | 大幅降低注意力的计算和内存需求,适用于长序列 | 低秩近似可能损失部分信息,影响模型性能 |
BigBird | 2020 | 结合局部、随机和全局注意力机制,扩展到更长的序列 | 能处理非常长的序列,在长文本理解上表现良好 | 模型结构更复杂,实现和调试难度增大 |
ViT(Vision Transformer) | 2020 | 将Transformer应用于图像任务,将图像划分为patches进行处理 | 在图像分类任务上取得了优异性能,突破了传统CNN的限制 | 需要大量数据进行预训练,对小样本数据集表现较差 |
Switch Transformer | 2021 | 基于专家混合(MoE)的稀疏激活模型,极大地扩大模型规模 | 增加模型容量的同时保持计算成本较低,在大规模预训练中表现出色 | 通信和负载均衡成为训练的瓶颈,模型复杂度高 |
Swin Transformer | 2021 | 使用层次化的Transformer结构和滑动窗口机制,适用于视觉任务 | 在图像分类、目标检测等任务上性能优异,具有良好的扩展性 | 模型结构复杂,训练时间较长,需要更多资源 |
GPT-3 | 2020 | 超大规模语言模型,拥有1750亿参数,具备强大的生成能力 | 具有卓越的零样本和少样本学习能力,可处理多种任务 | 参数规模庞大,训练和推理成本极高,存在偏见和不准确性 |
GPT-4 | 2023 | 多模态模型,支持文本和图像输入,进一步提升推理能力 | 在广泛的任务上表现优异,更好的上下文理解和生成能力 | 模型巨大,推理成本高,仍存在生成错误信息的风险 |
这些 transformer
变体各有特点,通过在模型结构、预训练任务和训练策略等方面的创新,不断提升了模型在各种任务上的性能。然而,随着模型规模的扩大,训练和推理的计算成本也显著增加,如何在性能和效率之间取得平衡仍是一个重要的研究方向
。
优化与创新方向
细分看来,上述这些模型,主要在以下几个方向上进行了优化和创新
:
-
模型架构优化
-
稀疏注意力机制:为了降低计算复杂度,提高对长序列的处理能力,一些模型引入了稀疏注意力机制。例如:
- Longformer:采用局部和全局的稀疏注意力模式,能够处理更长的文本。
- BigBird:结合局部、随机和全局注意力,扩展了模型的上下文范围。
- Reformer:利用局部敏感哈希(LSH)替代传统的点积注意力,减少了计算和内存开销。
-
线性化注意力:通过近似方法将注意力机制的计算复杂度从二次降为线性。例如:
- Performer:使用随机特征映射近似软max注意力,实现线性时间复杂度。
- Linformer:采用低秩矩阵分解技术,降低了注意力矩阵的维度。
-
层次化结构:在视觉领域,引入了层次化的特征表示,以更好地捕捉不同尺度的信息。例如:
- Swin Transformer:使用滑动窗口和金字塔结构,适用于图像和视频任务。
-
-
预训练任务和目标的改进
-
新的预训练任务:为了更有效地学习语言表示,模型引入了新的预训练任务。
- BERT:使用了遮掩语言模型(MLM)和下一句预测(NSP)。
- RoBERTa:改进了预训练策略,取消了NSP任务,使用动态遮掩。
- ELECTRA:提出了替换词检测任务,训练一个判别器来区分真实词和生成的假词,提高了训练效率。
-
自回归与自编码的结合:
- XLNet:融合了自回归和自编码的预训练方法,通过掩码排列方式捕获双向上下文信息。
-
-
模型规模的扩展
-
参数规模的增加:为了提升模型的表达能力,研究者们不断扩大模型的参数规模。
- GPT-2:参数量达到15亿,比GPT大了一个数量级。
- GPT-3:进一步扩展到1750亿参数,具备强大的生成和推理能力。
- Switch Transformer:采用专家混合(MoE)结构,实现了万亿级参数的模型。
-
稀疏激活和专家模型:
- Switch Transformer:在模型中引入了稀疏激活的专家层,每次只激活部分参数,减少计算成本。
-
-
参数高效化
- 参数共享和压缩:为了减少模型参数量,提升训练和推理效率。
- ALBERT:使用跨层参数共享和因子化嵌入,将参数量大幅减少,同时保持性能。
- DistilBERT:通过蒸馏技术,从大型模型中学习,生成轻量级模型。
- 参数共享和压缩:为了减少模型参数量,提升训练和推理效率。
-
任务统一化
- 统一的框架处理多种任务:
- T5(Text-to-Text Transfer Transformer):将各种NLP任务统一建模为文本到文本的问题,方便了多任务学习和迁移学习。
- 统一的框架处理多种任务:
-
跨模态扩展
- 将Transformer应用于视觉和多模态任务:
- ViT(Vision Transformer):将Transformer直接应用于图像分类任务,效果超过了一些经典的卷积神经网络。
- GPT-4:支持文本和图像输入的多模态模型,能够理解并生成跨模态的内容。
- 将Transformer应用于视觉和多模态任务:
-
更好的长程依赖建模
- 相对位置编码和循环机制:
- Transformer-XL:引入了递归机制和相对位置编码,改善了对长序列的依赖。
- XLNet:利用相对位置编码,增强了模型对长距离依赖的捕捉能力。
- 相对位置编码和循环机制:
-
计算效率和内存优化
-
可逆网络和压缩技术:
- Reformer:引入可逆残差网络,减少了模型的内存占用,因为可以在反向传播中无需存储中间激活值。
-
低秩和近似计算:
- Linformer:通过低秩近似,减少了注意力矩阵的尺寸,降低了计算量。
- Performer:用核方法近似softmax函数,提升了计算效率。
-
-
训练策略的改进
- 大规模数据和训练技巧:
- RoBERTa:增加了训练数据量,延长了训练时间,并调整了超参数,取得了比BERT更好的性能。
- DeepSpeed和Megatron-LM:提供了高效的模型并行和数据并行策略,支持训练超大规模模型。
- 大规模数据和训练技巧:
-
应用领域的拓展
-
领域特定的预训练:
- BioBERT、SciBERT:针对生物医学和科学文献进行预训练,提升了在特定领域的性能。
-
多语言和跨语言模型:
- mBERT、XLM-R:在多语言数据上进行预训练,支持跨语言的理解和生成。
-
综合上述内容,这些改进旨在提升模型的性能、效率和适用范围等等,以应对不同的任务需求和计算资源限制。
如何在新任务上优化 transformer 架构?
个人认为,可从以下几个方面考虑:
-
架构创新
:通过改进注意力机制和引入新的网络结构,提升模型对长序列和复杂任务的处理能力。 -
预训练策略
:设计新的预训练任务和目标,使模型能够更有效地学习新任务所需特征。 -
规模和效率
:扩大模型规模以提高性能,同时引入参数共享、模型压缩和稀疏激活等技术,优化计算资源的利用。 -
任务和领域拓展
:将Transformer应用于新的领域和任务,如基因组学数据分析、计算机视觉、多模态处理等等。 -
训练优化
:改进训练算法和并行策略,以支持大规模模型的训练,降低训练时间和资源消耗。
transformer代码实现举例
作为参考,这里的示例基于Transformer
架构的语言模型实现,具体是一个仅包含解码器
的变体,功能是语言生成
。
先来回顾一下transformer模型中的概念:
嵌入层
:将词汇等源转换为密集向量表示位置编码
:为序列中的每个位置添加位置信息Transformer解码器
:核心计算单元输出层
:将结果映射回词汇等源大小的空间
重要参数:
vocab_size
: 词汇表等源大小embed_size
: 嵌入维度num_heads
: 注意力头数hidden_dim
: 前馈网络维度num_layers
: 解码器层数
构建 transformer 模型
1 | import torch |
训练数据集
transformer架构的模型,整体训练成本
都非常高,这里仅作演示,我们极大缩小训练量级
,将以下文本存为“sentence.txt
”作为训练数据:
1 | 数学 |
定义TextDataset
类:
1 | class TextDataset(Dataset): |
通过以下方式加载数据集
:
1 | dataset = TextDataset('sentence.txt') |
训练模型
创建模型并发送:
1 | model = TransformerDecoderModel(vocab_size=dataset.vocab_size, embed_size=512, num_heads=8, hidden_dim=2048, num_layers=6) |
模型优化器
和损失函数
设置:
1 | # 初始化优化器,这里使用Adam优化器,设置学习率,从模型中获取参数 |
优化器和损失函数可参考这篇文章:
开始训练:
1 | # 训练模式 |
仅用于演示,这里只训练了3轮
,训练大致耗时几分钟,过程截图:
测试模型
1 | import torch |
效果如下:
不出意外的烂哈哈哈,如果要提升质量
,就需要在增加训练集量级
和训练周期
的基础之上,优化模型参数
了。