跳到正文
动手理解 · CONCEPT LAB

把一条对话样本变成真正参与 Loss 的位置

SFT 文件看起来像问答,但训练器真正读取的是 input IDs、labels 和 loss mask。模板、截断或 mask 错一个,模型就可能在错误位置学习。

已经发生 正在观察 接下来
01 / 03

状态传导图

RAW 原始示范
CLEAN 清洗去重
ROLE 角色规范
SCHEMA 工具 / 格式校验
DATA 版本化数据集

数据治理发生在 tokenize 之前;错误或重复答案会提高模型模仿相应模式的训练压力。

观察点 01

先把“理想回答”变成一致、可追踪的数据

原始对话要去重、查污染、规范角色和工具格式,并保留来源、质量标签与版本。少量精选示范可以很有效,但数量、覆盖度与一致性必须分别用留出集验证。

此刻要记住

定义、审计并持续维护“好示范”,往往是 SFT 的主要工程成本之一。

主题 03 · Supervised Fine-Tuning / SFT

SFT:把「博学的续写机」调教成会干活的助手

SFT(Supervised Fine-Tuning,监督微调)是常见的后训练手段。这篇把它拆到够细:loss mask 怎么配、数据怎么造、全参数与低秩适配怎么比较、超参怎么验证,以及何时需要偏好优化或强化学习。

01 · 定位

SFT 解决什么?让输出分布贴近示范

基座模型以续写目标训练,可能回答问题,却未必稳定遵循角色、格式或任务要求。SFT 用「输入 → 目标输出」示范提高这些目标输出的概率,让模型更像任务所需的助手。

SFT 之前(基座)
问「中国的首都是?」→ 它可能直接作答,也可能续写成「A. 北京 B. 上海」等网页/考题形态;基座模型并非一定不回答。
SFT 之后(目标)
提高「中国的首都是北京。」这类直接回答及指定角色、格式、多轮协议的概率;这是分布迁移,不保证每次都遵循。
⚠️ SFT 很适合塑造行为、格式与任务分布,也能学习领域知识和技能。LIMA 的 1,000 条实验支持「少量优质示范可强力改变行为」这一假说,但不能推出知识几乎都来自预训练。对于频繁更新、需引用或覆盖长尾事实的场景,RAG(Retrieval-Augmented Generation,检索增强生成)往往更易维护;大量领域语料也可考虑 CPT(Continued Pre-training,继续预训练)。
预训练››› 本篇:SFT 监督微调››› 偏好对齐 (可选)
01.5 · 厘清

知识到底该放哪:SFT / CPT / RAG 三盒子

「想让模型懂某个领域」——别一上来就 SFT。先分清三种手段各管什么。

SFT 教怎么答

教模型「行为、格式、口吻、任务」——看输入输出示范,学会按要求应答。

适合:指令遵循、风格、工具调用、分类抽取。

CPT 继续读领域书

拿领域语料接着「读」,补的是领域分布与知识

适合:大量领域知识打底,常作 SFT 的前置。

RAG 答题时翻资料

不要求改模型,答题时去外部知识库现查,把检索资料拼进上下文。

适合:事实更新快、要可追溯来源、长尾知识。

怎么配
一种常见组合是:CPT 适配领域分布 → SFT 教任务形态 → RAG 提供可更新、可引用事实,但三者不是固定流水线。Gekhman 等人在受控闭卷问答中逐步提高「基座未掌握的新事实」占比,观察到新事实学得更慢,且在其设置中伴随更高幻觉倾向;后续受控研究将机制进一步归因于新旧事实的表征干扰与遗忘,并表明它并非不可避免。能否安全写入参数取决于语义重叠、数据、模型和更新方法,必须同时评测新事实掌握与旧事实稳定性。
02 · 核心机制

它怎么训:预测下一个 token,并选择监督位置

SFT 的训练方式和预训练很接近——都可用 next-token 交叉熵。对话/指令 SFT 常见做法是用 loss masking 选择监督位置:对话数据可做 assistant-only loss,prompt-completion 数据可做 completion-only loss;两者概念相近但数据边界并不完全相同。

一条样本里,loss 算在哪?

system你是一个有帮助的助手。示例:label = -100
user用一句话解释黑洞。示例:label = -100
assistant黑洞是引力极强、连光都无法逃逸的天体。示例:参与 loss

上图是 assistant-only 配方:只监督回答,适合「给定问题如何答」。但 SFT 本身只要求有监督目标;纯语言建模数据可监督整段,prompt-completion 数据也可配置全序列 loss。多轮对话是监督所有 assistant 回合还是只监督最后一回合,取决于模板、mask 与平台实现。

LSFT=tresponselogPθ(yty<t,x)\mathcal{L}_{\text{SFT}}=-\sum_{t\,\in\,\text{response}}\log P_\theta\big(y_t\mid y_{<t},\,x\big)

这是 assistant-only 时的交叉熵:x 是条件,y 是目标回答。实现常把不监督位置的 label 设为 -100,再按有效 token 求平均;若选择全序列监督,求和集合也会随之改变。

loss masking 损失掩码,遮住不参与训练的部分 chat template 把对话拼成带角色标记的固定格式 特殊 token 如 <|im_start|> 标记角色/边界
03 · 数据

数据:SFT 的命根子

SFT 结果同时受基座、数据、优化、模板和评测影响;其中数据直接定义了模型要模仿的目标分布,因此尤其值得检查。

📝

SFT 数据长什么样

Data Format

🔑 基本形态

  • 最简:(instruction 指令, output 理想回答);有时再加 input(额外上下文)
  • 对话式:system / user / assistant 多轮,套 chat template
  • 带工具:assistant 里嵌 tool_call、tool 返回结果,再续答——教 function calling
  • 结构化:要求输出 JSON / 表格 / 固定字段,教格式遵循

📌 一条样本

指令式instruction:把这句翻成英文:今天天气很好
output:The weather is nice today.
拒答样例也要喂——user:帮我写勒索病毒 → assistant:抱歉,我无法协助……,教模型守边界。
🏭

数据从哪来 + 质量怎么把

Sources & Quality

🔑 四种来源

  • 人工撰写/专家标注:便于按规范控制和审计,但仍可能有分歧与错误;通常成本较高
  • 强模型蒸馏:让 GPT/Claude 类强模型生成示范(注意许可与合规)
  • 真实业务日志:从线上对话里挑好回答、清洗脱敏——最贴业务
  • 开源数据集:Alpaca、ShareGPT、FLAN、UltraChat、OpenHermes、OpenOrca

🔑 质量、数量与覆盖

  • LIMA 案例:用 1,000 条精选样本微调 65B LLaMA 后获得较强对话人评;这是特定基座/任务证据
  • 多样性与条数都要看:覆盖任务类型、难度、领域、长度,并用留出集判断边际收益
  • 去重 / 去噪 / 去错:降低模型反复模仿错误或单一模式的训练压力
  • 配比:别让某一类(如某种格式)占比过高,否则模型偏科
数据会留下痕迹
错误事实、啰嗦风格、固定套路和标注员口头禅都可能被模型模仿;影响强弱取决于重复度、学习率、基座和其他混合数据,因此应以去重、抽检和留出评测验证。
📰 s1K 的组合实验
s1 用 1,000 条精选推理样本微调 Qwen2.5-32B-Instruct,并在推理时加入 budget forcing。论文报告 AIME 2024 从无干预的 50% 提至 57%,且在 MATH/AIME24 上相对 o1-preview 最高领先 27%。这项结果来自SFT + 测试时策略的组合,不能把 7 个点全部归因于 1,000 条 SFT 数据。
SFT 数据与训练流水线:原始示范经清洗标准化、Chat Template、Tokenize、Labels 与 Loss Mask、Packing 后进入前向损失、反向传播、优化器更新与检查点;同一检查点同时做目标任务和通用能力评测,失败则回到数据、Mask 或训练配方
SFT 真正的输入不是“问答文件”,而是模板化后、tokenize 后的 input IDs 与 labels。评测失败要回到数据、mask 或配方,不能只靠多跑几个 epoch。查看原图 ↗
04 · 实战核心

全参微调 vs 低秩适配

LoRA(Low-Rank Adaptation,低秩适配)及其量化基座路线 QLoRA(Quantized Low-Rank Adaptation,量化低秩适配)可减少可训练参数与显存,全参则提供更大的更新自由度。谁效果更好没有脱离任务、数据和调参的固定答案;先按资源与目标选候选,再在同一验证集比较。

全参

全参数微调

Full Fine-Tuning
更新模型的全部参数。表达自由度与训练状态最多,通常显存和存储成本也最高;遗忘风险主要由数据分布、更新幅度与训练时长决定。

🔧 特点

  • 显存吃紧:除权重还要存梯度、Adam 一/二阶状态、激活和临时缓冲;相对裸权重的倍率取决于精度、优化器、ZeRO/FSDP 与重计算,不能固定写成十几倍
  • 产物:一整个新模型(大小依参数量和精度而定),通常每个任务保存一份
  • 适用候选:资源充足、需要更新范围大,且同条件实验表明参数高效微调容量不足
优点
所有参数都可调整,不受预先选定的低秩子空间限制。
缺点
训练状态和检查点大;若更新过猛或数据过窄,也会损害原能力。
LoRA

LoRA / QLoRA(参数高效微调)

Parameter-Efficient Fine-Tuning · PEFT
冻结选定的原权重,为目标模块训练低秩增量。可训练参数和 adapter 文件通常显著变小;实际节省量由 target modules、rank 与实现决定。

原理:权重更新量 ΔW 用两个瘦长矩阵 A、B 的乘积近似(ΔW ≈ B·A,秩 r 很小,如 8/16/64)。训练时只动 A、B,原始大权重 W 不变。普通 LoRA 可在部署前把增量合入同精度基座,也可动态挂载;QLoRA 则把冻结基座以 4-bit NF4(NormalFloat 4-bit)保存再挂 LoRA——论文里用单张 48GB GPU 微调了 65B 模型。QLoRA 是否能直接合并取决于框架与量化格式,常需先反量化再合并/重新量化;实际能跑多大还取决于上下文长度和 batch。

W=W0+ΔW=W0+BA,BRd×r, ARr×k, rmin(d,k)W'=W_0+\Delta W=W_0+BA,\qquad B\in\mathbb{R}^{d\times r},\ A\in\mathbb{R}^{r\times k},\ r\ll\min(d,k)

LoRA:冻结原权重 W_0,训练低秩增量 BA。该层从 d×k 个可训练参数变成 (d+k)×r;若部署前把增量合并进权重,LoRA 分支本身可不增加额外前向算子,但未合并的多 adapter serving 仍可能有开销。

手算参数量
取一个 4096×4096 线性层和 r=16:全参要更新 16,777,216 个数;LoRA 的 A+B 是 (4096+4096)×16=131,072 个,约为该层全参的 0.78%。整模型比例还取决于挂了哪些层。
LoRA 与 QLoRA 数据流:输入同时经过冻结的基座权重 W0 和可训练低秩 A、B 分支,两路结果相加;反向梯度只更新 A、B。QLoRA 用四比特保存冻结基座,经反量化或融合矩阵乘 kernel 参与计算;部署时可动态挂载,或在框架支持下反量化后合并
冻结不等于“不参与计算”:W0 仍走前向,只是不存它的梯度和优化器状态;QLoRA 进一步压低冻结基座的存储,但仍依赖可用的反量化 / fused kernel。查看原图 ↗

🔧 为什么香

  • 省训练状态:常只训练很小比例的参数;QLoRA 论文在特定设置下用单张 48GB GPU 微调 65B 模型,不等于任意 70B、上下文和 batch 都能单卡运行
  • 产物小、可插拔:adapter 常只有几 MB~几百 MB,一个基座可挂多个 LoRA 切换任务
  • 便于回退:原检查点不变,卸载 adapter 即恢复基座;挂载后是否遗忘/退化仍要评测
优点 & 适用
训练状态和产物小,适合资源有限或需要保存多份任务增量的场景。
缺点
不是稳定弱于全参:原论文若干任务可追平或超过全参,但低秩子空间和 target modules 也可能成为瓶颈。不要按任务名预判胜负,要在同一数据、预算与留出集比较。
LoRA Low-Rank Adaptation 低秩适配 QLoRA Quantized Low-Rank Adaptation:4-bit 量化基座 + LoRA 秩 r 低秩更新子空间的维度;增大会增加参数与容量,但不保证指标更高 PEFT Parameter-Efficient Fine-Tuning 参数高效微调 adapter 可插拔的微调增量模块

⚖️ 全参 vs LoRA vs QLoRA 速览

维度全参微调LoRAQLoRA
训练的参数全部(100%)由 rank/目标层决定,常远少于全参与 LoRA 类似
显存需求通常最高通常低于全参进一步压低冻结基座的权重显存;并非所有配置都最低
产物大小整个模型(GB 级)小 adapter(MB 级)小 adapter(MB 级)
效果自由度大;需调参验证原论文若干任务追平/超过全参,不能外推全部任务QLoRA 论文若干设置接近 16-bit 全参;仍依任务变化
能力退化更新范围大,需重点监控可卸载恢复基座;adapter 生效时仍可能使某些能力下降
适用资源足、需大范围更新资源/存储受限、多任务 adapter冻结基座权重显存最紧张时

LoRA 实战调参:可把 rank r 的 8/16/32 作为候选网格,但更大只代表更高参数量与更新秩,不保证更好;alpha 必须连同缩放约定解释——原始 LoRA 常用 alpha/r,rsLoRA 用 alpha/√rtarget_modules 可从 q/v 到 all-linear 做受控对照,最终按相同预算和验证集选择。

🔬 LoRA 几个值得知道的变体

变体改了什么
DoRA把预训练权重分成幅度与方向并用 LoRA 更新方向;论文在其 LLaMA/LLaVA/VL-BART 实验中优于 LoRA
rsLoRA缩放改为 alpha/√r,高 rank 更稳(PEFT 已内置)
PiSSA用原权重主奇异分量初始化 adapter;论文同设置的 Mistral-7B GSM8K 报 72.86% vs LoRA 67.7%,是特定实验
LoRA+A / B 矩阵用不同学习率;论文实验报告 1–2% 提升、最高约 2× 收敛加速,不是固定收益

其他 PEFT 还包括 Prefix/Prompt Tuning、(IA)³ 等。选择变体前先固定数据、随机种子和评测,否则论文里的小幅提升很容易被实验噪声掩盖。

05 · 训练细节

关键超参与训练技巧(细颗粒度)

SFT 翻车,多半翻在这些细节上。下面是最该盯的几个。

参数 / 技巧常见取值 / 做法为什么
学习率 LR全参常从 1e-5 量级、LoRA 从 1e-4 量级试起只是起始网格;模型规模、batch、数据和 target modules 都会改变最优值
Epoch 轮数常从 1~3 轮试起用留出任务指标选 checkpoint;训练 loss 降不代表泛化一定升
LR schedulelinear / cosine / inverse_sqrt / constant 等没有通吃方案;warmup 与总步数很少时尤其要联动设置
Batch / 梯度累积用梯度累积提高每次参数更新覆盖的 micro-batch 数降低单步显存,但有效 batch 改变优化噪声与更新步数,不保证越大越稳或越好
序列打包 packing把多条短样本放进一个定长 batch 序列减少 padding;若要求样本间不能互相注意,必须使用 block-diagonal / varlen attention 或等价边界 mask,并确认 高效 kernel支持。是否重置 position IDs 是另一项位置语义选择,单独 reset 不能隔离样本;只插 EOS 而允许跨样本注意力也是现有实现,但语义不同
loss maskassistant-only / completion-only / 全序列必须和数据格式及 chat template 一起验证,不能只看开关名
混入通用数据SFT 数据里加入通用/对话 replay是缓解遗忘的候选方案,但会稀释目标任务比例;混合率需做消融

🎛️ 工业平台超参扫盲(以阿里云百炼为例)

下面以阿里云百炼截至 2026-07-14 的文档解释字段。官方明确说明默认值和有效范围随模型/训练方式变化,应以所选模型控制台为准;这里给的是检查思路,不是跨平台统一配方。

参数百炼默认 / 范围大白话 + 真实业务怎么填
learning_rate ⭐官方建议量级:高效训练约 1e-4;全参约 1e-5每步参数挪多大。围绕建议值做对数尺度小网格,并比较任务指标、遗忘与稳定性
n_epochs ⭐官方建议:少于 1 万条 3–5;更多时 1–2数据看几遍。这是百炼建议而非定律;按留出集选择 checkpoint,别只等验证 loss 回升
max_length ⭐API 文档范围 [500,32768]、推荐值 8192;可用上限仍依模型单样本最长 token 数。百炼 SFT 对超长样本是整条丢弃,其他框架可能截断;训练前统计丢弃率、回答截断率和 VLM 视觉 token
batch_size使用所选模型默认;文档称常见 16/32先确认它指 micro batch、全局样本数还是 token batch;梯度累积会改变有效 batch
lr_scheduler_type百炼建议 linear 或 inverse_sqrt平台还提供 cosine/constant 等;结合总步数与 warmup 验证,不把某种 scheduler 当默认最优
warmup_ratio使用所选模型默认;百炼范围 [0,1]控制从低学习率升到目标值的训练比例;与 scheduler 和总步数联动,短训练尤其要看实际 warmup steps
weight_decay使用所选模型默认;百炼范围 [0,0.2]AdamW 中是解耦权重衰减,不应简单等同所有参数上的 L2;过大可能妨碍适配,是否防过拟合要看验证结果
eval_steps依训练总步数设置评估太稀会错过退化,太频繁会拖慢训练;验证集要覆盖真实业务,不只看 token accuracy/loss
freeze_vit使用模型默认并做对照百炼仅对部分 Qwen-VL 训练提供此项;冻结省资源,解冻可能帮助域迁移,结论靠视觉任务验证
最小实验矩阵
先固定数据切分,比较 2–3 个 learning rate × 1–3 个 epoch checkpoint;max_length 先由长度分布和丢弃率决定。每次同时记录目标任务、通用能力、延迟与显存,才能知道“更低 loss”是否真的更好。

🧰 常用微调工具链(2025–2026)

工具定位
TRLHugging Face 后训练库,SFTTrainer 支持 packing、PEFT、工具调用与 VLM;assistant_only_loss 还要求 chat template 能用 generation 标记返回 assistant mask,不能只打开布尔开关;VLM 还要确认截断不会删掉图像 token
PEFTLoRA / DoRA / rsLoRA / PiSSA 等高效微调方法的主库
LLaMA-Factory支持 100+ LLM/VLM 与全参、LoRA、QLoRA、SFT、DPO、PPO、KTO 等;具体模型/版本组合要查兼容表
Unsloth面向单机微调的优化实现;速度和显存收益依模型、GPU、序列长度与基线配置实测,不引用官网最高倍率作保证
AxolotlYAML 配置驱动的微调框架,社区常用
06 · 翻车现场

SFT 的 6 个常见坑

灾难性遗忘 Catastrophic Forgetting

目标任务提升时,原有知识、推理或多语言能力可能退化;程度取决于分布差异与更新幅度。

缓解候选:减小更新、混入 replay、正则/冻结或 LoRA,并用原能力回归集选 checkpoint;LoRA 也不保证不会退化。

过拟合 Overfitting

数据太少 / epoch 太多 → 模型死记训练样本,开始复读、泛化变差。

缓解:加数据多样性、减 epoch、留验证集早停。

新旧事实互相干扰 Factual Interference

SFT 可以写入新事实,但受控实验显示新事实可能学得更慢,并干扰语义相近的旧事实;这不是「一定自信地编」,也不是 SFT 必然结果。

缓解候选:动态/需引用知识优先 RAG;必须把新事实写入参数时,同时测新旧事实并比较 replay / 自蒸馏;若只需学习行为、无需吸收新事实,再比较选择性冻结。

格式僵化 / 能力变窄 Mode Narrowing

数据格式太单一,模型只会那一种套路,换个问法就崩。

缓解:数据覆盖多种问法、格式、难度。

数据噪声直通 Garbage In, Garbage Out

标注错误、风格不一致与重复脏样本会提高模型模仿这些模式的概率,但不是保证逐字记住每条。

缓解:去重、抽检、统一标注规范并做污染检查。

分布偏移 Train/Serve Gap

训练与上线的 chat template、角色边界或工具 schema 不兼容,会让 token 分布发生意外变化。

缓解:尽量复用同一模板并加入端到端 token 化快照测试;业务 system prompt 可变化,但格式必须兼容训练约定。

07 · 决策

监督示范、偏好优化与强化学习,业务里怎么选

有高质量目标答案时,SFT 常是直接起点;手头主要是成对偏好时可考虑 DPO(Direct Preference Optimization,直接偏好优化);能自动判分且值得在线探索时再考虑 RL(Reinforcement Learning,强化学习)。DPO 源于 Kullback–Leibler(KL)散度正则化的 RLHF(Reinforcement Learning from Human Feedback,人类反馈强化学习)目标,但训练时对固定偏好对使用分类式损失,不做在线 rollout;这里把它归为直接/离线偏好优化。RLVR(Reinforcement Learning with Verifiable Rewards,可验证奖励强化学习)是使用可自动验证奖励的 RL 训练范式;GRPO(Group Relative Policy Optimization,组相对策略优化)与 PPO(Proximal Policy Optimization,近端策略优化)是可用于策略更新的算法。

方法什么时候用代价
SFT监督微调有目标输出可示范:格式、口吻、工具调用、分类抽取或领域问答从小 LoRA 到大规模全参差异很大
DPO直接偏好优化同一输入有 chosen/rejected 成对偏好,目标难写成唯一标准答案不需在线 rollout 或显式奖励模型,但通常还要参考模型/参考 log-prob 与偏好数据
RLVR + GRPO/PPO数学、代码、工具调用等任务可自动验证;RLVR 是训练范式,GRPO/PPO 是可选的策略更新算法需要在线采样、奖励实现与稳定性调试,通常高于离线 SFT/DPO
经典 RLHF + PPO主观偏好且愿意训练奖励模型、在线优化策略常涉及 policy/reference/reward/value 等组件,工程复杂度依实现而变

常见低风险试验顺序是:先评估 Instruct(指令版)基座 → LoRA SFT → 只有明确偏好缺口再加 DPO/RL。Tulu 3 公开了从 Llama 3.1 基座做 SFT、DPO、RLVR、去污染和多任务评测的完整配方,适合学习流程;它的结果不能直接预测你的私有数据。想深入 RL,见 主题 02《对齐 / RLHF 全解》→

📰 SFT 蒸馏案例(2025)
DeepSeek-R1 团队把约 80 万条混合数据(约 60 万条推理样本与约 20 万条非推理样本)直接 SFT 到多个 Qwen/Llama 开源检查点;蒸馏模型本身未再做 RL。论文表格的 pass@1 口径下,R1-Distill-Qwen-32B 在 AIME 2024 为 72.6%、MATH-500 为 94.3%;同表 o1-mini 的 AIME 为 63.6%,1.5B 蒸馏模型为 28.9%。这说明在该数据、解码与 benchmark 口径下,推理能力可通过 SFT 迁移一部分,不等于学生复制了教师全部能力。
资料来源

核查口径与原始资料

页面于 2026-07-14 逐项复核。所有学习率、epoch、rank 与 freeze 配置均作为候选起点,最终以固定数据切分和同口径评测选择;软件功能与云平台默认值需按版本复核。

速查表

一张表回顾 SFT

问题答案
SFT 解决什么让给定输入下的输出分布贴近有监督示范,常用于指令、格式与任务适配
核心机制next-token 交叉熵;assistant-only、completion-only 或全序列监督由 mask 决定
教知识还是教行为两者都能学;更新频繁/需引用的事实常更适合 RAG,大量领域分布适配可考虑 CPT
数据要点质量、数量、覆盖、去重与配比一起看,用留出集验证边际收益
全参 vs LoRA全参自由度大、成本高;LoRA/QLoRA 参数与产物小,效果需同条件实测
最该盯的超参学习率、有效 batch、训练步数/epoch、max_length 与 loss mask;不存在统一最优值
最大的坑灾难性遗忘、过拟合、新旧事实干扰、训练/推理模板不一致
和 DPO/RL 关系SFT 学目标答案;DPO 学成对偏好;RLVR 是使用可验证奖励的 RL 训练范式,GRPO/PPO 是策略更新算法