近年来,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层又分四个子层,如下图所示:
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)=∑ilogP(ui|ui−k,…,ui−1;Θ)L_1({\cal U}) = \sum_i \log P(u_i | u_{i-k}, …, u_{i-1}; \Theta)
其中 kk 为上下文窗口。具体实现时用交叉熵来计算loss,代码如下:
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则是微调分支。
对于不同形式下游任务,通过输入变换(input transformation)将结构化的输入转成有序的文本序列,便于预训练模型处理,如下图所示。图中包含三个特殊字符:Start(<s>)、Delim($)、Extract(<e>),三者的token embedding均由随机初始化生成。
由上可知,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)logP(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 效果
不同尺寸的模型,对比之下发现,尺寸越大,零样本能力越强。
基于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,如下所示:
细节
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的模型甚至具备一定的零样本能力。
五、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的价值体系仍然仅凭成绩好坏说话,那么未来大家将不可避免地走向一条经费竞赛的道路,科研技术的创新和有序进步将被工程规模的无脑扩张所替代。随着大模型成绩越来越好,用中等模型替代大模型的价值也会越来越高。
暂无评论内容