STUDY · LLM 深潜
LLM 深潜 · 资料核实于 2026-07
微调
把通用模型变成「你的」模型
预训练给了你
一个什么都会一点的大脑。
finetune
微调让你得到
领域语气SFT 格式习惯template 价值偏好DPO 少参数LoRA 可合并adapter
12 章 · 4 张图解 · 2 个交互演示
LLM 深潜 · 一次看懂

模型微调:从「会说话」到「会你的活」

预训练给模型装了世界知识,微调才真正把它变成你的同事。这篇把微调光谱讲透:SFT、指令模板、RLHF/DPO、LoRA/QLoRA、数据工程、超参直觉、评估回归——以及更重要的:什么时候根本不该微调。

资料核实2026-07-15
覆盖SFT · DPO · LoRA · 数据 · 评估
阅读约 35 分钟 · 12 章
01

为什么需要微调

基座模型什么都懂一点,为什么还是写不好你的工单摘要? 多写两段 prompt 能不能代替训练?什么时候不能?

微调(fine-tuning)是在已经预训练好的权重上,用更少、更对口的数据继续学——把「通才」压成「专才」,或把「会补全」练成「会听话」。

可以拿学徒做隐喻:预训练像把一个人扔进图书馆读了互联网;他词汇量大、常识多,但没跟过你的班组。微调是带他跟几周班:看你们怎么写 PR、怎么拒不安全请求、怎么把 JSON 字段填齐。他不是从零学语言,只是改习惯

为什么有效

神经网络的知识主要压在权重里。预训练已经学到了语法、常识、推理的「基底」;微调只在这个基底上做小幅位移,所以用远少于预训练的数据与算力,就能换来领域语气、格式、任务流程上的大变化。

微调改的是默认行为,不是往脑子里塞一本新百科。

这也解释了三件常被搞混的事:

关键先问「缺的是知识,还是行为」。缺知识 → 检索/工具;缺行为 → 才考虑微调。
02
一张图建立坐标系

适配光谱:从 Prompt 到全参

把「改模型」想成从轻到重的光谱。越往右,成本越高、行为越稳、回滚越难。

L0 · 不改权秒级
Prompt / 系统提示 / few-shot
零训练。适合探索、规则还在变、每人场景不同。上限:上下文装不下、风格不稳、贵。
L1 · 外挂工程
RAG · 工具 · Agent · MCP
知识与能力外置。适合实时数据、可审计引用、长尾事实。不解决「不会按你们格式说话」。
L2 · 行为本文主角
SFT · 指令微调 · 偏好对齐(DPO 等)
改默认输出分布。适合固定流程、品牌语气、安全策略、结构化输出、工具调用格式。
L3 · 省参主流
PEFT:LoRA / QLoRA / DoRA / Adapter
只训极小一部分参数(常 <1%),可多 adapter 热插拔。消费级显卡也能玩 7B–70B 量级。
L4 · 全参重型
Full fine-tuning · 继续预训练(CPT)
全权重更新。领域语料极大、要改表征本身时才上。贵、易灾难性遗忘、合并与版本管理更重。
成本 / 侵入性 → Prompt 零训练 RAG 外挂知识 SFT 教示范 DPO 教偏好 Full FT 动全参 轻 · 可逆 · 适合探索 重 · 粘性 · 适合定型
图 1 · 适配光谱:从左到右,从「写说明书」走到「改肌肉记忆」
交互 · 你的场景该落在光谱哪一段
点上面的场景,看推荐路径与原因。
03
Loss · 梯度 · 遗忘

核心直觉:权重在学什么

训练一步,模型到底改了自己什么?

监督微调时,模型对每个该预测的 token 算交叉熵损失:预测越离谱,loss 越大。反向传播把「误差」传回权重,用学习率迈一小步。成千上万步后,模型在你的数据分布上更会「接下一词」。

隐喻把权重想成一座地形。预训练挖出了广阔盆地;微调是在某个山谷再挖深一点——旁边的山脊(其他能力)可能被推高,这就是灾难性遗忘的几何图像。

几个必须刻进直觉的词

一次训练步在做什么 batch 样本tokens 前向预测next-token loss交叉熵 ∇W更新 目标不是「背下训练集」,而是让分布 P_θ(下一词 | 上下文) 更贴近你想要的行为。
图 2 · 训练步:样本 → 预测 → 损失 → 改权重
04
Supervised Fine-Tuning

SFT:用示范教行为

SFT 是微调宇宙的地基:给模型看「输入 → 理想输出」对,让它模仿。

形式可以是:指令–回答、对话多轮、(输入, 思维链, 答案)、工具调用轨迹。关键不在格式花哨,而在示范质量与分布覆盖

SFT 真正优化的是什么

它优化的是「在类似输入下,产出类似输出」的条件概率。所以:

messages 式样本(概念示意)JSONL
{
  "messages": [
    {"role": "system", "content": "你是内部工单助手,只输出合法 JSON。"},
    {"role": "user", "content": "用户说打印机卡纸,影响出货。"},
    {"role": "assistant", "content": "{\"priority\":\"P1\",\"team\":\"facilities\",\"summary\":\"打印机卡纸影响出货\"}"}
  ]
}
只在 assistant 段上算 loss(completion-only / train_on_responses)。若对 user/system 也反传,模型会「背用户问题」,浪费信号还可能泄漏格式。

SFT 的天花板

SFT 教的是「像示范一样做」,不直接教「A 比 B 好」。当多条回答都语法正确、但你更想要简短/更安全/更敢拒时,需要偏好学习(第 06 章)。先 SFT 再 DPO,是业界常见两段式。

05
Chat template · special tokens

指令微调与对话模板

「指令微调」本质仍是 SFT,只是数据形态是「人类指令 + 助手回答」。真正把工程坑放大的是 chat template:模型训练时用的特殊符号、角色分隔、是否加 generation prompt。

训练用一套模板、推理用另一套——等于你用英文考试大纲教,考场却发中文卷。

实效上线 checklist 第一项:用训练时同款 apply_chat_template 打一条样本,肉眼看特殊 token 是否齐全,再开训练。
06
RLHF · DPO · ORPO · KTO

偏好对齐:教模型「哪个更好」

两条回答都对,你为什么更喜欢短的那条?模型怎么学这种「品味」?

偏好对齐不给唯一标准答案,而给比较信号:chosen 优于 rejected。目标是把策略推向人类(或 AI)更认可的区域。

RLHF:经典三段

1SFT先会基本听话
2奖励模型 RM学打分:哪条更好
3RL(常 PPO)最大化奖励 − KL 惩罚

KL 惩罚防止策略漂得离 SFT 模型太远(胡言乱语换高分)。RLHF 强但重:要训 RM、要在线采样、超参敏感、工程复杂。

DPO:绕过显式奖励模型

Direct Preference Optimization(Rafailov et al., 2023)证明:在一定假设下,可把偏好目标改写成对策略的分类式损失——直接拉高 chosen 相对 rejected 的对数概率比,并相对参考模型(通常是 SFT 模型)做隐式约束。

为什么火

实现简单、不需在线 RL 环、在开源社区与中小团队可复现性高。很多「对齐」流水线变成:高质量 SFT → 偏好对上跑 DPO/ORPO。

偏好样本(概念)JSONL
{
  "prompt": "用一句话解释向量数据库。",
  "chosen": "用向量相似度检索非结构化内容的数据库。",
  "rejected": "向量数据库是一种非常重要且在现代人工智能与大语言模型检索增强生成场景中被广泛讨论的……(空话 200 字)"
}

一族变体,怎么记

方法核心想法你何时考虑
RLHF (PPO 等)显式 RM + 在线 RL资源足、要极致控行为、有对齐团队
DPO偏好对 → 直接优化策略开源默认首选之一;已有 SFT 与偏好数据
ORPOSFT + 偏好信号合一想少一阶段、数据同时含对错示范
KTO只需「好/坏」不必成对容易标二元反馈、难凑 pair
RLAIF用 AI 当偏好标注员规模化标注;需防教师模型偏见

方法名是地图,不是宗教。先有可靠偏好数据,再挑算法。

偏好数据脏(标注员不一致、rejected 其实更好)会把模型推向奇奇怪怪的风格。对齐阶段的数据审计不亚于 SFT。
07
LoRA · QLoRA · DoRA · Adapter

PEFT:用 1% 参数办 80% 的事

Parameter-Efficient Fine-Tuning:冻结原模型绝大部分权重,只训练少量附加参数。省显存、省时间、可多任务切换。

LoRA 一句话几何

对某个大矩阵 W(如注意力的 Q/V 投影),不直接改 W,而学两个瘦矩阵 AB,令更新 ΔW ≈ B A(低秩分解)。秩 r 很小(如 8、16、64)时,可训练参数暴降。

LoRA:W' = W + BA · (α/r) Wd×d 冻结 + Bd×r Ar×d W'推理可用 r 越小越省、表达力上限越低;α/r 控制适配强度。训完可 merge 进 W,推理零额外延迟。
图 3 · LoRA 低秩更新:大矩阵冻结,只学瘦身补丁
交互 · 秩 r 如何改变可训练参数量(示意)
r=16
可训
冻结

QLoRA:量化 + LoRA

把基座权重量化到 4-bit(如 NF4)以塞进小显存,再在其上挂 LoRA 以较高精度训练适配器。思想:冻住的大身子用廉价存储,学习的小补丁用认真精度。这是消费级单卡微调 7B–70B 级模型的主流配方之一。

还有哪些亲戚

实效默认起步:Instruct 基座 + QLoRA(r=16 或 32,target 注意力投影)+ 干净 SFT 数据。跑通评估后,再决定是否加大 r、加全参、或上 DPO。
08
质量 · 覆盖 · 泄漏

数据工程:微调的真正护城河

算法差一档可以换;数据差一档,训练只会更高效地学会错误。

业界共识几乎一边倒:数据质量 > 数据数量 > 花哨算法。1 万条精修示范,往往打赢 100 万条网页噪声。

原始日志 / 爬取 / 合成 去重 · 脱敏 · 格式校验 人工 / 强模型精修 金标评估集
图 4 · 数据漏斗:越往下越贵,也越决定上限

五条硬规则

  1. 先写失败案例。 线上哪类输出不合格?每类至少凑齐足够「正确示范」。微调是在补行为漏洞,不是堆样本量。
  2. 覆盖边界。 拒答、模糊意图、多语言、超长输入、工具失败重试——训练集里没有,上线必翻车。
  3. 防泄漏。 评估集必须与训练严格隔离;从同一会话切两边会虚高分数。
  4. 合成数据要「验货」。 用强模型造数很快,但会复制教师偏见与模板腔。抽检 + 规则过滤 + 少量人审。
  5. 隐私与合规。 日志进训练集前脱敏;客户数据、密钥、PII 是红线。能进 RAG 的机密别写进权重。
配方常见配比直觉:主任务示范 70% + 通用能力复训 20% + 安全/拒答 10%。领域越窄,越要显式保通用,防「只会说行话」。
09
LR · batch · 过拟合

训练动力学:少踩坑的旋钮

超参没有宇宙真理,只有可复现的起点 + 看曲线决策。下面是开源社区反复验证过的直觉(具体数字随模型与框架变,当指南不当教条)。

旋钮常见起点(LoRA/SFT)症状 → 调整
学习率1e-4 量级(LoRA);全参更小loss 炸 / 胡言 → 降 LR;几乎不动 → 略升或查数据
Epoch1–3(小精数据)训练 loss 极低、评测掉点 → 过拟合,减 epoch / 增数据
有效 batch梯度累积凑 32–128不稳 → 加大有效 batch 或降 LR
序列长贴合真实任务,勿盲目 128k过长浪费算力;过短截断关键指令
LoRA r / αr=8–64;α 常 2r 或与 r 同量级欠拟合 → 加 r 或解冻更多模块;过拟合 → 减 r / 增 dropout
预热与调度短 warmup + cosine/linear decay前期尖刺 → 加 warmup

工程上省显存的几板斧

信号只盯 training loss 会自欺。必须并行看:保留集 loss、结构化校验通过率、人工抽检、通用基准是否塌方。
10
离线 · 在线 · 回归

评估:你怎么知道「变好了」

没有评估的微调是玄学。评估要回答两件事:目标任务更好了吗?别的能力坏了吗?

离线自动
Schema / 单元测试 / 黄金集 exact-ish
JSON 可解析率、字段齐全、工具调用 AST 合法、检索引用格式。便宜、可 CI。
离线模型裁判
LLM-as-judge(要校准)
适合开放生成。注意位置偏见、长度偏见;关键决策仍要人样例锚定。
能力回归
通用基准 + 安全集
MMLU 类、指令遵循、拒答/越狱小集。防止「工单神、常识废」。
在线
A/B · 人工抽检 · 业务指标
解决率、重试率、人工接管率、用户点赞。最终真理在线上。

建议把评估集当产品资产版本管理:每次改数据或超参,跑同一套套件,生成「变好 / 变坏」表再决定是否发布。

11
别把锤子当唯一工具

何时不该微调

你确定问题出在权重,而不是检索、工具或产品流程?

事实每天变(价格、库存、政策)
别微调 · 用 RAG/API
规则每周改,还在探索产品形态
先 Prompt / 配置
需要可引用、可审计的出处
检索 + 引用,不靠背诵
样本 < 几百且极噪
先清洗;或 few-shot
固定 schema / 语气 / 多步流程已稳定
SFT / LoRA 很合适
有清晰「好/坏」成对反馈
上 DPO 类对齐
垂直领域海量无标注文本
考虑 CPT 再 SFT
要在同一基座上挂 N 个业务技能
多 LoRA 路由
判断微调的机会成本包括:数据管线、训练平台、评估回归、模型版本、回滚、幻觉责任。若 Prompt + RAG 已达 90 分,先别为了 95 分上全套 MLOps。
12
栈 · 路径 · 清单

实战:工具栈与一条推荐路径

常见工具(按角色)

一条务实默认路径

1锁定任务失败案例清单
2黄金集先建评测再训练
3Prompt 基线证明非提示能解
4SFT+LoRA小步可复现实验
5评测门禁任务↑ 通用不崩
6可选 DPO有偏好再对齐
7灰度上线A/B 与回滚
伪代码:LoRA SFT 心智模型Python
# 概念流程,非某一框架的可复制脚本
base = load_instruct_model(..., load_in_4bit=True)
model = attach_lora(base, r=16, alpha=32, target=["q_proj","v_proj"])
train_sft(model, dataset, lr=1e-4, epochs=2, on_responses_only=True)
metrics = eval_suite(model, gold_set)  # schema + 人工抽检 + 回归
if metrics.pass_gate:
    export_or_merge_lora(model)
else:
    diagnose(data_bugs=True, lr=True, template=True)

发布前 10 问

  1. 训练/推理 chat template 是否一致?
  2. loss 是否只算在 assistant?
  3. 评估集是否与训练隔离?
  4. 结构化输出通过率比基线如何?
  5. 通用与安全集是否回归?
  6. 隐私数据是否脱敏?
  7. 是否保留基线模型可一键回滚?
  8. LoRA 是 merge 还是多卡路由?版本怎么管?
  9. 线上监控哪些业务指标?
  10. 失败时,是数据问题还是算法问题——你有没有样本级 error analysis?

微调的终局不是「训了一个模型」,而是「建了一条可回归的行为改进流水线」。

··

参考资料

概念与方法名核实于公开论文与主流工程文档;具体超参随模型与版本变化,以你所用框架文档为准。本文侧重建立完整心智模型,而非某一供应商的操作手册。

阅读 · 右上角 ◐ 切换深浅色 · STUDY · LLM 深潜