2026/2/27 17:20:11
网站建设
项目流程
网站首页模板管理,中文博客网站模板,wordpress搭建是用临时域名,网站域名的密码RLHF 技术详解
有监督微调#xff08;Supervised Fine-tuning, SFT#xff09;#xff1a;即用成对的“(指令, 回答)”数据来训练模型 SFT 的局限性#xff1a;
缺乏泛化能力#xff1a;模型只能很好地响应数据集中出现过的指令模式#xff0c;无法覆盖用户千奇百怪的真…RLHF 技术详解有监督微调Supervised Fine-tuning, SFT即用成对的“(指令, 回答)”数据来训练模型SFT 的局限性缺乏泛化能力模型只能很好地响应数据集中出现过的指令模式无法覆盖用户千奇百怪的真实意图。“对齐”不足模型的回答可能在事实上正确但在风格、语气、安全性或有用性上并不符合人类的期望。它只知道“正确答案”却不知道“更好的答案”。SFT 与 RLHF 在核心理念与实现方式上的关键差异对比维度监督微调 (SFT)人类反馈强化学习 (RLHF)核心目标模仿正确答案指令遵循对齐人类偏好有用/无害/诚实数据需求高质量的 (指令, 回答) 对提示词 (Prompt) 偏好排序/评分学习方式填鸭式教学拟合分布探索式学习试错与反馈优化信号Token 级预测概率交叉熵整句生成质量评分标量奖励泛化能力局限于训练数据分布可泛化到未见过的复杂指令通往对齐模型的三大阶段基础模型预训练有监督指令微调基于人类反馈的强化学习RLHF 的形式化定义在 RLHF 框架中将 Token 生成过程建模为 “片段的Episodic马尔可夫决策过程MDP” 是连接 NLP 与 RL 的核心桥梁。这个“片段”特指“从接收用户提示到生成完整输出”的单次生成任务。状态 (State,s t s_tst)当前已生成的上下文包括用户提示x xx和已生成的 Token 序列y t y_{t}yt。即s t ( x , y 1 , . . . , y t − 1 ) s_t (x, y_1, ..., y_{t-1})st(x,y1,...,yt−1)。动作 (Action,a t a_tat)模型在当前时间步生成的下一个 Tokeny t y_tyt。策略 (Policy,π θ \pi_\thetaπθ)即我们的大语言模型。π ( a t ∣ s t ) \pi(a_t|s_t)π(at∣st)对应模型在当前上下文下预测下一个 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)]πmaxEx∼D,y∼π(⋅∣x)[R(x,y)]理解了这一形式化定义我们就能明白为什么 PPO 等算法可以通过试错Sampling和反馈Reward来调整模型参数从而让模型生成的“轨迹”文本更符合人类偏好。RLHF 的核心步骤首先通过有监督微调得到初始策略模型收集人类偏好数据训练一个奖励模型使用奖励模型作为信号通过强化学习算法如 PPO进一步优化策略模型。RLHF三步法示意图LLaMA-Factory RLHFDPO实战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 peftpython3.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 shareTrue in launch().访问http://localhost:7860.主界面如下DPO 训练准备配置模型下拉框中选择Qwen2.5-0.5B-Instruct聊天 / 指令版本并设置下载源。默认为 Hugging Face如果遇到网络问题可以切换为ModelScope或OpenMind进行下载配置微调参数微调方法保持默认的 lora。量化配置对于显存较小的设备可以选择将 Quantization bit 设置为 8 或 4启用量化训练QLoRA。如果显存充足或希望获得更好的效果可以保持默认不量化。配置其他参数Quantization method: 量化方法默认为 bnbbitsandbytes。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: bf16Cutoff length: 2048Batch size: 1 取决于显存Gradient accumulation: 16 建议 Batch size × Gradient accumulation ≈ 16 或 32LoRA 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