卷友们好,我是rumor。
前阵子腾讯AI Lab悄悄挂出了一篇文章:Adversarial Preference Optimization (APO)[1],看到设定我就惊呆了:RLHF+GAN,难道还嫌RLHF本身不够难训吗?但读下来发现作者其实是想解决RLHF一个很重要的问题,而且给出的方法既fancy又优雅。
下面,我们直接有请一作本人程鹏宇大佬来讲一下心路历程🎉。
注:文中有公式,请切换到白色背景查看。
![f9dc14c93978d4e98037442ea4e18e44.png](https://i-blog.csdnimg.cn/blog_migrate/c2a2efd1a770722a8bd6e61a0e6d4733.png)
RLHF辛酸泪
先从RLHF的任务讲起吧,RLHF的全称是 reinforcement learning from human feedback。字面意思就是用RL的方法把大模型训练得更加符合人们的反馈。这里反馈其实就是人们对大模型回复质量的评价。还是蛮主观的一件事,尤其是对一些开放性问题,其实很难讲大模型的回复到底好到什么程度。但是如果对同一个问题给出两个回复,通过对比人们至少能在两个回复里挑出一个更好的,这大概就是所谓的“没有比较就没有伤害”吧。
于是人类反馈数据都长成了一个问题和两个比较过的回复的格式 。因为每次反馈就是从两个回复里挑个更好的,代表了标注人员的偏好,所以RLHF解决的任务也被称为偏好对齐(Human Preference Alignment)。
然而,从两个回复里面挑一个好的,这个事情真的会容易吗?
我们在自己的业务场景试着去对齐了一下大模型,结果在数据标注的环节就被卡到怀疑人生😭。一开始我们想着这个挑回复的事情应该不复杂,想着组织一下实习生们,十几个人每人标一些,数据应该很快就标完了。结果才进行了两天,实习生已经扛不住了,有些甚至想回学校好好学习了。。。
我们表示不能理解,又不用自己写回复,两个里面挑一个不是扫一眼就知道怎么选了吗?于是我们每人亲自上手试着标了一两百条,才真正理解了里面的痛。很多输入文本不是我们想象的一个简单的问题,可能有着很长的一段问题描述,甚至是多轮对话的上下文,有点时候光理解问题就要花好几分钟的时间。然后回复的文本如果差别很大还比较容易区分,如果回复内容接近又很长的话,真是可以在回复的选择中纠结到地老天荒。。。
![94790aba1d128047d176f4a9723eacd1.png](https://i-blog.csdnimg.cn/blog_migrate/0bc71680dd080f721e7f5c65e00e9afa.png)
亲手标过数据之后,我们已经见识到这个人类反馈任务的可怕。更可怕的是,在大模型对齐的过程中还存在样本分布偏移的问题:当大模型经过一段时间迭代后,输出文本分布会产生偏移,但是在新分布下的模型输出并没有进行过偏好标注,这会导致对齐算法的效率大幅下降。
如下图,偏好标注(红色虚线)原本可以覆盖模型的输出分布(左图蓝色曲线),但当模型更新后,样本输出分布(右图绿色曲线)与偏好标注范围产生不一致。
![e67cac0538cf26790635e883b39a8cee.png](https://i-blog.csdnimg.cn/blog_migrate/530b55350d38993089fb646995139e1a.png)
针对分布偏移问题,我们先看看Meta的LLaMA-2文章里是怎么说的:
Llama 2-Chat improvement also shifted the model’s data distribution. Since reward model accuracy can quickly degrade if not exposed to this new sample distribution, i.e., from hyper-specialization (Scialom et al., 2020b), it is important before a new Llama 2-Chat tuning iteration to gather new preference data using the latest Llama 2-Chat iterations. This step helps keep the reward model on-distribution and maintain an accurate reward for the latest model.
这里reward model(RM)是指通过人类反馈学习出来的奖励模型,可以代表人类的偏好,并对模型的回复打分。上面这句话翻译翻译就是大模型迭代之后输出分布会变,所以要让大模型重新生成回复样本,然后在新样本上重新进行人工标注。。。也就是说在一个完整的大模型对齐训练中,我们还要被人类反馈标注反复的蹂躏。。。
![d2aaa63702877c1526f9ad630853f150.png](https://i-blog.csdnimg.cn/blog_migrate/83d586f9c7b3f123643523df91e58d12.png)
解决方案
那有没有什么办法可以减少偏好数据的标注量去提高对齐效率呢?对于这个问题,我们尝试了两个思路:
提高偏好数据的sample efficiency
更高效地构造偏好数据。
第一条路我们作出了几个尝试:
我们借鉴了NLP领域常用的“预训练+领域数据微调”的思路,把公开的各偏好数据集作为“通用偏好数据”对RM先进行预训练,然后在把我们收集的少量“定制化偏好数据”做二阶段微调,通过这种方法提高了定制化偏好数据的sample efficienc。具体细节可以看我们这篇《Everyone Deserves A Reward: Learning Customized Human Preferences》[2]。
![d2693676e5e5ed2e6da49fac38bc84a3.png](https://i-blog.csdnimg.cn/blog_migrate/a03d61ca37dc5762173dc61a2738c2ad.png)
针对偏好数据中的噪声问题(不同的标注人员的标注结果可能不一致,不同的数据集的偏好也可能冲突),我们提出了通过多目标优化的方法让Reward Model学到不同数据集的帕累托最优,缓解数据中的噪声问题。具体细节可以看我们的《On Diversified Preferences for Large Language Model Alignment》[3]。
我们来重点讲讲第二条路,如何更高效地构造偏好数据。
回到LLaMA-2解决LLM分布偏移的话题上,在每次对模型新生成的样本进行标注的过程中,生成新样本其实是很容易实现的,只要不断地用 queries 去调用模型 ,就可以采样多个回复 。
LLaMA的偏好标注方法是让回复 相互之间两两组合,然后再人工标注哪个更好(听着就很痛苦。。。)
我们就在想,有没有办法不用标注就知道哪个回复好呢?这些LLaMA模型生成的回复不能判断,那我们直接拿一个更牛逼的模型,比如GPT-4,直接生成一个碾压LLaMA回复的金标准 ,那不是想都不用想 要比 要好嘛,这样不是就自动把偏好数据生成出来了嘛。
Wait a minute!在这个过程里RM需要用金标准 跟模型输出的 进行对比,而LLM需要不断提升输出 在RM评价下的打分,这个故事怎么那么熟悉似曾相识?GAN内味出来了有木有?LLM充当一个generator,RM充当一个discriminator,开始对抗起来了有木有?马上把公式写出来看看!我们记大模型输出策略为,偏好打分模型为,那么:
这是大模型对齐的目标:
我们先把金标数据加进来,由于跟 无关,不会影响LLM的优化:
然后RM不是要对抗起来嘛,那就 min-max game一下:
在RL优化大模型对齐的时候,为了防止不稳定,需要加正则项约束一下 , 不要跟reference 偏的太远,需要加入KL散度的正则项:
对抗训练也是出了名的不稳定,所以我们也在RM上加一个正则项:
这样一个基于RM和LLM的对抗博弈就构造完成,就叫它Adversarial Preference Optimization (APO) 吧!
这里 是用来限制RM的偏好分布不要和真实的偏好分布差距太大,具体细节可以在我们文章里查看。
再直观解释一下APO的博弈过程:LLM模型 需要不断提高回复质量,使得自己的回复和金标数据之间的得分差距减小,而RM模型 需要不断将LLM回复和金标回复的得分差距拉大。同时两个KL正则项会约束RM和LLM不要对抗得过于离谱。通过这种博弈,RM可以跟随LLM的变化而迭代,模型分布偏移的问题也就得到缓解了。
![39eaf724d34c572be2a08d2fb0f459a8.png](https://i-blog.csdnimg.cn/blog_migrate/ebfa0e9bffae3d41ac47d217cb66f036.png)
具体的算法实现上,我们让RM和LLM交替地进行迭代,流程画在上面的图里:
在LLM迭代步骤中,我们把RM参数固定,那么博弈目标转换为正常的LLM偏好对齐,可以使用PPO、RRHF、DPO、Rejection Sampling等方法求解,详情可以参考rumor姐的《一些RLHF的平替汇总》。流程都是让LLM对训练queries推理出对应回复样本,再用RM对回复进行打分,最后用打分结果来更新LLM。
在RM迭代步骤中,我们把LLM参数固定,让LLM在RM训练queries上推理得到回复样本。然后将生成的回复样本和金标准回复进行组合,得到新的APO偏好数据,用来更新RM。
效果
方法讲的差不多了,那看看APO的实验效果吧。我们在 Helpful&Harmless (HH) 偏好数据集上进行了对齐实验。首先我们把HH训练集里面的queries抽出来,通过调用GPT-4的接口得到一批金标回答。然后我们选择了 rejection sampling 方法作为基线,RM模型选择 LLaMA-7B,LLM的SFT模型选择 Alpaca-7B,进行了三轮对抗迭代。在对抗迭代中,我们尝试了两种RM的更新方式:
From Base
:每一轮都是基于base RM用新的APO对抗数据进行更新,Sequential
:每一轮都是在上一轮RM的checkpoint上用新的APO对抗数据进行训练。
关于RM和LLM表现的实验结果有点多。。我们就画了两个模型表现的图表这样看起来直观一点:
![ad9e727be0a1e58a1ac9252630b9bab7.png](https://i-blog.csdnimg.cn/blog_migrate/c46404f43516e91beb210b03c03dd55a.png)
左侧的图表展示了APO训练后RM的表现变化,纵轴为RM在测试集上的准确率,横轴为模型的校准误差(Calibration Error)。可以看到,通过加入APO训练数据,RM准确率可以一致地获得提升。尤其是通过
Sequential
的方式更新RM(从APO-v1 到 APO-v2seq 再到 APO-v3seq)可以将RM的准确率持续提升。但于此同时RM校准表现会有一定的损失。右侧图表展示了APO训练对大模型对齐的效果增益,纵轴轴为测试RM对LLM回复的平均打分,代表LLM的对齐质量,横轴为对抗迭代的轮数。用
From Base
训练的RM进行APO对抗的结果(红色虚线)可以持续地跟 rejection sampling 基线(蓝色虚线,仅用 Base RM 进行对齐)拉开差距。而Sequential
训练的RM可以在第二轮获得更好的效果,但是在第三轮时效果反而下降,我们推测应该是持续训练轮次太多导致RM overfit的原因。
除此之外我们还让GPT-4对LLM的回复进行了评价。如下图所示,通过APO训练的模型可以相比于RJS基线获得显著提升。
![c907cec0c29a38973f7165db09b0fc74.png](https://i-blog.csdnimg.cn/blog_migrate/a0ef754e87e21dc71746b2e74554f9d3.png)
总结
总结一下,我们在尝过大模型人类反馈标注的痛之后,痛定思痛,想到一种自动构造偏好数据的方法,随后在这个思路上延伸出了一个RM和LLM对抗博弈对齐方法APO。
APO可以在不增加标注数据量的前提下通过对抗进一步增强RM和LLM的表现,同时缓解LLM的样本分布偏移问题。作为一种通用的训练框架,APO也可以跟一众对齐方法(RLHF,RRHF,DPO等)兼容,可以进一步提升这些对齐方法的效果。
然而大模型对齐的方向道阻且长,希望我们这一点小小的心路分享可以抛砖引玉,期待看到卷友们更多的fancy ideas来更高效地对齐大模型!
参考资料
[1]
Adversarial Preference Optimization: https://arxiv.org/abs/2311.08045
[2]Everyone Deserves A Reward: Learning Customized Human Preferences: https://arxiv.org/abs/2309.03126
[3]On Diversified Preferences for Large Language Model Alignment: https://arxiv.org/pdf/2312.07401.pdf
我是朋克又极客的AI算法小姐姐rumor
北航本硕,NLP算法工程师,谷歌开发者专家
欢迎关注我,带你学习带你肝
一起在人工智能时代旋转跳跃眨巴眼
「妙啊」