原文链接:s3-us-west-2.amazonaws.com

参考博客(仔细解释了transformer):刘岩:详解Transformer (Attention Is All You Need)

简枫:[整理] 聊聊 Transformer

两篇一篇把transformer拆开讲,一篇有代码,都是翻译国外的文章,双管齐下应该足够理解transformer了。paper中的分析研究部分,我始终没有理解,就不翻译了。翻译可能有些粗糙,我最后会把专栏中的所有论文写成一篇总结的。

Improving Language Understanding by Generative Pre-Training

摘要:

自然语言理解包括多种多样的任务,如文本蕴涵、问答、语义相似性评估和文档分类。尽管大型的未标注文本语料库非常丰富,但是用于学习这些特定任务的标注数据却很少。我们证明,在这些任务上有巨大的受益可以实现。我们通过在不同的未标注文本语料库上生成语言模型的预训练,然后对每个特定任务进行有区别的微调来实现。与以前的方法不同,我们在微调期间利用task-aware输入转换来实现有效的传输,同时只需要对模型架构进行最小的更改。我们展示了我们的方法在一系列自然语言理解基准上的有效性。我们的task-agnostic模型比那些专门为了任务训练的模型效果更好,在研究的12项任务中,有9项任务的技术水平有了显著提高。例如,我们在常识推理(故事完形填空测试)上取得了8.9 %的绝对进步,在问答( RACE )上取得了5.7 %的进步,在文本蕴涵( MultiNLI )上取得了1.5 %的进步。

1、Introduction

从原始文本中有效学习的能力对于减轻自然语言处理( NLP )中对监督学习的依赖至关重要。大多数深度学习方法需要大量人工标注的数据,这限制了它们在许多标注资源匮乏的领域的适用性[ 61 ]。在这些情况下,可以利用来自未标记数据的语言信息的模型为收集更多注释提供了一个有价值的替代方案,这可能会非常耗时和昂贵。此外,即使在有大量监督的情况下,以无监督的方式学习好的表达也能显著提高性能。迄今为止,这方面最引人注目的证据是广泛使用了预先训练好的单词嵌入[ 10、39、42 ]来提高[ 8、11、26、45 ]一系列NLP任务的性能。

然而,由于两个主要原因,利用来自未标记文本的超过单词级的信息是具有挑战性的。首先,不清楚哪种类型的优化目标在学习对迁移有用的文本表示时最有效。最近的研究考察了各种目标,如语言建模、机器翻译、和语篇连贯,每种方法在不同的任务上都优于其他方法。第二,对于将这些学习到的表达转移到目标任务的最有效方式,没有达成共识。现有技术包括对模型架构进行特定于任务的改变,使用复杂的学习方案和增加辅助学习目标的组合。这些不确定性使得开发有效的语言处理半监督学习方法变得困难。

在这篇论文中,我们探索了一种半监督的语言理解方法,它结合了无监督的预训练和监督微调。我们的目标是学习一种通用的表达,这种表达只要轻微的改变就能迁移至其他任务。1我们假设可以访问大量未标记的文本和几个带有人工标注训练示例的数据集(目标任务)。我们的设置不要求这些目标任务与未标记的语料库位于同一领域。训练过程分两步。首先,我们在未标记的数据上使用语言建模目标来学习神经网路模型的初始参数。随后,我们使用相应的监督目标使这些参数适应目标任务。

对于我们的模型体系结构,我们使用Transformer [ 62 ],它已经被证明在各种任务上表现出色。这种模型选择为我们提供了一个更结构化的memory来处理文本中的长期依赖关系,而不是像循环网路这样的方案,从而在不同的任务之间产生强大的传输性能。在传输过程中,我们利用从遍历式方法[ 52 ]中获得的特定于任务的输入自适应,该方法将结构化文本输入处理为单个连续的标记序列。正如我们在实验中所展示的,这些调整使我们能够有效地微调,对预先训练的模型的架构进行最小的改变。

我们评估了四种类型的语言理解任务——自然语言推理、问答、语义相似性和文本分类。我们的task--agnostic模型优于采用为每个任务特别设计的体系结构有区别的训练模型,在研究的12项任务中,有9项任务的技术水平有了显著提高。我们还分析了预训练模型在四种不同设置环境下的zero-shot行为,并证明它为下游任务获得了有用的语言知识。

2 Related Work

Semi-supervised learning for NLP 我们的工作大体上属于自然语言的半监督学习范畴。这种模式引起了极大的兴趣,它被应用于序列标签[ 24,33,57 ]或文本分类[ 41,70 ]等任务。最早的方法使用未标记的数据来计算单词级或短语级统计数据,然后这些数据被用作监督模型中的特征。在过去的几年里,研究人员已经证明了使用单词嵌入的好处,这些单词嵌入是在未标注的语料库上训练的,可以提高各种任务的表现。然而,这些方法主要传递单词级信息,而我们的目标是获取更高级别的语义。

最近的方法研究了从未标记的数据中学习和利用超过单词级的语义。短语级或句子级嵌入,可以使用未标记的语料库来训练,已经被用于将文本编码成各种目标任务的合适矢量表示,[ 28、32、1、36、22、12、56、31 ]。

Unsupervised pre-training 无监督预训练是半监督学习的一种特殊情况,其目标是找到一个好的初始化点,而不是修改监督学习目标。早期的工作探索了该技术在[ 20,49,63 ]图像分类和[ 3 ]回归任务中的应用。随后的研究表明,预训练作为一种正则化方案,能够在深度神经网路中更好地泛化。在最近的工作中,该方法已经被用来帮助训练深度神经网路完成各种任务。

最接近我们的工作包括使用语言建模目标对神经网路进行预训练,然后在监督下根据目标任务对其进行微调。[13]遵循这种方法来改进文本分类。然而,尽管预训练阶段有助于捕捉一些语言信息,但是他们对LSTM模型的使用将他们的预测能力限制在一个很短的范围内。相比之下,我们对transformer网路的选择允许我们捕捉更远距离的语言结构,正如我们的实验中所展示的。此外,我们还展示了我们的模型在更广泛的任务中的有效性。

当训练目标任务上的监督模型时,预训练的语言或机器翻译模型作为辅助特征。这涉及到每个单独目标任务的大量新参数,而在转移过程中,我们只需要对模型架构进行最小的更改。Auxiliary training objectives添加辅助无监督训练目标是半监督学习的一种替代形式。Collobert和Weston使用了多种辅助NLP任务,如POS标注、组块、命名实体识别和语言建模,以改进语义角色标注。最近,Rei [ 50 ]在其目标任务目标中增加了一个辅助语言建模目标,并展示了序列标注任务的性能提升。我们的实验也使用辅助目标,但是正如我们显示的,无监督的预训练已经学习了与目标任务相关的几个语言方面。

3 Framework

我们训练过程包括两步。第一步是去在大语料库上学习一个高容量的语言模型。第二步是微调过程,我们将模型应用到一个标记任务上。

3.1 Unsupervised pre-training

给定一个无监督语料库词u={u1,...,un},我们使用一个标准的语言模型对象来最大化下式:

其中k是上下文窗口的大小,条件概率P由神经网路参数θ建模。这些参数使用随机梯度下降训练。

在我们的实验中,我们使用一个多层的transformer decoder来作为语言模型,这是transformer的一个变体。这个模型使用一个 multi-headed self-attention操作,然后经过position-wise的前向反馈网路,来产生目标词的输出分布:

其中 U=(u_{-k},...,u_{-1}) 是词的上下文向量,n是层数, W_e 是词嵌入矩阵, W_p 是位置嵌入矩阵。

3.2 Supervised fine-tuning

在用无监督模型训练之后,我们把参数应用到监督目标任务。标记数据集为C,每一个数据都是一序列的输入词 x_1 ,..., x_m 和一个标签y。输入会经过我们预训练好的模型去获得最后transformer块的激活值 h^m_l ,然后这个值会被喂到添加的线性输出层去预测y,线性层有参数 W_y

这给了我们如下的最大化优化目标:

我们额外地发现将一些语言模型去作为辅助对象来参与微调可以帮助(a)提升监督模型的一般化(b)加速收敛。具体的,我们优化如下对象:

总的来说,我们唯一需要微调的参数是Wy,和分隔词的嵌入。

3.3 Task-specific input transformation

对于某些任务,如文本分类,我们可以如上所述直接微调我们的模型。某些其他任务,如问答或文本蕴涵,有结构化的输入,如document, question, and answers三元组。由于我们的预训练模型是在连续的文本序列上训练的,我们需要一些修改来将其应用于这些任务。我们使用遍历式的方法,在这里我们将结构化输入转换成有序序列,我们的预训练模型可以处理该序列。这些输入转换允许我们避免跨任务对体系结构进行大范围的更改。我们在下面简要描述了这些输入转换,图1提供了一个直观的说明。所有转换包括添加随机初始化的开始和结束标记。

Textual entailment 蕴含任务我们直接拼接premise p和hypothesis h词序列,中间放一个分隔符。

Similarity 对于相似性任务,被比较的两个句子没有固有的顺序。为了这一点,我们修改输入序列以包含两种可能的句子顺序(中间有分隔符),并分别独立处理,以产生两个序列表示,它们在被输入线性输出层之前按元素添加。

Question Answering and Commonsense Reasoning对于这些任务,我们得到了一个上下文文档z,一个问题q和一组可能的答案{ a_k }。我们将文档上下文和问题与每个可能的答案连接起来,在两者之间添加一个分隔符标记。这些序列中的每一个都是用我们的模型独立处理的,然后通过softmax,在可能的答案上产生输出分布。

4 Experiments

4.1 setup

Unsupervised pre-training

无监督的预训练我们使用BooksCorpus dataset来训练语言模型。它包含超过7000本来自各种类型的未出版的书籍,包括冒险、幻想和浪漫。至关重要的是,它包含了一长段连续的文本,这使得生成模型能够学习长距离信息。另一个数据集,1B Word Benchmark,被类似的方法Elmo使用,大小大致相同。但是在句子层面被打乱了——破坏了长距离结构。在这个语料库中,我们的语言模型达到了18.4的非常低的困惑度。

Model specifications:我们的模型很大程度上遵循transformer的原始工作。我们训练了一个只有12层解码器的transformer,带有masked self-attention head(768 dimensional states and 12 attention heads)。对于position-wise前馈网路,我们使用了3072维内部状态。我们使用Adam优化器,最大学习率为2.5e - 4。在最初的2000次更新中,学习率从零线性增加。我们在由64个随机抽样的连续序列512个片语成的小批次上训练了100个时期。由于层归一化在整个模型中广泛使用,简单的N(0,0.02 )权重初始化就足够了。我们使用了bytepair编码( BPE )辞汇、dropout、为0.1。我们还采用了[ 37 ]中提出的L2正则化的修改版本,在所有非偏置或增益权重上w = 0.01。对于激活函数,我们使用高斯误差线性单位( GELU ) [ 18 ]。我们使用带学习的位置嵌入,而不是原始作品中提出的正弦版本。我们使用ftfy库来清理书库中的原始文本,标准化一些标点和空白,并使用spaCy标记器。

Fine-tuning details除非指定,否则我们会重复使用无监督预训练中的超参数设置。我们以0.1的速率向分类器中添加dropout。对于大多数任务,我们使用6.25e - 5的学习率和32的批处理。我们的模型快速微调,三个epoch的训练对大多数情况都足够了。我们使用线性学习率衰减时间表,训练warmup超过0.2 %。λ设定为0.5。

4.2 Supervised fine-tuning

各具体任务的微调

5 Analysis

Impact of number of layers transferred我们观察了将不同层数从无监督的预训练转移到有监督的目标任务的影响。图2 (左)显示了我们在MultiNLI和RACE上的方法的性能,这是所传输层数的函数。我们观察到的标准结果是,转移嵌入提高了性能,并且每一个transformer层为在MultiNLI上的完全转移提供了高达9 %的进一步好处。这表明预训练模型中的每一层都包含用于解决目标任务的有用功能。

6 .结论

我们引入了一个框架,通过生成性的预训练和区别性的微调,用单一的任务不可知模型实现了对自然语言的强理解。通过在一个多种多样的语料库上进行预训练,我们的模型获得了大量的世界知识和处理长期依赖的能力,这些知识和能力随后被成功地转移到解决诸如问答、语义相似性评估、蕴涵判断和文本分类等有区别的任务上,改善了我们研究的12个数据集中的9个数据集的现状。使用无监督(预)训练来提高辨别任务的性能一直是机器学习研究的一个重要目标。我们的工作表明,实现显著的性能提升确实是可能的,并且提供了关于哪些模型(transformer)和数据集(具有远程相关性的文本)最适合这种方法的提示。我们希望这将有助于对无监督学习进行新的研究,包括自然语言理解和其他领域,进一步提高我们对无监督学习如何以及何时工作的理解。

Improving Language Understanding by Generative Pre-Training(完)

有任何疑问或者纠错,作者随时在线哦

关注专栏

随经典论文看机器阅读理解发展史?

zhuanlan.zhihu.com
图标

推荐阅读:
相关文章