【Datawhale组队学习202601】Base-NLP task05 高级微调技术

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 零、SFT的局限?
  • 一、模型对齐
    • [1.1 模型对齐的必要性](#1.1 模型对齐的必要性)
    • [1.2 通往模型对齐的三道关隘](#1.2 通往模型对齐的三道关隘)
  • 二、RLHF
    • [2.1 理解RLHF](#2.1 理解RLHF)
    • [2.2 RLHF 的核心步骤](#2.2 RLHF 的核心步骤)
  • [三、LLaMA-Factory RLHF(DPO)实战](#三、LLaMA-Factory RLHF(DPO)实战)
    • [3.1 LLaMA-Factory 介绍](#3.1 LLaMA-Factory 介绍)
    • [3.2 环境搭建](#3.2 环境搭建)
    • [3.3 训练准备](#3.3 训练准备)
  • 总结

前言


零、SFT的局限?

无论是 PEFT 还是全量微调,主要方法大多是有监督微调(Supervised Fine-tuning, SFT) ,即用 成对的"(指令, 回答)" 数据来训练模型。

  • SFT 是一个存在天花板的技术,它教会了模型模仿高质量的范例,但很显然,无法让模型理解 人类的偏好。人类不希望模型用冷冰冰的语言,毫无创造力的句式以及千篇一律的答复,更不希望模型瞎编乱造、甚至危言耸听。
  • 这算是 SFT 的局限:
  1. 缺乏泛化能力,模型只能很好地响应数据集中出现过的指令模式,无法覆盖用户千奇百怪的真实意图。
  2. 对齐不足:模型的回答可能在事实上正确,但在风格、语气、安全性或有用性上,并不符合人类的期望。它只知道"正确答案",却不知道"更好的答案"。
  • 对齐 是英文 alignment 的翻译

一、模型对齐

1.1 模型对齐的必要性

为了跨越从"遵循指令"到"理解偏好"的鸿沟,我们需要一种新的训练范式。基于人类反馈的强化学习(Reinforcement Learning from Human Feedback, RLHF) 正是解决这一问题的关键技术。

  • 模型对齐的目标是:让模型超越简单的模仿学习,真正理解并内化人类复杂的价值观,使其输出更符合我们的期望。
  • SFTRLHF 在核心理念与实现方式上的关键差异:
对比维度 监督微调 (SFT) 人类反馈强化学习 (RLHF)
核心目标 模仿正确答案(指令遵循) 对齐人类偏好(有用/无害/诚实)
数据需求 高质量的 (指令, 回答) 对 提示词 (Prompt) + 偏好排序/评分
学习方式 填鸭式教学(拟合分布) 探索式学习(试错与反馈)
优化信号 Token 级预测概率(交叉熵) 整句生成质量评分(标量奖励)
泛化能力 局限于训练数据分布 可泛化到未见过的复杂指令

1.2 通往模型对齐的三道关隘

在实践中,对齐训练通常划分为三个阶段,分别面向通用语言能力指令遵循偏好对齐

  1. 基础模型预训练,获得通用语言能力
  • 在大规模(万亿级 Token)无标注文本数据(网页、书籍、代码等)上进行自回归预训练
  • 通过预测下一个词的任务,模型能够习得广泛的语料知识并具备基础的生成能力,从而得到一个基础语言模型。
  • 这一阶段的训练门槛极高,不仅算力成本巨大,还需在超大规模数据与模型上解决复杂的收敛稳定性问题。
  1. 有监督指令微调,获得指令遵循能力
  • 使用少量(千到几万条)高质量"指令-回答"对,对基础模型进行有监督微调,使其学会理解并执行人类指令。
  • 这一阶段通常使用 (prompt, response) 格式的数据,并可结合 QLoRA 等参数高效微调技术进行训练。它的目标是在指令上下文中实现条件生成,以此显著提升模型的指令遵循与任务完成能力,
  • 最终获得一个在指定任务与约束条件下更为可控的 "指令模型"(Instruction-tuned LM)
  • 高质量的 SFT 数据集是模型能力养成的关键。根据目标的不同,数据集可以分为两类:
    • 任务型指令数据集:如 WizardLM Evol‑Instruct 70k (AI 生成) 和 Dolly-15k (专家编写),它们主要由单轮的"指令-回答"构成,核心目标是教会模型如何"做事",准确地遵循指令完成特定任务。
    • 对话型数据集:这类数据集的代表作就是 OpenAssistant (OASST)。它专注于教会模型如何"聊天",其独特性和重要性体现在:来源真实且多样,专注于多轮对话,丰富的反馈信号:数据不仅包含对话文本,还有人工标注的质量评分和多种标签(可作为偏好学习/奖励建模的有益信号)。OASST不仅是优秀的 SFT 数据,也是训练奖励模型(Reward Model)、进行 RLHF 的宝贵材料。
  1. 基于人类反馈的强化学习
  • 这一阶段是模型从"及格"走向"卓越"的关键跨越。虽然经过 SFT 微调的模型已经能流畅地遵循指令,但它本质上仍是在进行"模仿学习",受限于标注数据的质量,会存在"只知其一不知其二"的问题,且容易产生幻觉或不安全的输出。
  • RLHF 引入了人类价值观作为指导信号,通过构建奖励模型来模拟人类的判别标准,并利用强化学习算法让模型在生成过程中不断"试错"并学习如何获得更高的奖励。
  • 这一过程不再要求模型死记硬背固定的标准答案,而是鼓励它探索出更符合有用性(Helpful)、诚实性(Honest)和无害性(Harmless)(简称 3H 原则)的回复路径。

二、RLHF

2.1 理解RLHF

  • 在深入具体步骤之前,我们需要理解为什么 文本生成任务 可以被建模为强化学习问题。

  • AI生成文本不是一次完成的,而是像走迷宫------每一步选一个词,直到走完。

  • RLHF 框架中,将 token 生成过程建模为 片段的 episodic 马尔可夫决策过程 MDP

    • 片段:特指从接收用户提示到生成完整输出的单次生成任务。
  • 从公式的角度讲,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)]

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

2.2 RLHF 的核心步骤

  • RLHF 的流程主要包含 三个核心 步骤:
  1. 通过有监督微调得到初始策略模型;
  2. 收集人类偏好数据训练一个奖励模型;
  3. 使用奖励模型作为信号,通过强化学习算法(如 PPO)进一步优化策略模型。

三、LLaMA-Factory RLHF(DPO)实战

  • 相比于传统的 PPODPO 省去了训练 独立的奖励模型(Reward Model) 和复杂的 强化学习采样过程,直接在偏好数据上优化策略,更加稳定且高效。

  • 本节使用开源社区流行的微调框架 LLaMA-Factory,配合阿里发布的轻量级指令模型 Qwen2.5-0.5B-Instruct,在单张消费级显卡(甚至 CPU)上跑通 DPO 对齐流程。

3.1 LLaMA-Factory 介绍

  • LLaMA-Factory 是一个简洁高效的大型语言模型(Large Language Model)训练与微调平台,旨在让开发者能够"零代码"地完成大模型的定制化训练。它具有以下特点:

    • 广泛的模型支持:支持业界主流的开源模型,如 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 量化训练,使得普通消费级显卡也能运行大模型训练。

3.2 环境搭建

shell 复制代码
# 克隆 LLaMA-Factory 仓库
git clone https://github.com/hiyouga/LLaMA-Factory.git
  • 使用本地python环境,推荐 3.12
  • 进入 LLaMA-Factory 目录
python 复制代码
# 安装依赖
pip install -e .[metrics]
# 验证安装
llamafactory-cli version
  • 可以看到如下输出
  • 使用 Web UI
python 复制代码
# 启动 Web UI
llamafactory-cli webui
  • 自动启动浏览器

3.3 训练准备

  • 预览数据集
  • 预览命令
python 复制代码
llamafactory-cli train `
    --stage dpo `
    --do_train True `
    --model_name_or_path Qwen/Qwen2.5-0.5B-Instruct `
    --preprocessing_num_workers 16 `
    --finetuning_type lora `
    --template qwen `
    --flash_attn auto `
    --dataset_dir data `
    --dataset dpo_zh_demo `
    --cutoff_len 2048 `
    --learning_rate 0.0001 `
    --num_train_epochs 3.0 `
    --max_samples 100000 `
    --per_device_train_batch_size 1 `
    --gradient_accumulation_steps 8 `
    --lr_scheduler_type cosine `
    --max_grad_norm 1.0 `
    --logging_steps 5 `
    --save_steps 100 `
    --warmup_steps 0 `
    --packing False `
    --enable_thinking True `
    --report_to none `
    --output_dir saves\Qwen2.5-0.5B-Instruct\lora\train_2026-01-26-20-39-04 `
    --bf16 True `
    --plot_loss True `
    --trust_remote_code True `
    --ddp_timeout 180000000 `
    --include_num_input_tokens_seen True `
    --optim adamw_torch `
    --quantization_bit 8 `
    --quantization_method bnb `
    --double_quantization True `
    --lora_rank 8 `
    --lora_alpha 16 `
    --lora_dropout 0 `
    --lora_target all `
    --pref_beta 0.1 `
    --pref_ftx 0 `
    --pref_loss sigmoid

总结

相关推荐
EverydayJoy^v^2 小时前
RH134学习进程——九.访问网络附加存储
linux·网络·学习
GHL2842710902 小时前
coze多agent学习
学习·ai编程
组合缺一2 小时前
Claude Code Agent Skills vs. Solon AI Skills:从工具增强到框架规范的深度对齐
java·人工智能·python·开源·solon·skills
Engineer邓祥浩2 小时前
设计模式学习(20) 23-18 中介者模式
学习·设计模式·中介者模式
观音山保我别报错2 小时前
Spring Boot 项目学习内容详解(一)
spring boot·后端·学习
小龙报2 小时前
【SOLIDWORKS 练习题】草图专题:1.带座轴承
人工智能·嵌入式硬件·物联网·硬件架构·3d建模·硬件工程·精益工程
●VON2 小时前
Flutter for OpenHarmony:基于三层 Tab 架构与数据模型解耦的 TodoList 产品化演进
学习·flutter·架构·openharmony·布局·技术
人工智能AI技术2 小时前
【C#程序员入门AI】AI应用的操作系统:Semantic Kernel 2026实战
人工智能·c#
海天一色y2 小时前
基于Inception-V3实现CIFAR-100数据集的分类任务
人工智能·分类·数据挖掘