一、摘要
今天我们聊一下论文《Improving Language Understanding by Generative Pre-Training》以及它所提出来的预训练模型——GPT1。我们知道Bert在出道那会儿红极一时,但实际上GPT1比Bert还要早几个月就出道了,而且同样刷新了当时的多个任务记录。GPT1代也是GPT系列的开山之作,往后的GPT2、GPT3乃至如今的ChatGPT都是采用的这一套核心架构逻辑。
译文:
自然语言理解包含诸多不同的任务,例如文本蕴含、问答、语义相似度评估以及文档分类等。尽管大量未标注的文本语料十分丰富,但用于学习这些特定任务的标注数据却很稀缺,这使得经过判别式训练的模型难以充分发挥性能。我们证明,通过在多样化的未标注文本语料上对语言模型进行生成式预训练,然后针对每个特定任务进行判别式微调,能够在这些任务上取得显著的成效。与以往的方法不同,我们在微调过程中利用了任务感知的输入转换,在对模型架构只需做极少改动的情况下实现了有效的迁移。我们在众多自然语言理解的基准测试中证明了我们方法的有效性。我们这种通用的、与任务无关的模型,其性能优于那些使用为各任务专门设计架构的经过判别式训练的模型,在所研究的 12 项任务中的 9 项任务上显著超越了现有技术水平。例如,在常识推理(故事完形填空测试)任务上我们实现了 8.9% 的绝对提升,在问答(RACE)任务上实现了 5.7% 的提升,在文本蕴含(MultiNLI)任务上实现了 1.5% 的提升。
二、模型创新点
GPT模型的训练过程包含两个阶段:第一阶段是在大规模文本语料上学习一个高容量的语言模型,也就是我们所熟知的“预训练”。随后是“微调”阶段,在这个阶段可以根据不同的下游任务来设置对应的模型微调策略,从而实现在特定任务上的高性能表现。
1、无监督生成式预训练
给定一个无监督的Token语料库,作者使用标准的语言建模目标来最大化以下似然函数:
其中k是上下文窗口的大小,条件概率P由具有参数的神经网络建模。这些参数使用随机梯度下降法进行训练。
在论文的实验中,作者使用了多层 Transformer 解码器作为语言模型。该模型对输入的上下文Token应用多头自注意力操作,接着是位置感知的前馈层(position-wise feedforward layers),以生成目标Token上的输出分布:
transformer%5C_block%28h_%7Bl-1%7D%29%5Cforall%20i%20%5Cin%20%5B1%2Cn%5D" class="mathcode" src="https://latex.csdn.net/eq?h_%7Bl%7D%20%3D%20transformer%5C_block%28h_%7Bl-1%7D%29%5Cforall%20i%20%5Cin%20%5B1%2Cn%5D" />
其中,是Token的上下文向量,是Token的embedding矩阵,是位置嵌入矩阵,n是层数。
2、有监督微调
在使用无监督生成式预训练完成对模型的初步训练后,作者提出将参数适配到有监督的目标任务中能够进一步提升模型在目标任务上的性能。设有一个带标签的数据集C,其中每个实例都由一系列输入Tokens()以及一个标签y组成。输入Tokens会通过预训练模型来获得最后一个 Transformer 块的激活值,然后将其输入到一个具有参数的线性输出层来预测标签y:
这就得到了以下要最大化的目标:
此外,作者还发现将语言建模作为微调的辅助目标有助于学习,具体表现为:(a)提高有监督模型的泛化能力;(b)加速收敛。具体来说,优化以下目标(权重为 ):
总体而言,在微调期间所需的额外参数仅有以及分隔符Tokens的embedding。
三、总结
Transformer模型编码器-解码器的架构在机器翻译领域取得了很好的成效,而GPT仅使用解码器堆叠的架构使得了该模型能够用于多个自然语言处理任务,进一步扩大了Transformer系列模型变体的应用范围。GPT论文中提到的预训练+微调的模型训练方式,也在后来成为了预训练模型和的默认训练范式。