第八章:名师指点——SFT之要义

名师指点SFT,指令遵循能力起。
在这里插入图片描述

【本章导读】

预训练后的模型,内功深厚,但不懂如何与人交流。监督微调(Supervised Fine-Tuning, SFT)便是名师指点,教模型如何与人对话、如何遵循指令。


一、为何需要监督微调?

【预训练模型的局限】

用户: 请帮我写一首关于春天的诗。

预训练模型(未微调):
春天来了,花儿开了,鸟儿叫了...
(继续自发生成,可能偏离主题)
用户: 请帮我写一首关于春天的诗。

微调后的模型:
春风拂面柳丝长,
桃花灼灼映池塘。
燕子归来寻旧巢,
满园春色醉人香。

希望这首诗能让你感受到春天的美好!

【SFT的目标】

  1. 指令遵循:理解并执行人类指令
  2. 对话能力:进行多轮对话
  3. 格式规范:输出符合预期格式
  4. 任务完成:完成特定任务

二、SFT数据构建

【数据格式】

{
  "instruction": "请解释什么是机器学习",
  "input": "",
  "output": "机器学习是人工智能的一个分支,它使计算机能够从数据中学习并做出决策或预测,而无需明确编程。"
}

【数据来源】

来源 描述 代表数据集
人工标注 专业标注员编写 OpenAI的指令数据
模型生成 强模型生成,人工筛选 Alpaca、Vicuna
开源数据 社区贡献 Dolly、OpenAssistant
现有NLP数据集 改造现有数据集 FLAN、P3

【数据质量要求】

维度 要求
正确性 回答准确无误
完整性 回答完整全面
相关性 回答与问题相关
多样性 覆盖多种任务和领域
格式规范 输出格式统一

【数据量】

模型规模 SFT数据量
小(<7B) 5万-20万条
中(7B-70B) 10万-100万条
大(>70B) 100万-1000万条

质量比数量更重要。


三、SFT训练过程

【训练流程】

SFT数据
    ↓
构建对话格式
    ↓
┌─────────────────────────────────────┐
│ 训练循环(数千到数万步)              │
│                                     │
│   1. 采样一个batch的数据              │
│   2. 构建输入(指令+输入)             │
│   3. 前向传播,计算损失               │
│   4. 反向传播,更新参数               │
│                                     │
└─────────────────────────────────────┘
    ↓
SFT模型

【对话格式】

用户: 请解释什么是机器学习
助手: 机器学习是人工智能的一个分支...

实际输入格式:
<|user|>
请解释什么是机器学习
<|assistant|>
机器学习是人工智能的一个分支...

【损失计算】

只计算助手回复部分的损失,不计算用户输入部分。

【超参数设置】

超参数 推荐值
学习率 1e-5 ~ 5e-5
Batch Size 32-128
训练轮数 1-3轮
学习率调度 余弦衰减
权重衰减 0.01

四、指令微调的演进

【演进历程】

第一阶段: 传统微调
└─ 针对特定任务微调(如分类、NER)
   └─ 每个任务需要一个模型

第二阶段: 多任务微调
└─ 在多个任务上联合微调
   └─ 一个模型处理多种任务

第三阶段: 指令微调
└─ 用指令格式统一所有任务
   └─ 模型学会理解指令

第四阶段: 对话微调
└─ 多轮对话数据微调
   └─ 模型学会对话交流

【FLAN】

Google的FLAN(Fine-tuned Language Net)是指令微调的开创性工作:

  • 在1800+任务上微调
  • 统一使用指令格式
  • 大幅提升零样本能力

【InstructGPT】

OpenAI的InstructGPT展示了指令微调的威力:

预训练GPT-3 + SFT + RLHF = InstructGPT

关键发现: 1.3B参数的InstructGPT在指令遵循上优于175B的GPT-3。


五、高效微调技术

【LoRA】

LoRA(Low-Rank Adaptation)是最流行的高效微调方法:

原理: 冻结原模型参数,添加低秩矩阵:

原始权重: W (d × d)
LoRA:    W' = W + BA
          其中 B (d × r), A (r × d), r << d

优点:

  • 只训练0.1%-1%的参数
  • 显存占用大幅降低
  • 效果接近全参数微调
  • 可以合并回原模型

【QLoRA】

QLoRA在LoRA基础上进一步优化:

  • 4-bit量化加载基础模型
  • 双重量化进一步压缩
  • 分页优化器管理内存

可以用单张24GB显存的GPU微调65B模型!

【其他高效微调方法】

方法 原理 特点
Prefix Tuning 在输入前添加可训练前缀 参数极少
Prompt Tuning 学习软提示嵌入 简单高效
Adapter 在层间添加小型网络 模块化
IA³ 缩放激活值 计算高效

六、SFT的注意事项

【灾难性遗忘】

问题:SFT可能导致模型忘记预训练知识。

解决方案:

  • 控制学习率(不要太大)
  • 混合预训练数据
  • 使用LoRA等参数高效方法

【数据质量至关重要】

垃圾数据 → 垃圾模型
高质量数据 → 高质量模型

【过拟合风险】

SFT数据量小,容易过拟合。

解决方案:

  • 早停(Early Stopping)
  • 正则化
  • 数据增强

七、本章心法总结

【口诀】

名师指点SFT,指令遵循能力起。
数据质量是关键,高效微调降成本。

【要点回顾】

要点 说明
SFT目标 让模型学会遵循指令
数据格式 instruction + input + output
数据质量 质量比数量更重要
训练策略 小学习率,少轮数
高效微调 LoRA、QLoRA等

带你进入AI时代最前沿的认知盛宴
在这里插入图片描述
【下一章预告】

下一章,我们将学习对话能力养成,深入探讨多轮对话、思维链推理、Few-shot学习等高级技巧。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐