深度学习领域的里程碑文章 Transformer 阅读详细笔记(2025.2.27 - 2025.3.3)

发布于:2025-03-04 ⋅ 阅读:(6) ⋅ 点赞:(0)

文章地位

  • 深度学习领域最重要的文章之一。
  • 学术界认为该模型开创了自 MLPCNNRNN 之后的第四大类模型。

研究背景

  • 主流的序列转录模型都是基于复杂的卷积神经网络或循环神经网络构成的编码器-解码器架构的。这些模型中,性能最好的模型会在编码器和解码器的连接过程中添加一种注意力机制。
  • 循环神经网络类的模型每一个时间步需要根据上一个时间步的隐藏状态和当前时间步的输入来确定本时间步的隐藏状态(输出),这样的工作原理妨碍了训练过程的并行化,尤其是对于较长的序列来说问题更加严重。尽管最近的工作已经对模型进行了显著的改进,但是这个根本性的问题仍然悬而未决。
  • 注意力机制可以使得模型的输入和输出之间构建全局的依赖关系。
  • 有研究者尝试使用卷积神经网络作为基本模块来减少循环神经网络中的时序计算。在这些模型中,对于所有输入和输出位置的隐藏状态的计算是并行的。但是,将输入序列中任意两个位置关联在一起的操作次数会随着两个位置距离的增加而显著增加,这使得这一类的模型难以学习远距离的信息表示。
  • 自注意力机制有时也被称为内部注意力机制,是一种将一条序列中不同位置联系起来计算该序列的向量表示的注意力机制。在本文章的模型提出之前,自注意力机制已经被成功应用于包括阅读理解、摘要总结、文本精炼等任务中。

神经网络模型

  • Transformer 仅仅依赖于注意力机制,完全舍弃了卷积层和循环层,而是用多头注意力机制层进行代替。
  • Transformer 中只需要常量次数的操作就可以把序列中任意两个位置关联在一起。
  • Transformer 采用的基本架构仍然是编码器-解码器架构。
  • Transformer 的编码器由六个完全相同的块组成,每一个块中有几个层。第一个层是一个多头自注意力机制层,第二个是一个 MLP。每一个层都包含有残差连接,并且层的输出结果都会进行层归一化。
  • Transformer 的解码器也由六个完全相同的块组成。在每一个块中,除了和编码器相同的两个层,还加入了第三个层,用于对编码器的输出结果执行多头注意力计算。与编码器类似,解码器的层也采用了残差连接和层归一化。
  • Transformer 解码器块中的第一个多头注意力机制层进行了掩码操作,使得当前时刻的输出仅取决于输入序列中当前时刻之前的位置的输入,而与之后的输入无关。具体而言,将这些位置的值都变为趋近于无穷大,使得通过 Softmax 函数后这些位置的位置都趋近于零。
  • 出于残差连接使用的方便和超参数调整的考虑,包括嵌入层在内的 Transformer 模型中所有的层,输出维度都固定为 512
  • 模型采用的注意力类型是归一化点积注意力机制。这种注意力机制实质就是对两个向量进行内积,将内积结果除以 √dk,然后应用 Softmax 函数获取权重。这里除以√dk 是因为当 dk 的值很大时,点积的计算结果会非常大,将 Softmax 函数计算结果推到梯度非常小的区域(即使用 Softmax 之后大的值会相对更大,小的值会相对更小),因此需要将点积结果放缩来抵消这样的影响。
  • QueryKeyValue 都先通过一个线性层投影到一个低的维度(64),然后使用得到的低维向量进行多次(8次)归一化点积注意力计算,将每一个计算结果连接为一个完整的向量。通过控制投影后的维度和头的个数,使得输出向量的维度和输入向量的维度相同。
  • Transformer 的解码器中,编码器最终的输出结果作为 KeyValue,而解码器块中经过了带掩码的注意力机制子层的结果作为 Query。因此简单理解就是解码器将编码器的输出按照一定的比例取出来进行重新搭配,使得解码器中的每个位置都可以覆盖输入序列中的所有位置。
  • Transformer 编码器块和解码器块中的 MLP 针对输入序列中的每一个元素进行一次计算,也就是所有的序列元素共享的。该 MLP 只有一个隐藏层,维度是 2048,因此是先升维再降维。使用的激活函数是 ReLU
  • 嵌入层用于将输入序列中的元素转换为向量以及将模型的输出转换为向量,向量的维度都是 512。出于简单考虑,模型输入部分和输出部分的嵌入层,以及模型输出结果所经过的线性层采用相同的权重,使得训练过程更加简单。
  • 由于注意力机制本身并没有利用序列中的时序信息,因此需要将序列中的时序信息显式地传递给模型。 Transformer 中采用了位置编码的方式,使用三角函数来表示每一个位置的元素在序列中的位置编码,然后将位置编码和每一个位置上的元素的编码直接相加。
  • 对于每一个子层,在该层的输出进行残差计算和层归一化计算之前,使用了一个比率为 0.1 的 Dropout。虽然在该模型中 Dropout 的使用比例不是很高,但是使用了大量的 Dropout 层。
  • 标签平滑:在 Inception V3 模型的论文中被大家了解的一种方法,即由于 Softmax 函数逼近 1 非常困难,因此将上限的阈值降低。Transformer 使用了这种方法,将上限的阈值降低到 0.9

模型训练和评测

  • 用于模型训练和评测的代码已经被放在 Github 上的 tensor2tensor 仓库中。
  • 使用的优化器是 Adamβ1 设置为 0.9β2 设置为 0.98,学习率设置为 1e-7。学习率根据函数进行计算,模型越宽学习率越低,总体学习率的变化趋势是先升高再降低。

模型性能

  • Transformer 在2014年的 WMT 英语到德语翻译任务中的性能超过了目前最好的模型(包括集群模型)两个多 BLEU,达到了 28.4 BLEU。
  • 模型在2014年的 WMT 英语到法语的翻译任务中达到了单个模型的最佳性能 41.0 BLEU,该结果是在8个 P100 GPU上训练了 3.5 天后获得,而训练成本仅仅是目前文献中最好性能的模型的训练成本的一小部分。
  • 除了有更好的翻译性能,Transformer 还有更好的并行度,并且需要少得多的训练时间。

其他知识点

  • 由于 Transformer 的模型架构相对而言比较固定,能够调整的参数很少,基本上只有使用的编码器/解码器网络块的个数、网络中每一个层的输出维度等,因此诸如 BERTGPT 一类的工作其实模型上的创新并不是很大。
  • 层归一化:这种归一化方式因为 Transformer 这篇论文而广为人知,重要的是了解其与批量归一化的区别。
    • 批量归一化解释:对于模型训练过程中的某一个批次,批量归一化会对该批次中所有样本的某个属性(也就是某个列)进行标准化。在模型预测过程中,会计算测试集中所有样本的均值和标准差,然后对每一个列进行标准化。
    • 层归一化解释:对每一个样本的特征向量执行标准化操作。由于序列问题中每个输入序列的长度可能不等同,并且层归一化无需记录全局的样本均值方差,因此层归一化更加适用。
  • 注意力机制:注意力机制描述的是一个输入序列(Query),以及一组键值对(Key-Value)之间的映射关系。输出序列是 Value 的一组加权和(因此和 Value 的维度是相同的),其中的权重根据输入序列和键的相似度进行计算。对于不同的注意力机制,有不同的相似度计算方法。
  • 两种常用的注意力机制:两种常用的注意力机制分别是加性注意力机制和点乘注意力机制。加性注意力机制使用具有单个隐藏层的前馈神经网络来计算相似度函数。两种注意力机制在理论复杂度上相似,但是点积注意力在实践中要快得多并且有更高的空间利用效率,因为它可以使用高度优化的矩阵乘法代码来实现。
  • 自注意力机制:在这种注意力机制中,KeyValueQuery 都是相同的序列。
  • 受限的自注意力机制Transformer 的作者来论文中提出,即每次进行自注意力操作,都只与最近的一些元素进行计算,这样每一层的计算复杂度更低,但是有一些其他的缺点,现在一般很少使用。
  • Adam 优化器对学习率并不是特别敏感。
  • TransformerCNN 等模型有一个更加广泛的归纳偏置,使得它可以处理更加一般化的信息;但是,与之相伴的代价是 Transformer 的训练需要更多的数据训练更大的模型,因此训练起来的花费非常昂贵。