Attention Is All You Need

前言

Transformer 模型和核心

  • 不同token的权重大小分配,会影响机器翻译的结果的准确性
  • Transformer模型试图仅仅利用自注意力机制,去学习到尽可能好的一组对tokens的权重数值分配,以获得更好的机器翻译效果

不同token的权重分配对机器翻译结果的准确性有着显著影响。这些权重反映了模型在生成翻译时对输入句子中不同部分的关注程度。在Transformer模型中,这些权重通常由自注意力机制计算得出。

自注意力机制使模型能够为每个输入token分配一个权重,这决定了在生成翻译时每个token应该给予多少注意力。如果一个词对于当前生成的翻译词语非常重要,那么它应该获得更高的权重;如果一个词与当前的上下文关系不大,它的权重就会较低。正确的权重分配可以帮助模型更好地捕获语言的语义和语法结构,从而生成准确度更高的翻译。

例如,如果源语言句子中的某个词在目标语言中有直接对应的词,那么在翻译过程中,对应于源语言该词的权重应该较高。而在处理长距离依赖时,自注意力能够关注到句子中相距较远的词,识别它们之间的关联,这通常对于翻译的质量至关重要。

因此,注意力权重的合理分配对于机器翻译模型的性能至关重要,这也是为什么自注意力机制能够在诸如翻译这样的复杂任务中取得卓越成绩的原因之一。

为什么使用自注意力机制?

  • 擅长捕获 long range dependencies
    是的,自注意力机制特别擅长捕获长距离依赖(long-range dependencies)。在传统的循环神经网络(RNN)中,信息需要经过序列中的每个时间步传递,而长距离的信息传递会导致梯度消失或爆炸,从而影响模型学习这些依赖关系。相比之下,自注意力机制允许模型直接关注序列中任意两个位置,无论它们之间有多远的距离,这使得模型能够更容易地捕捉和利用远距离的信息
    这种特性对于翻译、文本摘要、问答系统等任务至关重要,因为这些任务常常需要理解和整合输入序列中相隔很远的词语之间的关系。例如,在翻译长句子时,句首的词可能会影响句尾的翻译,自注意力机制就能够在这些词之间建立直接的联系,而无需通过复杂的中间步骤。这就是为什么Transformer模型在处理这类涉及长距离依赖的问题时,比传统模型更为有效。

  • 使得训练时可以并行计算
    没错,自注意力机制的一个关键优势就是能够实现训练时的并行计算。在循环神经网络(RNN)中,每个时间步的计算依赖于前一个时间步的输出,这种顺序依赖关系限制了并行处理的能力。换句话说,在RNN中,你需要先计算出第一个词的隐藏状态,然后才能计算第二个词的,以此类推,这个过程是顺序的。
    相比之下,自注意力机制可以同时处理输入序列中的所有位置。因为每个位置的输出可以独立计算(即不依赖于序列中其他位置的计算结果),所以在给定所有输入的情况下,所有的位置都可以同时计算。这使得在训练阶段时,可以高效地利用现代硬件架构(比如GPU或TPU)来并行处理数据,显著加快了训练速度。
    这种并行化的能力是Transformer模型相比于传统的循环网络架构更高效的原因之一,它使得Transformer可以在较短的时间内处理大规模的数据集,从而在复杂的自然语言处理任务中取得良好的性能。

摘要

介绍了在提出Transformer模型之前,主流的序列转换模型是基于复杂的循环神经网络(RNN)或卷积神经网络(CNN),这些模型通常包含编码器(encoder)和解码器(decoder)。在性能最佳的模型中,编码器和解码器通过注意力机制(attention mechanism)连接。然而,作者提出了一种新的网络架构——Transformer,它完全基于注意力机制完全摒弃了循环和卷积操作

Transformer的优势体现在几个方面:首先,它在质量上优于现有的模型,实验结果显示在WMT 2014的英德翻译任务上,Transformer模型的BLEU分数达到28.4,比现有最好的结果高出2个BLEU点。其次,在WMT 2014的英法翻译任务上,Transformer模型取得了41.0的BLEU分数,创下了单模型新的最佳记录。此外,Transformer模型具有更高的并行化能力,并且训练时间大大缩短。例如,在八个GPU上训练3.5天便完成了训练过程,这比文献中最好的模型的训练成本少很多。

简而言之,这段内容强调了Transformer模型在处理序列转换任务时的高效性和有效性,特别是在机器翻译领域中取得了显著的成果。

附注:BLEU 是机器翻译领域的一个评价指标

1. 引言

讨论了循环神经网络(RNN)、长短期记忆网络(LSTM)和门控循环单元(GRU)在序列建模和转换问题(如语言建模和机器翻译)中的应用,并指出了它们的局限性,然后引出了Transformer模型的提出。

  1. 循环神经网络的特点和局限性:

    • RNN、LSTM和GRU被广泛用于序列建模和转换问题,因为它们能够处理变长序列数据,通过隐藏状态 h t h_t ht 捕捉序列中的时序依赖性。
    • 这些模型通常沿输入和输出序列的符号位置进行计算,生成一系列隐藏状态,其中每个状态 h t h_t ht 都是基于前一个隐藏状态 h t − 1 h_{t-1} ht1 和当前位置 t t t 的输入计算得到的。
    • 由于RNN的这种逐步计算特性,它难以实现训练过程中的并行化,尤其是在处理长序列时,内存限制会减少跨示例的批处理能力。
  2. 注意力机制的优势:

    • 注意力机制允许模型捕获输入和输出序列中元素之间的依赖关系,而不受它们在序列中位置距离的限制
    • 在大多数情况下,注意力机制是与循环网络结合使用的,以弥补RNN在处理长距离依赖时的不足。
  3. Transformer模型的创新点:

    • Transformer完全抛弃了循环计算的方式,转而全面依赖注意力机制来捕获输入和输出之间的全局依赖关系。
    • 这种设计使得Transformer能够在训练过程中实现更高的并行度,并且在较短的时间内(例如,使用八个P100 GPU训练12小时)达到翻译质量的新高。

总的来说,这段内容强调了传统循环神经网络在序列处理任务中的局限性,并介绍了Transformer模型如何通过全面采用注意力机制来克服这些限制,实现更高效的训练过程和更好的性能。

2. 背景

讨论了减少序列计算的目标及其在不同模型中的实现,特别强调了Transformer模型在这方面的创新和优势。

  1. 序列计算的减少目标:

    • 扩展的神经GPU(Extended Neural GPU)、ByteNet和ConvS2S等模型使用卷积神经网络作为基本构建块,目标是减少序列计算。
    • 这些模型可以并行计算所有输入和输出位置的隐藏表示。
  2. 计算复杂度:

    • 在这些卷积模型中,两个任意输入或输出位置之间的信号关联所需的操作数量随位置之间的距离增长。对于ConvS2S,这种增长是线性的;对于ByteNet,增长是对数的。
    • 这种计算复杂度的增长使得模型难以学习远距离位置之间的依赖关系。
  3. Transformer的改进:

    • Transformer模型减少了这种计算,将任意两个位置之间的操作数降至常数级别,这意味着无论输入序列的长度如何,计算复杂度保持不变。
    • 然而,这种设计可能会导致有效分辨率降低,因为它通过平均加权注意力位置来实现。为了解决这个问题,Transformer采用了多头注意力机制(Multi-Head Attention)。
  4. 自注意力(Self-attention):

    • 自注意力(有时称为内部注意力)是一种注意力机制,用于关联单个序列中不同位置的信息,以计算序列的表示。
    • 自注意力已成功应用于阅读理解、摘要生成、文本蕴含和学习任务独立的句子表示等任务。
  5. 端到端的记忆网络:

    • 端到端的记忆网络基于循环注意力机制,而非序列对齐的循环,它们在简单的语言问答和语言建模任务中表现良好。
  6. Transformer的独特之处:

    • Transformer是首个完全依赖自注意力来计算其输入和输出表示的转换模型,不使用序列对齐的RNN或卷积。
    • 后续部分将详细描述Transformer模型,阐述自注意力的动机,并讨论其相对于其他模型如ConvS2S等的优势。

简而言之,这段内容强调了Transformer在处理序列计算时的高效性和创新性,它通过自注意力机制,能够以恒定的计算复杂度有效地学习序列中的长距离依赖关系。

3. 模型结构

这部分内容描述了Transformer模型的总体架构,具体来说:

  1. 编码器-解码器结构:

    • 当前大多数高性能的神经序列转换模型都采用编码器-解码器结构。在这种结构中,编码器将输入序列的符号表示( x 1 , . . . , x n x_1, ..., x_n x1,...,xn)映射成一系列连续的表示( z = ( z 1 , . . . , z n ) z = (z_1, ..., z_n) z=(z1,...,zn))。
    • 给定 z z z,解码器产生输出序列的符号( y 1 , . . . , y m y_1, ..., y_m y1,...,ym),每次一个符号。
  2. 自回归模型:

    • 在生成下一个符号时,模型是自回归的,意味着它使用之前生成的符号作为额外的输入。
  3. Transformer的创新之处:

    • Transformer遵循编码器-解码器架构,但它使用了堆叠的自注意力机制和逐点的全连接而不是使用循环或卷积层,Transformer使用了堆叠的自注意力(self-attention)和逐点(point-wise),即每个位置独立的全连接层,这些层同时用于编码器和解码器。
    • 图1中的左半部分和右半部分分别展示了编码器和解码器的结构。

在这段内容中,Transformer模型的关键特点是自注意力机制的使用,它允许模型在任何位置捕获全局依赖性,这是与传统的序列转换模型的主要区别。此外,由于Transformer模型不依赖于序列的时间步骤,因此允许并行处理,这可以显著加快训练速度并提高效率。

什么是自回归模型?

在机器翻译中,自回归(Autoregressive)模型是指在生成序列的每一步中,模型都依赖于之前生成的输出来预测下一个词。这种方法模拟了人类自然语言生成的方式,即在构造句子时,我们通常会基于当前句子的上下文来决定下一个词或词组。

举个例子,如果你正在翻译一个句子,你会根据你已经翻译的部分(即之前的词)来决定接下来应该如何翻译。在一个自回归的翻译模型中,这一过程被模拟出来。当模型开始翻译一个新句子时,它首先会生成句子的第一个词,然后使用这个词作为上下文来生成第二个词,这个过程会一直持续,直到整个句子被翻译完成。

这种方法与非自回归模型相对,后者试图一次性生成整个输出序列,而不是逐步生成。自回归方法通常能够生成更连贯、更准确的句子,因为每一步的预测都考虑到了之前所有步骤的信息。但是,这也意味着自回归模型在生成时较慢,因为它们不能像非自回归模型那样并行生成所有词。在Transformer模型中,尽管解码器在训练时可以并行处理,但在实际推理时仍然是自回归的,这意味着它需要按顺序逐一生成翻译的词

在这里插入图片描述

这张图展示了Transformer模型的架构,包括编码器(左侧)和解码器(右侧)的结构。

  1. 编码器(左侧):

    • 输入嵌入(Input Embedding): 将输入序列转换为固定大小的嵌入向量。
    • 位置编码(Positional Encoding): 将位置信息加入嵌入向量中,因为Transformer本身不具有处理序列顺序的能力。
    • 多头自注意力机制(Multi-Head Attention): 允许模型在不同的位置关注输入序列的不同部分,这些“头”可以并行处理,从而提高效率。
    • 加法 & 归一化(Add & Norm): 对每个子层的输出和输入进行残差连接(加法),然后进行层归一化。
    • 前馈全连接网络(Feed Forward): 在每个注意力机制之后,有一个前馈全连接网络,对每个位置应用相同的全连接网络。
    • Nx: 表示编码器由N个这样的层堆叠而成。
  2. 解码器(右侧):

    • 输出嵌入(Output Embedding): 将目标序列转换为嵌入向量。
    • 位置编码(Positional Encoding): 同编码器,为输出嵌入添加位置信息。
    • 遮蔽多头自注意力(Masked Multi-Head Attention): 避免在生成当前位置的输出时使用未来的信息。在训练时,这是通过遮蔽后续位置的信息实现的。
    • 加法 & 归一化(Add & Norm): 同编码器。
    • 多头注意力(Multi-Head Attention): 注意这里是对编码器的输出进行多头注意力,它允许解码器关注输入序列的不同部分
    • 前馈全连接网络(Feed Forward): 同编码器。
    • Nx: 表示解码器由N个这样的层堆叠而成。
  3. 输出过程:

    • 线性层(Linear): 解码器顶部的线性层,将解码器的输出转换为更大的向量,通常是词汇表大小。
    • Softmax层: 将线性层的输出转换为概率分布,表示下一个可能的符号(token)。

编码器处理输入序列,解码器处理输出序列,并在每一步生成预测,同时依赖于编码器的输出。Transformer模型通过这种方式来处理序列转换任务,如机器翻译。

为什么Transformer需要Positional Encoding?如果没有会怎么样?

Transformer需要位置编码(Positional Encoding)是因为它本身并不像循环神经网络(RNN)那样能够自然地处理序列数据中的顺序信息。在RNN中,序列的元素是依次处理的,模型的每一步都是基于前一步的状态,这样就天然地包含了顺序信息。但是,在Transformer中,由于它使用的是自注意力机制,它会一次性处理所有的序列元素,如果不额外加入位置信息,模型就无法区分序列中元素的先后顺序。

想象一下,如果我们在处理一个句子而没有考虑单词的顺序,就像把所有单词都放在一个袋子里摇晃,然后随机取出一些单词来形成句子。这样的话,句子就失去了原有的意义。同样的,Transformer也需要知道每个单词在句子中的位置,才能正确理解和翻译语言。

位置编码是通过在每个单词的嵌入向量中添加一些包含位置信息的向量来实现的。这样,即使是在处理多个单词时,Transformer也能知道它们在原始句子中的位置。

如果没有位置编码,Transformer将无法区分单词的顺序,这将导致在理解语句意义和生成语句时出现问题,因为语言中单词的顺序通常会影响其含义。例如,“狗咬人”和“人咬狗”在语义上是截然不同的,没有位置编码,Transformer可能就无法区分这两个句子的差别。

图 1 中的shifted right在训练和推理阶段的不同

在这里插入图片描述
在机器翻译和其他生成任务中,“shifted right"的概念涉及到解码器的输入。当模型在训练阶段时,它会接收到完整的目标序列作为输入,但是为了防止模型在预测下一个词时"作弊”(即直接从输入中看到下一个词),输入序列会向右移动一位(或称为"shifted right")。这意味着,如果目标序列是"<s> I am a student",则移位后的序列将是"I am a student </s>“,其中”<s>“是序列开始的标记,”</s>"是序列结束的标记。

训练阶段:

  • 在训练时,由于我们已经知道目标输出,所以可以一次性将整个"shifted right"的序列提供给解码器。
  • 这允许模型在生成每个词时使用之前的所有词,从而模仿自回归生成过程,但因为可以并行处理,训练效率更高。
  • 然而,解码器内部的"Masked Multi-Head Attention"层会阻止每个位置"看到"其右侧的位置,以保证预测仅依赖于它之前的词。

推理阶段:

  • 在实际使用模型进行推理时(如翻译新句子),我们不再一次性知道整个目标序列。
  • 推理开始时,我们只有开始标记"<s>",然后模型基于它来预测序列中的下一个词。
  • 每预测出一个新词,就将其添加到已生成序列的末尾,并将这个更新的序列用作下一步预测的输入。这个过程是逐步进行的,每次预测都只能依赖于之前生成的词。

在这两个阶段中,“shifted right"操作确保了解码器在预测每个新词时,只能依赖于它之前的词,这模仿了在自然语言中生成句子的顺序过程。这也是为什么在图中的解码器部分,我们看到了"Masked Multi-Head Attention”——这是为了在训练期间实现这种向右移位的效果。

在这里插入图片描述

再来看这张图,解码器下面的所接收的输入,在训练阶段目标序列是被完整地提供给解码器,为了保持自回归,所以需要使用 Masked Mutli-Head Attention 防止在训练过程中提前看到当前预测位置之后的目标序列信息,而在推理阶段,解码器下面的所接收的输入,是当前位置之前所有已经预测出的tokens序列。编码器的输出连接到解码器中间的子层,意味着,解码器在预测目标序列时,同时考虑源序列和已预测出的目标序列。

  1. 训练阶段的解码器输入:

    • 在训练时,目标序列(即翻译后的文本)确实是完整提供给解码器的,但为了防止模型“作弊”(即看到接下来要预测的单词),使用了Masked Multi-Head Attention。
    • 在这个机制中,解码器的每个位置只能关注到该位置之前的位置,而无法接触到任何后续的信息。
  2. 推理阶段的解码器输入:

    • 在推理(或者说是测试)阶段,解码器一次只生成一个token,并将其添加到已生成的序列中。
    • 这个过程是迭代的,意味着在每一步,解码器的输入是到目前为止已经生成的序列,它会基于这些信息来预测下一个token。
  3. 编码器-解码器之间的连接:

    • 正如您所说的,解码器的另一个子层(通常称为编码器-解码器注意力层)使用编码器的输出作为其Key和Value。
    • 这意味着解码器在生成目标序列的每一个新词时,都会考虑整个输入序列(源序列)和到目前为止已生成的目标序列的信息。
  4. 编码器的作用:

    • 编码器处理输入序列,并为解码器提供了一个丰富的表示,解码器使用这个表示来生成输出序列。

您的理解是对的,解码器结合了对源序列的全面理解和已生成的目标序列的部分信息来进行预测。这种结构设计使得Transformer模型能够有效地进行序列到序列的任务,如机器翻译。

3.1 编码器和解码器堆叠

编码器

Encoder: The encoder is composed of a stack of N = 6 N = 6 N=6 identical layers. Each layer has two sub-layers. The first is a multi-head self-attention mechanism, and the second is a simple, position wise fully connected feed-forward network. We employ a residual connection [10] around each of the two sub-layers, followed by layer normalization [1]. That is, the output of each sub-layer is LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x)), where Sublayer ( x ) \text{Sublayer}(x) Sublayer(x) is the function implemented by the sub-layer itself. To facilitate these residual connections, all sub-layers in the model, as well as the embedding layers, produce outputs of dimension d m o d e l = 512 d_{model} = 512 dmodel=512.

这段内容描述的是Transformer模型中编码器的结构和工作原理。

  1. 编码器层次(Encoder Layers):

    • 编码器由6层相同的层组成,记作 N = 6 N = 6 N=6
    • 每层包含两个子层:一个多头自注意力机制(multi-head self-attention mechanism)和一个简单的 position-wise 全连接前馈网络(position-wise fully connected feed-forward network)。position-wise fully connected feed-forward network意味着,每个token是独立并行地通过该全连接网络。
  2. 多头自注意力机制(Multi-head Self-attention):

    • 这个机制能让模型在处理一个词时,同时考虑到句子中其他位置的信息,而且不同的"头"可以捕获不同种类的信息。
  3. 前馈网络(Feed-forward Network):

    • 在多头自注意力之后,数据会通过一个前馈网络,这是一个对每个位置都相同,但在不同层之间参数不同的全连接网络。
  4. 残差连接(Residual Connection):

    • 为了促进深层网络中的训练,每个子层的输出会加上该子层的输入,即 x + Sublayer ( x ) x + \text{Sublayer}(x) x+Sublayer(x)。这被称为残差连接,它有助于避免在深层网络中训练时梯度消失的问题。
  5. 层归一化(Layer Normalization):

    • 残差连接后的输出会被归一化,即 LayerNorm ( x + Sublayer ( x ) ) \text{LayerNorm}(x + \text{Sublayer}(x)) LayerNorm(x+Sublayer(x))。层归一化有助于稳定训练过程,确保每层的输出有相似的分布。
  6. 输出维度(Output Dimension):

    • 为了使残差连接能够顺利工作,每个子层以及嵌入层的输出维度都是 d m o d e l = 512 d_{model} = 512 dmodel=512。这意味着所有子层的输出和输入在维度上都是一致的,可以直接相加。

简而言之,Transformer模型的编码器是由多层构成,每层都进行自注意力和前馈网络处理,并通过残差连接和层归一化来优化训练过程和网络的深度传播效果。

"position"在这里指的是序列中不同位置的单词或token。在自然语言处理中,一个序列通常是由一系列单词或者token(如子词单元或字符)组成的,而每一个单词或token在序列中都有其特定的位置。在Transformer模型中,位置编码(Positional Encoding)被加入到每个输入token的表示中,以保留序列中token的位置信息,因为模型本身并不像循环神经网络那样具有处理序列的内在能力。

至于“不同的’头’可以捕获不同种类的信息”这一点,可以这样理解:在多头自注意力机制中,每一个“头”都是独立的注意力机制,它们可以并行地计算输入序列中所有token的注意力分数因为每个头使用的参数不同,它们可以从不同的角度学习序列中的特征,这就好比一个头可能专注于捕捉语法关系,而另一个头可能更关注词义上的关联。通过这种方式,模型能够同时考虑序列中多种不同的信息,增强了模型捕捉序列中复杂模式的能力。这就是为什么Transformer在处理复杂的语言模式时很有效,例如在翻译任务中能够同时考虑到语法结构和词汇含义。

是否可以类似地理解,多头注意力就像是图像中不同的卷积核,不同的头提取不同的特征信息?

这是一个很好的类比。就像在图像处理中不同的卷积核能够捕捉图像的不同特征(如边缘、角点或纹理)一样,Transformer中的多头注意力机制可以让模型从多个“视角”捕捉序列的不同特征。

每个注意力“头”都可以被看作是一个查询机制,它在给定的输入上“关注”不同的信息片段。例如,一个头可能专注于捕捉近义词的关系,而另一个头可能专注于句法结构,第三个头可能捕捉长距离的依赖关系等等。在处理自然语言时,这些复杂的关系和特征对于理解句子的整体意义和上下文至关重要。

这种多头机制的结果是模型能够获得一个更丰富、更全面的表示,这对于序列建模任务如机器翻译来说非常有用。正是这种能力,使得Transformer能够在很多自然语言处理任务上取得先进的性能。

解码器

这部分内容描述了Transformer模型中解码器(Decoder)的构造和工作原理。

  1. 解码器的层结构(Decoder Layers):

    • 解码器由6层相同的层组成,记作 N = 6 N = 6 N=6
    • 与编码器类似,每层包含两个子层:一个多头自注意力机制和一个前馈全连接网络。
    • 此外,解码器的每一层还包括第三个子层(图1中解码器中间的子层),这个子层对编码器的输出执行多头注意力操作。
  2. 残差连接和层归一化(Residual Connection and Layer Normalization):

    • 与编码器一样,解码器在每个子层周围也使用残差连接,并进行层归一化处理。这样做有助于深层网络的训练和梯度传递,以及保持网络各层的输出分布稳定。
  3. 遮蔽自注意力(Masked Self-attention):

    • 解码器中的自注意力机制被修改了,以防止任何位置的注意力权重分配给该位置后面的词,即在生成当前词的预测时,模型不能看到未来的词
    • 这是通过在自注意力计算中使用掩码(masking)来实现的,其中对于每个正在预测的位置,后面位置的信息会被屏蔽掉。
  4. 输出偏移(Output Offsetting):

    • 解码器的输出嵌入被向右偏移一个位置,这意味着在生成第 i i i 个词的预测时,只会使用前 i − 1 i-1 i1 个已知的输出。
    • 这保证了自回归属性,即生成序列的每一步仅依赖于前面的步骤,而不依赖于未来的信息。

综上所述,解码器的设计确保了在翻译时每个词的生成都只基于前面的词,从而使模型能够逐步生成翻译的文本,同时保留了对编码器输出的依赖性,这对于捕获输入与输出之间复杂的依赖关系是至关重要的。

Transformer模型的解码器结构中,为什么使用了 Masked Multi-Head Attention?

Transformer模型的解码器中使用“Masked Multi-Head Attention”确实是为了在训练(Inference)阶段保持自回归属性。自回归模型在生成序列的每一步只能使用之前的输出,而不能使用未来的信息。在解码器中进行推理时,模型需要按顺序一步步生成输出序列,每次生成新的词时只能依赖于已经生成的词。

在“Masked Multi-Head Attention”机制中,掩码(Mask)被用来阻止对未来位置的信息进行注意,确保位置 i i i 的输出只能依赖于小于 i i i 的位置上的信息。这是通过在注意力机制的计算中将未来位置的注意力得分设为负无穷(或非常小的值)这样经过softmax激活函数后,这些位置的权重几乎为零,模型因此不会考虑到这些位置的信息

简而言之,"Masked Multi-Head Attention"允许解码器安全地进行自回归预测,确保每次预测只基于已知的输出,而不是未来的输出,从而保持了生成过程的自回归性质。

3.2 注意力

首先描述注意力机制的基本工作原理。可以将注意力机制想象成一种特殊的查找过程,它在一组数据对(key-value pairs)中寻找与一个查询(query)相关的信息。

这段内容是在描述注意力机制的基本工作原理。在这里,我们可以将注意力机制想象成一种特殊的查找过程,它在一组数据对(key-value pairs)中寻找与一个查询(query)相关的信息。

  1. Query, Keys, Values:

    • Query 是当前想要预测的部分,比如在翻译任务中,你想要生成的下一个词。
    • KeysValues 是一组已经存在的信息对。在翻译的上下文中,你可以将每个输入词(或token)及其表示想象为一个Key-Value对Key用于与Query进行匹配,而Value包含了与每个Key相关的信息
  2. 权重的计算(Weight Calculation):

    • 模型使用一个兼容性函数来评估Query与每个Key的匹配程度。这通常通过计算Query向量和Key向量之间的点积来完成,然后应用一个softmax函数来确保所有权重的总和为1。
    • 得到的权重反映了每个Key对应的Value对于回答Query的重要性
  3. 加权求和(Weighted Sum):

    • 一旦计算出权重,模型就会计算一个加权和,这个和是所有Values的权重组合。每个Value都会乘以对应的权重,然后全部加在一起,得到最终的输出向量。

这种机制使得模型能够集中注意力于最重要的信息(即对当前任务最有用的那些Values),同时忽略那些不那么重要的部分。在机器翻译等任务中,这意味着模型可以专注于输入句子中对于生成正确翻译最关键的词。

3.2.1 缩放点乘注意力

We call our particular attention “Scaled Dot-Product Attention” (Figure 2). The input consists of queries and keys of dimension d k d_k dk, and values of dimension d v d_v dv. We compute the dot products of the query with all keys, divide each by d k \sqrt{d_k} dk , and apply a softmax function to obtain the weights on the values.

In practice, we compute the attention function on a set of queries simultaneously, packed together into a matrix Q Q Q. The keys and values are also packed together into matrices K K K and V V V . We compute the matrix of outputs as: A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V The two most commonly used attention functions are additive attention [2], and dot-product (multiplicative) attention. Dot-product attention is identical to our algorithm, except for the scaling factor of 1 d k \frac{1}{\sqrt{d_k}} dk 1 . Additive attention computes the compatibility function using a feed-forward network with a single hidden layer. While the two are similar in theoretical complexity, dot-product attention is much faster and more space-efficient in practice, since it can be implemented using highly optimized matrix multiplication code.

While for small values of d k d_k dk the two mechanisms perform similarly, additive attention outperforms dot product attention without scaling for larger values of d k d_k dk [3]. We suspect that for large values of d k d_k dk, the dot products grow large in magnitude, pushing the softmax function into regions where it has extremely small gradients. To counteract this effect, we scale the dot products by 1 d k \frac{1}{\sqrt{d_k}} dk 1 .

详细说明了Transformer模型中使用的一种特定的注意力机制,称为“Scaled Dot-Product Attention”。

  1. Scaled Dot-Product Attention的定义:

    • 这种注意力机制首先计算查询(Query)和所有键(Keys)之间的点积(dot product),这可以看作是一种衡量查询和键之间相似度的方法。
    • 然后,为了使得这些点积的数值更适合softmax函数处理,点积结果会被维度的根号(即 d k \sqrt{d_k} dk )除以,其中 d k d_k dk 是查询和键的维度。这种缩放操作是为了避免当维度较高时点积结果变得过大,这会导致softmax函数输出一个非常尖锐的分布,几乎所有的概率都集中在一个元素上。
    • 最后,应用softmax函数来计算最终的权重。
  2. 计算方法:

    • 在实践中,注意力函数不是单独计算每个查询的,而是将所有查询打包到一个矩阵 Q Q Q 中,键和值也分别打包到矩阵 K K K V V V 中。然后可以通过矩阵运算同时计算出所有查询的注意力权重。
    • 输出的矩阵计算公式为: Attention ( Q , K , V ) = softmax ( Q K T d k ) V \text{Attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V。这里的 K T K^T KT 表示键矩阵 K K K 的转置。
  3. 与其他注意力机制的比较:

    • 相比于加性注意力(additive attention),点积注意力(dot-product attention)在实践中更快、更高效,因为点积可以使用优化过的矩阵乘法来实现。
    • 然而,当 d k d_k dk 较大时,未缩放的点积注意力可能导致性能下降,因为过大的点积值会造成梯度非常小,难以通过训练进行有效的权重更新。为此,通过 1 d k \frac{1}{\sqrt{d_k}} dk 1 缩放是为了控制这些数值,确保梯度在一个合适的范围内。

这种缩放点积注意力机制是Transformer模型有效捕捉不同token之间关系的关键所在,它既高效又能处理长距离依赖问题。

在这里插入图片描述
这张图描绘的是“Scaled Dot-Product Attention”机制的流程。逐步了解每个部分:

  1. 输入 - Q, K, V:

    • 这三个矩阵代表Queries(Q),Keys(K)和Values(V)。Queries是你想要为其找到相关信息的向量集,通常与当前或要预测的词相关。Keys和Values来自于输入数据,通常在序列建模中,Keys和Values是相同的信息(比如,来自编码器的输出)。
  2. 第一次矩阵乘法 - MatMul(Q, K):

    • 计算Queries和Keys的点积,得出每个Query对每个Key的相似度评分。
  3. 缩放 - Scale:

    • 将点积的相似度评分除以 d k \sqrt{d_k} dk ,其中 d k d_k dk 是Key向量的维度。这个缩放有助于避免相似度评分变得过大,从而防止在Softmax函数应用后得到梯度过小。
  4. 掩码(可选) - Mask (opt.):

    • 在需要的情况下(比如在解码器中防止未来信息泄露),应用一个掩码来修改相似度评分。掩码通常用于将那些不应该被当前Query看到的Key的相似度评分设置为一个非常大的负数(如负无穷),这样在后续的Softmax步骤中,这些位置的权重会变得极小。
  5. Softmax:

    • 对每个Query的Key相似度评分进行Softmax运算,得到最终的注意力权重。这个过程会将评分转换成一个概率分布,从而决定在计算输出时应该给予每个Value多少权重。
  6. 第二次矩阵乘法 - MatMul(Softmax输出, V):

    • 将Softmax的输出,也就是注意力权重,应用到Values上。实质上是一个加权求和的过程,得出最终的输出,每个Query得到一个加权的Values的组合。

这个过程的输出就是经过注意力加权后的序列表示,它会被用作后续处理或者作为解码器的输入。在Transformer模型中,这种注意力机制帮助模型决定在处理某个特定的输入时,应该在序列的哪些部分给予更多的注意力。

3.2.2 多头注意力

Instead of performing a single attention function with d m o d e l d_{model} dmodel-dimensional keys, values and queries, we found it beneficial to linearly project the queries, keys and values h h h times with different, learned linear projections to d k d_k dk, d k d_k dk and d v d_v dv dimensions, respectively. On each of these projected versions of queries, keys and values we then perform the attention function in parallel, yielding d v d_v dv-dimensional output values. These are concatenated and once again projected, resulting in the final values, as depicted in Figure 2.

Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions. With a single attention head, averaging inhibits this. MultiHead ( Q , K , V ) = Concat ( head 1 , ⋯   , head h ) W O where   head i = Attention ( Q W i Q , K W i K , V W i V ) \text{MultiHead}(Q, K, V ) = \text{Concat}(\text{head}_1,\cdots, \text{head}_h)W^O \newline \text{where} \ \ \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V ) MultiHead(Q,K,V)=Concat(head1,,headh)WOwhere  headi=Attention(QWiQ,KWiK,VWiV)

Where the projections are parameter matrices W i Q ∈ R d model × d k , W i K ∈ R d model × d k , W i V ∈ R d model × d v , and  W O ∈ R h d v × d model . W^Q_i \in \mathbb{R}^{d_{\text{model}} \times d_k}, W^K_i \in \mathbb{R}^{d_{\text{model}} \times d_k}, W^V_i \in \mathbb{R}^{d_{\text{model}} \times d_v}, \text{and } W^O \in \mathbb{R}^{hd_v \times d_{\text{model}}}. WiQRdmodel×dk,WiKRdmodel×dk,WiVRdmodel×dv,and WORhdv×dmodel.

In this work we employ h = 8 h = 8 h=8 parallel attention layers, or heads. For each of these we use d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model}/h = 64 dk=dv=dmodel/h=64. Due to the reduced dimension of each head, the total computational cost is similar to that of single-head attention with full dimensionality.

这段内容解释了Transformer模型中多头注意力机制(Multi-Head Attention)的工作原理和设计理由。

  1. 多头注意力的动机:

    • 在基础的注意力机制中,查询(Queries)、键(Keys)和值(Values)都是 d m o d e l d_{model} dmodel 维的向量。然而,作者发现通过多次线性投影这些向量到不同的空间(每个空间维度分别是 d k d_k dk d k d_k dk d v d_v dv),然后对每个投影后的版本执行注意力函数,可以得到更丰富的信息。
  2. 线性投影:

    • 对于每个头(head),Queries、Keys 和 Values 都通过一个学习到的线性变换矩阵( W i Q W_i^Q WiQ W i K W_i^K WiK W i V W_i^V WiV)映射到新的维度。这些变换矩阵是可学习的参数
  3. 并行注意力函数:

    • 在这些不同的表示空间中,并行地执行注意力函数。这意味着模型不是只关注一个单一的表示子空间,而是可以同时关注来自多个子空间的信息。
  4. 拼接与再次投影:

    • 每个头计算出来的 d v d_v dv-维输出值随后被拼接在一起,然后通过另一个线性变换矩阵 W O W^O WO 投影,得到最终的多头注意力输出。
  5. 多头注意力公式:

    • 具体的多头注意力计算公式如下:
      MultiHead ( Q , K , V ) = Concat ( head 1 , ⋯   , head h ) W O \text{MultiHead}(Q, K, V ) = \text{Concat}(\text{head}_1,\cdots, \text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,,headh)WO
      where head i = Attention ( Q W i Q , K W i K , V W i V ) \text{where head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V ) where headi=Attention(QWiQ,KWiK,VWiV)
  6. 计算效率:

    • 尽管有多个头,但是每个头的维度 d k d_k dk d v d_v dv 都被减小了,所以整体的计算成本与全维度单头注意力相似。在本工作中,他们设置了 h = 8 h = 8 h=8,也就是8个头,并且 d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model}/h = 64 dk=dv=dmodel/h=64

总的来说,多头注意力机制让模型可以在不同的表示空间捕捉信息,每个头关注输入数据的不同部分,这种设计使模型能够更全面地理解和利用数据,进而提升了模型处理复杂任务(如机器翻译)的能力。

在这里插入图片描述

这张图展示了Transformer模型中的多头注意力(Multi-Head Attention)机制的组件和工作流程。

  1. 多头注意力机制:

    • 多头注意力是将注意力机制的概念扩展到运行多个并行的注意力子层(头)。
    • 每个头对应的注意力都会关注输入数据的不同部分,这样模型就可以从多个子空间同时获取信息。
  2. 线性层(Linear):

    • 在图中,我们可以看到 V V V K K K、和 Q Q Q 都分别通过它们自己的线性层,这是多头注意力中的一个重要步骤。
    • 这些线性层实际上是参数化的矩阵,它们将输入的Queries、Keys和Values转换到不同的表示空间。
  3. Scaled Dot-Product Attention:

    • 每个头上的线性转换后的 V V V K K K Q Q Q 被送入自己的“Scaled Dot-Product Attention”模块。
    • 在这里进行的计算涉及到点积的缩放、应用softmax函数获取注意力权重,然后用这些权重来获取加权的 V V V 向量。
  4. Concat(拼接):

    • 每个头的输出是一个 d v d_v dv-维的向量,这些向量被拼接起来形成一个长向量。
  5. 另一个线性层:

    • 拼接后的向量经过最后一个线性层,该层将多头注意力机制的输出重新映射回模型的原始维度 d m o d e l d_{model} dmodel
    • 这个步骤是必要的,因为它将所有不同头的信息合并,使其能够为后续的编码器或解码器层提供服务。

通过这种方式,多头注意力允许模型在不同的表示子空间中捕捉输入数据的丰富信息,同时保持每个子空间中的独立性,最终通过线性层将这些信息综合起来。这种机制是Transformer能够有效处理复杂语言模式的原因之一。

Multi-Head是通过不同的权重矩阵W来实现的吗?

是的,Multi-Head Attention 在 Transformer 模型中通过使用不同的权重矩阵 W W W 来实现的。每个“头”在自注意力计算中使用一组不同的 W Q W^Q WQ(查询权重)、 W K W^K WK(键权重)和 W V W^V WV(值权重)矩阵来分别转换输入序列,这样每个头就可以在不同的表示空间中捕获信息。

具体来说,对于每个头 i i i,以下转换会被应用:

  • Q i = Q W i Q Q_i = QW_i^Q Qi=QWiQ
  • K i = K W i K K_i = KW_i^K Ki=KWiK
  • V i = V W i V V_i = VW_i^V Vi=VWiV

这里, Q Q Q K K K V V V 分别代表查询(query)、键(key)和值(value)矩阵,它们是输入到注意力机制中的数据。 W i Q W_i^Q WiQ W i K W_i^K WiK W i V W_i^V WiV 是与第 i i i 个头相关联的参数矩阵。

每个头计算得到的输出 head i \text{head}_i headi 随后被拼接起来,并通过另一个权重矩阵 W O W^O WO 进行线性变换以得到最终的多头注意力输出:

MultiHead ( Q , K , V ) = Concat ( head 1 , … , head h ) W O \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_h)W^O MultiHead(Q,K,V)=Concat(head1,,headh)WO

在这里, Concat \text{Concat} Concat 表示将所有头的输出向量拼接成一个长向量, W O W^O WO 是用于拼接后的输出的线性变换矩阵。通过这样的设置,每个头可以关注输入数据的不同部分或者以不同的方式关注相同的信息,从而让模型可以捕获更广泛的上下文信息

3.2.3 Transformer模型中注意力机制的三种不同应用方式

  1. 编码器-解码器注意力(Encoder-Decoder Attention):

    • 在这个层中,查询(queries)来自于解码器的前一个层级,而键(keys)和值(values)来自于编码器的输出。
    • 这使得解码器的每个位置都能关注(attend to)输入序列中的所有位置,模仿了其他序列到序列(sequence-to-sequence)模型中的编码器-解码器注意力机制。
    • 这种机制允许解码器根据整个输入序列来生成每一个输出token,它将编码器处理后的信息整合到解码过程中。
  2. 编码器自注意力(Encoder Self-Attention):

    • 编码器包含自注意力层,其中所有的键、值和查询都来源于同一地方,即编码器的前一层输出。
    • 这允许编码器的每个位置都可以关注(attend to)到前一层的所有位置。
    • 这种自注意力机制使得编码器能够捕获输入序列内部的任何依赖关系,无论这些依赖的距离有多远。
  3. 解码器自注意力(Decoder Self-Attention):

    • 解码器的自注意力层使得每个位置都能关注(attend to)解码器中直到该位置的所有位置。
    • 为了维护自回归属性——即在生成序列的每一步时只依赖于之前的步骤——需要防止每个位置"看到"它后面的位置。这通过在自注意力机制内部使用掩码来实现,掩码将未来位置的值设置为一个极小的数(比如负无穷),使得在softmax激活函数之后,这些位置的影响被忽略。
    • 这保证了解码器在推理时只能基于已生成的输出,而不是还未生成的输出。

总的来说,Transformer模型通过这三种不同方式的注意力机制来处理和整合不同层级和序列位置的信息,确保在翻译或其他生成任务中能够有效地利用上下文信息。

3.3 Position-wise Feed-Forward Networks

这段内容讲述了Transformer模型中使用的位置逐点前馈网络(Position-wise Feed-Forward Networks)。

  1. 位置逐点前馈网络的作用:

    • 在Transformer的每个编码器和解码器层中,除了注意力子层之外,还包括了一个逐点(position-wise)前馈网络。
    • 这个前馈网络对每个位置的表示独立应用相同的操作,也就是说,它在序列的每个位置执行相同的前馈神经网络计算。
  2. 前馈网络的结构:

    • 网络由两个线性变换组成,中间夹着一个ReLU激活函数。线性变换可以理解为矩阵乘法加偏置项,即: F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 FFN(x) = max(0, xW_1 + b_1)W_2 + b_2 FFN(x)=max(0,xW1+b1)W2+b2
    • x x x 是输入向量, W 1 W_1 W1 W 2 W_2 W2 是权重矩阵, b 1 b_1 b1 b 2 b_2 b2 是偏置项, m a x ( 0 , z ) max(0, z) max(0,z) 是ReLU激活函数,它对输入执行逐元素的非线性变换。
  3. 参数和维度:

    • 虽然这些前馈网络在不同位置使用相同的操作,但在不同的层中使用不同的参数。
    • 输入和输出的维度为 d m o d e l = 512 d_{model} = 512 dmodel=512,即每个输入和输出向量都是512维的。
    • 内层的维度为 d f f = 2048 d_{ff} = 2048 dff=2048,这意味着前馈网络中间层是2048维的,这个内层可以看作是扩展了模型的表示能力。
  4. 另一种描述方式:

    • 另一种理解这个结构的方式是将它看作是应用了大小为1的卷积核的两个卷积操作,这是因为它对每个位置独立地应用相同的变换。

总的来说,这部分描述了Transformer中每个编码器和解码器层后的附加网络结构,它通过两次线性变换和一个ReLU激活来增加模型的非线性能力和学习能力。这个结构在处理序列中每个位置的信息时保持了独立性,但它对所有位置执行相同的操作,以保证模型能够将每个位置都视作等同重要,而不依赖于序列中的绝对位置信息。

3.4 Embeddings and Softmax

这部分内容描述的是Transformer模型如何处理输入和输出的嵌入(embeddings),以及它如何使用softmax函数生成下一个词的概率分布。

  1. 嵌入(Embeddings):

    • 与其他序列转换模型类似,Transformer使用学习到的嵌入将输入和输出的token转换为 d m o d e l d_{model} dmodel 维的向量。这些嵌入是模型中的参数,通常在训练开始时随机初始化,然后随着模型的训练进行调整。
  2. 权重共享:

    • 在模型中,输入嵌入层和输出嵌入层,以及在softmax之前的线性变换层使用相同的权重矩阵。这意味着,对于每个词,无论它出现在输入还是输出中,模型都会使用相同的向量表示。这种权重共享有助于减少模型的参数数量,并且可能会提高模型的性能和泛化能力。
  3. 嵌入层的缩放:

    • 在嵌入层中,权重乘以了 d m o d e l \sqrt{d_{model}} dmodel ,这是为了调整嵌入向量的数值范围。这样的缩放可以帮助维持模型学习过程中梯度的稳定性。
  4. 线性变换和Softmax函数:

    • 解码器的输出通过一个线性变换层(通常是一个全连接层),然后通过softmax函数转换为下一个token的概率分布。softmax函数确保了输出向量中的所有值加起来等于1,因此可以被解释为概率分布。

总之,这部分内容强调了在Transformer模型中,嵌入和softmax函数在输入和输出处理中的关键作用,以及模型在这两个方面的某些特定设计选择,例如权重共享和嵌入的缩放。这些设计有助于模型的训练和泛化,是Transformer模型设计中的重要组成部分。

3.5 Positional Encoding

这部分内容解释了Transformer模型为何引入位置编码(Positional Encoding),以及它是如何工作的。

  1. 位置编码的必要性:

    • 由于Transformer不使用循环(RNN)或卷积(CNN)结构,因此没有内置的方法来处理序列中元素的顺序信息。
    • 为了让模型理解词在句子中的位置,必须向模型注入有关词的相对或绝对位置的信息。
    • 位置编码被加到输入嵌入向量中,使模型能够利用序列的顺序。
  2. 位置编码的实现方法:

    • Transformer选择使用正弦和余弦函数的组合来创建位置编码,因为它们能够让模型捕捉到位置间的相对关系。

    • 位置编码公式如下:

      P E ( p o s , 2 i ) = sin ⁡ ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)} = \sin(pos / 10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)

      P E ( p o s , 2 i + 1 ) = cos ⁡ ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i+1)} = \cos(pos / 10000^{2i/d_{model}}) PE(pos,2i+1)=cos(pos/100002i/dmodel)

    • 这里, p o s pos pos 是词在序列中的位置, i i i 是维度。通过这样的编码,每个维度对应于一个正弦波,它的频率和波长在每个维度上是不同的。

  3. 频率的选择:

    • 选择正弦和余弦函数是因为这样可以让模型即使在训练期间未见过的序列长度上也能推广,这是因为这些函数的值是循环的,因此模型可以泛化到更长的序列。
  4. 与学习位置编码的比较:

    • 作者还提到他们尝试了学习位置编码的方法,但发现两种方法产生了几乎相同的结果。
    • 由于正弦和余弦函数提供了能够泛化到不同序列长度的位置编码,因此他们选择了这种方法。

总结来说,位置编码是Transformer能够处理序列数据的关键,它通过在每个输入嵌入向量中添加特定的向量来提供位置信息,而选择正弦和余弦函数作为这些向量的方式是因为它们的良好属性,如周期性和能够表达相对位置关系。

4. 为什么自注意力

这部分内容讨论了为什么在Transformer模型中采用自注意力机制,尤其是与传统的循环神经网络(RNN)和卷积神经网络(CNN)相比,自注意力机制在某些方面表现得更优越。

  1. 计算复杂性:

    • 自注意力层在计算上的优势在于它对所有位置的连接仅需要常数数量的顺序执行操作,而传统的循环层需要 O ( n ) O(n) O(n) 的顺序操作,这里 n n n 是序列长度。当序列长度小于表示维度 d d d 时,自注意力层的计算会更快。
  2. 并行计算能力:

    • 自注意力允许更高程度的并行化,因为所有的注意力权重可以在一次操作中一同计算,而循环网络必须按序处理每个时间步,限制了并行性。
  3. 路径长度:

    • 在学习长距离依赖关系时,路径长度(信号在网络中前向和后向传播所需经过的层的数量)非常重要。自注意力机制减少了这个路径长度,因为任意两个输入和输出位置之间的最大路径长度是恒定的,这有助于学习远程依赖关系。
  4. 长序列处理:

    • 对于长序列,作者提出,可以限制自注意力仅在输入序列的一小部分上进行,以提高计算性能。这意味着可以只在每个输出位置的周围一定范围内应用自注意力,而不是整个输入序列。
  5. 与卷积层的比较:

    • 单个卷积层(即使是有大核的分离卷积)在没有多层堆叠的情况下通常不能覆盖所有输入和输出位置之间的路径。卷积层也通常比循环层更昂贵,因为卷积操作本身具有更高的时间和空间复杂度。
  6. 模型可解释性:

    • 自注意力还可以提高模型的可解释性,因为可以直接查看和分析注意力分布,这有助于理解模型是如何关注输入序列的不同部分来生成输出的。

总结来说,这部分强调了自注意力在处理序列数据时的多个计算和概念优势,尤其是在并行处理和捕捉长距离依赖方面,这也是Transformer模型优于以往序列建模方法的原因之一。

5. 训练

这段内容详细介绍了Transformer模型训练过程中的数据、硬件配置、训练时间表以及优化器的使用。

  1. 训练数据和批处理(Training Data and Batching):

    • 模型使用WMT 2014英德(English-German)数据集进行训练,该数据集包含大约450万句子对。
    • 使用字节对编码(Byte-Pair Encoding, BPE)来处理文本数据,这种编码方式创建了一个共享的源-目标词汇表,大约有37000个token。
    • 对于英法(English-French)的训练,使用的是更大的WMT 2014数据集,包含了3600万句子,并将token拆分为32000个词片(word-piece)。
    • 批处理是根据大约的序列长度来组合句子对,每个批次大约包含25000个源token和25000个目标token。
  2. 硬件和训练时间表(Hardware and Schedule):

    • 使用一台装有8个NVIDIA P100 GPU的机器进行模型训练。
    • 基础模型在整篇论文中描述的超参数下每步训练大约需要0.4秒,总共训练了100,000步,约12小时。
    • 大型模型(big models)的每步训练时间为1秒,总共训练了300,000步,约3.5天。
  3. 优化器(Optimizer):

    • 使用Adam优化器,具有特定的超参数 β 1 = 0.9 \beta_1 = 0.9 β1=0.9, β 2 = 0.98 \beta_2 = 0.98 β2=0.98, 和 ε = 1 0 − 9 \varepsilon = 10^{-9} ε=109

    • 学习率(lrate)按照公式变化,它结合了线性热身(warmup)阶段和后期递减:

      l r a t e = d m o d e l − 0.5 ⋅ min ⁡ ( step_num − 0.5 , step_num ⋅ warmup_steps − 1.5 ) lrate = d_{model}^{-0.5} \cdot \min(\text{step\_num}^{-0.5}, \text{step\_num} \cdot \text{warmup\_steps}^{-1.5}) lrate=dmodel0.5min(step_num0.5,step_numwarmup_steps1.5)

    • 这个学习率调度策略在训练的最初 warmup_steps \text{warmup\_steps} warmup_steps 步骤中线性增加学习率,然后随着训练步数的增加按步数的平方根逆比例减少。

    • 设置 warmup_steps = 4000 \text{warmup\_steps} = 4000 warmup_steps=4000

通过这种策略,Transformer模型在训练初期快速适应并学习,随后随着模型逐渐稳定,减缓学习速度以细化模型参数。这种学习率调整方法对于Transformer模型的训练是非常重要的,有助于提高模型训练的稳定性和性能。

Transformer模型在训练过程中使用的正则化技术,以及模型性能的一个概述。

  1. 正则化(Regularization):

    • 论文提到使用了三种类型的正则化方法,但这里主要提及了一种:残差丢弃(Residual Dropout)。
    • 在每个子层的输出上应用丢弃(Dropout),也就是在子层输出加上输入并进行归一化之前,随机将一些单元置零。
    • 此外,丢弃也被应用到了嵌入和位置编码的和上。
    • 对于基础模型,丢弃率( P d r o p P_{drop} Pdrop)被设为0.1。
  2. 模型性能(Model Performance):

    • 随后的表格展示了Transformer模型在英德(English-German, EN-DE)和英法(English-French, EN-FR)的WMT 2014新闻翻译任务上取得的BLEU分数,这是衡量机器翻译质量的一个常用指标。BLEU分数越高,翻译质量被认为越好。
    • Transformer模型(包括基础模型和大模型)在两个翻译任务上都超越了之前的最先进模型。
    • 模型也显著降低了训练成本。训练成本使用浮点运算(FLOPs)来衡量,Transformer模型相对于其他模型需要更少的计算量。
  3. 标签平滑(Label Smoothing):

    • 论文中还提到使用了标签平滑作为正则化手段。标签平滑的目的是让模型对输出概率分布的预测不那么自信,通过给每个类别分配一个小的、固定的概率,即使是错误的类别也是如此。
    • 在标签平滑中,参数 ε l s \varepsilon_{ls} εls 被设为0.1。这种方法有助于改善模型在测试集上的准确率和BLEU得分,尽管它会增加训练集上的困惑度(perplexity)。

总体来说,这部分内容说明了Transformer模型如何通过特定的正则化策略和训练技术来提高翻译任务的性能,并减少了模型训练的成本。同时,还强调了标签平滑在提高模型性能方面的作用。

6. 结果

6.1 机器翻译

Transformer模型在机器翻译任务中的结果。

  1. 英德翻译任务(WMT 2014 English-to-German):

    • “大”Transformer模型(Transformer (big))的BLEU得分超过了先前所有模型(包括模型集合)的最高得分,比最好的现有成绩高出了2.0个BLEU点,达到了28.4分。
    • 训练这个模型花费了3.5天的时间在8个NVIDIA P100 GPU上完成。
    • 甚至基础模型也超过了所有之前发布的模型和集合,而且训练成本只是它们的一部分。
  2. 英法翻译任务(WMT 2014 English-to-French):

    • 在这个任务上,“大”模型的BLEU得分为41.0,超过了所有先前发布的单一模型,并且训练成本不到先前最佳模型的1/4。
    • 与英德任务相比,英法的“大”模型使用了更低的丢弃率(dropout rate),从0.1减少到0.3。
  3. 模型检查点(Model Checkpoint):

    • 对于基础模型,通过平均最后5个检查点来获取最终的模型,这些检查点每10分钟写入一次。
    • 对于“大”模型,平均了最后20个检查点。
  4. 解码策略(Decoding Strategy):

    • 使用束搜索(beam search)与束宽为4,并应用长度惩罚(length penalty) α = 0.6 \alpha = 0.6 α=0.6
    • 设定了最大输出长度为输入长度加50,但如果可能的话会提前终止。
  5. 结果总结(Results Summary):

    • 表2总结了Transformer模型的翻译质量和训练成本,并与其他模型架构进行了比较。
    • 还估计了训练模型所需的浮点运算次数,并指出使用了单精度浮点运算。

总的来说,这部分内容突出了Transformer模型在WMT 2014机器翻译任务上取得的卓越性能,并且指出了相对于其他模型,Transformer在训练成本和效率上的显著优势。

6.2 模型变体

这部分内容描述了在开发集(newstest2013)上对Transformer模型结构变体的性能评估。这里重点在于理解不同配置对模型性能的影响,包括注意力头数( h h h)、注意力头的维度( d k d_k dk d v d_v dv)、以及模型大小的变化。

  1. 注意力头数( h h h)的影响:

    • 表3中的行(A)展示了改变注意力头数对模型性能的影响。发现使用单头注意力( h = 1 h=1 h=1)比多头(例如 h = 8 h=8 h=8,即基础模型)的BLEU得分要差约0.9分,而过多的头(例如 h = 16 h=16 h=16 h = 32 h=32 h=32)也会导致性能下降。
  2. 注意力头维度的影响:

    • 在行(B)中,减小注意力键的维度 d k d_k dk 会损害模型质量,暗示了匹配计算(即Query和Key之间的兼容性)的复杂性对于模型性能很重要。
  3. 模型大小的影响:

    • 行©中提到,增加内层维度 d f f d_{ff} dff 和行(D)中减少 d m o d e l d_{model} dmodel 显示了模型规模在避免过拟合中的作用,同时更大的模型往往能得到更好的性能。
  4. Dropout率的影响:

    • 改变dropout率( P d r o p P_{drop} Pdrop)对模型质量有显著影响,如行(E)所示。使用学习到的位置嵌入与原先的正弦波位置编码相比,结果几乎没有差别。
  5. 大型模型:

    • “大”模型(big)的配置,如行(E)所示,使用了更多的训练步骤(300K)和更大的dropout率(0.3),它在英德翻译任务上达到了更高的BLEU得分(26.4),虽然模型参数数量显著增加。

此部分表明,对于Transformer模型,适当数量的多头注意力、较大的模型尺寸和参数以及适中的正则化是重要的,这些因素共同影响了模型的最终性能。同时,这也显示了Transformer模型的配置可根据具体任务调整以达到最佳效果。

7. 结论

  1. Transformer模型介绍:

    • 作者提出了Transformer模型,这是第一个完全基于注意力机制的序列转换模型,它没有使用在传统编码器-解码器架构中常见的循环层。
    • Transformer模型采用了多头自注意力机制,替代了循环层。
  2. 训练效率:

    • 与基于循环或卷积层的架构相比,Transformer模型在翻译任务中的训练速度要快得多。
  3. 性能提升:

    • 在WMT 2014的英德和英法翻译任务上,Transformer模型都取得了最先进的性能。
    • 在英德翻译任务中,最好的Transformer模型甚至超越了之前报道的所有集合模型。
  4. 未来的工作:

    • 作者对基于注意力的模型未来的应用感到兴奋,并计划将其应用到除文本之外的其他输入和输出形式的任务中,如图像、音频和视频。
    • 他们还计划探索局部、受限的注意力机制,以有效处理大型输入和输出。
    • 另一个研究目标是使生成过程更少依赖于顺序,这可能意味着提高模型处理长序列时的效率和效果。

总体而言,这段内容强调了Transformer模型在翻译任务中的创新性和优势,并对将这一架构推广到更广泛的应用和进一步的研究持积极态度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值