【本文是技术解析系列的第2篇,后面会马不停蹄更新“算法”和“大模型训练”的内容,感兴趣的朋友可以持续关注~】
第一篇:技术解析系列之:训练框架
第二篇:技术解析系列之:GPT1,GPT2与GPT3
第三篇:技术解析系列之:GPT写代码的能力从何而来
在上一篇介绍整体架构的文章里,我们知道它的训练起点为GPT3.5,在此基础上,通过另外训练一个有监督的奖励模型,共同组装成一个RLHF( from Human )框架,并采用PPO-ptx的方式进行强化学习部分的训练。整体过程如下:
我们会在下一篇介绍里,细化上图,将RLHF部分拆开来解读。同时,也会单独开一篇文章介绍GPT3.5。今天我们一起来看看,引起AIGC热潮讨论的LLM模型霸王家族:GPT系列。全文内容如下:
1、 VS :Bert与GPT1之战
2、Zero-shot:GPT2
3、大力出奇迹的奇迹:GPT3
4、总结
一、 VS :Bert与GPT1之战1.1 时间线
2017年,推出,利用完全替代过往深度学习中的和
结构,直白地展现出了“大一统模型”的野心,”xxx is ALL you need”也成了一个玩不烂的梗。
2018年6月,推出基于 改造的第一代GPT( Pre-) ,有效证明了在NLP领域上使用预训练+微调方式的有效性。紧随其后,同年10月推出基于 部分的Bert,在同样参数大小的前提下,其效果领跑于GPT1,一时成为NLP领域的领头羊。
不甘示弱的在4个月后,推出更大的模型GPT2(GPT1: 110M,Bert: 340M,,GPT2: 1.5B),同时,也知道,光靠增加模型大小和训练数据集来获得一个和Bert差不多效果的模型,其实是没有技术含量的。于是,在GPT2里,引入zero-shot并证明了其有效性。
此后,在LLM上义无反顾地走了下去,在2020年6月推出巨人GPT3,参数量高达175B,各类实验效果达到顶峰,(据说)一次训练费用为1200w美元,“贵”也成了普通工业界踏足GPT系列的壁垒之一。
1.2 GPT1(1)GPT1的设计思想
在CV里,pre- + fine-tune的方式盛行已久:先用海量有标注的数据集,通过有监督的训练生成一个预训练模型,然后通过下游任务,在这个模型上做微调。但是在NLP中,这个方式一直很难做起来,原因是:
出世后,模型对文字上下文的理解能力得到显著增强,在这一铺垫下,GPT1诞生了,它的整体设计思路如下:
(2)GPT1:Pre-
确定好了总体设计思想,接下来就是详细的技术实践了。GPT1的预训练模型基本遵循 部分的结构,去除掉和做cross-的部分,如下图:
观察和部分的,可以发现:
两者计算细节上的区别如下:
普通:
:这里的+号并不表示数值相加,只表示在相对位置上是否存在遮挡。数字1表示需要遮挡的位置。可以看出模型只能看到它前面的文字
(3)GPT1:Fine-tune
有了一个预训练模型,我们就可以做fine-tune了。在这里,我们让模型做4种有监督的学习:
前文说过,在fine-tune阶段,我们希望能够尽量减少模型架构的改动,因此,论文中采用了如下方法,对这四种监督任务的输入输出做了统一:
左边是GPT1一个block的基本架构(前文说过,基本等同于的部分,去掉cross-)。右边则是四种监督任务输入输出的大一统方式。我们以第一个任务为例:
在整个过程里,模型需要额外训练的参数,就是最后一层层,以及特殊符号的,同时在整体参数上做 ,可以说改动是非常小的。
最后,在fine-tune阶段,模型的损失函数L3L_{3} L3包含了两部分:
L3=L2+λL1L_{3}=L_{2}+{1} L3=L2+λL1
其中,L1L_{1} L1是预训练阶段的损失函数,L2L_{2} L2则是fine-tune阶段的损失函数。
(4)Bert VS GPT1
GPT1的模型参数为L=12,H=768,A=12,这个设置和后来Bert-Base一模一样,但后者的效果要好上很多。原因之一是,GPT采用-, 对模型和训练数据的要求会更高,因为模型能读到的信息只有上文。而采用普通的Bert在训练阶段就能同时读到上下文。这个性质决定了GPT模型越来越大的趋势。但是,长远来看,-是push模型更好理解文字的重要手段,毕竟在现实中,我们更希望培养模型知上文补下文,而不是单纯地做完形填空。
Bert的整体架构如下:
二、zero-shot:GPT2
VS ,Bert VS GPT1,战火已经拉开,但是此时GPT1仍处在劣势。前面说过,基于的模型,模型和数据量越大,效果越好。但如果只做到这一点,从技术上来说又太逊色了,性价比也不高。因此,从训练数据上进行改进,引入了zero-shot这一创新点,GPT2就诞生了。
GPT2的核心思想是:只要我的数据够多够好,只要我的模型够大够强。我可以直接去掉fine-tune,训练出一个通用的模型。
要了解这一点,我们先来看Zero-shot,One-shot和Few-shot的区别:
GPT2希望通过喂给模型Zero-shot类型的样本,不告诉模型“做什么”,“怎么做”,让模型自己去体会。但是,你总不能让所有的数据都长成图例里Zero-shot那样吧,那和去标注数据有什么区别?所以,这时候,语言的魅力就来了。一段普通的文字里,可能已经蕴含了“任务描述”、“任务提示”和“答案”这些关键信息。比如,我想做英法文翻译这件事,那么我从网上爬取的资料里可能有这样的内容:
”I’m not the cleverest man in the world, but like they say in
French: Je ne suis pas un imbecile [I’m not a fool] .
“I hate the word ‘perfume,”’ Burr says. ‘It’s somewhat better
in French: ‘parfum.’
如果我把这样的文本喂给GPT,它是不是就能在学习文字接龙的过程里,领悟到英法互译这一点?如果我的数据集又多又棒,那GPT自主揣摩的能力是不是就能更强?所以,GPT2在训练数据上,玩出了花样。它从著名的在线社区上爬取训练数据(数据具有一定的问答特性),并按社区用户的投票结果筛选出优质的内容。在这个方式下,训练出了1.5B的GPT2,效果基本与Bert差不多。从实用性的角度上,GPT2并没有带来突破,但是,zero-shot的训练方式,却有效证明了NLP领域训练出一个完全通用模型的可行性,这一刻开始,LLM走AIGC的路初见萌芽,因为整个训练流程看起来就像是模型自主学习知识。
三、大力出奇迹的奇迹:GPT3
Zero-shot的方式被GPT2认证可行后,就不得不开始考虑模型是否能真正做到强大了,毕竟现在只是和Bert持平而已。这一刻开始悟过来,既然LLM要一路走到底,既然模型之大避免不了,那不如来得更彻底一些。GPT3沿用了去除fine-tune,只做通用模型的思路,同时技术上小做替换( ),然后在训练数据中引入Few-shot(毕竟完全不给模型任何显性提示,效果确实没达到预期),最终生成了一个大小高达175B的庞然大物,当然效果也是一骑绝尘的。
四、总结
当你读到这里的时候,你已经发现了,GPT系列越写越短,和GPT的越来越大成正比。这也证实了GPT发展的核心思想:大力出奇迹。
GPT3.5会单独开一个篇章来讲解,来介绍GPT是怎么能写出代码的。回到GPT家族的总结上:
1、GPT的核心思想是:在NLP领域做pre- + fine-tune的框架,解决现实中缺乏文本标注的问题。
2、GPT基于 ,Bert基于 。在训练阶段,GPT只能看见上文,Bert可以看见上下文。这也注定了GPT需要把模型做大,训练数据做丰富,才能达到超越Bert的效果。
3、从GPT2到GPT3,Zero-shot和Few-shot的方式使得模型能够去除fine-tune部分,训练一个通用的语言模型。
附注:本文正在参加 人工智能创作者扶持计划
参考
1、/-asse…
2、/-lang…
3、/abs/2005.14…