模型微调(Fine-tuning)是在通用预训练大语言模型基础上,针对特定任务、领域或行为风格进一步训练的技术。其核心价值在于:以远低于预训练的成本,让模型掌握垂直领域知识、特定输出风格或行为规范。本文全面梳理微调技术的全景图,涵盖方法分类、原理深度解析、实践指南和最新趋势。
预训练模型(如 Llama、Qwen、DeepSeek 等)在大规模通用语料上训练,已具备广泛的语言理解和生成能力。但在以下场景中,基础模型往往不够:
微调与 RAG(检索增强生成)是互补关系。RAG 通过外部知识库提供事实支撑,适合需要动态知识更新的场景;微调则将知识内化到模型参数中,更高效且不依赖外部检索延迟。实践中,RAG + 微调的混合架构是最优解——用微调让模型学会输出格式和领域语言风格,用 RAG 提供最新的事实数据。
当前主流大模型的训练遵循三阶段架构:
| 阶段 | 方法 | 目标 | 数据量级 |
|---|---|---|---|
| 预训练(Pre-training) | Next Token Prediction | 语言建模能力 | TB 级 |
| 监督微调(SFT) | 指令跟随训练 | 对话能力、指令遵从 | 数千~数十万条 |
| 偏好对齐(Alignment) | RLHF / DPO / GRPO | 价值观对齐、安全性 | 数万~数十万对 |
其中 SFT 和偏好对齐统称为后训练(Post-training),是将语言模型从"语言建模机器"转化为"有用 AI 助手"的关键步骤。
按参数更新范围,微调分为两大类:
全参数微调在目标任务数据上,对整个模型的全部权重进行反向传播更新。训练目标通常为交叉熵损失:给定输入序列 ,最小化预测 token 与真实 token 的负对数似然:
其中 为模型全部参数, 为目标 token。
全参数微调对硬件要求极高,以下是 2025-2026 年典型估算:
| 模型规模 | 显存需求(FP16) | 推荐 GPU | 成本参考 |
|---|---|---|---|
| 7B | ~100-120GB | 2×A100 (80GB) 或 1×H100 | ~$5-10/h |
| 13B | ~200-240GB | 4×A100 | ~$10-20/h |
| 70B | ~1,000-1,200GB | 8×A100 (80GB) | ~$40-80/h |
| 180B | ~3,000+ GB | 多节点集群 | 企业级 |
全参数微调依赖多项关键技术:
PEFT 是当前产业界最主流的微调方式,其核心思想是:冻结原始模型参数,仅训练少量新增/解冻的参数插入模块。
LoRA 由微软研究院(Hu et al., 2021)提出,是当前最广泛使用的 PEFT 方法。其核心洞察:预训练模型权重矩阵的更新量 具有低秩性质,因此可将 分解为两个低秩矩阵的乘积:
其中 是冻结的原始权重,、 是两个可训练的低秩矩阵,且 。
前向传播时:
其中 即为 LoRA 旁路的贡献。训练结束后, 可以合并回 ,因此推理时零额外延迟。
| 参数 | 说明 | 推荐值 |
|---|---|---|
| (rank) | 低秩矩阵的秩,控制可训练参数量 | 8-64,常用 16/32 |
| (alpha) | 缩放系数,控制 LoRA 更新的幅度 | 16-64,通常 的 1-2 倍 |
| dropout | 防止过拟合的 dropout 率 | 0.05-0.1 |
| target_modules | 应用 LoRA 的注意力层(, , , ) | 通常 , 或全部 |
Rank 选择经验:
对于单个 的权重矩阵,LoRA 的可训练参数量为:
对比全参数微调的 ,LoRA 的参数量通常只有 0.1%-1%。例如 Llama 3.1 70B 的 LoRA () 仅约 87M 可训练参数,占比 0.124%。
from transformers import AutoModelForCausalLM
from peft import LoraConfig, get_peft_model, TaskType
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B-Instruct",
torch_dtype=torch.float16,
device_map="auto"
)
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj", "k_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type=TaskType.CAUSAL_LM
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 输出: trainable params: ~42M || all params: 8B || trainable%: ~0.5%
QLoRA(Dettmers et al., 2023)在 LoRA 基础上引入4-bit NormalFloat (NF4) 量化,将基础模型以 4-bit 精度加载,大幅降低显存占用。关键创新:
训练时,4-bit 权重在 GPU 计算时动态反量化为 FP16/BF16 参与前向/反向传播,梯度仅更新 LoRA 参数,基础模型始终保持 4-bit 精度。
| 方法 | 7B 模型 | 13B 模型 | 70B 模型 |
|---|---|---|---|
| 全参数微调 | ~100-120GB | ~200-240GB | ~1,000-1,200GB |
| LoRA (FP16) | ~16-20GB | ~30-40GB | ~120-140GB |
| QLoRA (NF4) | ~10-12GB | ~20-24GB | ~48-52GB |
关键洞察:QLoRA 使 RTX 4090 (24GB) 可以微调 7B 模型,单卡 A100 (80GB) 可以微调 70B 模型,极大降低了微调门槛。
QLoRA 论文的实验表明:
代价:由于量化和反量化的开销,QLoRA 的训练时间通常比 LoRA 长 20-40%。
DoRA(Liu et al., 2024)是对 LoRA 的重要改进,由 NVIDIA 提出。其核心思想:将预训练权重分解为**幅度(magnitude)和方向(direction)**两个分量,分别进行微调。
其中 为可学习的幅度向量, 使用 LoRA 的低秩分解更新。DoRA 保留了 LoRA 的高效性(低秩更新方向),同时增加了幅度学习能力。
在公共基准测试中,DoRA 相比 LoRA 的显著提升:
| 任务 | Llama 7B | Llama 13B | Llama 3 8B |
|---|---|---|---|
| 常识推理 | +3.7 | +1.0 | +4.4 |
| 多轮对话 MT-Bench | +0.4 | +0.3 | - |
| 视觉指令微调 | +0.6 (LLaVA 7B) | - | - |
优点:与 LoRA 一样,训练后可以合入原始权重,推理无额外开销。
Adapter(Houlsby et al., 2019)在 Transformer 的每一层中插入小型 bottleneck 全连接网络:
其中 将输入降维到 bottleneck size , 再恢复原维度, 为非线性激活函数。
通常在每个 Transformer block 的多头注意力后和FFN 后各插入一个 Adapter。
在 Transformer 每层的 key 和 value 前面添加可学习的虚拟 token 序列:
其中 为可训练的 prefix 参数,长度通常为 10-100 个 token。这些前缀 token 不影响原始输入序列,但会影响注意力计算分布。
Prefix Tuning 的简化版本,仅在输入嵌入层前添加可学习的 soft prompt token,而不是每层都加。参数量更少(仅为 Prefix Tuning 的 1/层数),效果略低。
| 方法 | 可训练参数量 | 效果 | 推理延迟 |
|---|---|---|---|
| Prefix Tuning | ~0.1-1% | 中等 | 少量增加 |
| Prompt Tuning | ~0.01-0.1% | 略低于 Prefix | 少量增加 |
注意:Prefix/Prompt Tuning 在模型规模足够大(>10B)时效果才显著,小模型上效果明显弱于 LoRA。
由清华和智谱 AI 提出,是 Prefix Tuning 的增强版本,解决了 Prefix Tuning 在自然语言理解任务上效果不佳的问题。P-Tuning v2 在所有层(而不仅是最初几层)添加可学习的连续 prompt token,并加入了 MLP 重参数化增强表示能力。
P-Tuning v2 在 GLUE 和 SuperGLUE 基准上可以达到接近全参数微调的效果,是 ChatGLM 系列模型使用的微调方法之一。在 LLaMA-Factory 的对比测试中,LoRA 相比 P-Tuning v2 实现了约 3.7 倍的加速比和更高的 Rouge 分数。
| 方法 | 年份 | 核心思想 | 特点 |
|---|---|---|---|
| IA³ | 2023 | 学习每个维度的缩放向量 | 极轻量(<0.01%) |
| OFT | 2023 | 学习正交变换矩阵,保持特征空间结构 | 适合图像生成微调 |
| PiSSA | 2024 | 对原始权重做 SVD 分解,用主奇异分量初始化 LoRA | 收敛更快,效果更好 |
| LoRA+ | 2024 | 优化器的学习率分别设置(AdaLoRA 改进) | 收敛更稳定 |
SFT(Supervised Fine-Tuning)是最基础的微调方法,使用人工标注的指令-回复对来训练模型学会对话和指令遵循。SFT 是后训练的第一步,也是决定模型有用性的关键。
数据格式通常为:
用户:<指令>
助手:<理想回复>
或使用 Chat Template:
{
"conversations": [
{"role": "system", "content": "你是一个专业的医疗顾问。"},
{"role": "user", "content": "感冒了应该吃什么药?"},
{"role": "assistant", "content": "首先建议多休息、多喝水。如果症状严重..."}
]
}
SFT 中数据质量远比数据量重要。以下是从多家机构(阿里云、Meta、Google)实践中总结的关键经验:
Meta 的 Llama 3 技术报告中披露:其 SFT 阶段仅使用了约 10 万条精心筛选的数据,就实现了指令跟随能力的显著提升,印证了"质量 > 数量"原则。
| 问题 | 表现 | 解决方案 |
|---|---|---|
| 灾难性遗忘 | 模型丢失了通用能力 | 在 SFT 数据中混入 10-20% 通用语料 |
| 过拟合 | 训练 loss 降低但 eval 不提升 | 增大 dropout、添加数据增强、减少 epoch |
| 自回归重复 | 输出不断重复一段话 | 检查数据中是否有重复模式,添加重复惩罚 |
| 指令格式不一致 | 模型忽略用户指令 | 统一数据格式,使用一致的 chat template |
SFT 使模型学会了指令遵循,但可能出现语法正确但不符合人类偏好的回复。偏好对齐阶段解决这一问题。
RLHF(Ouyang et al., 2022,InstructGPT 论文)包含三个阶段:
Stage 1: SFT → 先用高质量指令数据微调基础模型。
Stage 2: 训练奖励模型(Reward Model, RM):
其中 是人类偏好的回复, 是较差的回复。
Stage 3: PPO 强化学习:
其中 控制与 SFT 模型的偏离程度,通常取 0.01-0.1。
DPO(Rafailov et al., 2023)彻底改变了偏好对齐的方法。它不需要单独训练奖励模型,直接使用偏好数据优化语言模型。
DPO 的损失函数:
其中 是优化中的策略模型, 是冻结的参考模型(通常是 SFT 模型), 是控制对齐强度的超参数。
直观理解:DPO 鼓励模型在"好回复"上的生成概率高于参考模型,同时在"差回复"上的生成概率低于参考模型。
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 0.1-0.5 | 控制与参考模型的偏离程度,越大越接近参考模型 | |
| 学习率 | 5e-7 至 2e-6 | 通常比 SFT 低 1-2 个数量级 |
| Batch Size | 16-64 | DPO 对 batch size 比 SFT 更敏感 |
| Epochs | 1-3 | DPO 很容易过拟合,推荐 1-2 epoch |
ORPO(Hong et al., 2024)将 SFT 和偏好对齐合并为一个阶段,在 SFT 损失中直接加入偏好惩罚项。核心公式:
其中 。
优点:一步完成 SFT + 对齐,节省训练成本和时间。但需要在同一个 batch 中包含偏好对,数据组织略复杂。
GRPO 由 DeepSeek 提出,被 DeepSeek-R1 等模型成功采用。它去掉了 PPO 中的批评网络(critic/value model),改用一组采样输出的相对表现来评估:
其中从当前策略中采样 个回复, 是第 个回复的奖励, 是组内平均奖励。
优势:去掉 critic 模型节省约 50% 显存,训练更高效。DeepSeek-R1 证明了 GRPO + 可验证奖励(RLVR)可以产生涌现推理能力——包括自我反思和动态策略调整,无需人工标注推理链。
KTO 进一步简化了 DPO,它不需要偏好对 ,而是只需要单条回复的"好坏"标签(二分类)。这对实际数据收集非常友好——标注员只需判断一条回复的好坏,无需比较两条。在部分场景中,KTO 的效果与 DPO 相当。
| 方法 | 是否需要奖励模型 | 是否需要偏好对 | 训练成本 | 稳定性 | 代表性实践 |
|---|---|---|---|---|---|
| RLHF (PPO) | 是 | 是(排序) | 高 | 低 | GPT-4, Claude |
| DPO | 否 | 是(成对) | 中 | 高 | 开源社区广泛采用 |
| ORPO | 否 | 是(成对) | 低(单阶段) | 中 | 部分开源实验 |
| GRPO | 否 | 仅奖励 | 中 | 高 | DeepSeek-R1 |
| KTO | 否 | 否(单条标签) | 低 | 中 | 数据受限场景 |
LLaMA-Factory 是目前最主流的开源微调框架,由 hiyouga 团队开发。截至 2026 年,GitHub 标星超过 70,000,被华为、NVIDIA、阿里云等企业采用。
核心特性:
快速入门(CLI):
# example.yaml
model_name_or_path: meta-llama/Llama-3.1-8B-Instruct
stage: sft
do_train: true
dataset: my_training_data
template: llama3
finetuning_type: lora
lora_target: all
lora_rank: 16
lora_alpha: 32
per_device_train_batch_size: 4
gradient_accumulation_steps: 8
learning_rate: 2.0e-4
num_train_epochs: 3.0
llamafactory-cli train example.yaml
Hugging Face 的 transformers + peft + trl 库提供了完整的微调工具链:
from trl import SFTTrainer, DPOConfig
# SFT
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
args=training_args,
formatting_func=format_function,
)
trainer.train()
# DPO
from trl import DPOTrainer
dpo_trainer = DPOTrainer(
model=model,
ref_model=ref_model,
train_dataset=pref_dataset,
beta=0.1,
args=dpo_args,
)
dpo_trainer.train()
| 框架 | 特点 | 适用场景 |
|---|---|---|
| Firefly | 专注于中文大模型微调 | 中文 LLM 微调 |
| Unsloth | 训练速度优化(2x 加速) | 需要快速实验迭代 |
| Axolotl | 配置驱动的训练框架 | 生产级微调管线 |
| ModelHub (AWS) | 无代码可视化平台 | 企业低成本上手 |
| 场景 | 推荐方法 | 原因 |
|---|---|---|
| 消费级 GPU(≤24GB) | QLoRA | 最低显存要求,10-12GB 可微调 7B |
| 单卡 A100/H100 | LoRA | 平衡效果与效率 |
| 多卡 A100/H100 集群 | 全参数微调 | 追求最佳效果 |
| 多任务并行 | Adapter Tuning | 可叠加,任务切换方便 |
| 行为对齐 | DPO/GRPO | 稳定高效,不需要奖励模型 |
| 方法 | 推荐数据量 | 最低数据量 |
|---|---|---|
| 全参数 SFT | >50,000 条 | ~10,000 条 |
| LoRA SFT | 3,000-20,000 条 | ~1,000 条 |
| QLoRA SFT | 2,000-10,000 条 | ~500 条 |
| DPO 对齐 | 5,000-20,000 对 | ~1,000 对 |
微调最常见的问题之一是灾难性遗忘——模型在专注新任务时丢失了通用语言能力。
缓解策略:
以下是 Hugo 在实践中遇到的常见问题:
| 问题 | 现象 | 根因 | 解决方案 |
|---|---|---|---|
| 训练 loss 不下降 | 训练初期 loss 就低但不再下降 | 学习率太高导致震荡 | 降到 1e-5 (全参数) 或 1e-4 (LoRA) |
| QLoRA 训练极慢 | 比 LoRA 慢 3-5 倍 | Batch size 太小 + 未启用 Flash Attention | 启用 Flash Attention + 增大 batch size |
| 模型输出重复 | 生成不断重复同一句话 | 数据中有规律的重复模式 | 清洗数据 + 设置 repetition_penalty=1.1 |
| 长文质量差 | 超过 1K token 后输出混乱 | 训练时截断过短 | 增大 seq_length 到 4096+ |
| Flash Attention 报错 | 训练时 CUDA error | PyTorch 版本与 Flash Attention 不兼容 | 安装对应版本的 flash-attn |
| 多卡训练卡住 | 启动后无日志输出 | NCCL 网络超时 | 设置 NCCL_TIMEOUT=3600 环境变量 |
DeepSeek-R1 的成功验证了纯强化学习 + 可验证奖励(RLVR)的路径。不需要人工标注推理链,仅通过结果正确性奖励信号,模型就能涌现出自我反思、回退重试等高级推理行为。这代表了一个范式转变:从"教模型推理"到"让模型自己学会推理"。
Spectrum(2024)是一种介于全参数微调和 LoRA 之间的方法:选择性地解冻 Transformer 中特定层的参数进行训练,而不是全部参数。它通过信号传播分析识别"重要层",仅训练这些层的参数。相比 LoRA 效果更好(全参数微调的 80-90%),显存需求远低于全参数微调。已在 LLaMA-Factory 和 Hugging Face TRL 中支持。
模型微调技术的发展呈现出清晰的演进路径:
一句话总结:对于 90% 的微调需求,LoRA(或 QLoRA)+ LLaMA-Factory + 高质量小数据集是最佳实践组合。在此基础上,根据场景选择 DPO(偏好对齐)、GRPO(推理能力激发)或全参数微调(极致性能)。
相关页面:AI 知识体系 | RLHF 与人类反馈强化学习 | Prompt Engineering | RAG 检索增强生成 | GPT 系列 | DeepSeek 系列