本篇我们根据Andrej Karpathy(安德烈·卡帕西)的专题演讲《State of GPT》来介绍GPT如何从“初始模型”(base model)一直训练成ChatGPT这样的“助手模型”(assistant model)。Andrej Karpathy是OpenAI的创始人之一,也是GPT大模型训练这个领域最有话语权的人之一,建议大家去看一下大佬的演讲视频(https://www.bilibili.com/video/BV1ts4y1T7UH)。
1.模型训练的总体框架
Andrej Karpathy 在演讲的开篇,给出了 GPT 训练的 Pipeline,将 GPT 的训练分成四个阶段:
-
预训练阶段(Pretraining)
-
有监督微调阶段(Supervised Finetuning)
-
奖励建模阶段(Reward Modeling)
-
强化学习阶段(Reinforcement Learing)
做一个形象的类比,这四个阶段相当于人的求学之路:
-
预训练阶段,相当于是小学生
-
有监督微调阶段,相当于是中学生
-
奖励建模阶段,相当于是大学生
-
强化学习阶段,相当于是社会人
同时也能看到,在预训练阶段中所消耗的算力资源是最大的,大约相当于其他阶段的 10~100 倍,或者预训练所耗费的时间在整个训练过程中可能要占到 99% 以上。
2.预训练阶段(Pretraining)
预训练阶段利用海量的训练数据,包括互联网网页、维基百科、书籍、GitHub、论文、问答网站等,构建包含数千亿甚至数万亿单词的具有多样性的内容,构建基础语言模型(Base Model)。基础大模型构建了长文本的建模能力,使得模型具有语言生成能力,根据输入的提示词(Prompt),模型可以生成文本补全句子。
-
模型准备: 随机初始化的GPT。
-
数据集:
-
这部分将收集大量的互联网数据,一般都要万亿级别token/word,这部分数据的特点是数据量庞大,但是质量低。
-
LLM训练的时候有一些公开数据集,比如CommonCrawl,C4(Colossal Clean Crawled Corpus)、Github代码数据、维基百科等、书籍、ArXiv论文存档数据、StackExchange网站问答等,中文数据的一些公开数据汇总在这里。
-
垂直领域的数据需要自己爬取。更多数据集请前往huggingface上搜索,说不定有意外之喜。
-
以LLaMA的预训练数据集为例, 以上这些数据集按照下图所示的比例采样混合在一起形成最终的预训练数据集。
- Tokenization:
-
利用tokenizor将文本数据转化为整数序列,这些数字每一个都被称为token。GPT类的模型训练一般都是采用sentence piece的tokenizor,据统计平均1个token≈0.75个word。
-
GPT3词表大约是5w个,上下文长度2048(现在可以做到最多长达10w),175B参数。训练数据总token个数为3000亿(300B)。
-
LLaMA词表大约是3.2w个,上下文长度2048,65B参数。训练数据总token个数为1~1.4万亿(1.4T)。
-
LLaMA参数量虽然比GPT3小一个数量级,但是其效果却是更好的,这归功于计算的时间更长,见过的数据更多。可见不能直接靠参数量大小来判断两个模型的好坏。
-
训练任务:
-
经典的预训练任务Next-Token-Prediction。
-
模型采用单向语言模型架构,即Causal-LM架构,每个token只能看到该token前面的上文信息,利用该token的隐状态向量来预测下一个token是什么。
-
该阶段训练出来的模型有以下特点:
-
预训练完的模型我们称之为Base Model。但是,Base Model并不是一个可以直接回答你问题的“助手”,如果你向它问问题,它大概率会拒绝回答,或者不理解你的问题,再或者用更多的问题来回答你的问题。
-
预训练部分时间比重占了总训练过程的99%以上。
-
你可以用一些比较trick的prompt来让Base Model输出你想要的回答。
-
你也可以通过欺骗Base Model让其成为“助手”,你需要准备好一个特定的prompt,让Base Model看起来像是人和“助手”之间正在交谈,在最后插入自己的Query,来让Base Model回答,具体流程如下图所示。当然,这样其实一般不可靠,并且实践中也不是很友好,但仍然可以用这种方法来验证预训练模型train的效果。
3.有监督微调训练(Supervised Finetuning,SFT)
是指在已经训练好的base model的基础上,利用少量高质量数据集合,包含用户输入的提示词和对应的理想输出结果,从而使得模型具备遵循指令的能力。用户输入包括问题、闲聊对话、任务指令等多种任务。
-
模型准备: 第一阶段Pretrain好的GPT模型。
-
数据集: 该部分数据集为少量但是高质量的prompt、response数据,数量大约1w~10w条。比如下图这条数据,承包商需要严格按照右边的标注说明书来写这个prompt的response。
4.奖励模型训练(Reward Molel,RM)
这里就开始正式进入传说中的RLHF了(Reinforcement Learning from Human Feedback,基于人类反馈优化的强化学习语言模型)。RLHF分为两部分,一部分是奖励模型RM,一部分是强化学习RL。
奖励模型训练阶段目标是构建一个文本质量对比模型,对于同一个提示词 ,SFT模型给出的多个不同输出结果的质量进行排序。奖励模型(RM 模型)可以通过二分类模型,对输入的两个结果之间的优劣进行判断。
-
模型准备: 采用SFT训练好的模型,训练RM模型的时候,SFT模型参数冻结。
-
数据集: 这里数据集开始转变为比较模式,数据还是prompt(问题模板)+response(响应回答)的形式,但是这里的response是由SFT模型生成的,并且会生成多个,人工需要标注的是这些response之间的顺序排名,这个排名的标注有可能会很难且漫长,有的甚至会耗费几个小时来完成一个prompt的responses的排序。
-
待训练模型: RM模型,即一个打分模型,用来给GPT输出的responses打分排序。
-
训练任务:
-
RM的训练过程如下图所示:用同样的prompt和SFT model输出的N个responses分别拼接(图中是3个),然后末尾都拼接一个特殊的奖励标识符<|reward|>,并且将该<|reward|>符的隐状态输出接上一个RM模型,来预测打分,预测打分的顺序和标注的顺序之间会产生一个loss,其实就是LTR排序学习。
-
为什么采用排序而不是明确打分的标注方式?其实就是将任务难度降低(不论是对标注人员还是对RM模型而言),使RM模型可以更好的被训练,因为计算“比较值”比计算“准确值”容易,减轻模型的打分压力,其实也就是LTR的优点。
- RM模型训练流程图解:
5.强化学习训练(Reinforcement Learning,RL)
强化学习阶段的任务是根据数十万用户给出的提示词,利用在前一阶段训练的 RM模型,给出 SFT 模型对用户提示词补全结果的质量评估,并与语言模型建模目标综合得到更好的效果。
-
模型准备: 采用训练好的SFT模型+训练好的RM模型,用RL的方式对SFT进行继续训练。
-
数据集: 这里数据集也和上述RM模型训练时一样为比较模式,数据仍然是prompt+response的形式,response是由SFT模型生成的,并且会生成多个,由奖励模型对其进行打分指导(强化学习)。
-
待训练模型: STF训练后的GPT模型。
-
训练任务:
-
按照上述的方法,用SFT模型对一个prompt生成多个responses。
-
末尾拼接上奖励标识符<|reward|>。
-
让训练好的奖励模型RM对<|reward|>的隐状态向量打分。如下图,RM模型对三句话的打分分别是1.0,-1.2,0.2。
-
例如,对第一行,奖励模型RM打分很高,因此我们将第一行采样的所有token都将得到强化,它们将获得更高的未来被采样的概率。相反,对第二行,奖励模型RM打分-1.2,因此我们对第二行采样的每个token进行惩罚,降低其未来被采样的概率。
-
仅黄色的response部分tokens才参与到RL模型的训练里面,其余token都将被忽略,即只有黄色部分才参与loss的计算。打分高的语句中的所有token将在之后增加被采样到的概率。
不使用RLHF,仅使用SFT会怎么样?反之呢?RLHF有缺点吗?
- 实验表明RLHF效果更好。InstructGPT的论文表明PPO(Proximal Policy Optimization,可以理解为一种RL算法)效果最好:
-
OpenAI做过真实场景下的比较,大部分人更喜欢RLHF的输出结果,而不是SFT的结果。
-
RLHF也有缺点,RHLF模型相对于SFT Model、Base Model失去了一些熵(即降低了多样性,因为每个位置上都倾向于输出高概率token)。如图可以看到,Base Model会有非常多样化的表达,因此在一些需要想象力和多样性的任务中,可以尝试下使用Base Model。
读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用
对于0基础小白入门:
如果你是零基础小白,想快速入门大模型是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。
包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓
👉AI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓