- 人类偏好数据的标注
- 基于标注数据训练奖励模型
- 基于奖励模型使用RL微调语言模型
以OpenAI为基础,本章会对比DeepMind, Anthropic在以上3个步骤上的异同,并尝试回答以下几个问题
- RLHF究竟做了什么
- 偏好对齐用RL和SFT有什么差异
- 什么模型适合作为RL的起点
OpenAI
paper: InstructGPT, Training language models to follow instructions with human feedback
- paper: Learning to summarize from human feedback
- https://openai.com/blog/chatgpt
解密Prompt系列4介绍了InstructGPT指令微调的部分,这里只看偏好对齐的部分
样本构建
在标注过程中,模型会生成4-7个回复,标注同学需要综合考虑有用性,无害性和真实性,对模型的每一个回复进行绝对打分后续用于评估,同时给出多个模型回复间的相对排序用于RM模型训练,标注界面如下:
奖励模型
OpenAI使用了指令微调16个epoch的6B模型作为奖励模型的初始模型。训练方式是两两对比计算crossentropy,其中\(r_\theta\)是奖励函数对指令x和回复y的打分,如下
这里感觉和对比学习要用大batch_size进行拟合的思路有些相似,是为了保证对比的全面性和充分性,使用全面对比后计算的梯度对模型进行更新。另一个原因可能是不同标注人员之间的偏好差异,shuffle之后这种偏好差异带来的样本之间的冲突性更高。
RLHF
- RL初始模型
OpenAI使用了SFT指令微调之后的模型作为RL的起点。RL初始模型的训练细节在附录C.3和E.8,基于GPT3的预训练模型,SFT微调2个epoch并混入10%的预训练数据进行训练得到。这里混入预训练是因为在RL微调的过程中发现加入预训练数据可以防止RL微调降低模型语言能力,因此在SFT微调过程中也做了相同的处理。这里我好奇的是,指令微调和预训练的核心差异其实只在指令输入的部分是否计算梯度,因此是否可以直接把指令微调和预训练混合变成一个步骤"文本+指令预训练",我们准备沿这个方向去尝试下~
- RL样本
- RL训练
RL微调的部分,OpenAI使用了PPO算法,基于Reward模型的打分进行微调,微调了2个epoch。在此基础上加入了两个目标:
- 微调模型和原始模型在token预测上的KL散度:避免模型过度拟合奖励函数偏离原始模型。后面也论证了KL的加入,可以加速RL收敛,核心是在相同的KL下最大化模型偏好的提升
- 10%的预训练目标(PPO-PTX): 降低RL对模型语言能力的影响
- 效果
对比175B指令微调的模型,1.3B的模型经过RLHF微调,在喜爱度上就能打过175B的SFT模型!2点Insights如下
- RLHF对齐带来的模型有用性的提升,效率远超训练更大的模型
- 使用PPO-PTX的RLHF微调没有产生很大的Alignment-Tax
DeepMind
paper: Teaching language models to support answers with verified quotes
- paper: Sparrow, Improving alignment of dialogue agents via
样本构建
不考虑搜索调用的部分,DeepMind的偏好对齐部分只关注2H,有用性和无害性。样本标注的基础模型是Chinchilla-70B,和OpenAI的差异在于,DeepMind把人类偏好和违反2H原则拆成了两个标注任务
- 人类偏好标注:基于进行中的对话,从模型多个回复中选择最喜欢的一条,这里对话中的人机问答都是由模型生成的
- 对抗标注/钓鱼执法:基于随机分配的标注规则,标注同学需要刻意引导模型给出违反该规则的回答,和风控红蓝对抗的思路相似
奖励模型
- PM:Preference Reward Model
- RM:Rule Violation Model
RM模型是一个多标签任务,判断对话当前是否违反其中一条标注规则,输出违反该规则的条件概率。以上5档标签被分成两类,definitely break和probably break]是违反,probably follow和definitely follow是未违反,unsure样本被丢弃。这里DeepMind使用如下Hard Prompt Tunning来构建模型,其实就是引入一些前置语义信息,让模型在小样本上表现更好。更多细节>>解密Prompt系列2. 冻结Prompt微调LM
- 整体打分
RLHF
RL起点:和OpenAI相同,DeepMmind也使用监督微调模型作为初始模型。不过DeepMind直接使用了以上RM的标注数据中,多选一标注有用的回复,和未违反规则的回复来进行监督微调。
对比OpenAI使用纯人机对话的样本,DeepMind的RL的样本来源包括以下四个部分
- 问题集:GopherCite的Eli5子集
- 人机对话:以上RM和PM的人机对话的样本集
- 对抗样本扩充:使用Prompt模板引导Sparrow生成有害问题,扩充有害对话样本
- self-play:类似self-instruct,会采样已有对话作为上下文,让sparrow继续生成回复
- RL训练
都选择微调16层,其实是为了节省训练显存,这样PM,RM,初始SFT模型,和最终的RL微调模型都共享前64层,后16层通过不同head来实现,从而达到降低显存占用的目的。
- Insight:偏好和遵守规则的矛盾统一
Anthropic
paper: Red Teaming Language Models to Reduce Harms Methods,Scaling Behaviors and Lessons Learned
- paper: A General Language Assistant as a Laboratory for Alignment
- paper:Training a Helpful and Harmless Assistant with Reinforcement Learning from Human Feedback
- 数据:https://huggingface.co/datasets/Anthropic/hh-rlhf
样本构建
从论文标题不难看出,Anthropic也只考虑了2H,有害性和有用性。并且着重研究了对抗有害样本的生成,受限于篇幅这里不展开。我个人也更偏好2H,因为我始终没太想明白Honesty如何能通过对齐实现。因为部分非事实性是来自预训练样本中的噪声,例如预训练样本中是"鲲之大一锅炖不下",如何通过对齐让模型学到"鲲之大,不知其几千里也"?部分非事实性来自训练样本的有限性,需要像Bing一样通过引入实时信息来解决,要是大家有不一样的观点也欢迎留言评论。
是把有害性和有用性分成了两个标注任务,针对开放的对话主题进行4轮左右的对话。
- 有害性标注:和DeepMind相同使用了红蓝对抗的方案,目标是引导模型生成有害回复。每一轮模型会生成2个回答,选择更有害的一个
- 有用性标注:同样是每轮2选一,选择更有帮助的一条回复,并不强制进行事实性检查
除了2H的任务分开标注之外,每个标注同学进行对话的模型虽然都是52B的模型,但会随机来自3个不同版本的模型
- HHH Context-Ditill:类似3Hprompt(helpful,harmless, honest)加持的基础模型,最初只有这个模型
- Rejection Sampling(RS):使用3H模型生成16个回复,使用训练后的PM模型对结果排序,选择有害性最小的2个回复
- RLHF微调后的模型:后续的数据收集会基于微调后多个版本的模型持续进行
奖励模型
为了降低对微调数据的需求,Anthropic加入了Preference Model Pretraining(PMP)的继续预训练过程,使用Reddit, StackExchange等开源问答的数据让模型先部分学习什么是好的什么是坏的回答。
- PM模型越大,KL散度越低
- PM模型打分在低分区一致性较高,在高分区一致性较低
第二个结论很符合直觉,因为有害内容的标注一致性更高更易识别,而优质回复的评价更模糊,另一个原因是模型当前的能力可能导致高分区的样本比较稀疏。
RLHF
- RL起点
Anthropic选择了3H Context Distillation的模型,通过在样本前加入3H指令词,引导模型生成更安全有用的回复,并记录模型生成的每个位置Top50的词和概率,把这个概率作为Teacher;然后去掉3H指令词,对预训练模型进行微调,微调目标就是去拟合之前有3H时Top50 Token的预测概率,其实就是Teacher-Student蒸馏的思路。
- RL样本
- RL训练:整体和openAI类似
和OpenAI相同,Anthropic也提到了online iter训练,但论文的出发点是前面提到的PM模型在高分部分不稳定的问题。因为微调后的模型生成的回复会更好,在更优的模型中持续收集样本,可以持续补充高分样本。注意这里的online和常规意义的online不同,这里每次训练会混合多个snapshot模型收集的偏好数据和最初的偏好样本,重头训练PM,并重新微调RLHF。
- Insight:有用性和无害性的矛盾统一
论文给出了的解决思路是遇到有害性请求,模型只学到拒绝回答是很简单的,这就是无用但无害,但是如果模型能学到在拒绝回答的同时,给到拒绝的原因,并劝说用户不要有类似的有害的请求的话,就是有用且无害了。这部分标注数据当前是缺失的。 个人感觉这个思路比OpenAI适配场景去拒绝请求,似乎可行性更高一些。不过论文没有重新标样本,而是选择了折中的方案,加入更大比例Helpful样本来提升模型有用性
对比总结
paper: Scaling Laws for Reward Model Over optimization
- paper: WebGPT: Browser-assisted question-answering with
human feedback- https://openai.com/research/measuring-goodharts-law
RLHF究竟学了啥?
可类比拒绝采样(Best-of-N):让模型随机采样生成N个回复,选择RM打分最高的回复
在WebGPT中OpenAI就把Best-of-N和RL进行了对比,best-of-64的效果甚至超过RLHF,而DeepMind在RL微调后加入best-of-n效果会有进一步提升。感觉RLHF和Best-of-N的差异就是前者把排序择优放在了微调阶段训练耗时,后者放在了推理阶段推理耗时。本质上二者是相似的,都是让模型在相似文本打分的文本序列中,挑选偏好打分更高的序列
偏好对齐使用RL和SFT的差异?
优化整个文本序列 vs 优化token级别的偏好:类似序列标注任务中CrossEntropy对比CRF
同样使用偏好标注数据来进行微调,RL微调是针对整个文本序列的RM打分进行优化,而SFT是对每个token的预测概率进行优化。SFT在偏好优化场景上有几个问题
- 每个token在损失函数中的权重是相同的
- 没有考虑文本整体对偏好的影响
- 针对很多开放问题,最优答案是不固定的,只对1条回答做token级别的拟合,可能会影响泛化
除此之外RL的另一个优点是可以部分降低人工标注,因为训练的RM模型后续可用于偏好打分,而SFT的每一个偏好样本都需要人工标注。
什么模型适合作为RLHF的初始模型?
从拒绝采样的本质出发,RL的初始模型需要有能够生成人类偏好回答的能力
当前的RL其实还存在很多问题。首先人类偏好本身就是存在噪声的,标注的一致率不到80%;其次奖励模型是对标注偏好的进一步抽象,又受到一步准确率的限制;而使用不完美的奖励模型进一步微调模型,则可能带来更进一步的拟合问题。这些问题还有待进一步解决,这一章我们就先说这么多啦
想看更全的大模型相关论文梳理·微调及预训练数据和框架·AIGC应用,移步Github >> DecryptPropmt