模型中各个任务的backbone都是GPT-3的架构,支持的context length是2k的token(其中数据处理中prompt选择不超过1k,response不超过1k)【chatGPT的context长度更长】
2. Step2:强化学习
2.1 生成问题的强化学习建模
如上图所示,文本生成的问题,可以建模为一个token空间上的序列决策问题(选择一个token后继续选择另一个token)
RLHF中通过人工标注生成结果的排序数据中学习和建立reward模型,进而把human对结果质量的判断引入到生成模型中。而生成模型就对应的是Policy模型,通过学习和调整policy模型就是在做生成模型的finetune。
2.2 奖励模型(Reward model)
2.3 PPO模型及训练
PPO(Proximal Policy Optimization[2])是RL中AC类(Actor/Critic)的经典算法,既有Policy Gradient方法的优势,同时基于importance sampling实现experience buffer的利用,发挥类似DQN类算法的数据利用优势,OpenAI非常喜欢用来作为baseline的算法。该算法的具体细节就不展开介绍,感兴趣的可以阅读原论文。
整体而言人工标注的数据量级比想象中的小(万级别),但是质量、数据分布、不同阶段的数据标注方式等设计十分精细,再次体现了OpenAI研究员们非常落地的做事风格也体现数据作为模型效果燃料的关键之关键(不少人也认为之前的GPT-3比同期的不少社区开源的同级别参数量的预训练模型效果好也很大程度来自于其精细化的训练数据构建和数据处理)。
1. 40个精心挑选的标注员
2. 标注数据来源:Prompts的数据来源及类型
3. 标注的任务及目标
4. 标注的标准,三个维度:有用(Helpful)、真实(truthful)、无害(harmless)
5. 标注的数据量及各个任务的训练数据量
数据类型中包含了不少模糊的、不清晰意图的、敏感内容等。
1. 实验评估和验证的方式
2. 关键和有启发性的一些实验结论
ChatGPT官方并没有像instructGPT那样给出详细的实现论文,仅有官网Blog[11]上比较概要性的描述,以下通过这些描述来尽量推测其实现的一些细节。
ChatGPT is fine-tuned from a model in the GPT-3.5 series, which finished training in early 2022. You can learn more about the 3.5 series here.
ChatGPT的底座模型,如上述,是GPT 3.5系列,基于推测至少可能是text-davinci-002(即既有text能力又有code能力)
We trained this model using Reinforcement Learning from Human Feedback (RLHF), using the same methods as InstructGPT, but with slight differences in the data collection setup.
整体的技术方案和InstructGPT类似,并且官网的blog中给的图也和instructGPT论文中的示例图相似,于是显然数据的构造、标注的方式成为关键,尤其是如何构造对话的语料。
以如果是我在这个设定下去考虑构造对话语料训练出拥有这类对话能力的模型,我该怎么去构造语料出发,来思考。整个RLHF的训练涉及到3个关键阶段:
1. 有监督的微调(SFT:Supervised Finetune)
We trained an initial model using supervised fine-tuning: human AI trainers provided conversations in which they played both sides—the user and an AI assistant. We gave the trainers access to model-written suggestions to help them compose their responses. We mixed this new dialogue dataset with the InstructGPT dataset, which we transformed into a dialogue format.
语料构成:人工交互标注产生 + instructGPT转化为对话语料
Q:如何人工标注产生对话语料?
两个标注人员分别作为用户以及AI进行对话,那么对话的起点以及场景从哪里来,从instructGPT的数据构造参考的话,可以有两种:
值得注意的是应该构建不只一个需求的对话过程,包含一些插入、多个需求等复杂的场景情况。
而其中chatBOT的标注人员的回复策略以及user的回应的策略、采样的数据等,根据最终期望模型获得能力需要有精心的设计。其中回复的策略对照chatGPT的能力以及理想对话中的action strategy应该有几种
另外,从多轮的一些指代消解维度来看,抽样的数据和对话语料构建的过程中也应该可以仿照对话的一些维度的能力进行标注的引导和数据分布的均衡:Query中指代、结果中指代等。
Q:instructGPT中的数据转化为对话的语料?
instructGPT中都是单轮的Prompt-Response的语料,要转化为对话的语料。能想到的最简单的是把单轮的语料做一些随机的组合形成一些对话的语料,这种组合出来的对话语料可以体现用户不同的需求切换,在对话场景中依然能够正确的理解。但是如果只是这样子的话,感觉并没有充分的利用起来,如果可以的话,应该可以对其中的一些原本的prompt就属于模糊需求、有错误的、边界能力以及不安全类的挑出来,再过人人交互的对话标注方式进行延展产生这些场景下更丰富的多轮语料。
2. 奖励模型(RM,Reward Model)
RM的标注数据在instructGPT中主要是对一个prompt下的不同response标注结果的质量排序,而对话中需要把prompt换成一个context。
To create a reward model for reinforcement learning, we needed to collect comparison data, which consisted of two or more model responses ranked by quality. To collect this data, we took conversations that AI trainers had with the chatbot. We randomly selected a model-written message, sampled several alternative completions, and had AI trainers rank them.
上述的描述中,有个细节是用标注人员与chatbot的交互中的某一轮,展开来看对应的多个结果,让标注人员进行结果的质量排序。那么这个时候的chatbot用什么模型,最原始的底座模型显然没有对话能力。所以我推测应该是在第一步SFT之后。
3. 增强学习训练(with PPO)
we can fine-tune the model using Proximal Policy Optimization. We performed several iterations of this process.
用PPO进行finetune,这块的数据instructGPT中完全采用的是线上API的prompt,但那里面更多的应该都还是单轮的。我翻看了下,也有很多GPT-3之后下游的生态中用来做chatbot的,所以应该可以从这个里面抽取数据。当然也可以采用之前人工标注数据中起点的prompt从线上来人人对话继续延展产生的对话语料。
联系客服