论文阅读:万字长文解析transformer

原文:Attention Is All You Need

这篇论文的影响力不必多说

ps:翻译中多次出现的变压器 指的就是transformer


摘要:

主要的序列转导模型是基于复杂的循环或卷积神经网络,包括一个编码器和一个解码器。表现最好的模型还通过注意机制连接编码器和解码器。我们提出了一个新的简单的网络架构,变压器,完全基于注意力机制,完全摒弃递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具并行性,并且需要更少的训练时间。我们的模型在WMT 2014英语-德语翻译任务上实现了28.4 BLEU,比现有的最佳结果(包括集合)提高了2个BLEU以上。在WMT 2014英法翻译任务中,我们的模型在8个gpu上训练3.5天后,建立了一个新的单模型最先进的BLEU分数41.8,这是文献中最佳模型训练成本的一小部分。我们通过将Transformer成功地应用于具有大量和有限训练数据的英语选区解析,证明了它可以很好地推广到其他任务。

这一段非常重要,有助于理解全文:

注意机制(Attention Mechanism)是一种在深度学习模型中常用的机制,旨在增强模型对输入数据中不同部分的关注程度。它通过根据输入的重要性对不同位置或特征进行加权,使模型能够更加有针对性地处理输入数据和生成输出结果。

在注意机制中,通常存在两个主要组件:查询(query)、键(keys)和值(values)。查询是用于根据输入来计算注意权重的向量,键和值则是用于表示输入数据的向量。通过计算查询与键之间的相似度,可以得到每个键的注意权重,进而将这些权重应用于值,以生成加权的表示。

注意机制的工作原理如下:

  1. 计算注意权重:通过计算查询与每个键之间的相似度,可以获得每个键的注意权重。常用的相似度计算方法包括点积、缩放点积等。

  2. 加权求和:将注意权重应用于值,对值进行加权求和。加权的方式可以是简单的加权求和或加权平均。

  3. 输出生成:根据加权求和的结果生成最终的输出。可以根据具体任务的需要,进一步进行后续处理或连接到模型的其他部分。

注意机制的优势在于能够灵活地处理不同部分之间的依赖关系和重要性。它可以帮助模型集中关注输入数据中的相关部分,忽略无关的信息,从而提高模型的性能和泛化能力。在自然语言处理领域,注意机制被广泛应用于机器翻译、文本摘要、问答系统等任务中,可以帮助模型更好地理解和生成语言表达。

介绍

递归神经网络,特别是长短期记忆[13]和门控递归神经网络[7],已经被牢固地确立为序列建模和转导问题(如语言建模和机器翻译)的最新方法。从那以后,大量的努力继续推动循环语言模型和编码器-解码器架构的边界。 

循环模型通常沿输入和输出序列的符号位置进行因子计算。将位置与计算时间中的步骤对齐,它们生成隐藏状态序列ht,作为前一个隐藏状态ht−1的函数和位置t的输入。这种固有的顺序性质排除了训练示例中的并行化,这在较长的序列长度下变得至关重要,因为内存约束限制了跨示例的批处理。最近的研究通过因子分解技巧[21]和条件计算[32]显著提高了计算效率,同时也提高了模型在后者情况下的性能。然而,顺序计算的基本约束仍然存在。

注意机制已经成为各种任务中引人注目的序列建模和转导模型的组成部分,允许对依赖关系进行建模,而不考虑它们在输入或输出序列中的距离。然而,在除少数情况外的所有情况下[27],这种注意机制都与循环网络结合使用。

在这项工作中,我们提出了Transformer,这是一种避免重复的模型架构,而是完全依赖于注意机制来绘制输入和输出之间的全局依赖关系。

Transformer允许显着更多的并行化,并且在8个P100 gpu上经过12小时的培训后,可以达到翻译质量的新状态。

背景

减少顺序计算的目标也构成了Extended Neural GPU[16]、ByteNet[18]和ConvS2S[9]的基础,它们都使用卷积神经网络作为基本构建块,对所有输入和输出位置并行计算隐藏表示。在这些模型中,将两个任意输入或输出位置的信号关联起来所需的操作数量随着位置之间的距离而增长,ConvS2S为线性增长,ByteNet为对数增长。这使得学习距离较远位置之间的依赖关系变得更加困难[12]。在Transformer中,这被减少到一个恒定的操作数量,尽管其代价是由于平均注意加权位置而降低了有效分辨率,我们用3.2节中描述的多头注意抵消了这一影响。

在深度学习中,注意机制(Attention)常用于处理序列数据或图像数据中的重要信息,以帮助模型更好地理解和利用输入数据。然而,使用注意机制可能会降低有效分辨率,这是因为注意权重的计算通常基于平均操作。

当应用注意机制时,模型使用注意权重(attention weights)来指示输入的不同部分对于任务的重要性。这些注意权重通常通过计算输入的加权平均值来获得,其中每个部分的权重由注意机制自动学习得到。但是,这种加权平均操作会导致一种模糊化的效果,降低了输入数据的有效分辨率。

例如,在自然语言处理中,当使用注意机制来处理文本序列时,模型可能会给予整个句子相同的注意权重,这样就无法区分句子中不同位置的关键单词或短语。这种平均注意加权的过程可能会损失一些细节信息,从而降低了模型对于输入数据的有效分辨率。

为了缓解这个问题,可以尝试以下方法:

  1. 多头注意力(Multi-head Attention):使用多个独立的注意头来计算注意权重,然后将它们组合起来。这样可以增加模型对输入不同部分的关注度,提高分辨率。

  2. 自适应注意力:引入自适应机制,使模型能够根据输入数据的不同特点和上下文动态地调整注意权重计算方式。例如,可以使用可学习的注意力权重模型来自适应地改变注意力计算过程。

  3. 局部注意力:限制注意权重的计算范围,只关注输入中的局部区域。这样可以减少计算的复杂性,并且能够更集中地捕捉到输入数据的细节信息。

需要根据具体任务和应用场景来选择和设计合适的注意机制,以平衡模型的灵敏度和计算效率。在实际应用中,还可以通过调整注意机制的参数和模型架构,以及进行适当的后处理来进一步提高有效分辨率。

自我注意,有时被称为内注意,是一种将单个序列的不同位置联系起来以计算该序列的表示的注意机制。自注意已经成功地应用于阅读理解、抽象总结、文本蕴涵和学习任务无关的句子表征等多种任务中。

端到端记忆网络基于循环注意机制,而不是顺序排列的递归,并且在简单语言问答和语言建模任务中表现良好[34]。

然而,据我们所知,Transformer是第一个完全依赖于自关注来计算其输入和输出表示的转导模型,而不使用序列对齐rnn或卷积。在下面的部分中,我们将描述Transformer,激励自我关注,并讨论它相对于[17,18]和[9]等模型的优势。

模型架构

大多数竞争性神经序列转导模型具有编码器-解码器结构

这里,编码器映射符号表示(x1,…)的输入序列。, xn)到连续表示序列z = (z1,…zn)。给定z,解码器然后生成输出序列(y1,…), ym)符号,一次一个元素。在每一步中,模型都是自回归的,在生成下一个符号时,将之前生成的符号作为额外的输入。

自回归(Autoregressive)是一种在时间序列或序列数据中,当前值的生成是依赖于过去值的模型。在自回归模型中,当前时间步的输出是通过输入前面时间步的输出得出的。

在自然语言处理中,自回归模型经常用于生成文本。其中,Transformer是一种基于自注意力机制的自回归模型。它使用了一系列的自注意力层,每个自注意力层都会根据输入序列中的先前时间步来生成当前时间步的输出。

 Transformer遵循这个整体架构,使用堆叠的自关注层和点方向层,完全连接编码器和解码器层,分别如图1的左半部分和右半部分所示。

编码器和解码器堆栈

残差连接(Residual connection)是在神经网络中添加跳跃连接来解决深层网络训练过程中的梯度消失和梯度爆炸问题的一种技术。它能够有效地帮助信息在网络中流动,提高网络性能和训练速度。

在残差连接中,网络的输入会直接与某一层的输出相加,而不是将输入通过一系列的层进行处理后再与输出进行连接。这样做的目的是引入跨层的信息传递,并且保留原始输入的信息。

编码器:编码器由N = 6个相同层的堆栈组成。每一层有两个子层。第一种是多头自注意机制,第二种是简单的、位置完全连接的前馈网络。我们在每一个子层周围使用残差连接[11],然后进行层归一化[1]。也就是说,每个子层的输出是LayerNorm(x + Sublayer(x)),其中Sublayer(x)是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层产生的输出维度为dmodel = 512。

解码器:解码器也由N = 6相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器插入第三个子层,该子层对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围使用残差连接,然后进行层规范化。我们还修改了解码器堆栈中的自注意子层,以防止位置关注后续位置。这种掩蔽,再加上输出嵌入被偏移一个位置的事实,确保了位置i的预测只能依赖于位置小于i的已知输出。

 Attention

注意函数可以描述为将查询和一组键值对映射到输出,其中查询、键、值和输出都是向量。输出以加权和的形式计算值

(左)缩放的点积注意力。(右)多头注意由平行运行的几个注意层组成。

matmul ☞  矩阵相乘

在机器学习和自然语言处理中,"Mask"(掩码)是指一种用于隐藏或屏蔽某些数据或信息的技术或操作。掩码可以通过将特定位置的数值或位设置为特定的值来实现。

在深度学习中,掩码常用于序列数据处理中,例如文本序列或时间序列。以下是几种常见的掩码技术:

  1. 填充掩码(Padding Mask):用于处理变长序列的情况,通过在序列末尾添加特定的填充符号,然后使用填充掩码将填充部分屏蔽,防止其对模型的计算产生影响。

  2. 注意力掩码(Attention Mask):用于自注意力机制(self-attention)中,在计算注意力权重时,通过将不需要的位置的注意力值设置为一个较大的负值或0来屏蔽这些位置,使得模型不会在计算注意力时考虑到这些位置。

  3. 遮挡掩码(Masked Mask):用于特定任务(如语言模型、序列生成任务)中,通过在输入序列的某些位置添加一个遮挡标记(mask token),然后让模型预测这些被遮挡的位置上的标记。这个遮挡操作可以提供一种训练模型生成缺失信息或未来预测的方式。

缩放的点积注意力 

我们称我们的特殊关注为“缩放点积关注”(图2)。输入由查询、键的维度dk和值的维度dv组成。我们计算查询与所有键的点积,每个点积除以√dk,并应用softmax函数来获得值的权重。

在实践中,我们同时计算一组查询的注意力函数,这些查询被打包成矩阵q。键和值也被打包成矩阵K和V。我们计算输出矩阵为:

两种最常用的注意函数是加性注意[2]和点积(乘)注意。点积注意力和我们的算法是一样的,除了比例因子是1√dk。加性注意使用一个具有单个隐藏层的前馈网络来计算兼容性函数。虽然两者在理论复杂性上相似,但在实践中,点积注意力更快,更节省空间,因为它可以使用高度优化的矩阵乘法代码来实现。

当dk值较小时,两种机制的表现相似,当dk值较大时,加性注意优于点积注意[3]。我们怀疑,对于较大的dk值,点积的大小会变大,从而将softmax函数推入具有极小梯度的区域。为了抵消这个影响,我们将点积乘以1√dk。

前馈网络(Feedforward Network),也称为前向神经网络或多层感知机(Multilayer Perceptron, MLP),是一种基本的人工神经网络模型。

前馈网络由多个层级组成,其中包括输入层、隐藏层和输出层。信息在网络中从输入层单向传递到输出层,没有反馈连接。每个神经元都与下一层的所有神经元连接,并且每个连接都有一个权重。

以下是前馈网络的基本原理和特点:

  1. 输入层:接受来自外部的输入数据或特征向量,并将其传递给隐藏层。

  2. 隐藏层:由多个神经元组成,用于学习数据中的特征表示。隐藏层通常有多个层级,每一层的神经元通过非线性激活函数将输入传递给下一层。

  3. 输出层:最后一层的神经元产生网络的输出结果,可以是分类标签、回归值等。

  4. 权重与偏置:每个连接都有一个权重,用于调整信号传递的强弱。此外,每个神经元还有一个偏置项,用于调整激活函数的阈值。

  5. 激活函数:在前馈网络中,每个神经元通常会使用非线性激活函数(如Sigmoid、ReLU、Tanh等),以增加网络的表达能力和模型的非线性拟合能力。

  6. 反向传播:前馈网络通常使用反向传播算法来训练模型。该算法通过计算输出层与实际标签之间的误差,并将误差沿网络反向传播,根据梯度下降法更新权重和偏置,从而逐渐减小误差并提高模型的准确性。

前馈网络可以用于各种机器学习任务,例如分类、回归、特征提取等。它是深度学习中的基础模型,广泛应用于图像处理、自然语言处理、推荐系统等领域。

需要注意的是,尽管前馈网络是最早被广泛研究和使用的神经网络模型之一,但随着深度学习的发展,更复杂的网络结构(如卷积神经网络、循环神经网络和Transformer等)逐渐成为主流。这些网络结构在特定领域和任务中通常具有更好的性能和效果。

 Multi-Head Attention

我们发现,与其使用dmodel维度的键、值和查询执行单一的注意力函数,不如将查询、键和值分别以不同的、学习过的线性投影h次线性投影到dk、dk和dv维度,这是有益的。然后,在查询、键和值的每个投影版本上,我们并行地执行注意力函数,生成d维的输出的值。将它们连接起来并再次进行投影,得到最终值。

多头注意允许模型在不同位置共同注意来自不同表示子空间的信息。对于单一注意力头,平均会抑制这一点。

在这项工作中,我们使用h = 8个平行的注意层,或头。对于每一个,我们使用dk = dv = dmodel/h = 64。由于每个头部的维数降低,因此总计算成本与全维的单头部关注相似。

多头注意力(Multi-head Attention)是注意力机制在深度学习中的一种扩展形式,广泛应用于各种自然语言处理任务和神经网络模型中,特别是在序列到序列(sequence-to-sequence)模型和Transformer模型中。

在传统的注意机制中,通过计算注意力权重对输入序列中的不同位置进行加权求和,以获得上下文表示。而多头注意力则引入了多个注意力头(attention head),每个头都可以学习到不同的特征表示。

多头注意力的关键思想是将输入通过线性变换映射到多个不同的查询、键和值空间。然后,针对每个头,分别计算注意力权重和上下文表示。最后,将多个头的输出进行合并,得到最终的多头注意力表示。

以下是多头注意力的基本步骤:

  1. 线性变换:通过线性变换将输入序列(通常是查询、键和值)映射到多个不同的子空间。这里的线性变换是为了生成多个不同的查询、键和值向量。

  2. 计算注意力权重:对于每个头,使用相应的查询、键和值进行注意力计算,得到多个注意力权重。

  3. 上下文表示:将每个头得到的注意力权重与对应的值向量相乘,然后对它们进行加权求和,得到每个头的上下文表示。

  4. 多头合并:将多个头的上下文表示进行拼接或求平均,得到最终的多头注意力表示。

多头注意力的优势在于可以同时关注局部和全局的信息,每个头可以学习到不同的语义特征或关系。这使得模型能够更好地捕捉输入序列的复杂性和上下文相关性,提升了模型的表达能力和性能。

多头注意力广泛应用于机器翻译、文本摘要、语言生成等任务中。特别是在Transformer模型中,多头注意力是其核心组件之一,负责编码和解码阶段的自注意力和源-目标注意力计算。

Applications of Attention in our Model

自关注层(Self-Attention Layer),也称为自注意力机制或自注意力机制层,是一种用于序列数据处理的重要组件,特别是在Transformer模型中广泛使用。

自关注层通过将输入序列的每个位置与其他位置之间的相互依赖关系进行建模来捕捉全局上下文信息,而不仅仅局限于局部窗口。它可以为每个位置计算权重,使得模型能够更有效地关注相关的上下文。

在自关注层中,输入序列经过三个线性变换,分别得到查询(query)、键(key)和值(value)表示。然后,使用这些查询、键和值进行注意力计算,得到每个位置的上下文表示。

以下是自关注层的基本步骤:

  1. 线性变换:通过对输入序列进行线性变换,得到查询向量、键向量和值向量。这些变换通常由可学习的权重矩阵实现。

  2. 注意力计算:使用查询向量和键向量计算注意力权重,通常通过计算查询向量与键向量之间的相似度。常见的计算方法是使用点积、缩放点积或双线性函数等。

  3. 权重归一化:在注意力计算得到的未经归一化的权重上应用 Softmax 函数,以获得对应位置的注意力权重。这样可以保证每个位置的权重在0到1之间,并且总和为1。

  4. 上下文表示:将注意力权重与值向量进行加权求和,得到每个位置的上下文表示,用于表征该位置的语义信息。

自关注层具有以下优点:

  • 全局依赖:自关注层可以捕捉输入序列中任意两个位置之间的依赖关系,而不受局部窗口或固定感受野的限制。
  • 并行计算:自关注层中的注意力计算可以并行进行,因此非常适合在硬件加速器上高效运行。
  • 长序列建模:自关注层通过注意力机制有效处理长序列,能够更好地捕捉长距离的依赖关系。

自关注层在Transformer模型中被广泛应用,并在各种自然语言处理任务中取得了显著的效果。其灵活性和表达能力使得它成为处理序列数据的重要工具。

希望这个解释对你有所帮助!如有任何进一步的问题,请随时提问。

transformer以三种不同的方式使用多头注意力: 

•在“编码器-解码器注意”层中,查询来自前一个解码器层,而记忆键和值来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模仿了序列到序列模型中典型的编码器-解码器注意机制,如[38,2,9]。

•编码器包含自关注层。在自关注层中,所有的键、值和查询都来自同一个地方,在这种情况下,是编码器中前一层的输出。编码器中的每个位置都可以处理编码器前一层中的所有位置。

•类似地,解码器中的自关注层允许解码器中的每个位置关注解码器中的所有位置,直至并包括该位置。我们需要防止解码器中的向左信息流以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中对应于非法连接的所有值来实现缩放点积注意力。参见图2。

位置前馈网络

除了注意子层之外,编码器和解码器中的每一层都包含一个完全连接的前馈网络,该网络分别相同地应用于每个位置。这包括两个线性转换,中间有一个ReLU激活。

虽然线性变换在不同位置上是相同的,但它们在每一层之间使用不同的参数。另一种描述它的方式是两个核大小为1的卷积。

输入和输出的维数为dmodel = 512,内层的维数df = 2048。

嵌入和Softmax

与其他序列转导模型类似,我们使用学习嵌入将输入令牌和输出令牌转换为维度dmodel的向量。我们还使用通常学习的线性变换和softmax函数将解码器输出转换为预测的下一个令牌概率。在我们的模型中,我们在两个嵌入层和pre-softmax线性变换之间共享相同的权矩阵,类似于[30]。在嵌入层中,我们将这些权重乘以√dmodel。

不同层类型的最大路径长度、每层复杂度和最小顺序操作数。N为序列长度,d为表示维数,k为卷积的核大小,r为限制自注意中的邻域大小。

位置编码

由于我们的模型不包含递归和卷积,为了使模型利用序列的顺序,我们必须注入一些关于序列中标记的相对或绝对位置的信息。为此,我们在编码器和解码器堆栈底部的输入嵌入中添加了“位置编码”。位置编码与嵌入具有相同的维数模型,因此可以对两者进行求和。位置编码有多种选择,有习得的和固定的[9]。

其中pos是位置,I是尺寸。也就是说,位置编码的每一个维度对应于一个正弦波。波长形成从2π到10000·2π的几何级数。我们选择这个函数是因为我们假设它可以让模型很容易地通过相对位置来学习,因为对于任何固定的偏移量k, P Epos+k可以表示为P Epos的线性函数。

我们还尝试使用学习的位置嵌入[9],并发现这两个版本产生了几乎相同的结果(见表3 (E)行)。我们选择正弦版本是因为它可以允许模型外推到比训练期间遇到的序列长度更长的序列。

在这项工作中,我们使用了不同频率的正弦和余弦函数:

其中pos是位置,I是尺寸。也就是说,位置编码的每一个维度对应于一个正弦波。波长形成从2π到10000·2π的几何级数。我们选择这个函数是因为我们假设它可以让模型很容易地通过相对位置来学习,因为对于任何固定的偏移量k, P Epos+k可以表示为P Epos的线性函数。

我们还尝试使用学习的位置嵌入[9],并发现这两个版本产生了几乎相同的结果(见表3 (E)行)。我们选择正弦版本是因为它可以允许模型外推到比训练期间遇到的序列长度更长的序列。

为什么Self-Attention

在本节中,我们将自注意层的各个方面与通常用于映射一个可变长度符号表示序列(x1,…xn)到另一个等长序列(z1,…, zn)其中xi, zi∈R d,的循环层和卷积层进行比较。,如典型序列转导编码器或解码器中的隐藏层。为了激励我们使用自我关注,我们考虑了三个必要条件。

一个是每层的总计算复杂度。另一个是可以并行化的计算量,通过所需的最小顺序操作数来衡量。

第三个是网络中远程依赖关系之间的路径长度。学习远程依赖关系是许多序列转导任务中的关键挑战。影响学习这种依赖关系能力的一个关键因素是网络中向前和向后信号必须经过的路径长度。输入和输出序列中任意位置组合之间的路径越短,学习远程依赖关系就越容易[12]。因此,我们还比较了由不同层类型组成的网络中任意两个输入和输出位置之间的最大路径长度

远程依赖关系(Long-Distance Dependency)是指在一个文本序列中,两个或多个词之间存在较长的距离并且彼此之间存在依赖关系。在自然语言处理领域,处理远程依赖关系是一个具有挑战性的任务,因为较长的距离会导致模型难以准确捕捉到这种依赖关系。

在传统的神经网络模型中,由于缺乏显式的记忆单元或限制的上下文窗口,模型对于处理远程依赖关系的能力较弱。例如,在句子中的主语和动词可能相隔很远,而模型需要有效地理解它们之间的语义关系。

然而,一些现代的模型,如Transformer,通过引入自注意力机制和位置绝对编码等技术,增强了处理远程依赖关系的能力。自注意力机制允许模型在编码器和解码器中捕捉全局的依赖信息,并且位置绝对编码提供了位置信息帮助模型更好地理解输入序列中不同位置的依赖关系。

此外,还有其他技术可以用于处理远程依赖关系,例如递归神经网络(Recursive Neural Networks)和门控循环单元(Gated Recurrent Units)。这些模型通过递归或门控机制更好地处理长距离的依赖关系。

处理远程依赖关系在诸如机器翻译、语言建模、句法分析等任务中非常重要。解决远程依赖问题对于构建能够理解语言结构和上下文关系的模型至关重要。

总之,远程依赖关系是指在一个文本序列中存在较长距离的词之间的依赖关系。现代的深度学习模型通过注意力机制、位置编码等技术增强了处理远程依赖关系的能力。

希望对你有所帮助!如果还有其他问题,请随时提问。

如表1所示,自关注层用恒定数量的顺序执行操作连接所有位置,而循环层需要O(n)个顺序操作。在计算复杂度方面,自关注层比循环层更快当序列长度n小于表示维数d,这是机器翻译中最先进的模型使用的句子表示最常见的情况,例如词块(word-piece)[38]和字节对(byte-pair)[31]表示。为了提高涉及很长序列的任务的计算性能,可以将自注意限制为只考虑以各自输出位置为中心的输入序列中大小为r的邻域。这将使最大路径长度增加到O(n/r)。我们计划在未来的工作中进一步研究这种方法。

训练

本节描述了我们模型的训练机制。

训练数据和批处理

我们在标准的WMT 2014英语-德语数据集上进行训练,该数据集由大约450万句对组成。句子使用字节对编码[3]进行编码,该编码具有大约37000个标记的共享源-目标词汇表。对于英语-法语,我们使用了更大的WMT 2014英语-法语数据集,该数据集包含3600万个句子,并将标记分割成32000个单词-词汇表[38]。句子对按近似序列长度进行批处理。每个训练批包含一组句子对,其中包含大约25000个源标记和25000个目标标记

优化器

我们使用Adam优化器[20],β1 = 0.9, β2 = 0.98, λ = 10−9。在训练过程中,我们根据以下公式改变了学习率:

这对应于在第一个warmup_steps训练步骤中线性增加学习率,然后按步数的倒数平方根成比例地降低学习率。我们使用了warmup_steps = 4000。

学习率(Learning Rate)是在训练机器学习模型时控制参数更新步长的超参数。它决定了每次迭代中模型参数更新的幅度大小。

在优化算法中,模型的目标是通过最小化或最大化损失函数来找到最优的模型参数。学习率决定了在每次迭代中参数更新的大小,即每次迭代中参数沿着梯度方向更新的步长。

学习率的选择对模型的训练和性能具有重要影响。如果学习率过大,可能导致参数在参数空间中跳过最优解,并出现震荡或不收敛的情况。相反,如果学习率过小,模型训练速度可能过慢,需要更多的迭代才能达到较好的性能。

常见的学习率调整策略包括:

  1. 固定学习率:在整个训练过程中保持不变的学习率。这是最简单的学习率策略,但需要手动选择一个合适的学习率。

  2. 学习率衰减:随着训练的进行,逐渐减小学习率。例如,按照固定的衰减规则(如指数衰减或按照特定的时间表)减小学习率。

  3. 自适应学习率:根据模型的训练情况自动调整学习率。常见的方法包括AdaGrad、Adam、RMSprop等。

  4. 批量学习率:针对不同的参数或层使用不同的学习率。例如,更深层的网络可以使用较小的学习率。

选择合适的学习率需要结合具体的任务、模型架构和数据集特性进行实验和调优。通常,通过尝试不同的学习率,并观察模型的训练过程和性能来确定最佳学习率。

学习率是优化算法中一个重要的超参数,需要细致地调整以确保模型的高效训练和良好的泛化能力。

 正则化

我们在训练中使用三种类型的正则化:

 

BLEU(Bilingual Evaluation Understudy)是一种常用的机器翻译评估指标,用于评估机器生成的翻译结果与参考答案之间的相似程度。BLEU指标的计算基于一系列n-gram的精确匹配以及短语级别的匹配。

BLEU指标的计算步骤如下:

  1. 对于每个候选句子,计算其中包含的n-gram(连续n个词)的精确匹配数量,称为候选片段数(candidate n-gram count)。

  2. 对于每个n-gram订单(从1到最大n),统计参考答案集合中所有句子中出现的n-gram数量的最大值,称为参考片段数(reference n-gram count)。

  3. 计算候选片段数和参考片段数之间的累加得分,并通过一个精确匹配惩罚因子对候选句子的过长进行惩罚,以防止过度生成短语。

  4. 最后,将以上计算得到的各项得分加权平均,得到最终的BLEU得分。常用的权重设置是加权算术平均,其中权重为每个n-gram订单的逆序长度。

BLEU得分的范围通常在0到1之间,表示机器生成的翻译结果与参考答案的相似程度。更高的BLEU得分表示机器翻译质量更好。

需要注意的是,BLEU指标并不完全能够捕捉到翻译质量的所有细节,它主要关注n-gram的匹配情况,并不能准确反映句子的语义和流畅性。因此,在使用BLEU进行评估时,还应该结合其他指标和人工评估来对机器翻译结果进行综合分析。

残差dropout   我们将dropout[33]应用于每个子层的输出,然后将其添加到子层输入并归一化。此外,我们将dropout应用于编码器和解码器堆栈中的嵌入和位置编码之和。对于基本模型,我们使用Pdrop = 0.1的速率。 

        在训练过程中,我们使用值ϵls = 0.1的标签平滑[36]。这损害了困惑,因为模型学会了更不确定,但提高了准确性和BLEU分数。

残差(Residual)在深度学习中是指网络中的跳跃连接或捷径连接,用于解决深层神经网络训练过程中的梯度弥散和消失问题。这一概念首次引入了 ResNet(Residual Network)中。

在传统的神经网络中,每一层通过非线性变换将输入映射到输出,这些变换由权重参数表示。然而,随着网络层数增加,梯度可能会逐渐减小并导致训练难度增加。这也被称为梯度消失问题。

为了解决梯度消失问题,ResNet引入了残差块(Residual Block)。在残差块中,输入通过一个跳跃连接直接添加到块的输出上。这种跳跃连接允许信息直接从输入传递到输出,即使在深层网络中也能保持梯度信号的流动。

具体来说,在残差块中,原始输入(称为恒等映射)通过一个短路连接添加到卷积层或全连接层的输出上。形式上,残差块的计算可以表示为:

y = F(x) + x

其中 y 是残差块的输出,F(x) 是卷积层或全连接层的变换,x 是输入。

通过引入残差连接,网络可以更容易地学习到恒等映射,即将输入直接传递给输出。当模型需要学习恒等映射时,残差块中的权重就可以趋近于零,使得网络更容易训练。

ResNet的成功证明了残差连接的有效性,在深度神经网络中广泛应用。除了解决梯度消失问题外,残差连接还有助于模型的特征传播和信息流动,进一步提高了模型的性能和训练效果。

总结而言,残差是指在深度学习中引入的跳跃连接或捷径连接,在网络中帮助解决梯度消失问题,促进信息的有效传播。它被广泛应用于深度神经网络中,如ResNet等。

残差dropout(Residual Dropout)是在深度残差网络(Deep Residual Network)中应用的一种正则化技术。它结合了残差连接和随机失活(Dropout)的思想,旨在提高模型的泛化能力和防止过拟合。

在深度残差网络中,残差连接允许模型在前向传播中跳过一些层,从而更容易学习到恒等映射,避免了梯度消失或梯度爆炸问题。而随机失活通过在训练过程中以一定的概率将神经元输出置零,以减少模型的复杂性和防止过拟合。

残差dropout将这两种技术相结合,即在残差网络的残差块中应用随机失活。其具体操作如下:

  1. 在残差块的输入上应用随机失活,即在输入特征映射上以一定的概率将部分神经元的输出置零。

  2. 将残差块的跳跃连接路径从输入到输出进行缩放,以补偿由于随机失活而引入的缩放效果。

残差dropout的优势在于它可以进一步降低网络的复杂性和防止过拟合。通过在残差块中引入随机失活,模型被迫学习到更鲁棒的表示,并且能够适应输入的多样性和噪声。此外,残差dropout还可以提供更强的正则化效果,减少模型的过拟合风险。

需要注意的是,残差dropout只在训练阶段应用,而在测试或推断阶段不使用随机失活,以便获取稳定的预测结果。

总结而言,残差dropout是在深度残差网络中应用的一种正则化技术,通过在残差块中引入随机失活来减少模型复杂性、防止过拟合和提高泛化能力。

标签平滑(Label Smoothing)是一种正则化技术,用于改善深度学习模型在分类任务中的性能和泛化能力。它通过在训练过程中对目标标签进行调整,减少模型对于训练数据中的噪声和不确定性的过度自信。

在传统的分类任务中,通常使用一个独热编码的标签表示每个样本的类别,其中对应真实类别的位置概率为1,其他位置概率为0。然而,这样的标签表示在某些情况下可能存在问题。

标签平滑通过将真实类别位置的概率从1调整为一个小于1的值(通常接近0),同时将其他类别位置的概率分配给剩余的概率值。具体而言,可以使用以下公式进行标签平滑:

smooth_label = (1 - epsilon) * one_hot_label + epsilon / num_classes

其中,epsilon 是一个小的非零值,one_hot_label 表示独热编码的真实标签,num_classes 是类别的数量。

标签平滑的目的是减少模型对于训练数据中标签噪声和不确定性的过拟合。通过引入一定的软性目标,更加平滑的标签表示可以帮助模型在训练期间更好地探索解空间,并提高泛化能力。

标签平滑的主要优点包括:

  1. 减少过度自信:通过将目标标签调整为一个小概率值,模型不会过于自信地预测单一类别,从而减少对噪声和错误标签的过拟合。

  2. 提高泛化能力:标签平滑能够使模型在训练中更充分地探索解空间,学习到更鲁棒的特征表示,从而提高模型在未见样本上的泛化能力。

需要注意的是,标签平滑通常应用于具有较大数据集和较复杂任务的深度学习模型中。在小规模数据集和简单分类任务中,可能不需要使用标签平滑。

总结而言,标签平滑是一种正则化技术,通过对目标标签进行调整,减少模型对于训练数据中的噪声和不确定性的过度自信。它可以提高模型的泛化能力和鲁棒性。

结果

机器翻译 

在WMT 2014英德翻译任务中,大型变压器模型(表2中的transformer (big))比之前报道的最佳模型(包括集成)高出2.0 BLEU以上,建立了新的最先进的BLEU分数28.4。该模型的配置列在表3的底线。训练时间为3.5天,使用的是8个P100图形处理器。甚至我们的基本模型也超过了所有以前发表的模型和集合,而训练成本只是任何竞争模型的一小部分。

在WMT 2014英法翻译任务上,我们的大模型获得了41.0的BLEU分数,优于之前发布的所有单一模型,而训练成本不到之前最先进模型的1/4。训练为英语到法语的Transformer(大)模型使用的辍学率Pdrop = 0.1,而不是0.3。

对于基本模型,我们使用通过平均最后5个检查点获得的单个模型,这些检查点每隔10分钟写入一次。对于大型模型,我们取最后20个检查点的平均值。我们使用束搜索,束大小为4,长度惩罚α = 0.6[38]。这些超参数是在开发集上实验后选择的。我们将推理过程中的最大输出长度设置为输入长度+ 50,但尽可能早地终止[38]。

表2总结了我们的结果,并将我们的翻译质量和培训成本与文献中的其他模型架构进行了比较。我们通过将训练时间、使用的GPU数量和每个GPU的持续单精度浮点容量的估计值5相乘来估计用于训练模型的浮点运算次数。

模型的变化

为了评估Transformer不同组件的重要性,我们以不同的方式改变了我们的基本模型,测量了英语到德语翻译的性能变化

翻译:

Transformer体系结构的变体。未列出的值与基本模型的值相同。newstest2013的所有指标都是基于英语到德语的翻译开发集。根据我们的字节对编码,列出的困惑是每个单词的,不应该与每个单词的困惑进行比较。

 

我们使用了前一节中描述的波束搜索,但没有使用检查点平均。我们在表3中展示了这些结果。

在表3行(A)中,我们在保持计算量不变的情况下,改变注意头的数量以及注意键和值维度,如3.2.2节所述。虽然单头注意力比最佳设置差0.9 BLEU,但过多的头也会降低质量。

在表3行(B)中,我们观察到减小注意键大小dk会损害模型质量。这表明确定兼容性并不容易,一个比点积更复杂的兼容性函数可能是有益的。我们在(C)和(D)行中进一步观察到,正如预期的那样,更大的模型更好,并且dropout对于避免过度拟合非常有帮助。在(E)行中,我们用学习的位置嵌入替换正弦位置编码[9],并观察到与基本模型几乎相同的结果。

英语选区解析

为了评估Transformer是否可以推广到其他任务,我们对英语选区解析进行了实验。这项任务提出了具体的挑战:输出受到强烈的结构限制,并且比输入长得多。此外,RNN序列到序列模型还不能在小数据体系中获得最先进的结果[37]。

我们在Penn Treebank的Wall Street Journal (WSJ)部分[25]上训练了一个dmodel = 1024的4层转换器,大约训练了40K个句子。我们还在半监督设置中训练它,使用大约17M个句子的更大的高置信度和BerkleyParser语料库[37]。我们仅在WSJ设置中使用了16K代币的词汇表,在半监督设置中使用了32K代币的词汇表。

结论

Transformer,这是第一个完全基于注意的序列转导模型,用多头自注意取代了编码器-解码器架构中最常用的循环层。

对于翻译任务,Transformer的训练速度明显快于基于循环层或卷积层的体系结构。在WMT 2014的英语到德语和WMT 2014的英语到法语翻译任务上,我们都达到了一个新的水平。在前一个任务中,我们的最佳模型甚至优于所有先前报道的集成。

我们对基于注意力的模型的未来感到兴奋,并计划将其应用于其他任务。我们计划将Transformer扩展到涉及文本以外的输入和输出模式的问题,并研究局部的、受限的注意力机制,以有效地处理大量的输入和输出,如图像、音频和视频。减少世代的顺序是我们的另一个研究目标。

我们用来训练和评估模型的代码可以在https://github.com/ tensorflow/tensor2tensor上找到

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值