news 2026/4/12 13:02:00

【Datawhale学习笔记】RLHF微调技术及实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Datawhale学习笔记】RLHF微调技术及实践

RLHF 技术详解

有监督微调(Supervised Fine-tuning, SFT):即用成对的“(指令, 回答)”数据来训练模型
SFT 的局限性:

  • 缺乏泛化能力:模型只能很好地响应数据集中出现过的指令模式,无法覆盖用户千奇百怪的真实意图。
  • “对齐”不足:模型的回答可能在事实上正确,但在风格、语气、安全性或有用性上,并不符合人类的期望。它只知道“正确答案”,却不知道“更好的答案”。

SFT 与 RLHF 在核心理念与实现方式上的关键差异

对比维度监督微调 (SFT)人类反馈强化学习 (RLHF)
核心目标模仿正确答案(指令遵循)对齐人类偏好(有用/无害/诚实)
数据需求高质量的 (指令, 回答) 对提示词 (Prompt) + 偏好排序/评分
学习方式填鸭式教学(拟合分布)探索式学习(试错与反馈)
优化信号Token 级预测概率(交叉熵)整句生成质量评分(标量奖励)
泛化能力局限于训练数据分布可泛化到未见过的复杂指令

通往对齐模型的三大阶段

  1. 基础模型预训练
  2. 有监督指令微调
  3. 基于人类反馈的强化学习

RLHF 的形式化定义

在 RLHF 框架中,将 Token 生成过程建模为 “片段的(Episodic)马尔可夫决策过程(MDP)” 是连接 NLP 与 RL 的核心桥梁。这个“片段”特指“从接收用户提示到生成完整输出”的单次生成任务。

  • 状态 (State,s t s_tst):当前已生成的上下文,包括用户提示x xx和已生成的 Token 序列y < t y_{<t}y<t。即s t = ( x , y 1 , . . . , y t − 1 ) s_t = (x, y_1, ..., y_{t-1})st=(x,y1,...,yt1)
  • 动作 (Action,a t a_tat):模型在当前时间步生成的下一个 Tokeny t y_tyt
  • 策略 (Policy,π θ \pi_\thetaπθ):即我们的大语言模型。π ( a t ∣ s t ) \pi(a_t|s_t)π(atst)对应模型在当前上下文下预测下一个 Token 的概率分布。
  • 奖励 (Reward,R RR):通常在整个回答生成完毕(Episode 结束)后,由奖励模型给予一个标量反馈R ( x , y ) R(x, y)R(x,y)。中间步骤的奖励通常为 0。

在这个定义下,RLHF 的目标就是寻找一个最优策略π θ \pi_\thetaπθ,使得生成的完整序列期望奖励最大化:

max ⁡ π E x ∼ D , y ∼ π ( ⋅ ∣ x ) [ R ( x , y ) ] \max_\pi \mathbb{E}_{x \sim \mathcal{D}, y \sim \pi(\cdot|x)} [R(x, y)]πmaxExD,yπ(x)[R(x,y)]

理解了这一形式化定义,我们就能明白为什么 PPO 等算法可以通过试错(Sampling)和反馈(Reward)来调整模型参数,从而让模型生成的“轨迹”(文本)更符合人类偏好。

RLHF 的核心步骤

  1. 首先通过有监督微调得到初始策略模型;
  2. 收集人类偏好数据训练一个奖励模型;
  3. 使用奖励模型作为信号,通过强化学习算法(如 PPO)进一步优化策略模型。

RLHF三步法示意图

LLaMA-Factory RLHF(DPO)实战

LLaMA-Factory 简介

LLaMA-Factory 是一个简洁高效的大型语言模型(Large Language Model)训练与微调平台,旨在让开发者能够“零代码”地完成大模型的定制化训练。

LLaMA-Factory特点

  • 广泛的模型支持:支持业界主流的开源模型,如 LLaMA、Qwen(通义千问)、Baichuan(百川)、ChatGLM、Mistral、Yi 等。
  • 全流程覆盖:涵盖了从 预训练(Pre-Training)、指令监督微调(SFT) 到 RLHF(包含奖励模型建模、PPO、DPO、KTO、ORPO 等)的完整训练阶段。
  • 高效的微调技术:内置了 LoRA、QLoRA、DoRA、GaLore 等多种参数高效微调(PEFT)方法,大幅降低了显存需求。
  • 易用的交互界面:提供名为 LLaMA-Board 的 Web UI 界面,通过可视化操作即可配置训练参数、监控训练进度以及进行模型对话测试。
  • 硬件友好:支持 DeepSpeed、FlashAttention 等加速技术,并支持 4-bit/8-bit 量化训练,使得普通消费级显卡也能运行大模型训练。

环境搭建

conda create -n peftpython=3.11-ygitclone https://github.com/hiyouga/LLaMA-Factory.gitcdLLaMA-Factory# 激活环境conda activate peft# 安装依赖pipinstall-e .[metrics]# 验证安装llamafactory-cli version

输出结果

---------------------------------------------------------- | Welcome to LLaMA Factory, version 0.9.5.dev0 | | | | Project page: https://github.com/hiyouga/LLaMA-Factory | ----------------------------------------------------------

启动 Web UI 界面

llamafactory-cli webui

启动后的输出

Visit http://ip:port for Web UI, e.g., http://127.0.0.1:7860 * Running on local URL: http://0.0.0.0:7860 * To create a public link, set `share=True` in `launch()`.

访问http://localhost:7860.主界面如下:

DPO 训练准备

配置模型

下拉框中选择Qwen2.5-0.5B-Instruct(聊天 / 指令版本)并设置下载源。默认为 Hugging Face,如果遇到网络问题,可以切换为ModelScopeOpenMind进行下载

配置微调参数

微调方法:保持默认的 lora。
量化配置:对于显存较小的设备,可以选择将 Quantization bit 设置为 8 或 4,启用量化训练(QLoRA)。如果显存充足或希望获得更好的效果,可以保持默认(不量化)。

配置其他参数:

Quantization method: 量化方法,默认为 bnb(bitsandbytes)。
Chat template: 对话模板。
对于 Base 模型,可选择 default, alpaca, vicuna 等。
对于 Instruct/Chat 模型,务必选择对应的模板(例如 Qwen 系列选择 qwen)。
训练和推理时必须使用相同的模板。
RoPE scaling: 旋转位置编码缩放,用于扩展上下文长度。
Booster: 加速库,默认 auto 即可,它会自动选择最适合的加速后端(如 FlashAttention)。

配置数据集

训练阶段下拉菜单中选择DPO。接着,在“数据集”一栏中,选择需要的训练数据。我们将使用 LLaMA-Factory 自带的 DPO 演示数据集dpo_zh_demo。这个数据集包含了偏好对比(chosen vs rejected)的数据对。选中数据集后,可以点击右上角的 Preview dataset 按钮预览数据格式,确认数据无误。

启动 DPO 训练

关键参数说明

  • Learning rate: 1e-4 (学习率)
  • Epochs: 3.0 (训练轮数)
  • Compute type: bf16
  • Cutoff length: 2048
  • Batch size: 1 (取决于显存)
  • Gradient accumulation: 16 (建议 Batch size × Gradient accumulation ≈ 16 或 32)
  • LoRA rank: 8 (LoRA 的秩,决定微调参数量,8 是默认配置)
  • LoRA alpha: 16 (缩放系数,默认设置为 Rank 的 2 倍)

启动训练

设置好输出目录后,可以点击Preview command预览训练命令,确认无误后直接点击Start开始训练
训练命令

llamafactory-cli train\--stage dpo\--do_train True\--model_name_or_path Qwen/Qwen2-0.5B-Instruct\--preprocessing_num_workers16\--finetuning_type lora\--template qwen\--flash_attn auto\--dataset_dir data\--dataset dpo_zh_demo\--cutoff_len2048\--learning_rate0.0001\--num_train_epochs3.0\--max_samples100000\--per_device_train_batch_size2\--gradient_accumulation_steps8\--lr_scheduler_type cosine\--max_grad_norm1.0\--logging_steps5\--save_steps100\--warmup_steps0\--packing False\--enable_thinking True\--report_to none\--output_dir saves/Qwen2-0.5B-Instruct/lora/Qwen2.5-0.5B-dpo-demo\--bf16 True\--plot_loss True\--trust_remote_code True\--ddp_timeout180000000\--include_num_input_tokens_seen True\--optim adamw_torch\--lora_rank8\--lora_alpha16\--lora_dropout0\--lora_target all\--pref_beta0.1\--pref_ftx0\--pref_loss sigmoid

训练过程的loss曲线

效果测试与对比

加载模型进行对话

切换到Chat栏。在训练开始前,我们可以先不选择任何 Adapter,直接点击Load model加载原始的Qwen2.5-0.5B-Instruct模型,测试一下未训练时的模型表现

测试配置

System prompt:

您是一名AI助手。用户会给您一个任务。您的目标是尽量忠实地完成任务。在执行任务时,要逐步思考并合理地解释您的步骤。

input

体重增加是一个复杂的问题。但毫无疑问,西方国家当前的食物环境——大量含有高度加工的咸、甜和油脂食品——起着重要作用。我们饮食中摄入的大部分盐都是在制造过程中添加的。这与大多数食物中天然存在的少量盐或在餐桌上或在家里烹饪时添加的盐形成对比。盐可以增加食物的可口性,帮助保鲜;这就是为什么它通常被添加到加工食品中。盐和脂肪的结合被认为是促进食物被 passively 过量消费的强大组合。想想看,咸薯片有多令人回味。对咸和油脂食物更喜欢与整体摄入更多千焦耳、不受控制的饮食和儿童超重有关。食物过量摄入与其盐度程度之间的联系被认为比对甜和油脂食物的喜好更强。从进一步揭示盐可能如何影响对油脂食物的过量摄入,Deakin 大学的感官研究人员招募了 48 名健康成年人参加品尝小组。在四个午餐时间段(在那天早上进行了标准早餐后),每个人都吃了一顿经过脂肪和盐含量调整的通心粉奶酪餐。四种餐食组合分别是低脂/低盐、低脂/高盐、高脂/低盐和高脂/高盐。鼓励参与者吃到饱为止。还记录了进食速度、餐食的可口性以及主观评价的饥饿感和饱腹感。盐促进过量进食当食用含盐量高的餐食时,摄入的千焦耳增加了 11%。而这与脂肪含量高低无关。餐食的脂肪含量并没有导致人们按重量摄入更多食物,但由于其更高的能量密度,这意味着摄入了更多千焦耳。问题:那些习惯于喜欢高热量密度饮食的人可能经常食用高盐食品吗?=== 上述问题的答案是 可选项: (1). 一周以上。 (2). 大多数时候通心粉奶酪被提供时。 (3). 没有足够的信息 (4). 通常在午餐时间。 答案:

输出结果

(3). 没有足够的信息

验证 DPO 效果

需要选择Checkpoint path为我们刚刚训练好的 Adapter(位于saves/Qwen2.5-0.5B-Instruct/lora/Qwen2.5-0.5B-dpo-demo),然后再次点击Load model加载混合了 DPO 权重的模型

输出答案

(4). 通常在午餐时间。

这就是 RLHF 的价值——不仅仅是让模型“做对题”,更是让模型学会人类偏好的交互风格。通过 dpo_zh_demo 数据集的训练,模型初步对齐了数据集中这种“诚实且严谨”的偏好风格。

参考资料

https://github.com/datawhalechina/base-llm

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

基于STM32的智能家居安防系统

目录 STM32智能家居安防系统概述核心功能模块软件设计要点低功耗优化扩展功能典型硬件选型 源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; STM32智能家居安防系统概述 STM32系列微控制器因其高性能、低功耗和丰富的外设资源&#xff…

作者头像 李华
网站建设 2026/4/9 13:27:35

Python篇---提升Python代码性能

提升Python代码性能&#xff1a;从蜗牛到火箭的秘诀 一、一句话理解 提升代码性能 减少计算机的"工作量" 选择更快的"工具" 就像送外卖&#xff1a; ❌ 一次只送一单&#xff0c;来回跑10次&#xff08;慢&#xff09; ✅ 一次规划好路线&#xff0c…

作者头像 李华
网站建设 2026/4/11 22:23:34

Composition 英文单词学习

1️、基本信息 单词&#xff1a;composition 词性&#xff1a;名词 发音&#xff1a; &#x1f1fa;&#x1f1f8; /ˌkɑːm.pəˈzɪʃ.ən/&#x1f1ec;&#x1f1e7; /ˌkɒm.pəˈzɪʃ.ən/ 词源&#xff1a; 来自拉丁语 componere&#xff08;一起放置 → 组合、构成…

作者头像 李华
网站建设 2026/4/11 0:07:51

导师严选9个AI论文平台,自考学生轻松搞定毕业论文!

导师严选9个AI论文平台&#xff0c;自考学生轻松搞定毕业论文&#xff01; AI 工具助力论文写作&#xff0c;高效又省心 在当前的学术环境中&#xff0c;越来越多的学生开始借助 AI 工具来辅助论文写作。尤其对于自考学生而言&#xff0c;时间紧张、资料繁杂、写作经验不足等问…

作者头像 李华
网站建设 2026/4/10 16:52:50

戒了么4.0 戒色签到打卡源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 最近死了么很火&#xff0c;于是我就想写一个戒色的&#xff0c;这款程序也就应运而生 原作者&#xff1a;阿宅 戒了么是一个轻量、纯 PHP 的每日戒色签到程序&#xff0c;面向正在自…

作者头像 李华
网站建设 2026/4/11 10:54:56

Spring Cloud Context 和 Spring Cloud Commons 包详解

Spring Cloud Context 和 Spring Cloud Commons 2.0.2 对应的 Spring Cloud 整体版本是 Finchley.SR1。 版本对应关系 Spring Cloud ContextSpring Cloud CommonsSpring Cloud 版本Spring Boot 兼容版本2.0.22.0.2Finchley.SR12.0.x2.1.02.1.0Greenwich.SR12.1.x2.2.02.2.0Ho…

作者头像 李华