GPT/GPT2/GPT3/ChatGPT梳理

GPT/GPT2/GPT3/ChatGPT梳理

近年来,OpenAI发布的GPT-3和ChatGPT模型相继破圈,很多行业开始担心AI会在不久的将来会淘汰难度不大的工作岗位。虽然从专业角度看,这些模型仍然存在不少问题需要很长时间才能攻克,但考虑到大型语言模型的天花板仍然是个谜,谁也不能保证未来它是否会革命性地改变人类生产力方式,而一旦成功,唯有实践家会取得先机,成为新的IT巨头。所以当下科技巨头纷纷追赶,体现出其较高的商业价值和技术价值。

本文将由浅入深地对GPT系列模型(包括GPT/GPT2/GPT3/InstructGPT/ChatGPT)进行梳理和总结,并不定期更新相关动态。

一、时间轴

2023年3月,GPT4已发布,该模型将引入多模态的能力;2023年2月,Microsoft Bing浏览器引入ChatGPT;复旦大学发布Moss,一时访问过大,服务宕机;Meta发布GPT3竞品模型LLaMA,参数相比要少很多,但并未彻底开源;2022年11月,OpenAI发布ChatGPT博客;2020年5月,OpenAI发布GPT3;2019年2月,OpenAI发布GPT2博客;2018年6月,OpenAI发布GPT博客,在12个自然语言理解任务上取得了9个任务的SOTA;

二、GPT

GPT来自论文《Improving Language Understanding by Generative Pre-Training》,作者在标题中就指出了论文的核心思想:采用生成式预训练来提升语言模型在下游各项任务中的成绩。所以GPT的训练分预训练(pre-train)和微调(finetune)两个阶段。

2.1 预训练阶段

预训练的语料是无标签的文本语料,GPT的词典是采用BPEa(Byte Pair Encoding)算法经过4W+次merge得到的,目前只包含英文词;输入序列被tokenizer切割成token序列后,通过token嵌入矩阵 WeW_e 得到上下文向量 U=(u−k,…,u−1)\cal U = (u_{-k}, …, u_{-1}) ,并和位置嵌入相加。与Transformer不同的是,GPT的位置编码采用learned positional embedding.

接下来是模型核心部分——12层Transformer的Decoder层,每个Decoder层又分四个子层,如下图所示:

图片[1]-GPT/GPT2/GPT3/ChatGPT梳理-CHATGPT实验室

N层Transformer Decoder层之后加上一个softmax层来输出词典大小的概率分布。整个计算过程如下所示:

h0=UWe+Wphl=transformer_block(hl−1)i∈[1,n]P(u)=softmax(hnWe⊤)\begin{aligned} h_0 & = UW_e + W_p \\ h_l & = transformer\_block(h_{l-1}) \quad i \in [1, n]\\ P(u) & = softmax(h_nW_e^{\top}) \end{aligned}

GPT的预训练任务是自回归语言建模(autoregressive language modeling),训练方法是极大似然估计,损失函数如下:

L1(U)=∑ilog⁡P(ui|ui−k,…,ui−1;Θ)L_1({\cal U}) = \sum_i \log P(u_i | u_{i-k}, …, u_{i-1}; \Theta)

其中 kk 为上下文窗口。具体实现时用交叉熵来计算loss,代码如下:

hidden_states = transformer_outputs[0]
lm_logits = self.lm_head(hidden_states) # [B, L, V]

loss = None
if labels is not None:
# input: <s>, w1 w2, w3
# output: w1, w2, w3, <e>
# Shift so that tokens < n predict n
shift_logits = lm_logits[…, :-1, :].contiguous() # 丢弃<e>, [B, L-1, V]
shift_labels = labels[…, 1:].contiguous() # 丢弃<s>, [B, L-1]
# Flatten the tokens
loss_fct = CrossEntropyLoss()

# shift_logits: [B, L-1, V] -> [B*(L-1), V]
# shift_labels: [B, L-1] -> [B*(L-1)]
# 然后计算交叉熵
loss = loss_fct(shift_logits.view(-1, shift_logits.size(-1)), shift_labels.view(-1))

2.2 微调

在预训练过后,只需要把模型最顶层根据下游任务做一个变换即可实现迁移,如下图所示。顶层Text Prediction是预训练分支,Task Classifier则是微调分支。

图片[2]-GPT/GPT2/GPT3/ChatGPT梳理-CHATGPT实验室

对于不同形式下游任务,通过输入变换(input transformation)将结构化的输入转成有序的文本序列,便于预训练模型处理,如下图所示。图中包含三个特殊字符:Start(<s>)、Delim($)、Extract(<e>),三者的token embedding均由随机初始化生成。

图片[3]-GPT/GPT2/GPT3/ChatGPT梳理-CHATGPT实验室

由上可知,GPT在微调阶段需额外学习一个线性层参数 WyW_y 和分隔符的嵌入,计算过程如下:

P(y|x1,…,xm)=softmax(hlmWy)P(y| x^1, …, x^m) = softmax(h_l^m W_y)

L2(C)=∑(x,y)log⁡P(y|x1,…,xm)L_2({\cal C}) = \sum_{(x,y)} \log P(y|x^1, …, x^m)

考虑到在微调时把预训练当做一个辅助损失函数会提高成绩,最终的目标函数为:

L3(C)=L2(C)+λ∗L1(C)L_3({\cal C}) = L_2({\cal C}) + \lambda * L_1({\cal C})

2.3 参数细节

model hidden size: 768feeforward hidden size: 3072预训练:epoch:100learning rate:2.5e-4(最大)max sequence length: 512(连续)batch size:64微调learning rate:6.25e-5epoch:3batch size:32λ\lambda :0.5

三、GPT2

GPT2来自论文《Language Models are Unsupervised Multitask Learners》,有了GPT预训练+微调的成功,GPT2认为微调其实都可以不需要了,直接冲击零样本学习。其主要贡献为:

论证语言模型不需要监督语料也能学习多任务。本文构建了一个数据集webtext,然后在上面进行无监督训练,最终在CoQA数据集上取得了3个SOTA;论证模型容量是语言模型零样本迁移的关键,容量越大,性能越好。本文设置了四组模型并做了对比,最大规模的GPT2包含15亿参数,在7个任务上取得了SOTA;

3.1 模型结构

在词典方面,GPT2采用的字词算法是BBPE(byte-level byte-pair encoding),这是比BPE更加通用的子词算法,缺点是:(1)可读性非常差;(2)词典大小也从2W涨到了5W;优点是:不需要再去担心预处理、分词和词典的事情了。

decoder block方面,GPT2在GPT基础上做了如下改动:

LN移到了每个子块的开头位置,和pre-activation residual network一样;在最后一个自注意力块添加了一个额外的LN层;采用改进的初始化方法,利用模型深度计算剩余路径上的累积;对残差层的权重进行缩放,缩放因子为 1N\frac{1}{\sqrt{N}} , NN 表示残差层的数量;词典大小扩展到50257;上下文窗口从512扩增到1024;batch size提升至512;

3.2 效果

图片[4]-GPT/GPT2/GPT3/ChatGPT梳理-CHATGPT实验室

不同尺寸的模型,对比之下发现,尺寸越大,零样本能力越强。

基于WebText训练的语言模型在不同领域不同数据集、零样本学习设置下打破了8个数据集中7个数据集的记录。

四、GPT3

4.1 总览

本文提出包含175B参数量的自回归语言模型——GPT3. 从学术研究的视角看,本文在模型和方法上没有突出的亮点,更多地是用大语料训练大模型。

GPT3的效果:

GPT3在很多任务上表现不错,它不需要微调也不需要更新梯度,只需在输入中加入少量示例(demonstration)即可;GPT3可以生成通过图灵测试的文章;

4.2 主要内容

GPT3在模型结构上和GPT2基本保持一致,除了use alternating dense and locally banded sparse attention patterns in the layers of the transformer, similar to SparseTransformer.

作者设置8个不同尺寸的模型版本来作对比,最后一行包含175B参数量的版本即为GPT3,如下所示:

图片[5]-GPT/GPT2/GPT3/ChatGPT梳理-CHATGPT实验室

细节

1. 上下文长度:所有模型版本的上下文长度都为2048个token;

2. 分布式训练:为了减少不同node之间的数据传输,同时沿着深度和宽度的维度将模型分到不同GPU上;

4.3 训练

训练过程,GPT3遵守大模型训练的公认法则:采用更大batch size和更小学习率。同时通过分布式训练解决显存不足的问题。

4.4 实验效果

本文从finetuning、few shot、one shot以及zero shot四个角度来评估GPT3.

下图展示了准确率和context中example个数的关系,可以直观地看出:

(1)随着模型尺寸越大,少样本学习效果越好;

(2)有了prompt,175B的模型甚至具备一定的零样本能力。

图片[6]-GPT/GPT2/GPT3/ChatGPT梳理-CHATGPT实验室

五、ChatGPT

Chatgpt是一个针对对话任务优化后的语言模型,其核心技术是RLHF(基于人类反馈的强化学习)。目前没有公布论文,仅凭官网的博客,得到如下信息。

5.1 训练过程

第一步:训练初始模型

数据:混合InstructGPT数据集和对话数据集(由人类AI训练师提供,同时扮演用户和AI助理两个角色)方式:监督学习微调模型:GPT-3.5

第二步:训练奖励模型,用于给不同模型的输出打分

收集对比数据(即多个模型的输出),并按照质量排序(也是由AI训练师完成)基于对比数据训练奖励模型

第三步:基于RLHF来训练对话模型

基于奖励模型和数据集,使用PPO强化学习算法来微调初始模型

5.2 不足之处

博客指出ChatGPT目前存在的不足:

连贯问题:ChatGPT有时候会写出听起来很好但是错误并且毫无意义的回答;语义问题:ChatGPT对输入的措辞方式比较敏感,对重复输入也比较敏感;偏置问题:ChatGPT的回答通常过于冗长并且过度使用某些短语,这和训练师有关;智能问题:理想情况下,面对用户具有歧义的问题,模型应该通过询问来澄清,但是事实上模型往往会去猜测用户的意图;安全问题:模型对于一些有害的输入,没有拒绝回复的能力。

六、思考和总结

在GPT3论文中,作者对比了8个不同大小的模型版本,参数量越大,效果越好,并选择参数量最大的模型作为GPT3,但是,如果参数继续增大,效果是否会更好?如果回答是肯定的,那GPT3的价值体现在哪里?难道仅仅是它达到了当前人类金钱和算力的天花板吗?

GPT3虽然强大,但距离平民玩家太过遥远,如果NLP的价值体系仍然仅凭成绩好坏说话,那么未来大家将不可避免地走向一条经费竞赛的道路,科研技术的创新和有序进步将被工程规模的无脑扩张所替代。随着大模型成绩越来越好,用中等模型替代大模型的价值也会越来越高。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容