一些RLHF的平替汇总

卷友们好,我是rumor。

众所周知,RLHF十分玄学且令人望而却步。我听过有的小道消息说提升很大,也有小道消息说效果不明显,究其根本还是系统链路太长自由度太高,不像SFT一样可以通过数据配比、prompt、有限的超参数来可控地调整效果。

但也正是因为它的自由度、以目标为导向的学习范式和性价比更高的标注成本,业内往往认为它会有更高的效果天花板。同时我最近看OpenAI的SuperAlignment计划感受颇深,非常坚定地认为scalable的RLHF(不局限于PPO)就是下一步的大突破所在。

所以我秉着不抛弃不放弃的决心,带大家梳理一下最近的RLHF平替工作,探索如何更稳定地拿到效果。

RLHF链路可以分为两个模块,RM和RL,这两个模块各有各的问题:

  • RM:对准确率和泛化性的要求都很高,不然很容易就被hack到(比如输出某个pattern就给高分)。但业内普遍标注数据的一致率只有70%左右,数据决定效果天花板,如何让RM代表大部分人的判断、且能区分出模型结果的细微差异,难难难。这也是RLHF方法没法规模化起来的主要瓶颈

  • RL:奖励太稀疏(最后一步才拿到句子分数,不像SFT一样有真实的token-level监督信号)、PPO超参数非常多,导致效果很不稳定

针对上述两个模块的问题,学术界大佬们各显神通,大概有以下几种解决方案:

  • 没得商量,不做RL了,选择性保留RM:比如RRHF、DPO,这类方法可以直接在RM数据上优化语言模型,但如果想提升效果,需要用自身模型采样,得再引入一个RM,比如RSO、SCiL、PRO等。又或者直接用RM采样的数据做精调,比如RAFT、Llama2等

  • 用其他RL算法:比如ReMax、Decision Transformer

下面我们就逐一盘盘这些方法以及他们给出的有用结论。

不做RL了

RRHF

RRHF: Rank Responses to Align Language Models with Human Feedback without tears

RRHF是阿里在今年年初(2023.04)发布的工作,它的做法是直接在RM数据山优化LM,让chosen回答的概率大于rejected回答的概率。

3cdb8750d6c378a68a290a0210f68fee.png
RRHF

在具体实现上,就是计算句子的条件概率后加一个ranking loss:

9354be5b214f574336188c07bebd31bc.png
RRHF loss

但在实践中,作者发现只用ranking loss会把模型训崩溃,所以又加了SFT loss。从消融实验可以看到加了rank loss确实对模型效果有一些提升:

e391fe43244a4166662f821d79929ac1.png

最终在HH数据集上,作者提出的RRHF平均得分略好于PPO(-1.02 vs -1.03),效果差距不是太大,但该方法主打一个便捷稳定。

同时作者也在实验中尝试了不同的数据采样策略:

  1. 直接用开源RM的数据

  2. 用自己的模型生成response,用开源RM进行排序,做出新的RM数据

  3. 循环执行2,类似强化的思维不断靠自身采样到更好的答案

最后的结论也比较符合直接,是3>2>1。

Preference Ranking Optimization for Human Alignment

后续阿里(非同作者)在2023.06又提出了一个PRO方法,核心思想跟RRHF接近,但有两个不同:

  1. 选用了更多负例,不止停留在pair-wise

  2. 给不同负例不同的惩罚项(比如分数差的多就拉大一些)

19d31e97ad644cd9e235c40c914dffa4.png
PRO

同时也加上了SFT loss,最终效果比RLHF和RRHF都有些提升。

DPO

Direct Preference Optimization:Your Language Model is Secretly a Reward Model

DPO是斯坦福在2023.05底提出的工作,主打一个硬核,直接从PPO公式推出了一个平替方案,虽然最终loss呈现的思想跟RRHF接近(chosen句子概率>rejected句子概率),但同时带有一个SFT模型的约束,可以保证在不加SFT loss的情况下训练不崩溃(个人猜测)。

5b0a7e2afe2eb4eea10d52b37e7f6005.png
DPO

作者在公开的几个RM数据集上都做了实验,可以发现DPO对超参数的敏感度更低,效果更稳定,且奖励得分优于RLHF。

同时,微软在2023.10月的一篇工作[1]上也对DPO做了进一步的探索。考虑到排序数据成本,他们直接默认GPT4 > ChatGPT > InstructGPT,实验后得到以下结论:

  1. 用DPO在 GPT4 vs InstructGPT 上训练的效果 > 直接在GPT-4数据精调的效果

  2. 先在简单的pair上训练后,再在困难的pair上训练会有更好的效果

RSO

Statistical rejection sampling improves preference optimization

上面介绍了两种ranking思想的loss,具体哪种更好一些呢?DeepMind在2023.09月份的一篇RSO[2]工作中进行了更系统的对比,得到了以下结论:

  1. DPO(sigmoid-norm) loss效果略好,但更重要的是增加SFT约束,可以看表中没加约束的hinge loss效果很差,但加了约束后则能接近DPO

  2. 另外重要的还有采样策略,比如要优化模型A,最好用模型A生产的结果,去做pair标注,再训练A,比用模型B生产的数据训练A更好。这跟RRHF的结论也比较一致,更接近「强化」的思想

e7bba8b68fb7baca4f95fae18f543cef.png
RSO实验结果

同时作者提出了另外一种RSO(Rejection Sampling Optimization)的采样方法,实验发现有2个点左右的提升。

Rejection Sampling + SFT

拒绝采样是一种针对复杂问题的采样策略[3],可以更高效地采样到合适的样本,进行复杂分布的估计。最近也有很多方法,利用RM进行拒绝采样,直接用采样出的数据对模型做SFT。

Llama 2: Open Foundation and Fine-Tuned Chat Models

LLama2就很好地使用了拒绝采样,先问问地训RM,再用RM筛选出当前模型最好的结果进行SFT。论文发出时他们一共把llama2-chat迭代了5轮,前4轮都是用的拒绝采样,只有最后一轮用了PPO,可以看到相比ChatGPT的胜率一直在提升:

7c98a32df087ebd3138d8fcd8cb437a4.png

不过从RLHF v5(no PPO)和RLHF v5(with PPO)来看,RL还是能有很大的效果收益。

这种方法还有很多变体可以探索,比如港大在2023.04提出的RAFT[4],就是选取多个样本进行后续精调。同时采样策略也可以进行一些优化,比如上面提到的RSO。

用其他RL算法

ReMax

ReMax: A Simple, Effective, and Efficient Reinforcement Learning Method for Aligning Large Language Models

ReMax是港中文在2023.10提出的工作,核心是对RLHF中RL阶段的PPO算法进行了简化。

强化的难点是怎么把多步之后的最终目标转化成模型loss,针对这个问题有不同解决方案,目前OpenAI所使用的RL策略叫PPO[5],是他们自己在2017年提出的一个经典RL算法(OpenAI早期真的做了很多强化的工作)。

但ReMax的作者认为,PPO并不适用于语言模型的场景:

  1. 可以快速拿到句子奖励:传统RL的长期奖励获取可能会比较昂贵,比如必须玩完一局游戏、拿起一个杯子,而RLHF在有了RM后可以快速拿到奖励

  2. 确定性的环境:传统RL中,环境也是变化的,同一个场景+动作可能拿到不同奖励,而在语言模型中,给定上下文和当前结果,下一步的状态也是确定的,RM打分也是确定的

上面两点在传统RL中会造成学习不稳定的问题,因此PPO使用了Actor-Critic网络,即引入一个「助教」来给模型的每一步打分,而作者认为在语言模型上可以省去。

cc6e9a1f6f7d4725d6991b47ef5075a3.png
ReMax

因此,作者提出用强化中的REINFORCE算法来代替PPO,去掉了Critic模型,但作者在实验中同样发现了梯度方差较大优化不稳定的问题,于是增加了一项bias来降低方差,命名为ReMax算法。

由于资源受限,作者没跑通7B的PPO实验,只对比了1.3B的ReMax和PPO,效果显示ReMax更好一些:

7dcaba854a5e645156fee110c78fffc0.png
ReMax效果

除了效果提升之外,由于去掉了一个要训练的模型,在显存占用和训练速度上都有提升。

Offline RL: Decision Transformer

上面我们说的PPO、REINFORCE都是Online RL,需要一个虚拟环境,通过互动拿到奖励,再进行学习。相对的,Offline RL是指直接拿之前和环境互动的数据来学习。

Aligning Language Models with Offline Reinforcement Learning from Human Feedback

这篇是英伟达在2023.08提出的工作,探索了MLE、用reward做回归、DT(Decision Transformer)三种离线强化算法,最终发现DT的效果更好。

Decision Transformer是一个2021 RL Transformer的开山之作,但NLPer一看就懂:

55e3568db130e1ce58958c176bb7c725.png
Decision Transformer

它的核心思想是把奖励、状态作为输入,让模型预测动作,从而建模三者之间的关系。比如模型训练时见过1分的答案,也见过5分的,那预测时直接输入<reward>5.0让它给出最好的结果。

这样训下来效果居然还不错,也超过了PPO:

47aa44a7c0468f58579c722821dbb3f3.png
DT效果

SteerLM: Attribute Conditioned SFT as an (User-Steerable) Alternative to RLHF

没想到的是,英伟达不同团队在2023.10月又推出了一篇SteerLM的工作,与DT的思想类似,但会把奖励分为不同维度,比如质量、帮助性等等。

ce60948c6b77d9a4bce1c3c3702465af.png
SteerLM

具体做法:

  1. 通过人工标注的各个维度打分,训练一个打分模型

  2. 用打分模型对更多数据打分

  3. 精调一个SFT模型,可以做到输入prompt、目标分数,输出符合分数的结果

  4. 用第三步的模型生产更多答案,再打分,如此循环

最终的效果也是好于RLHF(PPO哭晕在厕所):

5b1bf4e731aed57877ce79bec24c03d8.png
SteerLM效果

总结

以上就是我最近关注的RLHF平替方法,虽然可走的路很多,但很难有一个可靠且全面的效果对比,毕竟RLHF本身就难训不稳定,几百条数据下波动几个点很正常,而且无论是自动测评还是人工测评都会带有bias。

但对于资源有限的团队来说,平替方案不失为一种选择。

参考资料

[1]

Contrastive Post-training Large Language Models on Data Curriculum: https://arxiv.org/abs/2310.02263

[2]

Statistical rejection sampling improves preference optimization: https://arxiv.org/pdf/2309.06657.pdf

[3]

理解Rejection Sampling: https://gaolei786.github.io/statistics/reject.html

[4]

RAFT: Reward rAnked FineTuning for Generative Foundation Model Alignment: https://arxiv.org/abs/2304.06767

[5]

PPO: https://arxiv.org/pdf/1707.06347.pdf

a0022f25eab886b2218d09c47b40e3cf.jpeg


我是朋克又极客的AI算法小姐姐rumor

北航本硕,NLP算法工程师,谷歌开发者专家

欢迎关注我,带你学习带你肝

一起在人工智能时代旋转跳跃眨巴眼

「彩蛋:你能找到几个同厂不同组的相近工作7f32338193390ffe0eb48641d0dfcda5.png07cddb428b6187bb73e1651d114ed08d.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/195736.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电压跟随器

电压跟随器即输入多大电压就输出多大的电压&#xff0c;那其起什么作用呢&#xff0c;直接用导线不行吗&#xff1f; 下图为Multisim软件仿真结果&#xff0c;很明显输入电压6.5V输出电压使用万用表测得同为6.5V&#xff0c;验证了电压跟随器的作用。 在同相放大电路的基础上&a…

快速入门ESP32——开发环境配置PlatformIO IDE

相关文章 快速入门ESP32——开发环境配置Arduino IDE 快速入门ESP32——开发环境配置PlatformIO IDE 一、下载安装二、验证 一、下载安装 下载安装 vscode 安装PlatformIO插件 创建工程 二、验证 写一个简单的函数来验证一下功能 void setup() {// put your setup cod…

DevExpress WinForms HeatMap组件,一个高度可自定义热图控件!

通过DevExpress WinForms可以为Windows Forms桌面平台提供的高度可定制的热图UI组件&#xff0c;体验DevExpress的不同之处。 DevExpress WinForms有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。同时能完美构建流畅、美观且易于使用的应用程…

JVM类加载机制详解

JVM类加载运行全过程 运行Math类的main函数&#xff0c;启动程序时&#xff0c;首先需要通过类加载器把类加载到JVM。 package com.cold;public class Math {public int compute() {int a 1;int b 2;int c (a b) * 10;return c;}public static void main(String[] args) …

vue2 tinymce富文本插件

一、介绍 TinyMCE是一款易用、且功能强大的所见即所得的富文本编辑器。同类程序有&#xff1a;UEditor、Kindeditor、Simditor、CKEditor、wangEditor、Suneditor、froala等等。 TinyMCE的优势&#xff1a; 开源可商用&#xff0c;基于LGPL2.1插件丰富&#xff0c;自带插件基…

4核8G服务器价格选择轻量还是CVM合适?

腾讯云服务器4核8G配置优惠价格表&#xff0c;轻量应用服务器和CVM云服务器均有活动&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;轻量应用服务器4核8G12M带宽一年446元、529元15个月&#xff0c;腾讯云百科txybk.com分…

【论文解读】CP-SLAM: Collaborative Neural Point-based SLAM System_神经点云协同SLAM系统(下)

目录 4 CP-SLAM实验 4.1 两个智能体协作&#xff08; Two-agent Collaboration&#xff09; 4.2 单智能体回环&#xff08;Single Agent with Loop&#xff09; 4.3 地图构建&#xff08;Map Reconstruction&#xff09; 4.4 消融实验 姿态图优化&#xff08;Pose Graph …

JUC工具类_CyclicBarrier与CountDownLatch

最近被问到CyclicBarrier和CountDownLatch相关的面试题&#xff0c;CountDownLatch平时工作中经常用到&#xff0c;但是CyclicBarrier没有用过&#xff0c;一时答不上来&#xff0c;因此简单总结记录一下 1.什么是CyclicBarrier&#xff1f; 1.1 概念 CyclicBarrier&#xff…

简单漂亮的首页

效果图 说明 这个首页我也是构思了很久&#xff0c;才想出这个界面&#xff0c;大家喜欢的话&#xff0c;可以拿走去使用 技术的话&#xff0c;采用的就是vue的语法&#xff0c;但是不影响&#xff0c;很多样式我都是直接手敲出来的 代码实现 标语 <!-- 标语 start-->&…

hive sql 取当周周一 str_to_date(DATE_FORMAT(biz_date, ‘%Y%v‘), ‘%Y%v‘)

select str_to_date(DATE_FORMAT(biz_date, %Y%v), %Y%v)方法拆解 select DATE_FORMAT(now(), %Y%v), str_to_date(202346, %Y%v)

【7】Spring Boot 3 集成组件:缓存组件 spring cache + spring data redis

目录 【7】Spring Boot 3 集成组件&#xff1a;缓存组件 spring cache spring data redis什么是缓存抽象声明式注解JSR-107对应SpEL上下文数据 引入依赖cache 支持的缓存类型缓存类型配置NONESIMPLEREDIS自定义配置 CAFFEINE Hazelcast...总结 个人主页: 【⭐️个人主页】 需要…

01Urllib

1.什么是互联网爬虫&#xff1f; 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那一台计算机上的数据便是蜘蛛网上的一个猎物&#xff0c;而爬虫程序就是一只小蜘蛛&#xff0c;沿着蜘蛛网抓取自己想要的数据 解释1&#xff1a;通过一个程序&#xff0c;根据Url(http://www.…

DMA原理和应用

目录 1.什么是DMA 2.DMA的意义 3.DMA搬运的数据和方式 4.DMA 控制器和通道 5.DMA通道的优先级 6.DMA传输方式 7.DMA应用 实验一: 内存到内存搬运 CubeMX配置&#xff1a; ​编辑用到的库函数&#xff1a; 代码实现思路&#xff1a; 实验二: 内存到外设搬运 CubeMX…

一文看分布式锁

为什么会存在分布式锁&#xff1f; 经典场景-扣库存&#xff0c;多人去同时购买一件商品&#xff0c;首先会查询判断是否有剩余&#xff0c;如果有进行购买并扣减库存&#xff0c;没有提示库存不足。假如现在仅存有一件商品&#xff0c;3人同时购买&#xff0c;三个线程同时执…

MySQL内部组件与日志详解

MySQL的内部组件结构 MySQL 可以分为 Server 层和存储引擎层两部分。 Server 层主要包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&am…

Linux网络之传输层协议tcp/udp

文章目录 目录 一、再谈端口号 1.端口号划分 2.知名端口号 3.netstat&#xff0c;pidof 二、UDP协议 1.udp协议格式 2.udp特点 3.基于udp的应用层协议 三、TCP协议 1.tcp报头 确认应答机制&#xff08;ACK) 超时重传机制 连接管理机制&#xff08;三次握手四次挥…

Java JVM虚拟机

加载字节码文件.class 1字节一般为8位 字节码结构: 第一部分 4字节 cafebaby 第二部分 版本号 00 00 00 32, 第三部分 常量数量 count 第四部分常量池 常量类型表示: 继承关系改变 1.1以后 后面是属性方法 等参数 通过javap 反编译class ,javap xx.class javap -c xxx.…

php中RESTful API使用

1、RESTful AP是什么 RESTful API是一种软件架构风格 RESTful API基于HTTP协议&#xff0c;并遵循一系列约定和原则。它的设计理念是将资源&#xff08;Resource&#xff09;作为核心概念&#xff0c;并通过一组统一的接口对资源进行操作。API的资源通常通过URL进行标识&…

​软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第11章 未来信息综合技术&#xff08;P384~P419&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

SpringEvent事件通知机制

“Spring Event” 是 Spring 框架通过事件驱动的编程模型来处理应用程序中的事件。开发者可以定义自己的事件&#xff0c;然后在应用程序中触发这些事件。Spring 框架提供了用于发布和监听事件的机制&#xff0c;以实现松散耦合的组件间通信。 有两个核心组件&#xff1a; 事…