输入“/”快速插入内容

预训练语言模型之GPT-1,GPT-2和GPT-3

2024年5月19日修改
✍️
前言
Generative Pre-trained Transformer(GPT)系列是由OpenAI提出的非常强大的预训练语言模型,这一系列的模型可以在非常复杂的NLP任务中取得非常惊艳的效果,例如文章生成,代码生成,机器翻译,Q&A等,而完成这些任务并不需要有监督学习进行模型微调。而对于一个新的任务,GPT仅仅需要非常少的数据便可以理解这个任务的需求并达到接近或者超过state-of-the-art的方法。
当然,如此强大的功能并不是一个简单的模型能搞定的,GPT模型的训练需要超大的训练语料,超多的模型参数以及超强的计算资源。GPT系列的模型结构秉承了不断堆叠transformer的思想,通过不断的提升训练语料的规模和质量,提升网络的参数数量来完成GPT系列的迭代更新的。GPT也证明了,通过不断的提升模型容量和语料规模,模型的能力是可以不断提升的。
模型
发布时间
参数量
预训练数据量
GPT
2018 年 6 月
1.17 亿
约 5GB
GPT-2
2019 年 2 月
15 亿
40GB
GPT-3
2020 年 5 月
1,750 亿
45TB
这篇文章会依次介绍GPT-1[1],GPT-2[2],GPT-3[3],并介绍它们基于上个版本的改进点,文章主要的介绍的包括四个主要方向:算法的思想和目标,使用的数据集和预处理方式,模型结构以及算法的性能。
1. GPT-1:无监督学习
在GPT-1之前(和ELMo同一年),传统的NLP模型往往使用大量的数据对有监督的模型进行任务相关的模型训练,但是这种有监督学习的任务存在两个缺点:
1.
需要大量的标注数据,高质量的标注数据往往很难获得,因为在很多任务中,图像的标签并不是唯一的或者实例标签并不存在明确的边界;
2.
根据一个任务训练的模型很难泛化到其它任务中,这个模型只能叫做“领域专家”而不是真正的理解了NLP。
这里介绍的GPT-1的思想是先通过在无标签的数据上学习一个生成式的语言模型,然后再根据特定热任务进行微调,处理的有监督任务包括
自然语言推理(Natural Language Inference 或者 Textual Entailment):判断两个句子是包含关系(entailment),矛盾关系(contradiction),或者中立关系(neutral);
问答和常识推理(Question answering and commonsense reasoning):类似于多选题,输入一个文章,一个问题以及若干个候选答案,输出为每个答案的预测概率;
语义相似度(Semantic Similarity):判断两个句子是否语义上市是相关的;
分类(Classification):判断输入文本是指定的哪个类别。
将无监督学习左右有监督模型的预训练目标,因此叫做生成式预训练(Generative Pre-training,GPT)。
1.1 GPT-1的训练
GPT-1的训练分为无监督的预训练和有监督的模型微调,下面进行详细介绍。
1.1.1 无监督预训练
GPT-1的无监督预训练是基于语言模型进行训练的,给定一个无标签的序列 \mathcal{U} = \{u_1, \cdots, u_n\} ,语言模型的优化目标是最大化下面的似然值:
L_1(\mathcal{U}) = \sum_i \log P(u_i | u_{i-k}, \dots, u_{i-1}; \Theta) \tag1
其中 k 是滑动窗口的大小, P 是条件概率, \Theta 是模型的参数。这些参数使用SGD进行优化。
在GPT-1中,使用了12个transformer[5]块的结构作为解码器,每个transformer块是一个多头的自注意力机制,然后通过全连接得到输出的概率分布。
图1:GPT系列的基本框架
h_0 = UW_e + W_p \tag2
h_l = \text{transformer_block}(h_{l-1}) \forall i \in [1,n] \tag3 P(u) = \text{softmax}(h_nW_e^T) \tag4