微调基础知识
约 1190 字大约 4 分钟
2026-06-29
微调(Fine-tuning)是在已有大模型的基础上,用规模较小的 特定任务或特定领域数据集 做针对性训练,让通用模型变成某个领域的专家。要理解它,得先看大模型构建的两个阶段:
- 预训练(Pre-training):在大规模、多样化的数据集上训练,形成全面的语言理解能力——好比一个什么都懂一点的 通才
- 微调(Fine-tuning):在小规模的特定任务 / 领域数据上继续训练——把通才打磨成某个领域的 专家

和提示词工程、RAG 的区别
微调、提示词工程、RAG 都是让大模型回答更符合预期的手段,但切入点完全不同:
| 项目 | 微调(Fine-tuning) | 提示词工程(Prompt Engineering) | RAG(检索增强生成) |
|---|---|---|---|
| 定义 | 基于已有模型,用新数据再训练一遍以适应特定任务 | 通过设计更优提示词提高模型表现 | 生成前引入外部知识作为上下文供模型参考 |
| 是否改动模型参数 | ✅ 会,训练更新模型权重 | ❌ 不会,只用原始模型 | ❌ 不会,主要改进数据流 |
| 适用场景 | 高精度、专属领域(医疗、法律) | 通用模型适配多任务、快速试验 | 数据频繁更新、文档 QA、知识密集型任务 |
| 依赖外部数据源 | 需要少量 高质量 训练数据 | 可选,通常仅靠提示 | 必须,需要知识库或文档 |
| 部署复杂度 | 较高,需要训练和模型部署 | 最低,只依赖提示词 | 中等,需接入检索系统(如向量库) |
微调分类
可以从两个维度给微调分类:技术维度 和 任务维度
技术维度
按训练时更新多少参数,分为全量微调和参数高效微调:
全量微调(Full Fine-tuning) 更新模型的 所有参数:
| 方面 | 内容 |
|---|---|
| 所需数据 | 几万到几百万条任务数据,专注某领域(如医学),且是 高质量 数据 |
| 参数更新 | 模型 所有参数(数十亿)都更新 |
| 显存要求 | 高(通常 40GB+,分布式训练) |
| 收敛速度 | 慢(通常需要数天训练) |
全量微调和预训练一样吗?
不一样。虽然都更新全部参数,但目标和起点都不同:
| 维度 | 预训练 | 全量微调 |
|---|---|---|
| 数据 | 万亿 token、通用语料(维基、书籍、网页) | 小规模任务数据(几万~几百万条),专注某领域 |
| 目标 | 让模型"学会语言"本身 | 让模型"适配任务"或"专精领域" |
| 耗时 | 数周到数月 | 几小时到几天 |
| 模型规模 | 从 0 开始构建参数 | 以已有模型为初始参数继续优化 |
参数高效微调(PEFT, Parameter-Efficient Fine-tuning) 只训练少量参数或添加轻量模块。常见方法:
| 方法 | 做法 |
|---|---|
| LoRA(Low-Rank Adaptation) | 插入低秩矩阵替代直接更新大模型参数 |
| Prefix Tuning | 为每个输入添加一小段可训练的"前缀"向量 |
| Adapter Tuning | 在 Transformer 层之间插入小模块 |
| QLoRA | LoRA + 量化(Quantization) |
以 LoRA 为例,和全量微调对比:
| 对比项 | 全量微调 | LoRA 微调 |
|---|---|---|
| 训练参数量 | 所有参数(数十亿) | 百万级(几乎只改插入模块) |
| 训练显存 | 极高 | 中低(8~24G 可跑) |
| 通用性 | 全面改造 | 仅适用于任务略微变化 |
| 训练速度 | 慢 | 快得多 |
| 适合初学者 | 难度高 | 简单易用 |
任务维度
按输出形式,分为指令微调和分类任务微调,两者区别主要在 输出 上:
指令微调(Instruction Fine-tuning) 生成完整的自然语言回答,开放式文本——像教模型做开放性问答题或写作题,输入是题目要求和背景材料,输出是一段自然语言分析、论述或建议:
{
"instruction": "请判断患者是否存在糖尿病风险,并说明依据。",
"input": "患者男,45岁,BMI指数29,空腹血糖6.8 mmol/L。",
"output": "患者可能存在糖尿病前期的风险,建议进一步做 OGTT 检查。"
}分类任务微调(Classification Fine-tuning) 输出标签、数字、选项这类结构化值——像教学生做选择题或判断题,输入一段信息,输出正确选项(A/B/C 或"阳性"/"阴性"):
{
"text": "患者男,45岁,BMI指数29,空腹血糖6.8 mmol/L。",
"label": "糖尿病前期"
}