小白也能看懂的RLHF:基础篇

原文: https://mp.weixin.qq.com/s/4_6CBXMJhqmiYKSzsAXncg

人类反馈强化学习(Reinforcement Learning from Human Feedback,RLHF)是释放大语言模型(LLM)巨大潜力的关键,OpenAI在2020年发布的GPT-3模型无疑是最好的证明。时隔两年,OpenAI再次发布经过RLHF训练后的LLM——ChatGPT,一夜爆火、吸引大量用户关注,并树立了对话式人工智能新标杆的。

在RLHF之前,LLM训练过程通常包括预训练阶段和微调两个阶段,前者是学习语言的一般规律,后者可以让模型学会完成特定任务。如果你想解决各类NLP任务的话,直接让GPT-3帮你完成就行,但是OpenAI需要的是一个符合人类价值观、偏好和期望的对话式人工智能。OpenAI官方也有相应的声明,

"Our goal is to advance digital intelligence in the way that is most likely to benefit humanity as a whole." - OpenAI Founding Statement (Dec. 2015)

于是,作为LLM训练的第三阶段RLHF,通过引入人类反馈实现最初的伟大目标。简单说,人类评估者会对模型的输出进行评分或排序反馈,根据反馈结果更新模型参数。

一、为什么RLHF对LLM这么重要?

下面从两个角度讨论RLHF对LLM的重要性

  • 传统监督微调方法的局限性
  • LLM微调新范式

1.1 传统监督微调方法的局限性

这种方法就像给LLM一本固定的习题集,让LLM按照标准答案学习,但这个习题集依赖于静态数据集,在范围、语境和多样性上较为有限,更为关键的是,无法在模型中融入人类价值观、伦理道德或社会规则等。

还有一点,在处理主观判断或模糊性的任务时——不同用户对答案会有不同的预期,比如问模式"周末去哪里玩合适?",有人可能喜欢热闹的地方,也有喜欢清静点的场所,但传统微调方法在这里会显得力不从心,只盯着习题集里的标准答案来回答,而RLHF可以有效解决这些问题。

1.2 LLM微调新范式

RLHF的核心原理将人类反馈直接融入训练中,使模型能更好地与人类的价值观、偏好保持一致。传统方法是对着固定的习题集"死学",现在是边学遍有人类导师指导,根据导师的指导方向调整模型参数。这样,模型在与人类对话时,更容易领会各种弯弯绕绕、言外之意。

看到这里可能有人会问,既然要符合人的偏好,那直接做一本人类偏好习题集,让AI照着学不就行了?为啥非要搞RLHF这么复杂?咱们举个例子说明下。

假设我们需要训练一个内容摘要模型,目标是把长文章浓缩成简短、有用的摘要。按照传统监督微调方法,需要准备大批<长文章,标准摘要>这样的配对材料作为训练数据,以监督学习的方式对LLM进行训练即可。

实际情况要复杂的多,对于同一篇文章,不同的人可能会给出同样优秀,但表达方式或语言风格差异较大的摘要。以一篇电影影评为例,有人关心剧情走向,摘要就会侧重故事线;有人在意演员表现,摘要就得突出演技评价。

到这里想必大家明白了,传统的训练方法确实能完成写摘要的任务,但没有把握语言的微妙平衡——怎么在不丢失关键信息的前提下,写出符合当前用户需求的摘要。

RLHF的精妙之处:不依赖习题集中的标准答案,而是先让LLM先写几个摘要,然后人类反馈哪个更符合当前需求,比如用户明确说要给老人看的新闻摘要, LLM写了两个版本,一个全是专业术语,一个口语化、通俗易懂,老人会反馈第二个更好。LLM在收到反馈后,就明白以后碰到类似需求该如何回答,这种能够精准遵从人类指令的能力,是RLHF的独特优势。

image

上图中,每个示例都包含长文本输入、两个备选摘要、一个标签(用于指示人类更倾向于哪个摘要)。通过直接将人类偏好以标签形式传递给模型,确保其与人类判断保持一致。

二、RLHF训练过程

RLHF 流程包括三个步骤:

  • 收集人类反馈。
  • 训练奖励模型。
  • 使用奖励模型对大语言模型进行微调。

其中,实现流程最后一步的算法是近端策略优化(PPO)。

image

2.1 收集人类反馈

RLHF的第一步是收集偏好数据集。通常情况下,数据集中的每个样本都包含一个提示词、LLM对该提示生成的两个不同回答、偏好标签,偏好标签用以标记两个回答中,哪一个是人类评估者认为更优的。

数据集的具体格式会有所差异,但不影响整体功能。图1数据集的每个样本包含四个字段:Input text, Summary 1, Summary 2, and Preference。而 Anthropic的hh-rlhf 数据集则采用了另一种格式:两列分别记录了人类与LLM对话中被选中和被拒绝的版本,其中提示词内容在两种版本下是相同的。

image

无论人类偏好数据采用何种格式,数据所要表达的信息都是一样的:不管两个答案是什么情况,都很完美、都比较差、或者一个好一个差,人们都只会倾向于其中一个,这完全取决于用户个人的偏好。

你可能会有疑问,为什么要让标注者只对两个选项进行排序,而不是直接给所有答案打个分数?让模型直接拟合对应的分数不就行了嘛?主要问题在人的主观性,不同的人好坏的标准不一样,比如A标准者认为3分已经是高分了,B标注者认为5分才能是好的回答, 甚至同一位标注者对同一问题在不同示例上打分,都难以比较。

那么,标注者究竟是如何决定哪个答案更好的呢?这一点可以说是RLHF方法中最关键的地方。标注者会收到明确的指示,详细说明评估的具体流程。

以图4为例,这是OpenAI的标记器,用于为InstructGPT创建训练数据的UI屏幕截图,标注人员可以从中对模型结果给出从1到7的打分,标准者标签间一致性约为73%,就是说如果他们要求10个人对2个答案进行排名,其中7人会同样的结果。这个过程也正是RLHF所要对齐的人类价值观——这些价值观恰恰蕴含在具体的指令之中。

image

从图4也能看出,实际训练过程中,需要标注人员对同一问题的多个回答进行排序。比如,面对A、B、C三种不同的回复,标注者需要从中选出最符合要求的那个。假设人类标注员的排名如下,其中1为最佳,3为最差:

A – 2

B – 1

C – 3

根据上述排序,我们可以组成三对<获胜响应、失败响应>数据,作为训练样本:

获胜响应 失败响应
B A
A C
B C

2.2 训练奖励模型

现在偏好数据集已经准备好了,我们可以用它来训练奖励模型(reward model, RM)。

image

奖励模型一般也是大规模语言模型,在训练过程中,RM会从偏好数据集中接收三个输入:提示词、获胜回复和失败回复,并为每种回复生成两个称为奖励的输出。

RM模型的训练目标是最大化获胜响应与失败响应之间的奖励差异,可以采用两种奖励之间的交叉熵损失作为损失函数。

通过这种训练方式,RM模型能够区分更受青睐和不太受欢迎的响应,随着模型不断训练,它将越来越擅长预测人类评估者更偏好的响应。

完成RM训练后,奖励模型将作为一个简单的回归器,用于预测给定<提示词,响应>对的奖励值。

image

2.3 使用奖励模型对大语言模型进行微调

这部分是RLHF的第三阶段,即微调阶段,也是强化学习真正大显身手的地方。

和RM训练阶段的偏好数据不同,微调阶段的训练数据仅包含提示词,通过微调,模型学会针对这些提示生成一致且恰当的响应。

具体而言,微调的目标是训练大语言模型,使其能够生成最大化奖励模型所给出奖励的完成内容。

image

上图展示了RLHF微调的全过程,首先,将训练集中的一个提示传递给待微调的模型,并生成响应内容。接着,该提示、模型响应内容被送入奖励模型,由奖励模型预测奖励值。随后,奖励值被输入到PPO优化算法中,PPO算法会调整模型的权重,使其朝着RM预测值更大的方向优化。

三、PPO算法

RLHF最受欢迎的优化器之一是近端策略优化算法,简称 PPO(Proximal Policy Optimization)。关于底层原理可以参考之前的文章小白也能看懂的RL-PPO

这篇文章主要是从直觉的角度,介绍PPO是如何在RLHF中发挥作用的。我们知道,强化学习的目标是让智能体(agent)与环境(environment)不断交互,学习任意环境状态下的最优行为策略(policy),这里的策略指智能体的 "行为习惯" 或 "决策逻辑"。对应到 RLHF 领域,策略正是需要训练的大型语言模型,负责决定生成响应时应选择哪些tokens。因此,策略优化实际上就是对LLM的权重参数进行优化。

至于近端,它体现了 PPO 算法的核心思想:在训练过程中,只对策略做出小而可控的调整,这种方式可以有效避免传统策略梯度方法中常见的问题,即对模型参数的大幅更新有时会导致性能显著下降。

3.1 PPO的内部机制

一个算法最核心的部分在损失函数的定义,PPO损失函数由三部分组成:

  • 策略损失:优化大语言模型参数时的主要目标,直接告诉模型怎么做才能得到更高的RM激励分
  • 价值损失:训练价值函数,估算从当前状态出发未来的奖励。通过价值函数,我们能够计算出优势项,用于更新策略。为策略损失提供了准确的优势评估依据,让策略调整不盲目。
  • 熵损失一个 平衡器”或 安全栓,确保模型在追求高分和精准预测的同时,不会过于死板或过于疯狂,生成出既高质量又富有多样性的回答,确保新旧模型响应的概率分布差异不要那么大。

PPO 的总损失可以表示为:

\(L_{ppo} = L_{policy} + \alpha L_{value} + \beta L_{entropy}\)

我们用通俗的语言解释一下这PPO算法中非常重要的三个损失函数。

你可以把模型想象成一个正在接受训练的厨师,它的目标是做出一道美味的菜(生成符合人类偏好的回答)。

策略损失

核心目标是学会做一道受客户喜爱的菜,就像每次吃完饭,厨师会问你对这次用餐的评价,你会给厨师一个明确的反馈:这道菜里,加点糖是个好主意,下次可以多加点;但盐放多了,下次要少放。这就是策略损失函数的作用。

怎么理解:

  • 优势项:客户吃完菜后,给厨师每一步操作的明确反馈。比如厨师做菜时选择加糖这个行为(对应模型生成某个token),客户最终给这道菜打了高分,加糖这个动作带来的效果,比厨师平时做菜的更受客户认可,这个更受喜爱就是优势项。

  • 损失函数:策略损失函数拿着这些优势反馈,去调整厨师下次做菜的行为。它会鼓励厨师多做那些 优势值为正的动作(多加糖),少做甚至不做那些优势值为负的动作(少放盐)。

  • 最终效果:让厨师(模型)在每一步选择时,都更倾向于选择能让最终菜品(模型的整个回答)获得更高评价的烹饪步骤(token),随着训练次数的增加,厨师做的菜(模型生成的内容)就会越来越符合客户(人类)的偏好。

价值损失

核心目标是训练厨师自己成为一个能准确预判菜品得分的内部评委(RLHF中会有一个单独的价值评估模型),这个评委需要在做菜的每一步都能估计出:按照我现在这个做法,这道菜最后大概能得多少分?

怎么理解

  • 实际累计激励:客户用完餐之后,对厨师做菜品的最终真实打分,在实际训练过程中,会结合奖励模型和价值评估模型给出。

  • 价值评估模型: 这是厨师在做菜过程中,每一步在心里默默给这道菜打的预测分

  • 损失函数:价值损失函数会计算厨师的预测分客户的真实分之间的差距。如果差距很大(比如厨师以为能90分,结果客户给了60分),损失就很大,价值评估模型训练的目标就是不断减小这个差距。

  • 最终目的: 让厨师(模型)在烹饪过程中的每一步,都能对最终结果有一个非常精准的预判能力。这个能力对于策略损失函数的有效学习至关重要。

熵损失

熵损失的作用就像是给厨师一个提醒:做菜可以尝试新花样,不要每天都做一模一样的番茄炒蛋,那样太无聊了(模型响应缺乏多样性)。但也别瞎创新,比如在甜品里放臭豆腐,那就太离谱了(偏离旧模型的轨道)。

怎么防止厨师瞎创新呢?先把厨师刚学手艺时的基础版本冻起来(初始冻结模型,旧模型),这个版本懂基本做菜逻辑,不会瞎来。

每次训练中的厨师做完菜,就让基础版厨师用同样食材(相同提示词)也做一道。然后对比两道菜(对应新旧模型)的差别——这个差别可以用KL 散度(Kullback-Leibler Divergence )。

如果训练中厨师做的菜和基础版差太远(对应新旧模型),KL 散度就大,我们就扣它分(奖励惩罚)。最后算总得分时,要把这个惩罚加上,原本靠瞎创新得到的分,扣完就没优势了。

这样厨师既想拿高分,又不敢偏离基础手艺乱创新,只能乖乖按客户真正的需求做菜,不会再瞎创新。

image

总下一下全文内容,RLHF的核心价值就是让模型更懂人类喜好、更符合人类价值观,主要分三步走:收集人类对模型回答的反馈、训练一个打分模型、微调原语言模型。微调时用到的核心算法是 PPO,结合了 KL 散度约束模型输出,避免模型为了拿高分瞎创新、偏离原本的基础逻辑,确保它既贴合人类偏好又不跑偏。

本文是RL系列内容的第二篇,从直觉的层面阐述了RLHF,下一篇我们将从更加严谨的理论层面介绍RLHF,敬请期待。

posted @ 2025-11-20 14:48  AI-Frontiers  阅读(44)  评论(0)    收藏  举报