Fine-tuning 微调指南
什么是 Fine-tuning?
在预训练模型基础上,用特定数据进一步训练。
Fine-tuning vs RAG
LoRA 代码
from peft import LoraConfig, get_peft_model
lora_config = LoraConfig(r=16, target_modules=["q_proj", "v_proj"])
model = get_peft_model(base_model, lora_config)
print(model.print_trainable_parameters())
# 0.06% 参数可训练何时选择?
- 需要学习特定风格
- 任务格式固定
- 有大量标注数据
Claude Code 生成
Fine-tuning 微调指南
Fine-tuning(微调)是在预训练模型基础上,使用特定领域数据进行进一步训练,使模型适应特定任务或领域的技术。本文全面介绍 Fine-tuning 的原理、方法、适用场景和最佳实践。
预训练大模型虽然通用能力强,但可能在特定任务上表现不佳。Fine-tuning 通过在特定数据上继续训练,让模型学习特定领域的知识、风格或任务模式。
1. 何时使用 Fine-tuning
Fine-tuning 不是万能的,需要在合适的场景下使用。
适合 Fine-tuning 的场景:
1. 特定任务优化:需要模型在特定任务上达到更高准确率
2. 风格迁移:让模型采用特定的写作风格或语气
3. 格式规范:强制模型按特定格式输出(如 JSON、XML)
4. 专业领域:医疗、法律、金融等专业术语和知识
5. 成本优化:高频调用场景下,微调模型推理成本更低
不适合 Fine-tuning 的场景:
1. 数据量不足(少于几百条高质量样本)
2. 任务可以通过 Prompt 工程解决
3. 需要频繁更新知识的场景(用 RAG 更合适)
2. Fine-tuning vs RAG
Fine-tuning 和 RAG 是两种互补的技术,各有优劣。
对比分析:
Fine-tuning:
- 优点:推理速度快、成本低、风格统一
- 缺点:需要高质量标注数据、无法实时更新
- 适合:学习新模式、风格、格式
RAG:
- 优点:无需训练、数据可实时更新、可解释性强
- 缺点:推理时需要检索、增加延迟
- 适合:引入外部知识、事实性问答
选择建议:
- 两者可以结合使用:RAG 提供知识,Fine-tuning 优化格式和风格
3. 数据准备
高质量的训练数据是 Fine-tuning 成功的关键。
数据准备要点:
数据量:
- 简单任务:几百到几千条
- 复杂任务:几万到几十万条
- 质量比数量更重要
数据格式:
- 监督微调(SFT):Instruction-Response 对
- 格式示例:{"instruction": "问题", "output": "答案"}
质量要求:
- 准确性:输出必须正确无误
- 一致性:格式和风格保持一致
- 多样性:覆盖各种输入情况
- 去除噪声:删除低质量或重复数据
4. 常用 Fine-tuning 方法
根据训练范围和资源需求,Fine-tuning 有多种方法可选。
Fine-tuning 方法:
全量微调:
- 更新所有模型参数
- 效果最好,但资源消耗大
- 需要高端 GPU 和大量显存
LoRA(Low-Rank Adaptation):
- 只训练低秩适配器矩阵
- 参数减少 10-100 倍
- 效果接近全量微调
QLoRA:
- 量化 + LoRA
- 可在消费级 GPU 上微调大模型
- 4-bit/8-bit 量化
Prefix Tuning:
- 在输入前添加可训练前缀
- 保持原模型参数不变
- 适合多任务学习
Prompt Tuning:
- 只训练虚拟 token 向量
- 参数量最小
- 适合简单任务
5. LoRA 代码示例
使用 PEFT 库实现 LoRA 微调:
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model, TaskType
model_name = "meta-llama/Llama-2-7b-hf"
# 加载模型和分词器
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 配置 LoRA
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM,
inference_mode=False,
r=8,
lora_alpha=32,
lora_dropout=0.1,
target_modules=["q_proj", "v_proj"]
)
# 应用 LoRA
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# 训练配置和训练流程与常规训练相同6. 超参数调优
关键超参数建议:
学习率:
- 全量微调:1e-6 到 5e-6
- LoRA:1e-4 到 5e-4
- 从较低值开始,逐步增加
批次大小:
- 尽可能大,受显存限制
- 可用梯度累积模拟大批次
训练轮数:
- 通常 1-5 个 epoch
- 关注验证集防止过拟合
Warmup:
- 学习率预热通常 5-10% 训练步数
LoRA r 值:
- 8-64,推荐 16 或 32
- 复杂任务用较大值
7. 评估指标
Fine-tuning 后需要全面评估模型性能。
评估维度:
任务相关指标:
- 分类:准确率、精确率、召回率、F1
- 生成:BLEU、ROUGE、Perplexity
- 问答:EM(精确匹配)、F1 分数
通用能力:
- 保持原有通用能力不被灾难性遗忘
- 使用 HellaSwag、MMLU 等基准测试
输出质量:
- 人工评估格式、风格、连贯性
- 安全性评估(有害内容)
效率指标:
-- 内存占用 推理延迟
8. 最佳实践
Fine-tuning 最佳实践:
1. 从小规模实验开始
先用少量数据验证流程,再扩展
2. 使用验证集
划分训练/验证集,监控过拟合
3. 保存检查点
定期保存模型,便于回滚和选择最优版本
4. 渐进式训练
先用较高学习率快速收敛,再精细调整
5. 混合预训练数据
在微调数据中混入通用数据,防止灾难性遗忘
6. 监控训练过程
关注损失曲线,及时发现异常
7. 评估泛化能力
用未见过的数据测试,避免过拟合训练集
总结
Fine-tuning 是在预训练模型上进一步训练以适应特定任务的技术。适合场景包括特定任务优化、风格迁移、格式规范和专业领域。常用方法有全量微调、LoRA、QLoRA 等。关键成功因素包括高质量数据、合适的超参数和全面评估。Fine-tuning 与 RAG 可结合使用,各取所长。
声明:本文由 AI 生成,可能存在错误或不准确之处。
最后更新:2026-01-29