文章目录
前言
Transformer可以说是深度学习领域最重要的,里程碑式的工作之一,发表于2017年的NIPS。该模型开创了自MLP(多层感知机)、CNN(卷积神经网络)和RNN(循环神经网络)之后的第四种基础模型。这项工作也成为当前AIGC盛行的最重要的基础,是Google公司对人工智能领域的卓越贡献。
Transformer论文中的所有作者都是共同一作,这种情况一般是比较少见的。但是,这篇文章中也详细介绍了每一名作者对文章所做的贡献是什么,而非只是给每个作者的贡献用几个很虚的词进行描述。反观当今学术界的共同一作挂名现象,不得不说有些论文的共同一作已经失去了原本的意义,可悲可叹。
论文阅读
研究现状
- 目前的主流序列转录模型:主流的序列转录模型使用复杂的循环神经网络或卷积神经网络,包含一个编码器和一个解码器。性能最好的模型中,会在编码器和解码器之间增加一种注意力机制。对于自然语言处理中的主流序列转录任务,目前最好的方法都是基于RNN、LSTM和GRU的。
- 循环神经网络存在的问题:循环神经网络需要通过上一个时间步的隐藏状态和当前时刻的输入来获取当前时间步的隐藏状态,这样就妨碍了模型的并行程度。
- 注意力机制在编解码器中的应用现状:注意力机制往往用于循环神经网络编解码器中,将编码器的内容高效地传递给解码器,但是,目前还没有仅仅基于注意力机制的模型架构。
工作内容
- 研究概述:本文提出了一种简单的网络架构Transformer,该架构完全基于注意力机制,而舍弃了循环神经网络和卷积神经网络。该模型中将循环神经网络中的所有循环层替换为了多头注意力,不仅能够取得更好的性能,而且受益于很好的并行策略,该模型的训练时间也显著更低。
- 与CNN和RNN的联系:Transformer中通过多头注意力机制,模拟卷积神经网络的多输出通道的优点;通过完全并行,克服了循环神经网络中需要逐时间步计算隐藏状态的缺点。
模型架构
- 编解码器架构 :Transoformer仍然基于编解码器的基本架构,即包含一个编码器和一个解码器。
- 词元嵌入层: 将每一个词元转换为一个向量;
- 编码器:编码器由6个完全相同的神经网络层组成,每个层都包含两个子层,分别是一个多头注意力子层和一个MLP子层(包含两个线性层)。这两个子层内部都有残差连接,输出都经过了层归一化。编码器的输出作为解码器的输入。出于方便残差连接的简单考虑,所有输出向量的维度都控制为512。
- 解码器:解码器也由多个相同的块构成。与编码器的块不同,解码器的块中包含三个子块,其中两个子块与编码器的两个子块相同,但是第三个子块是一个带掩码的多头注意力机制子块(当然其中也有残差连接和层归一化)。之所以需要带掩码的模块,是因为按照逻辑,解码器在计算某个时间步的输出时不应该看到该时间步及其之后的输入内容,因为所有时间步的输入是一次性传入解码器的。
- 层归一化:对每一个样本对应的特征向量做一个标准化。
- 注意力机制:注意力机制中有三个重要概念,分别是Key(简称K)、Value(简称V)和Query(简称Q)。计算注意力机制的过程如下:首先,需要计算Query和每个Key之间的相似度;然后,根据Query和每个Key之间的相似度为每个Value分配权重,与Query越相似的Key对应Value的权重越大;最后,对Value进行加权平均求和,即获得最终的Output。Transformer中,除了解码器中的多头注意力子层,对于输入的序列,该序列同时作为Q K和V,即被称为自注意力机制。
- 两种常见的注意力机制:加性注意力机制和点积注意力机制。Transformer中采用的是改进型的点积注意力机制。
- 相似度的计算:最简单的相似度计算可以采用余弦相似度,即将两个向量进行内积,值越大表示两个向量的方向越相近,也就是相似度越高。在Transformer中,对点积注意力进行了Scale改进,也就是除以Key的维度的平方根,从而防止传递的梯度过小使得模型难以训练。
- 多头注意力机制:Transformer中没有做高维的注意力函数计算,相反,它将注意力函数中的各个序列都进行了投影降维,并基于降维后的序列,进行了8次注意力函数计算,并将计算的结果拼接在一起。这样的方式模拟了卷积神经网络中的多通道输出,从而尽可能地保留了特征识别结果的多样性。
- 位置编码:由于注意力机制的计算过程之中并没有蕴含时序信息,因此需要显式地向模型中输入时序信息。在Transformer中,在输入部分增加了位置编码,该位置编码是基于当前词元的位置下标和三角函数进行计算的。最终,将位置编码和嵌入后的词元向量直接相加,就得到了每个词的完整表示。
训练过程
采用8张NVIDIA P100 GPU进行训练(现在Google的工作大部分都是基于更快的TPU进行训练的了,而非使用GPU),使用Adam优化器。对于学习率,采用的是一种先提升后降低的策略;模型中采用了大量Dropout技术进行正则化,dropout率设置为0.1。另外,还使用了Inception V3中的标签平滑化操作来进行另一种正则化。
实验结果
- 机器翻译任务:在两个机器翻译任务上,该模型在性能上更加优越,并且有更高的并行程度,需要显著更少的训练时间。在一项英语到德语的翻译实验中,该模型比包括集群算法在内的最好结果高出了两个BLEU;在另一项英语到法语的翻译任务中,该模型实现在所有单模型中最好的性能,并且训练的速度要比其他的架构都快很多。
- 另一项NLP任务:另外,在另一个NLP任务上,Transformer也取得了很好的效果。
模型代码
存放于Github上的tensor2tensor模块中。
其他评价
由于注意力机制对整个模型的归纳偏置更少,因此往往需要更多的数据和更大的模型才能达到很好的效果。