偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析

2024-01-21 12:12

本文主要是介绍偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenAI

  • paper: InstructGPT, Training language models to follow instructions with human feedback

  • paper: Learning to summarize from human feedback

  • Introducing ChatGPT

解密Prompt系列4介绍了InstructGPT指令微调的部分,这里只看偏好对齐的部分

样本构建

RL的数据来源有两块,一部分是用户在playground里面真实请求的数据,另一部分来自标注同学自己写的指令样本。标注指令样本包括3种形式:单一指令,few-shot指令,根据用户之前提交的使用场景编写的指令,量级分布如下

img

在标注偏好样本上,OpenAI基于3H原则,设计了详细的标注标准详见论文。需要注意的一点是在训练样本标注时Helpful比Harmless和honest更重要,但是在评估样本的标注上Harmless和honest更重要。这样区别标注是OpenAI发现Helpful和Harmless存在冲突,如果模型过度拟合无害性,会导致模型拒绝回答很多问题。OpenAI认为不同场景下风险的定义是不同的,应该把拒绝回答的能力放到下游场景中, 后面Anthropic也碰到了相似的问题,我个人更偏好Anthropic的方案。

在标注过程中,模型会生成4-7个回复,标注同学需要综合考虑有用性,无害性和真实性,对模型的每一个回复进行绝对打分后续用于评估,同时给出多个模型回复间的相对排序用于RM模型训练,标注界面如下:

img

img

ChatGPT对话训练部分未公开细节,从官网能获得细节是,ChatGPT的样本是人工写的对话样本+InstructGPT样本转换成对话格式的混合样本,更多基于对话形式的标注可以参考后面的DeepMind和Anthropic。

奖励模型

OpenAI使用了指令微调16个epoch的6B模型作为奖励模型的初始模型。训练方式是两两对比计算crossentropy,其中rθ��是奖励函数对指令x和回复y的打分,如下

不过OpenAI发现如果对数据进行Shuffle,则训练一轮就会过拟合,但如果把针对1个指令模型的K个回复,K在4~9之间,得到的C2k��2个pairwise对,放在一个batch里进行训练,会得到显著更高的准确率。这里一个batch包括64个指令生成的所有回复对,其中排名相同的样本对被剔除。

这里感觉和对比学习要用大batch_size进行拟合的思路有些相似,是为了保证对比的全面性和充分性,使用全面对比后计算的梯度对模型进行更新。另一个原因可能是不同标注人员之间的偏好差异,shuffle之后这种偏好差异带来的样本之间的冲突性更高。

之所以选择6B的模型,论文指出尽管175B的RM模型有更高的准确率和更小的验证集loss,但是训练过程并不稳定,以及太大的RM模型会导致RL部分的训练成本太高。

RLHF

  1. RL初始模型

OpenAI使用了SFT指令微调之后的模型作为RL的起点。RL初始模型的训练细节在附录C.3和E.8,基于GPT3的预训练模型,SFT微调2个epoch并混入10%的预训练数据进行训练得到。这里混入预训练是因为在RL微调的过程中发现加入预训练数据可以防止RL微调降低模型语言能力,因此在SFT微调过程中也做了相同的处理。这里我好奇的是,指令微调和预训练的核心差异其实只在指令输入的部分是否计算梯度,因此是否可以直接把指令微调和预训练混合变成一个步骤"文本+指令预训练",我们准备沿这个方向去尝试下~

  1. RL样本

OpenAI是完全基于在playground里用户真实提交的指令请求来进行训练,没有使用人工标注,为了完全面向用户使用进行偏好优化。

  1. RL训练

RL微调的部分,OpenAI使用了PPO算法,基于Reward模型的打分进行微调,微调了2个epoch。在此基础上加入了两个目标:

  • 微调模型和原始模型在token预测上的KL散度:避免模型过度拟合奖励函数偏离原始模型。后面也论证了KL的加入,可以加速RL收敛,核心是在相同的KL下最大化模型偏好的提升

  • 10%的预训练目标(PPO-PTX): 降低RL对模型语言能力的影响

img

且论文提到样本的收集和RL训练是多次迭代的,也就是使用RL微调后的模型上线收集更多的用户请求,重新训练RM,再更新模型。不停在优化后的模型上收集用户反馈,会让RM模型学习到更充分的高偏好样本,强者愈强。

  1. 效果

对比175B指令微调的模型,1.3B的模型经过RLHF微调,在喜爱度上就能打过175B的SFT模型!2点Insights如下

  • RLHF对齐带来的模型有用性的提升,效率远超训练更大的模型

  • 使用PPO-PTX的RLHF微调没有产生很大的Alignment-Tax

img

DeepMind

  • paper: Teaching language models to support answers with verified quotes

  • paper: Sparrow, Improving alignment of dialogue agents via

DeepMind的Sparrow使用了基于Google搜索的事实性信息的引入,这部分我们放到Agent调用的章节一起说,这里只关注偏好对齐的部分。

样本构建

不考虑搜索调用的部分,DeepMind的偏好对齐部分只关注2H,有用性和无害性。样本标注的基础模型是Chinchilla-70B,和OpenAI的差异在于,DeepMind把人类偏好和违反2H原则拆成了两个标注任务

  • 人类偏好标注:基于进行中的对话,从模型多个回复中选择最喜欢的一条,这里对话中的人机问答都是由模型生成的

img

  • 对抗标注/钓鱼执法:基于随机分配的标注规则,标注同学需要刻意引导模型给出违反该规则的回答,和风控红蓝对抗的思路相似

img

奖励模型

基于以上两份样本,论文通过微调Chinchilla-70B,分别训练了两个模型PM和RM, 微调的方式都是固定前64层,只微调后16层。

img

  1. PM:Preference Reward Model

PM的数据是在以上每轮对话多选一的基础上,从其他对话中随机采样更多的负样本构成的多分类任务,这里补充负样本是为了惩罚off-topic的模型回复。因此损失函数是多分类的CrossEntropy,以及在此基础上加入了Bradley-Taley(Elo)和正则项,如下

其中ri��是所有回复的模型打分,因此正则项是为了保证最终模型输出的打分是以0为中心的。而Elo部分是为了优化两两对比排序,更多细节>>Fitting the Bradley-Terry model to large and potentially sparse datasets

  1. RM:Rule Violation Model

RM模型是一个多标签任务,判断对话当前是否违反其中一条标注规则,输出违反该规则的条件概率。以上5档标签被分成两类,definitely break和probably break]是违反,probably follow和definitely follow是未违反,unsure样本被丢弃。这里DeepMind使用如下Hard Prompt Tunning来构建模型,其实就是引入一些前置语义信息,让模型在小样本上表现更好。更多细节>>解密Prompt系列2. 冻结Prompt微调LM

img

  1. 整体打分

基于以上两个模型,整体打分=偏好打分+所有规则的未违反概率之和+长度惩罚(保证回答简洁)+is_valid(模板检查)。其中模板检查包括要求Agent回复以\n\nSparrow:开始,以\n\nUser:结束,保证所有模型回复有相同的格式

img

个人感觉分开标注,以及引导式的标注没啥问题,但分开建模再直接打分融合可能不一定是最优的方案,因为两个模型的scale不同,很难对比违反部分规则,和偏好程度要如何balance才是最优的整体打分。

RLHF

  1. RL起点:和OpenAI相同,DeepMmind也使用监督微调模型作为初始模型。不过DeepMind直接使用了以上RM的标注数据中,多选一标注有用的回复,和未违反规则的回复来进行监督微调。

  2. RL样本

对比OpenAI使用纯人机对话的样本,DeepMind的RL的样本来源包括以下四个部分

  • 问题集:GopherCite的Eli5子集

  • 人机对话:以上RM和PM的人机对话的样本集

  • 对抗样本扩充:使用Prompt模板引导Sparrow生成有害问题,扩充有害对话样本

  • self-play:类似self-instruct,会采样已有对话作为上下文,让sparrow继续生成回复

  1. RL训练

DeepMind使用了Actor-Critic算法进行RL微调, RL算法我们会单独一章来讲,整体上A2C可能略弱于PPO。除了算法不同,DeepMind的RL微调也只微调Chinchilla模型的后16层。

都选择微调16层,其实是为了节省训练显存,这样PM,RM,初始SFT模型,和最终的RL微调模型都共享前64层,后16层通过不同head来实现,从而达到降低显存占用的目的。

img

  1. Insight:偏好和遵守规则的矛盾统一

人类偏好和遵守规则的要求存在一定冲突,只使用更偏好的数据训练会得到更高的规则违反率,只使用遵守规则的数据训练会降低模型回复的偏好率,混合样本的微调效果最好。

这篇关于偏好对齐RLHF-OpenAI·DeepMind·Anthropic对比分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/629506

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

C++中处理文本数据char与string的终极对比指南

《C++中处理文本数据char与string的终极对比指南》在C++编程中char和string是两种用于处理字符数据的类型,但它们在使用方式和功能上有显著的不同,:本文主要介绍C++中处理文本数... 目录1. 基本定义与本质2. 内存管理3. 操作与功能4. 性能特点5. 使用场景6. 相互转换核心区别

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff