Improving language understanding by generative pre-training
Author: Alec Radford, Karthik Narasimhan, Tim Salimans, Ilya Sutskever
Link: https://openai.com/blog/language-unsupervised/
Introduction
- 从未标记的文本中利用字级以上的信息困难的两个原因
- 目前还不清楚哪种类型的优化目标在学习对迁移有用的文本表示形式时最有效
- 对于将这些习得的表征转化到目标任务的最有效方法,目前还没有达成共识
本文探索语言理解任务的半监督方法,结合无监督的预训练和监督的微调,目标是学习一种普适性的表征,这种表征只需要少量的修改就可以迁移到广泛的任务。
- 采用两阶段的训练方式:
- 在未标记数据上使用语言建模目标来学习神经网络模型的初始参数
- 使用相应的监督目标将这些参数调整到目标任务
Related Work
Semi-supervised learning for NLP
Unsupervised pre-training
Auxiliary training objectives
Framework
Unsupervised pre-training
给定一个无监督的语料库 ,使用一个标准的语言建模目标来最大化以下可能性:
其中 是上下文窗口的大小,而条件概率 是用带参数 的神经网络来建模的。
这些参数用随机梯度下降法来训练。
使用了 Transformer 的变种——多层 Transformer 解码器来作为语言模型。
这个模型对输入的上下文 tokens 进行多头的自注意操作,然后通过位置的前馈层产生目标 tokens 上的输出分布:
其中 是 token 的上下文向量, 是层数, 是 token 的嵌入矩阵, 是位置嵌入矩阵。
Supervised fine-tuning
假设有一个标记的数据集 ,其中每个实例由一串输入标记 以及一个标签 组成。
输入通过了预先训练好的模型来获得最后 Transformer 模块的激活 ,然后将其输入到一个新增的具有参数 的线性输出层来预测 :
这提供了以下目标使之最大化:
- 实验还发现将语言建模作为微调的一个辅助目标能从以下两方面对学习过程起到帮助:
- 提高监督模型的泛化能力
- 加速收敛
具体来说,需要优化以下目标:
在微调过程中,只需要额外参数 以及分隔符的嵌入。
Task-specific input transformations
以上微调过程适用于文本分类任务,对于其它任务需要不同的微调方法。
不同于以前工作提出的在转移的表征之上学习特定的任务架构,这里使用了一种遍历式的方法,将结构化的输入转化为我们的预训练模型可以处理的有序序列。这些输入转换能够避免在不同的任务中对架构进行巨大的改变。
Textual entailment
对于文本连带关系任务,将前提 和假设 的 token 序列连接起来,中间用一个分隔符($)隔开。
Similarity
对于文本相似度任务,被比较的两个句子没有内在的顺序。为了反映这一点,将输入序列修改为包含两种可能的句子顺序(中间用一个分隔符隔开),并对其进行独立处理以产生两个序列表示 ,以元素形式相加后喂给线性输出层。
Question Answering and Commonsense Reasoning
对于这些任务,给了一个上下文文档 、一个问题 和一个可能的答案的集合 ,将他们以 的形式连接起来。这些序列被模型独立处理,然后通过一个 softmax 层进行归一化处理,以产生一个可能答案上的输出分布。
Experiments
Setup
Unsupervised pre-training
模型训练的数据集:BooksCorpus dataset
这个数据集好在包含了长连续文本,使得生成模型可以学会对长距离的信息进行调节。
在 ELMo 使用的数据集 1B Word Benchmark 上表现不佳,因为该数据集破坏了长范围结构。
Model specifications
训练12层只包含解码器的 Transformer 模块,带有掩码的自注意力头(768维的状态和12个注意力头)。
对于位置的前馈网络,使用3072维的内部状态。
使用最大学习率为 2.5e-4 的 Adam optimization scheme。
学习率在最初的2000次更新中从零开始线性增加,并使用余弦计划退火到0。
对64个随机抽样的512个 token 的连续序列的批进行了100个 epochs 的训练。
由于 layernorm 在整个模型中被广泛使用,一个简单的权重初始化为 就足够了。
使用了一个具有40,000次合并的字节对编码(BPE)词汇。
残差、嵌入和注意力 dropouts 的正则化率为0.1。
采用改进版的 L2 正则化,在所有非偏置或增益权重上使用 。
激活函数:Gaussian Error Linear Unit (GELU)
使用学习到的位置嵌入,而不是原始工作中提出的正弦版本。
Fine-tuning details
除非特别说明,否则重复使用无监督预训练中的超参数设置。
给分类器增加一个 dropout with a rate of 0.1。
学习率: 6.25e-5
batchsize: 32
Supervised fine-tuning
Analysis
Impact of number of layers transferred
转移嵌入可以提高性能,而每个转换层都能提供进一步的增益,表明预训练模型中的每一层都含有解决目标任务的有用功能。
Zero-shot Behaviors
设计了一系列的启发式解决方案,使用底层生成模型来执行任务,而不需要监督的微调。观察到这些启发式方案的性能是稳定的,并在训练过程中不断增加,这表明生成式预训练支持各种各样的任务相关功能的学习。还观察到 LSTM 在其 zero-shot 中表现出较高的差异性,这表明 Transformer 架构的归纳偏向有助于转移。