GPT-1和GPT-2的发展

OpenAI在2018年提出来的一个方法——GPT 1.0,GPT 1.0采取预训练+FineTuning两个阶段,它采取Transformer的decoder作为特征抽取器,总共堆叠12个。预训练阶段采用“单向语言模型”作为训练任务,把语言知识编码到decoder里。第二阶段,在第一阶段训练好的模型基础上,通过Finetuning来做具体的NLP任务,迁移能力强。注意在Decoder 中,使用了Masked Self-Attention(不能知道要预测的词),即句子中的每个词都只能对包括自己在内的前面(左侧)所有词进行Attention,这就是单向Transformer。输入为加了【SOS】,但是最后一个词的预测结果不用于语言模型的训练,用于fine-tuning阶段的输入。GPT-1和GPT-2的发展
1、预训练(无监督样本)
gpt1.0的语言模型是auto regressive language model,由序列的上文推断下文。gpt1.0处理非监督序列文本(????1,????2,…,????????),采用最大似然估计方法来训练,其损失函数为L1(X),不断通过SGD策略调整神经网络的参数,使得神经网络在给定上文的情况下对于下一个字预测的准确率越来越高,损失越来越小。GPT-1和GPT-2的发展
k为上文预测下文中上文的窗口。其计算过程如下为
GPT-1和GPT-2的发展
U表示左侧窗口的上下文词向量,n表示Transformer的层数,We表示词向量矩阵,Wp表示position embedding矩阵,在GPT中,作者对position embedding矩阵进行随机初始化并训练学习。

2、fine-tuning(有监督样本)
预训练结束后,就可以把这个参数已初始化好的模型迁移到新的任务中,根据新任务调整模型的参数(预训练的最后一个词作为fine-tuning阶段的输入)。标签数据集为(????1,????2,…,????????,????),输入(????1,????2,…,????????)经过我们预训练的模型获得输出向量ℎ????????,然后经过线性层和softmax来预测标签,输出和损失分别为GPT-1和GPT-2的发展
GPT-1和GPT-2的发展
Wy为新的全连接层的权重参数,其中,λ一般取0.5。
为避免Fine-Tuning使得模型陷入过拟合和加速收敛,添加了辅助训练目标的方法,就是在使用最后一个词的预测结果进行监督学习的同时,前面的词继续上一步的无监督训练,使得最终的损失函数成为:
GPT-1和GPT-2的发展
3、其他任务迁移的输入格式可参考下张图片,全连接层linear后都是接softmax计算。GPT-1和GPT-2的发展
Classification:对于分类问题,不需要做什么修改
Entailment:对于推理问题,可以将先验与假设使用一个分隔符分开
Similarity:对于相似度问题,由于模型是单向的,但相似度与顺序无关。所以需要将两个句子顺序颠倒后两次输入的结果相加来做最后的推测
Multiple Choice:对于问答问题,则是将上下文、问题放在一起与答案分隔开,然后进行预测

4、2019年OpenAI继续提出GPT-2,GPT-2其实最惊人的是其极强的生成能力,而如此强大的生成能力主要还是要归功于其数据质量以及惊人参数量(四个模型,1.17亿–15亿)和数据规模(800万WebText),舍弃Fine-Tuning过程,不需要去定义这个模型应该做什么任务,因为很多标签所蕴含的信息,就存在于语料当中,同时还对Transformer小调整,标准化层放到每个sub-block之前,最后一个self-attention后又增加了一个标准化层;改变了残差层的初始化方法;扩大了字典(50257)、输入序列长度(1024)、batchsize。
GPT-1和GPT-2的发展
预训练好GPT-2后,在下游任务(无监督学习)文本生成任务中,我们输入一些字,然后GPT-2,依据选取得分最高的单词蹦出结果(参数设置:top-k,避免每次都是最高的输出 ),对于不同类型的输入,加入一些引导字符,引导GPT正确地预测目标。

https://jalammar.github.io/illustrated-gpt2/
https://zhuanlan.zhihu.com/p/56865533
https://zhuanlan.zhihu.com/p/69290203