news 2026/9/10 2:28:09

happy-llm 偏好对齐指南:从强化学习原理到 RLHF 奖励模型构建

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
happy-llm 偏好对齐指南:从强化学习原理到 RLHF 奖励模型构建

happy-llm 偏好对齐指南:从强化学习原理到 RLHF 奖励模型构建

【免费下载链接】happy-llm📚 从零开始构建大模型项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm

导读:本文是 happy-llm 开源仓库第六章的进阶补充专题,围绕"通过强化学习进行偏好对齐"展开。你将完整掌握强化学习(RL)的核心概念与数学目标,理解为何在指令微调(SFT)之后还需要训练奖励模型(Reward Model),并学会按照 RLHF(Reinforcement Learning from Human Feedback)的标准流程构建"chosen / rejected"偏好数据集、借助 TRL 框架训练奖励模型,为后续开展 DPO、PPO 等后训练实验打下基础。

6.4.0 前置知识:为什么 SFT 之后还需要偏好对齐

大语言模型(如 Llama 系列、Qwen 系列)经过预训练后已经具备强大的文本理解和生成能力,但预训练模型并不总能直接满足特定业务需求和人类价值观。因此,业界通常先对预训练模型进行指令微调(Instruction Tuning),即向模型提供特定的指令(prompts)和示例,使其在对话、问答、文本生成等任务中表现得更符合人类期望。

在 happy-llm 仓库中,这一步的完整实践对应 第六章正文 的 6.2 节,配套脚本为 docs/chapter6/code/finetune.py。从该脚本可以看到指令微调的核心机制:

  • 使用<|im_start|>human/<|im_start|>assistant等角色标识符组织多轮对话;
  • labels中通过IGNORE_TOKEN_ID屏蔽 user 侧文本,只对 assistant 侧回答计算损失;
  • 通过Trainer+TrainingArguments完成标准的交叉熵式有监督训练。

但指令微调只解决"回答格式与大致内容正确"的问题。我们还希望模型的回答不仅能正确,还能最大程度上满足人类的审美、价值观和安全标准——这正是偏好对齐(Preference Alignment)要解决的问题,也是本文的核心主题。

6.4.1 强化学习的基本原理

从行为心理学到计算强化学习

在进入强化学习的细节之前,先看看它的起源。强化学习(Reinforcement Learning,简称 RL)其实并不是什么新鲜事物,它的理论基础可以追溯到 20 世纪初的行为心理学,尤其是 Edward Thorndike 和 B.F. Skinner 对动物学习的研究。Thorndike 提出了"效果律":如果一个行为带来积极的结果,那么这种行为重复发生的概率会增加。Skinner 则进一步发展了这一思想,提出操作性条件作用学说,通过奖励和惩罚来塑造行为。

计算机科学领域的强化学习正是从这些心理学原理中生发出来的。20 世纪 80 年代,随着计算能力提升和数学理论发展,人们开始尝试将生物心理学的学习概念应用于机器和计算机程序,从而发展出现代意义上的强化学习。

核心要素

在强化学习中,以下五个要素构成了最基本的框架:

  • 状态(State):系统在某一时刻的具体状况。比如棋盘游戏中,状态可以表示棋盘上所有棋子的当前排列情况;对自动驾驶汽车来说,状态可能包括汽车的速度、位置以及周围障碍物的位置等。
  • 动作(Action):智能体在给定状态下可执行的操作。以自行车为例,动作可能包括前进、停止、转弯等。在复杂系统中,动作集可以非常庞大。
  • 奖励(Reward):智能体执行某个动作后获得的反馈,通常是一个数值。奖励可以是立即的,也可以是延后的;好的动作获得正奖励,不好的动作获得负奖励。
  • 策略(Policy):一套指导智能体如何选择动作的规则,即告诉智能体在每个状态下应该做什么。
  • 价值函数(Value Function):对策略的评估工具,用于预测从当前状态出发、长期来看能够获得的总奖励,帮助智能体权衡短期与长期的收益。
  • 模型(Model):在部分强化学习系统中,我们会建立一个环境模型,帮助智能体预见其动作的结果,这在许多复杂计算场景下非常有用。

这些元素共同作用,帮助智能体通过在虚拟环境中不断试错来学习最佳行动策略:

智能体与环境的交互循环

在强化学习中,智能体是学习和决策的主体,它通过以下步骤与环境交互:

  1. 观察状态:智能体首先观察当前的状态(State)。
  2. 选择动作:根据观察到的状态和预先确定的策略,智能体选择一个动作(Action)。
  3. 执行动作:智能体执行所选的动作。
  4. 接收奖励和新状态:执行动作后,智能体从环境中接收到相应的奖励(Reward)和更新后的新状态(State)。
  5. 更新策略:智能体使用获得的奖励信息来调整策略,以便在未来获得更好的结果。

将这个过程不断重复,智能体在反复交互中不断优化策略,目标是在给定任务中表现得越来越好。上图(仓库 docs/images/6-images/7.1-1.png)直观展示了这一闭环:智能体基于当前状态 $s_t$ 选择动作 $a_t$,环境接收动作后更新状态并返回奖励 $r_t$,如此往复进入下一轮迭代。

6.4.2 强化学习的目标

强化学习的目标十分明确:通过在给定环境中反复试探和学习,使得智能体能够选择一系列动作从而最大化其总累计奖励

可以用玩游戏来类比:玩家的目标是通过一系列操作(走路、跳跃、打怪)来赢得高分或完成关卡;在强化学习中,这种"高分"或"成功通过关卡"的概念就对应于"最大化奖励"。

数学表达

在数学上,这个目标可以表示为训练一个策略 $\pi$,使得在所有状态 $s$ 下,智能体选择的动作能够使回报 $R(\tau)$ 的期望值最大化。具体来说,我们希望最大化以下期望值:

$$ E(R(\tau)){\tau \sim P{\theta}(\tau)} = \sum_{\tau} R(\tau) P_{\theta}(\tau) $$

其中:

  • $E(R(\tau)){\tau \sim P{\theta}(\tau)}$:表示在策略 $P_{\theta}(\tau)$ 下轨迹 $\tau$ 的回报 $R(\tau)$ 的期望值;
  • $R(\tau)$:轨迹 $\tau$ 的回报,即从起始状态到终止状态获得的所有奖励的总和;
  • $\tau$:一条轨迹,即智能体在环境中的状态和动作序列;
  • $P_{\theta}(\tau)$:在参数 $\theta$ 下生成轨迹 $\tau$ 的概率,通常由策略或策略网络确定;
  • $\theta$:策略的参数,控制着策略 $P_{\theta}$ 的行为。

为了找到这个策略,我们使用梯度上升的方法,不断更新策略参数 $\theta$,使得 $E(R(\tau)){\tau \sim P{\theta}(\tau)}$ 不断增大。

适用领域与典型代表

这种学习方式非常有效,因为它不依赖于大量标注数据,而是通过对环境直接进行交互和反馈进行学习。这使得强化学习在机器人控制、自动驾驶、金融交易乃至游戏中都展现出巨大潜力。

在大模型领域,AlphaGo、AlphaZero 等系统正是通过强化学习不断优化策略,最终在围棋、象棋等项目中击败人类顶尖选手。强化学习同样可以用于偏好对齐问题,例如让大模型学习模仿人类的交流方式;它也广泛应用于自动驾驶等领域。未来强化学习的应用场景还会更加广泛。

6.4.3 奖励模型:让偏好可量化

从人类反馈到自动打分

在完成初步的指令微调后,我们还希望模型的回答不仅正确,还能最大程度满足人类的审美、价值观和安全标准。为此引入了RLHF(Reinforcement Learning from Human Feedback,基于人类反馈的强化学习)

在 RLHF 中,我们首先从人类标注者那里获得对模型回答的偏好(例如给出多个模型回答,让人类标注者对它们进行排名),然后通过这些反馈来指导模型学习,从而不断提高模型生成内容与人类偏好的契合度。

为了在 RLHF 流程中自动对模型的回答进行"打分"(赋予奖励),需要构建一个专门的奖励模型(Reward Model)。这个奖励模型会根据人类标注的数据进行训练,并在实际部署中独立对模型输出进行自动评分,从而减少持续人工参与的成本和延迟。

奖励模型在整体管线中的位置

可以这样理解完整的后训练管线:

  1. 预训练:在无标注语料上学习语言能力;
  2. SFT(指令微调):学会按人类指令和对话格式生成内容(对应 docs/chapter6/code/finetune.py 的实践);
  3. 奖励模型训练:用人类偏好数据训练一个自动评分器,替代人工打分;
  4. 强化学习优化:以奖励模型的分数作为奖励信号,通过强化学习(如 PPO、DPO 等算法)进一步优化策略模型。

其中奖励模型是承上启下的关键组件——它将模糊的"人类喜好"转化为可优化的数值信号。

6.4.4 偏好数据集构建

在构建奖励模型之前,首先需要准备高质量的人类反馈数据集。此数据集的核心目标是为每条给定的提示(prompt)提供多个候选回答(completion),并由人类标注者对这些回答进行细致的评定与排序。通过对回答的对比和筛选,我们可以为机器模型提供明确的参考标准,帮助其学习在给定任务下如何生成更符合人类期望的输出。

数据收集三步走

  1. 收集初始回答:首先从一个已经过基本微调的"大模型"(往往是具有一定指令理解和生成能力的预训练模型)中,为一组精心设计的提示生成多条回答,这些回答将作为后续人类标注工作的基础。

  2. 人工标注与评估:拥有多条候选回答后,邀请专业标注人员或众包标注者对每条回答的质量进行评价。评估通常会基于一系列预先设计的评价标准,如回答的准确性、完整性、上下文相关性、语言流畅度以及是否遵循道德与安全准则。对不同回答的比较与排序帮助识别最佳和最差的回答,从而形成有价值的训练数据。

  3. 数据格式化与整理:标注完成后,将数据进行整理与格式化,通常采用 JSON、CSV 或其他便于计算机处理的结构化数据格式。数据集中需明确标识每个问题(prompt)、其对应的多个回答(completions),以及人类标注者对这些回答的选择(如标记为 "chosen" 的最佳答案与 "rejected" 的较差答案)。这些标记信息可直接作为奖励模型学习的监督信号,使其在训练中自动倾向于生成高质量回答。

数据示例

下面是一个简单的数据示例,展示两个问题(question)及其对应的回答和人类评价结果。通过 "chosen" 与 "rejected" 字段的对比,可以直观看出哪条回答更为优质:

[ { "question": "Python中的列表是什么?", "chosen": "Python中的列表是一种有序的可变容器,允许存储多个元素,并且可以通过索引访问。", "rejected": "Python中的列表用于存储数据。" }, { "question": "Python中的元组是什么?", "chosen": "Python中的元组是一种有序的不可变容器,允许存储多个元素,并且一旦创建就不能修改。", "rejected": "Python中的元组用于存储数据。" } ]

在上述示例中,人类标注者认为 "chosen" 字段下的回答相对于对应的 "rejected" 回答在描述、准确性和信息量等方面都更为优质。例如,对于列表的定义,"chosen" 答复更清晰地解释了列表的特征(有序、可变、支持索引访问),而非仅仅停留在"用于存储数据"这种笼统描述。

从 SFT 数据到偏好数据的差异

对比仓库 docs/chapter6/code/finetune.py 中 SFT 数据的conversations多轮对话格式,可以发现偏好数据集的结构差异非常明显:

  • SFT 数据关注"给定指令,标准回答是什么",监督信号是唯一的目标文本
  • 偏好数据关注"多个回答中哪个更好",监督信号是回答之间的相对优劣(chosen vs rejected),这正是奖励模型排序式训练所需的输入形式。

6.4.5 奖励模型训练(基于 TRL 框架)

说明:原文此节编号为 "7.2.2",与本章章节号(6.4)不一致,本文按章节顺序修正为 6.4.5,内容保持一致。

我们可以借助大模型强化学习框架TRL(Transformer Reinforcement Learning)来训练奖励模型。TRL 是一个基于强化学习的训练框架,旨在通过人类反馈指导模型生成更符合人类期望的回答。在 TRL 中,我们会将奖励模型作为一个独立的组件,用于评估模型生成的回答,并根据评估结果给予奖励或惩罚。

奖励模型的核心思想

奖励模型的训练本质上是排序学习(Learning to Rank):输入同一条 prompt 下的两条回答(chosen 与 rejected),模型为两条回答各输出一个标量分数,训练目标就是让 chosen 回答的分数显著高于 rejected 回答的分数。

在 happy-llm 中的实践定位

需要注意的是,当前 happy-llm 仓库第六章的配套代码(docs/chapter6/code)主线覆盖的是预训练(pretrain.py)与指令微调(finetune.py)两部分,环境依赖见 requirements.txt,其中已包含transformersdatasetstorchdeepspeed等训练基础组件。

偏好对齐(RLHF / 奖励模型 / DPO / KTO 等)属于进阶后训练主题,建议的学习路径是:

  1. 先完成第六章正文 6.1~6.3(Pretrain、SFT、PEFT/LoRA)的实践,掌握TrainerTrainingArguments与 DeepSpeed 的用法;
  2. 再按本文内容准备好偏好数据集(chosen / rejected 格式);
  3. 最后在现有训练环境中引入 TRL 框架,将奖励模型作为独立组件接入,即可衔接 PPO、DPO 等偏好优化算法。

小结

本文围绕 happy-llm 仓库第六章的偏好对齐专题,系统梳理了从强化学习原理到 RLHF 奖励模型构建的完整链条:

  • 原理层面:掌握状态、动作、奖励、策略、价值函数五大要素,理解智能体与环境的交互闭环,以及"最大化累计奖励"的数学目标与梯度上升优化思路;
  • 动机层面:理解指令微调(SFT)与偏好对齐的分工,明确奖励模型在 RLHF 管线中的承上启下作用;
  • 数据层面:掌握人类偏好数据集的收集、标注、格式化流程,以及 chosen / rejected 字段的标准 JSON 结构;
  • 训练层面:了解基于 TRL 框架训练奖励模型的定位与后续衔接方式。

仓库第六章的代码资源(docs/chapter6/code)为上述内容提供了 Pretrain 与 SFT 的落地实践基础,偏好对齐可作为掌握训练主线后的进阶方向继续深入。

【免费下载链接】happy-llm📚 从零开始构建大模型项目地址: https://gitcode.com/GitHub_Trending/ha/happy-llm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 2:26:21

SWOT卫星WSE数据驱动的MATLAB瞬时流量计算

简介&#xff1a;本资源是一套基于SWOT卫星遥感观测数据反演瞬时河流流量的MATLAB实现方案&#xff0c;面向计算机、电子信息工程及应用数学等专业的本科生与研究生&#xff0c;适用于课程设计、期末大作业及毕业设计等实践环节。代码兼容MATLAB 2014a/2019a/2021a&#xff0c;…

作者头像 李华
网站建设 2026/9/10 2:26:16

SpringBoot 3.4.x升级踩坑全记录:从JDK17到中间件集成实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/10 2:24:21

滑模变结构控制MATLAB仿真:从建模到抖振抑制全解析

简介&#xff1a;面向控制工程与自动化领域学习者&#xff0c;这份压缩包围绕滑模变结构控制的核心理论与MATLAB实现&#xff0c;汇集了从滑模面设计、切换函数选择到控制律搭建、Simulink仿真分析的完整示例程序&#xff0c;尤其适合正在研读《滑模变结构控制MATLAB仿真&#…

作者头像 李华