旅游网站开发工程师,用户界面设计软件,网站域名申请费用,网站建设网络推广广告语【论文笔记】Attention Is All You Need 文章目录 【论文笔记】Attention Is All You NeedAbstract1 Introduction2 Background补充知识#xff1a;软注意力 soft attention 和硬注意力 hard attention#xff1f;补充知识#xff1a;加法注意力机制和点乘注意力机制Extende…【论文笔记】Attention Is All You Need 文章目录 【论文笔记】Attention Is All You NeedAbstract1 Introduction2 Background补充知识软注意力 soft attention 和硬注意力 hard attention补充知识加法注意力机制和点乘注意力机制Extended Neural GPU 介绍ByteNet 介绍ConvS2S 介绍End to end Memory Network 端到端内存网络介绍 3 Model Architecture3.1 Encoder and Decoder Stacks3.2 Attention3.2.1 Scaled Dot-Product Attention: “缩放点积注意力”3.2.2 Multi-Head Attention3.2.3 Applications of Attention in our Model 3.3 Position-wise Feed-Forward Networks3.4 Embeddings and Softmax3.5 Positional Encoding 4 Why Self-Attention5 Training5.1 Training Data and Batching5.2 Hardware and Schedule5.3 Optimizer5.4 Regularization残差 Dropout标签平滑 label smoothing 补充知识标签平滑技术 6 Results6.1 Machine Translation补充知识集束搜索 beam search补充知识模型的集成 6.2 Model Variations6.3 English Constituency Parsing 7 Conclusion Abstract
当时2017年以及之前做 序列处理任务 的深度学习模型都包含了由循环神经网络和卷积神经网络组成的编码器和解码器模块。更进一步的表现最好的模型额外用了注意力机制来连接编码器和解码器。 We propose a new simple network architecture, the Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely. Transformer 的作者们提出了这个更加简单的序列处理模型只包含了注意力机制完全取消了循环和卷积神经网络模块。
实验设置WMT 2014 机器翻译比赛里面英德、英法两个翻译任务。
评估指标BLEU 。
实验效果
英德翻译达到 28.4 BLEU比之前的模型提高了 2 BLEU英法翻译达到 41.8 BLEU成为新 sota 模型。更好的翻译质量、更并行化的处理以及更少的训练时间。
泛化性评估在 English constituency parsing 英语选区分析任务中采用大量而有限的数据进行训练也能达到效果transformer 并非只会机器翻译还能做其他任务。 英语选区分析是一种自然语言处理技术用于将句子分解成其各个成分或短语的过程。这种分析有助于理解句子的结构和语法关系可以帮助计算机更好地理解和处理自然语言文本。英语选区分析通常涉及识别句子中的主语、谓语、宾语等成分并确定它们之间的依存关系。这种技术在机器翻译、信息检索和问答系统等领域具有重要应用有助于提高计算机处理自然语言的准确性和效率。 1 Introduction
传统的序列建模和转导问题主要用于语言建模或者机器翻译这些工作的SOTA模型2017年都是由RNN、LSTM和门控网络组成的到现如今2017年也有大量的工作在推进循环语言模型recurrent language models以及编码器-解码器encoder-decoder的结构。
循环模型通常会沿着输入和输出序列的符号位置进行计算将位置与计算时间中的步骤对齐这句话可以解读成循环模型对序列的处理是串行的。它们生成一系列隐藏状态 h t h_t ht h t h_t ht 先前隐藏状态 h t − 1 h_{t−1} ht−1 和位置 t t t 输入的函数也就是 h t f ( h t − 1 , x t ) h_{t}f(h_{t-1},x_{t}) htf(ht−1,xt) 这个式子只有当 x t x_{t} xt 计算完毕才能计算 x t 1 x_{t1} xt1 也说明是串行处理的。这种固有的顺序处理本质阻碍了训练并行化这在较长的序列做处理上变得困难因为内存限制了示例之间的批处理。 当序列变长时在 GPU 中记录的 中间变量 会线性增多这就导致批次需要调小或者使用迷你批次、数据并行和梯度累积等方式。 最近的2017年工作通过 分解技巧 和 条件计算 显着提高了计算效率同时后者还提高了模型的性能。然而顺序/串行计算的本质局限仍然存在。 分解技巧就是将 LSTM 的权重矩阵分解成两个子矩阵且子矩阵的元素数量都比原来的少其次就是把 LSTM 权重矩阵、其输入和隐藏状态分成独立的组。这样设计的目的是提高计算效率。 分解技巧可以和现在的 LORA 微调结合起来LORA 的特点就是在原来模型参数的基础上增加一对矩阵的乘积 A a × r B r × b A_{a\times r}B_{r\times b} Aa×rBr×b 其中 r a , b ra,b ra,b且 A A A 和 B B B 的元素数量远小于原来模型参数的数量。 是指在 LSTM 中根据输入数据的不同条件执行不同的计算。在 LSTM 中通过门控单元如遗忘门、输入门、输出门来控制信息的流动从而实现不同时间步的计算。这种条件计算使得 LSTM 能够更好地处理长序列数据并学习长期依赖关系。通过调整门控单元的权重和偏置LSTM 可以根据当前输入以及之前的状态来动态调整计算过程以适应不同的条件和输入数据。 感觉可以和混合专家模型建立联系根据样本输入动态地调整模型内组件的“工作量”。 同时可见当年对 LSTM 的改进主要是在不改变顺序/串行计算本质基础上进行的改进或优化没有使用并行计算因此在当时 LSTM 在计算上仍然低效。 注意机制已经成为各种序列建模和转导任务中的一个很好的组成部分允许对依赖关系进行建模而不考虑它们在输入或输出序列中的距离。这句话可以解读成即使两个内容实体在一个句子中相隔较远注意力机制也能在训练阶段捕获到它们之间的关系。然而这种注意机制一般与循环网络一起使用。
在这篇论文中提出了 Transformer 一个避免循环的模型架构而是完全依赖于注意机制来描述输入和输出之间的全局依赖关系。Transformer 允许更多的并行化在 8 个 P100 GPU 上进行了短短 12 个小时的训练后模型获得很强的翻译能力。
循环神经网络以 LSTM 为代表存在本身模型结构复杂 串行处理序列 对长序列的处理不佳等问题然后作者认为是循环结构的本质特点造成的。
2 Background
这一部分是系统性的综述综述主题是“如何降低序列计算”。
减少序列建模的计算量是 Extended Neural GPU 、 ByteNet 和 ConvS2S 的目标所有的这些模型都使用了卷积神经网络、循环神经网络还有一部分的注意力机制以作为基本构建块在输入和输出位置并行计算所有隐藏表征。在这些模型中关联来自两个任意输入或输出位置的信号所需的计算量随着位置之间的距离而增加对于 ConvS2S 呈线性增长这是由于中间模块是编码解码组成的互注意力对于 ByteNet 呈对数增长。这就导致这些模型学习句子中内容距离较长的关系时候变得薄弱内容关系相距越长需要的计算操作就越多。
补充知识软注意力 soft attention 和硬注意力 hard attention
软注意力和硬注意力是深度学习中用于处理序列数据的两种不同的注意力机制。软注意力是一种通过对整个输入序列进行加权求和来计算输出的方法权重是在 0 到 1 之间连续的实数。而硬注意力则是一种只关注输入序列中特定位置的方法即只选择一个或少数几个位置进行计算。
软注意力通常用于处理较长的序列数据可以更好地捕捉全局信息。硬注意力则更适用于需要更精确位置信息的任务硬注意力模型有一个缺点是不可微分导致需要梯度流的强化学习过程难以实现。两种注意力机制在不同场景下有各自的优势和应用。
补充知识加法注意力机制和点乘注意力机制 Additive Attention也称为 Bahdanau Attention使用单层前馈网络来计算注意力分数。 Attention ( h i , s j ) v attention T tanh ( W attention [ h i , s j ] ) \text{Attention}(h_{i},s_{j})v_{\text{attention}}^{T}\tanh(W_{\text{attention}}[h_{i},s_{j}]) Attention(hi,sj)vattentionTtanh(Wattention[hi,sj]) 其中 v attention T v_{\text{attention}}^{T} vattentionT 和 W attention W_{\text{attention}} Wattention 是训练得到的注意力参数。这里 h h h 指的是编码器的隐藏状态 s s s 是解码器的隐藏状态。 Attention ( h i , s j ) \text{Attention}(h_{i},s_{j}) Attention(hi,sj) 函数是一种对齐得分函数。可以使用对齐分数矩阵来显示源句子和目标句子之间的相关性。在神经网络中一旦有了对齐分数就使用这些对齐分数的 softmax 函数计算最终分数确保其总和为 1 且每个项目都是正数。 点积注意力是一种注意力机制其中对齐分数函数被计算为 Attention ( h i , s j ) h i T ⋅ s j h i T ⋅ I ⋅ s j \text{Attention}(h_{i},s_{j})h_{i}^{T}\cdot s_{j} h_{i}^{T}\cdot I \cdot s_{j} Attention(hi,sj)hiT⋅sjhiT⋅I⋅sj 这相当于乘法注意力没有可训练的权重矩阵假设这是一个单位矩阵 I I I 。这里 h h h 指的是编码器的隐藏状态 s s s 是解码器的隐藏状态。 Attention ( h i , s j ) \text{Attention}(h_{i},s_{j}) Attention(hi,sj) 函数是一种对齐得分函数。 Extended Neural GPU 介绍
Extended Neural GPU的解说博客在这里。
神经图灵机 Neural Turing Machine, NMT通过实验证明神经网络模型可以通过在神经网络模型中添加内存模块如计算机的 DRAM并将内存读/写操作配置为可微分从而从给定示例中学习广义算法。但是当从序列性示例数据中学习广义算法时常规操作都是串行学习因为学习过程中只有一个步骤就需要用软注意力机制对整个序列至少计算一次导致似乎没有并行学习的可能。
这篇文章为了克服上述问题序列处理中的并行计算问题提出了一个 Extended Neural GPU 的概念。与专门从事具有复杂控制流的无序执行的 CPU 相比GPU 具有专门用于流处理的硬件结构具有并行化的优势。这篇文章建立一个在 NMT 中运行良好的模型并将所提出的架构应用于序列学习问题。
传统 GRU 的实现 { u σ ( W ′ x U ′ s B ′ ) r σ ( W ′ ′ x U ′ ′ s B ′ ′ ) z tanh ( W x U ( r ⋅ s ) B ) GRU ( x , s ) u ⋅ s ( 1 − u ) ⋅ z \begin{cases} u\sigma(W^{\prime}xU^{\prime}sB^{\prime}) \\ r\sigma(W^{\prime\prime}xU^{\prime\prime}sB^{\prime\prime}) \\ z\tanh(WxU(r\cdot s)B) \\ \text{GRU}(x,s)u\cdot s(1-u)\cdot z \\ \end{cases} ⎩ ⎨ ⎧uσ(W′xU′sB′)rσ(W′′xU′′sB′′)ztanh(WxU(r⋅s)B)GRU(x,s)u⋅s(1−u)⋅z Neural GPU 基本操作与 GRU 类似它只将序列数据作为输入。 这张图展示的是输入序列 { i 1 , 1 × 3 ⋯ i n , 1 × 3 } \{i_{1,1\times 3}\cdots i_{n,1\times 3}\} {i1,1×3⋯in,1×3} 到输出序列 { o 1 , 1 × 3 , ⋯ o n , 1 × 3 } \{o_{1,1\times 3},\cdots o_{n,1\times 3}\} {o1,1×3,⋯on,1×3} 的映射。 序列数据的所有元素都会在时间步长为 0 时被使用。因为存在宽度所以 ∗ * ∗ 是卷积形式的算子。
注意CGRU都是一直复用的这里复用了 n n n 次与序列长度一致。 { u σ ( U ′ ∗ s B ′ ) r σ ( U ′ ′ ∗ s B ′ ′ ) z tanh ( U ∗ ( r ⋅ s ) B ) CGRU ( s ) u ⋅ s ( 1 − u ) ⋅ z \begin{cases} u\sigma(U^{\prime}* sB^{\prime}) \\ r\sigma(U^{\prime\prime}* sB^{\prime\prime}) \\ z\tanh(U*(r\cdot s)B) \\ \text{CGRU}(s)u\cdot s(1-u)\cdot z \end{cases} ⎩ ⎨ ⎧uσ(U′∗sB′)rσ(U′′∗sB′′)ztanh(U∗(r⋅s)B)CGRU(s)u⋅s(1−u)⋅z 那么上面这张图的表现形式是 { o 1 ⋯ n } CGRU 2 n ( ⋯ CGRU 2 ( CGRU 1 ( { s 1 ⋯ n } ) ) \{\mathbf{o_{1\cdots n}}\}\text{CGRU}_{2n}(\cdots\text{CGRU}_{2}(\text{CGRU}_{1}(\{\mathbf{s_{1\cdots n}}\})) {o1⋯n}CGRU2n(⋯CGRU2(CGRU1({s1⋯n})) 。训练是在 logit 的 softmax 和目标标签之间的负对数似然损失的情况下完成的。
这就回答了之前 NMT 提到的问题”学习过程中只有一个步骤就需要用软注意力机制对整个序列至少计算一次“现在是全步骤需要了。我的理解是整个循环的架构没有改变一直做递归但是每次递归都是对整个序列做处理这样的并行性提高了但是计算量还是很大。
Extended Neural GPU 实现
Neural GPU 本身并不能为 NMT 等实际应用提供良好的性能。这是因为语言模型独立地预测每个输出元素。通过配置 编码器-解码器 网络提出了 Extended Neural GPU 。 注意CGRU 和 CGRU d ^{d} d 同样都是复用的同样这里复用了 n n n 次与序列长度一致。
每个解码时间步长都会打印当时的输出元素 o 1 , 2 ⋯ n o_{1,2\cdots n} o1,2⋯n可以直接将前一个输出元素的预测加入中间状态中用于当前输出元素的预测。 { u σ ( U ′ ∗ s W ′ ∗ p B ′ ) r σ ( U ′ ′ ∗ s W ′ ′ ∗ p B ′ ′ ) z tanh ( U ∗ ( r ⋅ s ) W ∗ p B ) CGRU d ( s , p ) u ⋅ s ( 1 − u ) ⋅ z \begin{cases} u\sigma(U^{\prime}* sW^{\prime}*pB^{\prime}) \\ r\sigma(U^{\prime\prime}* sW^{\prime\prime}*pB^{\prime\prime}) \\ z\tanh(U*(r\cdot s)W*pB) \\ \text{CGRU}^{d}(s,p)u\cdot s(1-u)\cdot z \end{cases} ⎩ ⎨ ⎧uσ(U′∗sW′∗pB′)rσ(U′′∗sW′′∗pB′′)ztanh(U∗(r⋅s)W∗pB)CGRUd(s,p)u⋅s(1−u)⋅z 对 p p p 的初始化是一个全 0 0 0 的矩阵当解码输出 o t o_{t} ot 并转化成 p t p_{t} pt 时候存储至 p p p 的存储空间中其他的仍然为 0 0 0 这跟 transformer的解码部分很类似对未曾见到的部分分配极小的注意力。
这里的 CGRU 递归计算 n n n 我的理解是要跟序列长度保持一致。那么这就导致当处理 1 , 2 1,2 1,2 与 n − 2 , n − 1 n-2,n-1 n−2,n−1 之间的关系时计算量是很大的。
ByteNet 介绍
ByteNet的解说博客在这里。
ByteNet 是一个一维卷积神经网络。 ByteNet 由两部分组成一部分用于编码源序列另一部分用于解码目标序列。ByteNet 是一种 字符级 神经机器翻译方法这意味着它 逐个字符而不是逐个单词 执行翻译。 主要特点如下 Encoder-Decoder Stacking: for maximize the representational bandwidth between the encoder and the decoder. 最大化表征带宽也就是说明编码器编码的结果以及解码器前序解码内容可以持续地复用。预测第 n n n 个字符则使用了 s 0 − s 16 s_{0}-s_{16} s0−s16 以及 t 0 − t n − 1 t_{0}-t_{n-1} t0−tn−1 计算出来的表征进行预测编码器的编码数据以及解码器前序解码内容高频复用最大化了编码器表征带宽。 Dynamic Unfolding: generates variable-length outputs (maintaining high bandwidth and being resolution-preserving). 这里的理解是整个模型仍然是顺序/串行进行的这就使得它可以输出长短不一的输出序列。 Dilation convolution: Dilation convolution makes the receptive field grow exponentially in terms of the depth of the networks, as opposed to linearly. 膨胀卷积扩张使感受野随着网络深度呈指数增长而不是线性增长。 ByteNet是一种深度学习模型它使用了膨胀卷积来捕捉序列数据中的长距离依赖。膨胀卷积通过引入一个间隔称为膨胀率来扩大卷积核的感受野而不是仅在相邻的输入位置上进行操作。随着网络深度的增加膨胀率以指数方式增加例如1, 2, 4, 8, ⋯ \cdots ⋯。这意味着每一层可以捕捉到更远距离的信息。随着网络深度的线性增加模型的感受野以指数方式增加。从信息理论的角度来看要覆盖整个输入序列所需的层数与序列长度的对数成正比。这种结构使得ByteNet能够在深度较浅的情况下就实现对长距离依赖的学习。 Residual Blocks. 使用了残差结构保证梯度存在。
ConvS2S 介绍
ConvS2S的解说博客在这里。 上部是编码器底部是解码器。编码器 RNN 处理包含 m m m 个元素的输入序列 x ( x 1 , ⋯ , x m ) x(x_1,\cdots,x_m) x(x1,⋯,xm) 并输出状态表征 z ( z 1 , ⋯ , z m ) z(z_1,\cdots,z_m) z(z1,⋯,zm) 。解码器 RNN 接收 z z z 并从左到右生成输出序列 y ( y 1 , ⋯ , y n ) y(y_1,\cdots,y_n) y(y1,⋯,yn) 每次一个元素。为了生成输出 y i 1 y_{i1} yi1 解码器会根据之前的状态 h i h_i hi 、之前目标语言单词 y i y_i yi 的嵌入 g i g_{i} gi 以及从编码器输出 z z z 得出的条件输入 c i c_{i} ci 计算出一个新的隐藏状态 h i 1 h_{i1} hi1 。
输入元素 x ( x 1 , ⋯ , x m ) x(x_1,\cdots,x_m) x(x1,⋯,xm) 嵌入到分布空间中如 w ( w 1 , ⋯ , w m ) w(w_1,\cdots,w_m) w(w1,⋯,wm) 。输入元素的绝对位置 p ( p 1 , ⋯ , p m ) p(p_1,\cdots,p_m) p(p1,⋯,pm) 被嵌入。将 w w w 和 p p p 结合起来就能得到输入元素表示 e ( w 1 p 1 , ⋯ , w m p m ) e(w_1p_1,\cdots,w_mp_m) e(w1p1,⋯,wmpm) 。因此使用的是位置相关词嵌入。同样在解码器上也使用位置嵌入。
编码器和解码器网络共享一个简单的网络块结构。每个网络块都包含一个一维卷积层后跟一个非线性层。在解码器中不对称三角形意味着未来的单词不用于卷积层计算。
在卷积层中卷积操作对输入序列的每个位置都是局部的并且共享权重意味着卷积核所到之处进行 同样的核内线性操作 。那么假如我们需要关联位置距离较远的信息实体那么我们就需要更大的卷积核那么核内线性计算操作量也要随之线性地增大。 卷积层的输出分为 A 和 B 两部分并通过门控线性单元 Gated Linear Unit v [ A B ] A × σ ( B ) v[A\ B]A\times \sigma(B) v[A B]A×σ(B) 。其中 × \times × 是逐点乘法 σ σ σ 是 sigmoid 函数。GLU 在编码器上的输出为 z z z GLU 在解码器处的输出 h h h 。从每个卷积的输入到 GLU 模块的输出中添加了残差连接。 在计算注意力前将当前解码器状态 h i h_{i} hi 与前一个目标元素 g i − 1 g_{i-1} gi−1 的嵌入相结合得到解码器汇总 d i d_{i} di 执行解码器汇总 d i d_{i} di 和编码器输出 z z z 的点积蓝色和黄色的中心阵列。注意力权重 a i , j a_{i,j} ai,j 是通过在点积元素上使用 softmax 获得的。最后计算条件输入 c i c_{i} ci 它是 ( z e ) (ze) (ze) 加权的注意力之和。可见 z z z 是编码器卷积的输出 e e e 是编码器的嵌入。编码器输出表征了潜在的、大量的输入上下文注意力权重 a i , j a_{i,j} ai,j 提供有关特定输入元素的点信息在进行预测时很有用。 计算出条件输入 c i c_{i} ci 后只需将其添加到相应解码器层 h i h_{i} hi 的输出中即可获得预测的输出。 In the Transformer this is reduced to a constant number of operations, albeit at the cost of reduced effective resolution due to averaging attention-weighted positions, an effect we counteract with Multi-Head Attention. 之前的基于卷积、循环等模型在处理位置相距较远的信息时候会增加计算量。在作者提出的 transformer 中句子中相距较长的内容实体之间的关系的计算操作次数降低到了 恒定数值 。自注意力机制会计算一个注意力得分矩阵这个矩阵的大小是固定的与输入序列的长度无关与嵌入维度 d e m b d_{emb} demb 有关。因此即使输入序列的长度增加计算注意力得分所需的操作数也不会增加这使得 transformer 模型在处理长序列时具有更高的效率和扩展性。因为对长的关系也进行相同次数的计算就会导致每次计算并没用充分考虑内容的信息因此作者提出“这样会导致分辨率较低”因此作者继续设计了 多端注意力机制Multi-head attention 来弥补这样的过程。 自注意力Self-attention有时称为内部注意力 inner-attention是一种将单个序列的不同位置相关联的注意力机制以便计算序列的表征。自注意力已成功应用于各种任务包括阅读理解、抽象概括、文本蕴涵和学习任务无关的句子表征。文本蕴涵是自然语言处理中的一个重要概念指的是一个文本的含义是否可以从另一个文本中推断出来。在文本蕴涵任务中通常会有一个前提文本和一个假设文本任务是判断假设文本是否可以从前提文本中推断出来。这个任务对于许多NLP应用程序如问答系统、信息检索和对话系统等都非常重要。文本蕴涵可以帮助计算机理解文本之间的逻辑关系从而提高自然语言处理系统的性能和准确性。 端到端内存网络基于循环注意力机制并且已被证明在简单语言问答和语言建模任务上表现良好。
End to end Memory Network 端到端内存网络介绍 该架构的第一部分有助于找到查询的相关句子。首先将问题Question也成为询问 query q q q 内的每一个单词转换为大小为 V V V 的向量 V V V 是所使用词库的大小。使用词袋模型或嵌入 B B B 将向量转换为大小为 k × V k\times V k×V 的词嵌入。最终将该嵌入称为 u u u 且 u embed B ( q ) u\text{embed}_{B}(q) uembedB(q) 。与上面的方法类似文章内的每个句子都被解析然后使用嵌入 A A A 编码为大小为 k × V k\times V k×V 的嵌入因此有 m i embed A ( x i ) m_{i}\text{embed}_{A}(x_{i}) miembedA(xi) 其中 x i ∈ X x_{i}\in X xi∈X。此时模型已经将文章句子集合 X X X 和询问问题 q q q 都做了嵌入。计算询问问题嵌入 u u u 和每个文章句子集合 X X X 嵌入 m i m_{i} mi 之间的内积然后进行 softmax 运算以找到最佳匹配。 p i softmax ( u T m i ) p_{i}\text{softmax}(u^{T}m_{i}) pisoftmax(uTmi) 在第二部分中将计算查询 q q q 的最终答案。再次使用嵌入 C C C 将文章句子集合 X X X 的句子 x i x_{i} xi 编码为嵌入 c i embed C ( x i ) c_{i}\text{embed}_{C}(x_{i}) ciembedC(xi)。使用前一部分中的概率向量 p i p_{i} pi 将计算输出如下。 o ∑ i p i c i o\sum\limits_{i} p_{i}c_{i} oi∑pici 在矩阵 W W W 的帮助下通过 a ^ softmax ( W V × K ( o u ) ) \hat{a}\text{softmax}(W_{V\times K}(ou)) a^softmax(WV×K(ou)) 得出输出预测结果。 o u ou ou 本身就是一种残差连接。
与 LSTM 一样为了提高结果的准确性可以增加结构的复杂性使其包括多个层。 The Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence aligned RNNs or convolution. 作者对上面的四个网络都进行了简单的综述我在这里进行的详细的介绍主要是展示这些提出的古早模型与接下来提出的 transformer 之间的关系。这里又再次强调了作者提出的 transformer 完全依赖于自注意力计算输入序列和输出序列的表征而完全没有依赖于循环神经网络或卷积神经网络。
3 Model Architecture
大多数可以涨点的神经序列转导模型都具有编码器-解码器结构。编码器将由符号自然语言单词、字符等表示的输入序列 { x } ( x 1 , ⋯ , x n ) \{x\}(x_1, \cdots, x_n) {x}(x1,⋯,xn) 映射到连续表征向量 z ⃗ ( z 1 , ⋯ , z n ) \vec{z} (z_1, \cdots, z_n) z (z1,⋯,zn) 。给定表征向量 z ⃗ \vec{z} z 解码器每次生成一个位置的输出序列符号 ( y 1 , ⋯ , y m ) (y_1, \cdots, y_m) (y1,⋯,ym) 。在每个步骤中模型都是自回归的在生成下一个时将先前生成的符号用作附加输入。Transformer 的特点堆叠注意力机制、”point-wise“的——通常意味着操作是局部的、独立的不涉及跨位置的交互以及编码器和解码器同时存在。 3.1 Encoder and Decoder Stacks The encoder is composed of a stack of N 6 N 6 N6 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 around each of the two sub-layers, followed by layer normalization. That is, the output of each sub-layer is LayerNorm ( x Sublayer ( x ) ) \text{LayerNorm}(x \text{Sublayer}(x)) LayerNorm(xSublayer(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 dmodel512 . 编码器由 N 6 N 6 N6 相同编码层堆叠组成。每个编码层有两个编码子层。第一个编码子层是多头自注意力机制第二种是简单的、位置级的全连接前馈网络FFNN。每个编码子层的周围都使用残差连接先然后进行层归一化后。也就是说每个编码子层的输出是 LayerNorm ( x Sublayer ( x ) ) \text{LayerNorm}(x \text{Sublayer}(x)) LayerNorm(xSublayer(x)) 其中 Sublayer ( x ) \text{Sublayer}(x) Sublayer(x) 是编码子层本身实现的功能即要么是多头注意力、要么是FFNN。为了强化残差连接模型中的所有编码子层以及嵌入层都使用维度为 d m o d e l 512 d_{model} 512 dmodel512 的宽度输出。 The decoder is also composed of a stack of N 6 N 6 N6 identical layers. In addition to the two sub-layers in each encoder layer, the decoder inserts a third sub-layer, which performs multi-head attention over the output of the encoder stack. Similar to the encoder, we employ residual connections around each of the sub-layers, followed by layer normalization. We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i i i can depend only on the known outputs at positions less than i i i. 解码器也由相同的 N 6 N 6 N6 个解码层堆叠组成。除了与每个编码层中的两个编码子层相同之外解码器还插入第三个解码子层该解码子层对堆叠编码器的最终输出执行多头注意力。与编码器类似在每个解码子层周围采用残差连接然后进行层归一化。还修改了堆叠解码器中的自注意力编码子层以防止位置关注后续位置。这种掩码与输出嵌入偏移一个位置这两件事相结合确保位置 i i i 的预测只能依赖于小于 i i i 的位置处的已知输出。
3.2 Attention An attention function can be described as mapping a query and a set of key-value pairs to an output, where the query, keys, values, and output are all vectors. The output is computed as a weighted sum of the values, where the weight assigned to each value is computed by a compatibility function of the query with the corresponding key. 注意力函数可以描述为将询问query和一组键key值value对映射到输出output其中询问query、键key、值value和输出output都是向量。输出被计算为值value的加权和其中分配给每个值value的权重是由询问query与相应键key的兼容性函数计算的。
3.2.1 Scaled Dot-Product Attention: “缩放点积注意力”
输入由维度 d k d_k dk 的 query 和 key 以及维度 d v d_v dv 的 value 组成。使用所有 key 计算 query 的点积并除以 d k \sqrt{d_k} dk 然后应用 softmax 函数来获取计算 value 的权重。在实践中同时计算一组 query 的注意力函数将其打包到矩阵 Q Q Q 中。Key 和 value 也打包到矩阵 K K K 和 V V V 中结果计算为 Attention ( Q , K , V ) softmax ( Q ( L , d k ) K ( d k , L ) T d k ) V ( L , d v ) \text{Attention}(Q,K,V)\text{softmax}(\frac{Q_{(L,d_{k})}K^{T}_{(d_{k},L)}}{\sqrt{d_{k}}})V_{(L,d_{v})} Attention(Q,K,V)softmax(dk Q(L,dk)K(dk,L)T)V(L,dv) 两个最常用的注意力函数是加法注意力函数和点积乘法注意力函数。点积注意力与论文算法相同只是比例因子为 1 d k \frac{1}{\sqrt{d_{k}}} dk 1。加法注意力使用单个隐藏层的前馈网络计算兼容性函数。虽然两者在理论上的复杂性相似但点积注意力在实践中要快得多空间效率也高得多因为它可以使用高度优化的矩阵乘法代码来实现。虽然对于较小的 d k d_k dk 值两种注意力函数的表现相似但加法注意力函数优于点积乘法注意力函数导致而无需针对较大的 d k d_k dk 值进行缩放。对于较大的 d k d_k dk 值点积的幅度会变大从而将 softmax 函数推入梯度极小的区域。为了抵消这种影响将点积缩放 1 d k \frac{1}{\sqrt{d_{k}}} dk 1。
3.2.2 Multi-Head Attention 与其使用 d m o d e l d_{model} dmodel 维度的 key 、 value 和 query 执行单次注意力函数的计算不如将 query 、 key 、 value 用不同线性投影层投影 h h h 次投影到相同的 d k d_k dk 、 d k d_k dk 和 d v d_v dv 维度。对 query 、 key 、 value 的每个投影层并行执行注意力函数产生 h h h 个 d v d_v dv 维输出值。多头注意力允许模型关注来自不同表征子空间的表征信息。 MultiHead ( Q , K , V ) Concat ( head 1 , ⋯ , head h ) W O where head i Attention ( Q W Q i , K W K i , V W V i ) W Q i ∈ R d m o d e l × d k , W K i ∈ R d m o d e l × d k , W v i ∈ R d m o d e l × d k , W O ∈ R h d V × d m o d e l \begin{align} \text{MultiHead}(Q, K, V ) \text{Concat}(\text{head}_{1}, \cdots, \text{head}_{h})W_{O} \\ \text{where}\ \text{head}_{i} \text{Attention}(QW^{i}_{Q}, KW^{i}_{K}, VW^{i}_{V})\\ W^{i}_{Q}\in R^{d_{model}\times d_{k}}, W^{i}_{K}\in R^{d_{model}\times d_{k}}, W^{i}_{v}\in R^{d_{model}\times d_{k}}, W_{O}\in R^{hd_{V}\times d_{model}} \end{align} MultiHead(Q,K,V)Concat(head1,⋯,headh)WOwhere headiAttention(QWQi,KWKi,VWVi)WQi∈Rdmodel×dk,WKi∈Rdmodel×dk,Wvi∈Rdmodel×dk,WO∈RhdV×dmodel d m o d e l 512 d_{model}512 dmodel512 是嵌入维度使用 h 8 h8 h8 个端且 d k d v 64 d_{k}d_{v}64 dkdv64 。由于每个端的维度减少总计算成本与全维度的单端注意力相同。
3.2.3 Applications of Attention in our Model
在用于计算“编码-解码注意力机制”的解码子层中query 来自先前的解码子层该解码子层是计算自注意力机制的而 key 和 value 来自编码器的输出。这允许解码器中的每个解码层都关联输入序列中的所有位置。这就很像之前提到的端到端记忆力网络了拿 Question 来查询文章句子集合中的句子。
编码器包含计算自注意力的编码子层。在计算自注意力的编码子层中所有 key 、 value 和 query 都来自同一位置同一个内容也就是编码器中前一编码层的输出。编码器中的每个位置可以关注编码器上一编码层中的所有位置。类似地解码器中的计算自注意力的解码子层允许每个位置关注当前位置之前的所有位置因此需要保持解码器中的信息向左流动以保留自回归特性。主要做法是在缩放点积注意力的内部通过屏蔽输入进 softmax 的内容设置数值为 − ∞ −\infty −∞ 来实现。简单一句话就是解码器内计算自注意力需要增加掩码。
3.3 Position-wise Feed-Forward Networks
除了注意力子层之外每个编码层和解码层中都包含一个FFNN该网络对每个元素的计算单独且相同。FFNN由两个线性层组成中间有一个 ReLU 激活函数。 FFN ( x ) max ( 0 , x W 1 b 1 ) W 2 b 2 \text{FFN}(x)\max(0,xW_{1}b_{1})W_{2}b_{2} FFN(x)max(0,xW1b1)W2b2 虽然不同位置的FFNN是相同的但它们在FFNN之间使用不同的参数也就是FFNN也是参与训练的。另一种描述方式是内核大小为 1 的两个卷积卷积核为1也可以当作一个线性层处理。输入和输出的维度为 d m o d e l 512 d_{model} 512 dmodel512 内层的维度为 d f f 2048 d_{ff} 2048 dff2048 。
3.4 Embeddings and Softmax
使用相同的、训练后的嵌入模型将每个输入 token 和输出 token 转换为维度是 1 × d m o d e l 1\times d_{model} 1×dmodel 的向量。
使用常规的线性层和 softmax 激活函数将解码器输出转换为预测的下一个 token 概率。
3.5 Positional Encoding
由于 transformer 不包含循环模块和卷积模块为了让模型能感受到序列的顺序而非是无序的一组长向量输入必须注入一些关于序列中 token 的相对或绝对位置的信息。在编码器和解码器堆栈底部的源句子和目标句子输入嵌入中添加了“位置编码”。位置编码与嵌入具有相同的维度 d m o d e l d_{model} dmodel 因此两者可以相加。位置编码有很多选择包括通过参数学习得到的位置编码和固定的位置编码算法。Transformer 使用正弦余弦位置编码。 { P E ( p o s , 2 i ) sin ( p o s 1000 0 2 i d m o d e l ) P E ( p o s , 2 i 1 ) cos ( p o s 1000 0 2 i d m o d e l ) \begin{cases} PE_{(pos,2i)}\sin(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) \\ PE_{(pos,2i1)}\cos(\frac{pos}{10000^{\frac{2i}{d_{model}}}}) \\ \end{cases} ⎩ ⎨ ⎧PE(pos,2i)PE(pos,2i1)sin(10000dmodel2ipos)cos(10000dmodel2ipos) 其中 p o s pos pos 是位置 i i i 是维度。也就是说位置编码的每个维度都对应于一个正弦曲线当维度确定时位置编码就是位置的正弦/余弦函数。波长形成从 2 π 2\pi 2π 到 10000 ⋅ 2 π 10000\cdot 2\pi 10000⋅2π 。这样的位置编码允许 transformer 很容易地通过相对位置来学习因为对于任何固定偏移量 k k k P E ( p o s k , 2 i ) PE_{(posk,2i)} PE(posk,2i) 都可以表示为 P E ( p o s , 2 i ) PE_{(pos,2i)} PE(pos,2i) 的线性函数。这里具体参考这个博客。
作者尝试使用训练后的位置编码模型发现这两个版本产生几乎相同的结果。选择正弦版本因为它可以允许 transformer 推断出比训练期间遇到的序列长度更长的序列。
4 Why Self-Attention
在本节中作者在映射一个可变长序列符号表征到另一个等长序列任务上从各个方面比较自注意机制与循环模块、卷积模块好比在一个典型的序列转导中编码器或解码器一个隐藏层。
主要包括三个层面每层的总计算复杂度可并行的计算量由所需的最小顺序操作数来衡量网络中计算长距离关联之间的路径长度。学习长距离依赖是许多序列转导任务中的一个关键挑战。影响学习长距离依赖能力的一个关键因素是前向和后向信息在网络中必须经过的路径的长度。输入和输出序列中的任意两两位置之间的信息走行路径越短学习长距离依赖就越容易。 首先作者对计算复杂度做了对比。这里对 transformer 的自注意力机制做分析这里强调的只是自注意力机制而不考虑 Q Q Q 、 K K K 和 V V V 的获得。根据公式 attention ( Q , K , V ) softmax ( Q ( L , d k ) K ( d k , L ) T d k ) V ( L , d v ) \text{attention}(Q,K,V)\text{softmax}(\frac{Q_{(L,d_{k})}K^{T}_{(d_{k},L)}}{\sqrt{d_{k}}})V_{(L,d_{v})} attention(Q,K,V)softmax(dk Q(L,dk)K(dk,L)T)V(L,dv) Q Q Q 矩阵的每一行都乘以 K K K 矩阵的转置那么每一行就计算了 d k × L d_{k}\times L dk×L 次计算那么整个 Q Q Q 矩阵总共进行了 L × d k × L L 2 ⋅ d n 2 ⋅ d L\times d_{k}\times LL^{2}\cdot dn^{2}\cdot d L×dk×LL2⋅dn2⋅d 次计算。softmax 之后右乘 V V V 矩阵也是类似 Q Q Q 、 K K K 的矩阵乘法那么总共就是 2 ⋅ n 2 ⋅ d 2\cdot n^{2}\cdot d 2⋅n2⋅d 次计算忽略系数则计算复杂度就是 O ( n 2 ⋅ d ) O(n^{2}\cdot d) O(n2⋅d) 。具体参考这个StackOverflow。当序列长度 n n n 小于表征维度 d d d 时自注意力机制比循环模块计算更快这符合 word-piece 编码和 byte-pair 编码表征。Transformer 更能捕捉短句子中长依赖而递归循环模块更适合处理长句子。当然后续也有很多工作都在实现 transformer 处理更长的句子。为了提高涉及很长序列的任务的计算性能自注意力机制可以限制为仅考虑输入序列中以相应输出位置为中心的大小为 r r r 的邻域但是这会将最大路径长度增加到 O ( n / r ) O(n/r) O(n/r) 。
对 Sequential Operations 进行分析这个好理解对于自注意力机制和卷积操作都是可以看成对一批数据进行并行计算卷积操作可以理解成卷积对图像的操作而对于递归循环层必须要按序列顺序进行计算。所以只有递归循环的 Sequential Operations 是 O ( n ) O(n) O(n) 。具体参考这个博客。
Maximum Path Length 可以理解为元素之间的关联性。自注意力机制通过自己的算法实现元素之间都产生了关系作者的解释是“所有元素之间两两连接”而循环模块则没有相隔 n n n 个元素信息就要传递 n n n 次。参考这个博客maximum path length 可以理解为相距最远的两个信息结点发生沟通所需要的网络层数而对于限制性自注意力机制restricted self-attention只与相邻的 r r r 个单元计算注意力与步幅为 1 1 1 的卷积层有着相同的信息网络结构。需要的层数实际上是 ceiling [ n 1 r ] \text{ceiling}[\frac{n1}{r}] ceiling[rn1] ceiling \text{ceiling} ceiling 为向上取整函数。 内核宽度 k k k 小于序列长度 n n n 的单个卷积核不会连接所有输入和输出位置对如果需要连接所有输入和输出位置对则在连续内核的情况下需要一堆 O ( n / k ) O(n/k) O(n/k) 卷积层在膨胀卷积的情况下需要 O ( log k ( n ) ) O(\log k(n)) O(logk(n)) 之前在 ByteNet 中阐述了从而增加在网络中任意两个位置之间 maximum path length 。可分离卷积降低了复杂性达到 O ( k ⋅ n ⋅ d n ⋅ d 2 ) O(k·n·d n·d^{2}) O(k⋅n⋅dn⋅d2) 。然而即使 k n k n kn 可分离卷积的复杂度也等于自注意力层和前馈层的组合。也就是说循环模块、卷积模块以及限制性自注意力机制在 maximum path length 中都跟序列长度相关导致序列变长时 maximum path length 跟着变长。
我们观察到每个注意力端不仅清楚地学习到执行不同的任务的能力而且许多注意力端似乎表现出与句子的句法和语义结构相关的行为。
5 Training
5.1 Training Data and Batching
使用标准 WMT 2014 英语德语机器翻译大赛数据集进行训练该数据集包含约 450 万个句子对。句子使用 byte-pair 字节对进行编码该编码结果是产生了具有约 37000 个 token 的、源句子和目标句子共享的词汇表。使用更大的 WMT 2014 英语法语机器翻译大赛数据集其中包含 3600 万个句子比英德数据集多了 8 倍句子同样使用 byte-pair 字节对进行编码该编码结果是产生了具有约 32000 个 token 的、源句子和目标句子共享的词汇表。句子对按大致序列长度分批在一起。每个训练批次包含一组句子对其中包含大约 25000 个源 token 和 25000 个目标 token 。
5.2 Hardware and Schedule
在一台配备 8 个 NVIDIA P100 GPU 的机器上训练模型显存容量16384MB大约 16 GB8 卡总共 128 GB。对于使用整篇论文中描述的超参数的基本模型每个训练步骤大约需要 0.4 秒。基础模型进行了总计 100000 步或 12 小时的训练。对于大型模型每个训练步骤大约需要 1.0 秒大型模型接受了 300000 步或 3.5 天的训练。
5.3 Optimizer
使用 Adam 优化器 β 1 0.9 \beta_{1} 0.9 β10.9 β 2 0.98 \beta_{2} 0.98 β20.98 和 ϵ 1 0 − 9 \epsilon 10^{−9} ϵ10−9 。
使用变化的学习率这个变化学习率左边部分是训练步数的二次反比函数右侧是正比例函数 w a r m u p _ s t e p s warmup\_steps warmup_steps 保持不变的话那么使用这个学习率在训练前期使用后者变化学习率学习率随训练步数正比例上升到后期使用前者学习率学习率随训练步数二次反比例下降。临界点就是 s t e p _ n u m w a r m u p _ s t e p s 4000 step\_num warmup\_steps 4000 step_numwarmup_steps4000 。 l r a t e min ( 1 s t e p _ n u m , s t e p _ n u m w a r m u p _ s t e p s ) d m o d e l lrate \frac{\min(\frac{1}{\sqrt{step\_num}}, \frac{step\_num}{\sqrt{warmup\_steps}})}{\sqrt{d_{model}}} lratedmodel min(step_num 1,warmup_steps step_num)
5.4 Regularization
残差 Dropout
将 dropout 正则化应用于每个编码子层和解码子层的输出——将其添加到每个编码子层和解码子层输入并进行归一化。将 dropout 应用于编码器和解码器堆栈中的嵌入和位置编码的求和部分。对于基本模型使用 P d r o p 0.1 P_{drop} 0.1 Pdrop0.1 的比率。
标签平滑 label smoothing
在训练过程中采用了值为 ϵ l s 0.1 \epsilon_{ls} 0.1 ϵls0.1 的标签平滑技术。这会损害困惑度因为模型会变得更加不确定但会提高准确性和 BLEU 分数。
补充知识标签平滑技术 Label Smoothing is a regularization technique that introduces noise for the labels. This accounts for the fact that datasets may have mistakes in them, so maximizing the likelihood of log ( y ∣ x ) \log(y|x) log(y∣x) directly can be harmful. Assume for a small constant ϵ \epsilon ϵ , the training set label y y y is correct with probability 1 − ϵ 1−\epsilon 1−ϵ and incorrect otherwise. Label Smoothing regularizes a model based on a softmax with k k k output values by replacing the hard 0 and 1 classification targets with targets of ϵ k − 1 \frac{\epsilon}{k-1} k−1ϵ and 1 − ϵ 1−\epsilon 1−ϵ respectively. 标签平滑是一种为标签引入噪声的正则化技术。这说明了数据集可能存在错误的事实因此直接最大化 log ( y ∣ x ) \log(y|x) log(y∣x) 的可能性可能是有害的。假设对于一个小常数 ϵ \epsilon ϵ 训练集标签 y y y 正确的概率为 1 − ϵ 1−\epsilon 1−ϵ 否则不正确。标签平滑把输出的 k k k 个目标从原来的硬 0 和 1 分类目标进行替换对模型进行基于 softmax 正则化分别为 ϵ k − 1 \frac{\epsilon}{k-1} k−1ϵ 和 1 − ϵ 1−\epsilon 1−ϵ 。用公式表示如下。 N N N 表示模型输出的最大内容。 1 ( k − 1 ) ⋅ ϵ k − 1 ( 1 − ϵ ) ϵ 1 − ϵ 1 , k ≤ N 1(k-1)\cdot \frac{\epsilon}{k-1}(1-\epsilon)\epsilon1-\epsilon1,k\le N 1(k−1)⋅k−1ϵ(1−ϵ)ϵ1−ϵ1,k≤N
6 Results
6.1 Machine Translation 在 WMT 2014 英语德语翻译任务中大型 transformer 模型比之前报道的最佳模型包括集成版本超过 2.0 BLEU以 BLEU 分数是 28.4 的结果建立了一个新的、最先进的模型。即使是基础模型也超过了之前发表的所有模型和集合版本而训练成本只是任何竞争模型的一小部分。训练成本比其他模型低了 1 至 2 个数量级。大的英语法语翻译模型在 dropout 正则化中使用了更高的正则化率 P d r o p 0.3 P_{drop} 0.3 Pdrop0.3 。
对于基本模型使用通过平均最后 5 个检查点获得的单个模型这些检查点以 10 分钟的间隔获得一次。对于大型模型对最后 20 个检查点进行了平均。使用集束搜索波束尺寸为 4 长度损失 α 0.6 \alpha0.6 α0.6 。这些超参数是在开发集上进行试验后选择的。
在推理过程中将最大输出长度设置为输入长度 50 50 50 但尽可能提前终止。感觉就是同样一个意思英语、法语和德语的表达单词数量应该差不多那么 50 50 50 是更像是保证它尽可能翻译完。
补充知识集束搜索 beam search 参考这个博客。定义Beam search is an approximate search algorithm commonly used in natural language processing. It is applicable to any problem that involves search, which gives it broad applicability. It balances time and memory usage with the quality of its final answer by only ever keeping the top k solution candidates in memory at a time and choosing the best result found at the end of the search. 集束搜索是自然语言处理中常用的近似搜索算法。它适用于任何涉及搜索的问题具有广泛的适用性。它通过一次在内存中只保留前 k k k 个候选解决方案并在搜索结束时选择找到最佳结果来平衡时间、内存使用与最终答案的质量。在高层次上从某个搜索空间的起始状态开始生成所有可能的后继状态收集起来记为 S 1 S_{1} S1 并只保留“最佳” k k k 个候选状态 s 1 ; 0 ⋯ s 1 ; k − 1 ∈ S 1 s_{1;0}\cdots s_{1;k-1}\in S_{1} s1;0⋯s1;k−1∈S1 。然后为这些 k k k 个状态生成所有后继状态并把这些状态收集起来记为 S 2 S_{2} S2 再次只保留这些选项中的前 k k k 个状态 s 2 ; 0 ⋯ s 2 ; k − 1 ∈ S 2 s_{2;0}\cdots s_{2;k-1}\in S_{2} s2;0⋯s2;k−1∈S2 依此类推。搜索结束后就选择迄今为止找到的最佳搜索结果。 这就留下了两个问题如何决定哪些状态是“最佳”以及算法何时终止需要某种状态评估函数这里借用强化学习的状态函数 V ( s ) V(s) V(s) 。当寻找一个最终目标状态时这个函数可以是一个启发式函数用来估计当前状态离目标状态有多近。其他函数试图以更客观的意义上衡量状态的整体质量。当试图找到某个概率最高的状态时状态评估函数会估计一个状态的可能性。此示例在文本生成中用于搜索高概率词序列。 集束搜索具有许多可能的终止条件。也许最简单的方法是在达到终止或目标状态后立即停止。但并非所有问题都有这样的预定义状态再用强化学习的表述就是并非所有任务都是 goal-conditioned即使有也可能希望继续搜索以找到实现目标的更好路径。一旦达到某个最大搜索深度可以采取停止。另一个常见的解决方案是当状态的质量看起来不再显着提高时状态估计收敛使用一些启发式方法停止。 集束搜索最重要的用途也许是在自然语言处理中。语言模型为单词和单词序列分配概率。特别是它们经常用于下一个单词预测这涉及根据前面的所有单词来猜测下一个单词应该是哪个。重复此过程以生成整个句子或更多句子。 使用 k k k 个集束运行集束搜索通常比运行 k k k 个单独的搜索更有效。相关地集束搜索是高度可并行化的可以在单独的处理器上并行运行不同的集束从而显着加快搜索速度。集束宽度 k k k 是可配置的可以轻松调整希望专用于搜索过程的时间和内存预算。由于内存中一次只有 k k k 个解决方案因此如果可用内存较多则可以增加 k k k 如果可用内存很少则可以减少 k k k 。 但是集束搜索是一个不完整的算法这意味着它不能保证找到最佳解决方案或者任何解决方案。当搜索空间中的某些分支看起来不再有希望时它会放弃它们如果这些分支实际上是通往最佳解决方案的唯一途径那么它将永远无法找到所述解决方案。此外集束搜索可能会卡在局部最优值陷入局部最小的情况。该算法可能会发现自己处于一种状态即任何局部更改都会使解决方案变得更糟并且只有相对较长的一系列步骤才能使其变得更好。如果每个中间步骤对启发式评估函数来说都很糟糕那么集束搜索将不会探索这些路径。可以随机而不是确定性地选择后继状态当然优先考虑得分较高的状态以鼓励探索。此外可以对与已经包含的候选状态过于相似的候选状态进行惩罚这需要对状态相似性进行某种程度的衡量。 细节随着在空间中搜索得更深每个状态出现的概率会降低因为集束搜索会连续地将状态之间的概率相乘。这通常会导致集束搜索更喜欢短序列而不是长序列这可能是不可取的。为了避免这个问题经常根据状态对应的序列长度对状态的概率进行归一化。为了实现这一点首先取每个概率的对数这在机器学习中是相当标准的然后我们除以序列的长度。因此我们搜索具有最高平均对数概率的序列这显着减少了长答案的惩罚。 补充知识模型的集成 参考这个博客。集成模型是一种在预测过程中结合多个其他模型的机器学习方法。这些模型被称为基本估计器。集成模型是克服单个估计器存在的以下问题1. 高方差单个估计器对所学习特征的输入非常敏感2. 准确性低适应整个训练数据集的一种模型或一种算法可能不足以满足预期3. 特征噪声和偏差模型在进行预测时严重依赖一个或几个特征。 单一算法可能无法对给定的数据集做出完美的预测。机器学习算法有其局限性生成高精度模型具有挑战性。如果我们构建并组合多个模型整体准确性可能会得到提高。这种组合可以通过聚合每个模型的输出来实现其目标有两个减少模型误差并保持其泛化性。 6.2 Model Variations
这一部分主要是消融实验为了评估 transformer 不同组件的重要性以不同的方式改变基础模型在 2013 年的英语德语机器翻译开发集研究性能变化。使用了前一节所述的波束搜索但没有进行检查点平均。改变的点在于注意力端的数量、键和值维度在变化中始终保持计算量不变。得到的结论是单端注意力机制比最好的参数设定差 0.9 BLEU且机器质量也会下降。
6.3 English Constituency Parsing 为了评估 transformer 是否可以推广到其他任务采用英语选区解析任务进行了实验。这项任务的挑战是输出受到强大的结构约束并且明显长于输入。基于循环神经网络的序列处理模型尚未能够在小数据情况下获得很好的结果。
在 Wall Street Journal 部分用 d m o d e l 1024 d_{model} 1024 dmodel1024 训练了一个 4 层 transformer 大约 4 万个训练句子。在 Wall Street Journal 的参数设置中使用了 16 k 16k 16k token 的词汇。在半监督学习的设置下对模型进行了训练使用了更大的、高置信度的 Berkley Parser corpora 来自大约 1700 万个句子使用了 32 k 32k 32k token 的词汇。在推理过程中将最大输出长度增加到输入长度 300 300 300 仅对 Wall Street Journal 和半监督设置都使用了 21 和 α 0.3 α 0.3 α0.3 的集束尺寸。
作者得到的结论是尽管缺乏特定任务的调优 transformer 模型仍然表现良好除了 Recurrent Neural Network Grammar 外产生了比之前报道的所有模型更好的结果。
7 Conclusion
在这项工作中作者提出了 transformer 第一个完全只基于注意力机制的序列转导模型用多端自注意力机制取代了编解码器结构中最常用的循环模块。对于翻译任务 transformer 的训练速度可以比基于循环模块或卷积模块的架构要快得多。在 WMT 2014 英语德语机器翻译和 WMT 2014 英语法语翻译翻译任务中展现了新的模型。在前一项任务中最好的模型甚至优于所有之前报道的模型以及集成版本。
作者计划将 transformer 扩展到涉及文本以外的输入和输出模态的问题并研究局部的、受限的注意力机制以有效地处理大型输入和输出如图像、音频和视频。 附录部分主要展示不同端下注意力机制到底关注了什么。