想要弄清楚大模型到底是怎样训练出来的,了解 GPT-1 和 GPT-3 在构建及训练过程中的异同是一个具象化的选择。GPT-3 相较于 GPT-1 有哪些改进和创新?或许能帮助我们理解'大模型训练'的演进。
这篇发表于 2018 年的文献详细描述了 GPT-1 的构建及训练过程:

GPT-1 的训练过程主要包括两个阶段:无监督预训练阶段和有监督微调阶段。
在无监督预训练阶段,GPT-1 使用了一个大规模的文本语料库 BookCorpus 进行训练:

该语料库最早出现于 2015 年一篇题为《对齐书籍与电影:通过看电影和读书走向类似故事的视觉解释》的论文中,数据集包含超过 7000 本未出版的图书,约 9.85 亿个单词,涵盖了小说、冒险、幻想、浪漫等多种文学体裁。
这个语料库的最显著特点是包含大量连续的长文本数据,使模型能够学习到长距离的语言依赖关系,因此不但被 GPT-1 选为训练数据,也曾被 BERT 用作训练数据。
拥有了这样一个高质量的训练数据集后,GPT-1 采用语言模型作为训练目标,即学习根据给定的上文词语来预测下一个词出现的概率。通过这种自监督学习方式,模型可以自动学习文本中的统计模式和语义表征特点,捕捉词与词之间的关联。
GPT-1 的模型架构采用了 Transformer 的 decoder 部分,也就是著名的'Decoder Only'架构:

Transformer 本是一个用于机器翻译的 Seq2Seq 模型,包含编码器和解码器两部分,而 GPT-1 却选择只使用其中的解码器部分。因为作者们认为语言模型是一个单向的生成任务,不需要编码器对源语言进行编码。
Transformer 的解码器使用了自注意力机制,通过将每个词与其上下文中的所有词进行注意力计算,可以有效捕捉长距离依赖关系。
GPT-1 的解码器包含 12 层,每层有 12 个注意力头,隐单元维度为 768。
在训练过程中,GPT-1 使用随机梯度下降的优化算,batch 大小为 64,序列长度为 512 个 token。文章提到他们训练了 100 个 epoch,不过只提到最大学习率为 2.5e-4,并没有给出详细的学习率设置策略,训练过程中使用了 dropout 正则化防止过拟合。
在无监督预训练之后,GPT-1 采用了两阶段的有监督微调方法来进一步提升模型在下游任务上的性能。
第一阶段是在目标任务的无标签数据上进行领域自适应预训练,也就是在下游任务的文本域上继续进行语言模型训练,使 GPT-1 能更好的适应目标任务的语言风格和内容。
第二阶段是在带标注的任务数据集上进行有监督微调,也就是在 GPT-1 的基础上添加一个与任务相关的输出层,然后在任务的训练集上进行端到端的微调。
微调阶段使用的学习率比预训练阶段小,并且会同时优化两个损失函数:新增的有监督任务损失和原来的语言建模损失,以防止模型遗忘预训练阶段学到的通用语言知识。
实验结果表明,这种两阶段微调可以显著提升 GPT-1 在下游任务上的表现。
以自然语言推理任务为例,作者在 SNLI、MNLI、QNLI、RTE 和 SciTail 这 5 个数据集上对 GPT-1 进行了微调。输入文本被表示为一个 token 序列,前提(premise)和假设(hypothesis)用分隔符隔开,输出层是一个三分类的 softmax 层。
实验结果表明,GPT-1 在这 5 个数据集上都取得了不错的性能,接近甚至超过专门为这些任务设计的模型:


