基于RNN和CNN的翻译模子,在处理处罚笔墨序列时有个问题:它们对序列中不同位置之间的依赖关系的建模并不直接。以CNN的为例,如果要对长隔断依赖举行描述,需要多层卷积操纵,而且不同层之间信息传递也可能有丧失,这些都限定了模子的能力。
为了更好地描述笔墨序列,研究人员提出了一种新的模子 Transformer。 Transformer 并不依赖任何循环单位大概卷积单位,而是使用一种被称作自留意力网络的结构来对序列举行表示。自留意力可以非常高效的描述任意隔断之间的依赖关系,因此非常得当处理处罚语言笔墨序列。
Transformer 一经提出就受到了广泛关注,现在已经成为了呆板翻译中最先进的架构之一。
一、自留意力机制
在RNN中处理处罚笔墨序列,如果想创建wm 和 w1 之间的关系,需要 m−1 次信息传递。对于长序列来说,词汇之间信息传递隔断过长会导致信息在传递过程中丢失,同时这种按次序建模的方式也使得系统对序列的处理处罚十分缓慢。
自留意力机制直接创建单词 wm与前 m−1 个单词之间的关系,即 wm 与序列中全部其他单词的距
离都是 1。这种方式很好地解决了长隔断依赖问题,同时由于单词之间的接洽都是相互独立的,因此也大大提高了模子的并行度。
自留意力机制也可以被看作是一个序列表示模子。
比如,对于每个目标位置 j,都生成一个与之对应的源语言句子表示,它的情势如下:
Cj = Sum(αi,jhi) 。此中,hi 为源语言句子每个位置的表示效果, αi,j 是目标位置 j 对 hi 的留意力权重。
以源语言句子为例,自留意力机制将序列中每个位置的表示 hi 看作 query(查询),并且将全部位置的表示看作 key(键)和 value (值)。自留意力模子通过计算当前位置与全部位置的匹配程度,也就是在留意力机制中提到的留意力权重,来对各个位置的 value 举行加权求和。得到的效果可以被看作是在这个句子中当前位置的抽象表示。
这个过程,可以叠加多次,形成多层留意力模子,对输入序列中各个位置举行更深层的表示。
在自留意力机制中,并不是使用类似RNN的记忆能力去访问历史信息。序列中全部单词之间的信息都是通过同一种操纵(query 和 key 的相关度)举行处理处罚。如许,表示效果 h˜(他) 在包罗“他”这个单词的信息的同时,也包罗了序列中其他词的信息。
也就是,序列中每一个位置的表示效果中,都包罗了其他位置的信息。从这个角度说, h˜(他) 已经不再是单词“他”自身的表示效果,而是一种在单词“他”的位置上的全局信息的表示。
通常,也把生成 h˜(wi) 的过程看作特性提取,而实现这个过程的模子被称为特性提取器。
二、Transformer架构
2.1 Transformer上风
Transformer 模子仅仅使用自留意力机制和标准的前馈神经网络,完全不依赖任何循环单位大概卷积操纵。很好地解决了单词间长隔断依赖的问题。自留意力机制非常得当在 GPU 上举行并行化,因此模子训练的速度更快。
Transformer 也可以看成一种表示模子,被大量地使用在NLP的其他范畴,乃至图像处理处罚和语音处理处罚中也能看到它的影子。比如,现在非常盛行的 BERT 等预训练模子就是基于 Transformer。
Transformer 在 WMT英德和英法呆板翻译任务上的性能。它能用更少的计算量(FLOPs)达到比其他模子更好的翻译品质。
Transformer 并不简单等同于自留意力机制。 Transformer 模子还包罗了很多优秀的技术,比如:多头留意力、新的训练学习率调整策略等等。这些因素一起组成了真正的 Transformer。
2.2 总体结构
自留意力子层(Self-Attention Sub-layer):使用自留意力机制对输入的序列举行新的表示;
前馈神经网络子层(Feed-Forward Sub-layer):使用全毗连的前馈神经网络对输入向量序列举行进一步变动;
残差毗连(标记为“Add”):对于自留意力子层和前馈神经网络子层,都有一个从输入直接到输出的额外毗连,也就是一个跨子层的直连。残差毗连可以使深层网络的信息传递更为有效;
层标准化(Layer Normalization):自留意力子层和前馈神经网络子层举行终极输出之前,会对输出的向量举行层标准化,规范效果向量取值范围,如许易于后面进一步的处理处罚。
以上操纵就构成了 Transformer 的一层,各个模块实行的次序可以简单描述为:
Self-Attention → Residual Connection → Layer Normalization → Feed Forward Network → Residual Connection → Layer Normalization。
解码器中引入了一个额外的编码-解码留意力子层(EncoderDecoder Attention Sub-layer)。这个新的子层,可以资助模子使用源语言句子的表示信息生成目标语言不同位置的表示。编码-解码留意力子层仍然基于自留意力机制,因此它和自留意力子层的结构是类似的,只是 query、 key、 value 的定义不同。
2.3 位置编码
采用自留意力机制对源语言和目标语言序列举行处理处罚时,直接对当前位置和序列中的任意位置举行建模,忽略了词之间的次序关系。为相识决这个问题,Transformer 在原有的词向量输入基础上引入了位置编码,来表示单词之间的次序关系。它是Transformer 乐成的一个重要因素。
位置编码的计算方式有很多种, Transformer 使用不同频率的正余弦函数,式中 PE(·) 表示位置编码的函数, pos 表示单词的位置, i 代表位置编码向量中的第几维, dmodel 是 Transformer 的一个基础参数,表示每个位置的隐层大小。
在Transformer 中,位置编码的维度和词嵌入向量的维度类似(均为 dmodel),模子通过
将二者相加作为模子输入。
为什么通过这种计算方式可以很好的表示位置信息?有几方面原因。
起首,正余弦函数是具有上下界的周期函数,用正余弦函数可将长度不同的序列的位置编
码的范围都固定到 [−1,1],如许在与词的编码举行相加时,不至于产生太大差距。
另外位置编码的不同维度对应不同的正余弦曲线,这为多维的表示空间赋予肯定意义。
末了,根据三角函数的性质,对于任意固定的偏移量 k, PE(pos + k) 能被表示成 PE(pos) 的线性函数,换句话说,位置编码可以表示词之间的隔断。
在实践中发现,位置编码对 Transformer 系统的性能有很大影响。对其举行改进也会带来进一步的性能提拔。
2.4 基于点乘的多头留意力机制
Transformer 模子摒弃了循环单位和卷积等结构,完全基于留意力机制来构造模子,此中包罗着大量的留意力计算。比如,可以通过自留意力机制对源语言和目标语言序列举行信息提取,并通过编码-解码留意力对双语句对之间的关系举行建模。而这些模块都是由基于点乘的多头留意力机制实现的。
2.4.1 点乘留意力机制
自留意力机制中至关重要的是获取相关性系数,也就是在融合不同位置的表示向量时各位置的权重。 Transformer 模子采用了一种基于点乘的方法来计算相关性系数。这种方法也称为缩放的点乘留意力(Scaled Dot-product Attention)机制。
在留意力机制的计算过程中,包罗三个重要的参数,分别是 query,key 和 value。将目标语言每个位置的表示视为编码-解码留意力机制的 Q,源语言句子的表示视为 K 和V。在得到 Q, K 和 V 后,便可以举行留意力的运算,这个过程可以被情势化为:
通过对 Q 和 K 的转置举行矩阵乘法操纵,计算得到一个维度大小为 L × L 的相关性矩阵,即 QK_T,它表示一个序列上任意两个位置的相关性。再通过系数 1/√dk举行放缩操纵,放缩可以减少相关性矩阵的方差,具体体现在运算过程中实数矩阵中的数值不会过大,有利于模子训练。在此基础上,通过对相关性矩阵累加一个掩码矩阵 Mask,来屏蔽掉矩阵中的无用信息。
然后使用 Softmax 函数对相关性矩阵在行的维度上举行归一化操纵,这可以明白为对第 i 行举行归一化,效果对应了 V 中不同位置上向量的留意力权重。对于 value的加权求和,可以直接用相关性系数和 V 举行矩阵乘法得到,即 Softmax(√QKdkT +Mask)和 V 举行矩阵乘。终极得到自留意力的输出,它和输入的 V 的大小是千篇一律的。
2.4.2 多头留意力机制 (Multi-head Attention)
“多头”可以明白成将原来的 Q、 K、 V 按照隐层维度均匀切分成多份。假设切分 h份,那么终极会得到 Q = {Q1,...,Qh}, K = {K1,...,Kh}, V = {V1,...,Vh}。多头留意力就是用每一个切分得到的 Q, K, V 独立的举行留意力计算,即第 i 个头的留意力计算效果 headi = Attention(Qi,Ki,Vi)。
多头留意力的计算过程:
多头留意力机制的好处是允许模子在不同的表示子空间里学习。在很多实行中发现,不同表示空间的头捕获的信息是不同的,比如,在使用 Transformer 处理处罚自然语言时,有的头可以捕获句法信息,有的头可以捕获词法信息。
2.4.3 掩码操纵
掩码(Mask)的目的是对向量中某些值举行掩饰,避免无关位置的数值对运算造成影响。 Transformer 中的掩码主要应用在留意力机制中的相关性系数计算,具体方式是在相关性系数矩阵上累加一个掩码矩阵。该矩阵在需要掩码的位置的值为负无穷 −inf(具体实现时是一个非常小的数,比如 −1e9),别的位置为 0,如许在举行了 Softmax 归一化操纵之后,被掩码掉的位置计算得到的权重便近似为 0,也就是说对无用信息分配的权重为 0,从而避免了其对效果产生影响。
Transformer 包罗两种掩码:
a.句长补全掩码(Padding Mask)
训练样本中每个批次内序列的长度不一样,为了方便对批次内序列举行矩阵表示,需要举行对齐操纵,即在较短的序列后面添补 0 来占位(padding 操纵)。
b.未来信息掩码(Future Mask)
对于解码器来说,由于在预测的时候是自左向右举行的,即第 t 时刻解码器的输出只能依赖于 t 时刻之前的输出。且为了保证训练解码一致,避免在训练过程中观测到目标语言端每个位置未来的信息,因此需要对未来信息举行屏蔽。
具体的做法是:构造一个上三角值全为-inf 的 Mask矩阵。即在解码器计算中,在当前位置,通过未来信息掩码把序列之后的信息屏蔽掉了,避免了 t 时刻之后的位置对当前的计算产生影响。
2.5 残差网络和层标准化
在 Transformer 的训练过程中,为了避免产生梯度爆炸大概消散,引入了残差操纵,将前面全部层的输出加到一起。但为了避免不同层(或子层)的效果之间的差异性较大,造成训练过程不稳定、训练时间较长,在每层中参加了层标准化操纵。
在 Transformer 中常常使用的层标准化操纵有两种结构,分别是后标准化(Post norm)和前标准化(Pre-norm)。后标准化中先举行残差毗连再举行层标准化,而前标准化则是在子层输入之前举行层标准化操纵。在很多实践中已经发现,前标准化的方式更有利于信息传递,因此得当训练深层的 Transformer 模子。
2.6 前馈全毗连网络子层
Transformer 全毗连网络的作用主要体现在将颠末留意力操纵之后的表示映射到新的空间中,新的空间会有利于接下来的非线性变动等操纵。实行证明,去掉全毗连网络会对模子的性能造成很大影响。 Transformer 的全毗连前馈神经网络包罗两次线性变动和一次非线性变动(ReLU 激活函数:ReLU(x) = max(0,x)),每层的前馈神经网络参数不共享。
通常情况下,前馈神经网络的隐层维度要比留意力部分的隐层维度大,而且研究人员发现这种设置对 Transformer 是至关重要的。比如,留意力部分的隐层维度为 512,前馈神经网络部分的隐层维度为 2048。继承增大前馈神经网络的隐层大小,比如设为 4096,乃至 8192,还可以带来性能的增益,但是前馈部分的存储消耗较大,需要更大规模 GPU 设备的支持。因此在具体实现时,每每需要在翻译准确性和存储/速度之间找到一个平衡。
2.7 训练
2.7.1 训练优化器设置
在训练优化器方面,需要留意以下几点:
• Transformer 使用 Adam 优化器优化参数,并设置 β1 = 0.9, β2 = 0.98, ϵ = 10−9
• Transformer 在学习率中同样应用了学习率预热(Warmup)策略。
• 小批量训练(Mini-batch Training):每次从样本中选择一小部分数据举行训练。这种方法的收敛较快,同时易于提高设备的利用率。批次大小通常设置为 2048 或 4096。每一个批次中的句子并不是随机选择的,模子通常会根据句子长度举行排序,选取长度相近的句子组成一个批次。如许做可以减少 padding 数量,提高训练效率。
• Dropout:为了避免过拟合,Transformer 参加了 Dropout 操纵。这四个地方用到了Dropout:词嵌入和位置编码、残差毗连、留意力操纵和前馈神经网络。 Dropout比例通常设置为 0.1。
• 标签平滑(Label Smoothing):简单的说就是给精确答案以外的种别分配肯定的概率,而不是采用非 0 即 1 的概率。如许,可以学习一个比力平滑的概率分布,从而提拔泛化能力。
2.7.2 模子具体设置
常见的 Transformer 模子有 TransformerBase、 Transformer Big 和 Transformer Deep,具体设置如下:
• Transformer Base:标准的 Transformer 结构,解码器编码器均包罗 6 层,隐层维度为 512,前馈神经网络维度为 2048,多头留意力机制为 8 头, Dropout 设为 0.1。
• Transformer Big:为了提拔网络的容量,使用更宽的网络。在 Base 的基础上增大隐层维度至 1024,前馈神经网络的维度变为 4096,多头留意力机制为 16 头,Dropout 设为 0.3。
• Transformer Deep:加深编码器网络层数可以进一步提拔网络的性能,它的参数设置与 Transformer Base 基本一致,但是层数增长到 48 层,同时使用 Pre-Norm作为层标准化的结构。
2.8 推断
Transformer 解码器生成译文词序列的过程和别的神经呆板翻译系统类似,都是从左往右生成,且下一个单词的预测依赖已经生成的单词。
Transformer 在推断阶段无法对全部位置举行并行化操纵,由于对于每一个目标语言单词都需要对前面全部单词举行留意力操纵,因此它推断速度非常慢。可以采用的加速本事有: Cache(缓存需要重复计算的变量)、低精度计算、共享留意力网络等。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |