⚠️ Alpha内测版本警告:此为早期内部构建版本,尚不完整且可能存在错误,欢迎大家提Issue反馈问题或建议。
Skip to content

6.2 微调:让 LLM 适配你的任务 ​

核心问题: 什么时候用微调?LoRA 是什么?微调和对齐有什么区别?

在线 Notebook

对应的交互式版本可在 Google Colab 打开,统一使用方式见 第0章说明。


微调在 LLM 流程中的位置 ​

第5章介绍了对齐(SFT/RLHF),这里的微调在目标上不同,但技术上都是对预训练模型进行监督学习:

预训练(大规模无标注文本)
    ↓ 学到通用语言能力
对齐 SFT(指令-回答对)         ← 第5章:让模型学会对话格式和指令遵循
    ↓ + RLHF 等偏好对齐步骤
通用助手(ChatGPT/Claude)      ← 实际还包括 RLHF 等后续步骤,此处简化
    ↓ 微调(任务特定数据)       ← 本节:让助手适配特定任务
专用模型(医疗问答/代码生成/客服)

区别:

  • 对齐 SFT(指令微调):让模型学会"作为助手"的行为模式——对话格式、指令遵循、拒绝有害请求
  • 任务微调(本节):在通用模型基础上训练特定任务行为,例如输出符合 schema 的 JSON 或遵循团队代码格式

两者技术上相同(都是监督微调),目的不同:前者改变行为模式,后者适配具体任务。


为什么需要微调 ​

通用 LLM 在特定任务上的局限:

问题例子微调的解法
输出格式不稳定医疗报告需要固定结构用格式化样本训练
领域表达和任务模式不稳定专业术语、分类边界用领域任务样本训练
风格不匹配企业客服需要特定语气用风格样本训练
推理成本高简单任务用大模型浪费微调小模型达到同等效果

全量微调 vs 参数高效微调 ​

全量微调(Full Fine-tuning) ​

更新模型所有参数。

代价: 全量微调需要为全部参数保存梯度和优化器状态,训练内存、通信和检查点成本都较高;数据覆盖不足或训练过度时还可能出现灾难性遗忘,使原有能力下降。实际资源需求取决于模型规模、精度、优化器、序列长度和并行策略。

LoRA(Low-Rank Adaptation) ​

LoRA 冻结原始权重并训练低秩更新矩阵。可训练参数比例取决于 rank 和目标模块;效果应与未微调模型及全量微调基线比较。原理和数学推导见 第5章 5.4 微调。

其他 PEFT 方法 ​

  • Prefix Tuning:在输入前加可学习的"前缀向量"
  • Adapter:在 Transformer 层之间插入小型适配模块
  • QLoRA:对冻结的基础权重做低比特存储并训练 LoRA 适配器,可进一步降低训练内存;能否在某块设备运行仍取决于模型规模、序列长度、batch 和实现

详见 扩展:微调工程实践


微调数据如何规划 ​

不存在脱离任务的通用“最低条数”。所需数据由以下因素共同决定:

  • 输出空间是否简单、稳定,例如固定 schema 还是开放生成;
  • 输入类型、语言、领域和边界条件需要覆盖多少组合;
  • 基础模型已经具备多少目标能力;
  • 标签一致性、重复率和错误率;
  • 是否有独立的验证集、回归集和安全样本。

实践中可先用一批高质量样本做学习曲线:逐步增加训练数据,观察验证指标和失败类型是否继续改善。数据条数只有连同任务覆盖率与质量一起记录才有意义。


何时用微调 vs RAG vs Prompt ​

任务需求
    │
    ├─ 需要最新/外部知识?
    │       ↓ 是 → RAG(检索增强)
    │
    ├─ 需要特定格式/风格/领域能力?
    │       ↓ 是 → 微调(LoRA)
    │
    ├─ 通用任务,模型能力足够?
    │       ↓ 是 → Prompt 工程
    │
    └─ 知识 + 格式都需要?
            ↓ → RAG + 微调(组合使用)

实践建议: 先用 Prompt 工程验证任务可行性;如果问题来自知识缺失,优先考虑 RAG;如果问题来自固定格式、风格或行为不稳定,再考虑微调。微调的成本(数据标注 + 训练 + 评估)只有在瓶颈明确时才值得投入。


代码实验 ​

LoRA Parameters

图6.2:示例 7B 架构下,全量微调与不同 rank、固定目标模块配置的 LoRA 可训练参数量对比。左图为绝对参数量,右图为参数占比;具体比例会随层数、隐藏维度、目标模块和是否训练额外参数而变化。

参考: LoRA 矩阵分解原理图见第5章实验5.4a(code/ch05_llm_basics/lora_visualization.py)。

代码文件: code/ch06_llm_applications/finetuning_demo.py
运行方式: python code/ch06_llm_applications/finetuning_demo.py


本节小结 ​

  • 任务微调 和 对齐 SFT 是不同阶段:前者适配任务,后者改变行为模式
  • LoRA 通过低秩更新减少可训练参数和适配器存储量
  • 微调适合需要稳定学习输出格式、分类边界或任务行为的场景
  • 选择策略:Prompt 验证可行性,RAG 解决知识更新,微调解决行为适配,按瓶颈升级

下一节: 6.3 RAG(检索增强生成)扩展阅读: 微调工程实践(数据格式、工具选型、训练配置)

本教程采用 CC BY-NC-SA 4.0 许可协议