模型的微调和蒸馏过程(简要)
一、两者的区别先搞清楚
对比项 | 微调 Fine-Tuning | 蒸馏 Distillation |
---|---|---|
目的 | 让模型学会新任务或新数据分布 | 让小模型模仿大模型的能力 |
参与模型 | 一般只有一个模型(在预训练模型基础上更新参数) | 有两类模型:Teacher(大)和 Student(小) |
更新对象 | 更新原模型参数 | 只更新学生模型参数 |
训练目标 | 最小化真实标签的损失 | 最小化学生与教师输出的差异(+ 标签损失) |
使用场景 | 下游任务定制(分类、检索等) | 模型压缩、加速、移动端部署 |
二、微调(Fine-Tuning)流程
1.准备预训练模型
选择一个已经在大规模数据上训练好的模型,如:
NLP:BERT、GPT
CV:ResNet、ViT
Speech:Whisper
这些模型提供通用特征提取能力。
2. 构造下游任务数据集
格式化为:
输入:文本、图像、语音等
输出:目标标签、目标文本等
例如情感分类任务:
输入: "这部电影真不错"
标签: 正面
3.修改模型输出层
保留主体网络权重(冻结或部分冻结)
替换输出层(如 softmax 分类头)适配任务维度
例如:
model.classifier = nn.Linear(hidden_size, num_labels)
例子:从 1000 类改成 5 类
假设你用 ResNet50
做猫狗分类,只有 5 类。
原来模型最后一层是:
model.fc = nn.Linear(2048, 1000)
现在改成:
model.fc = nn.Linear(2048, 5)
这样输出就是 5 维,每个值代表一个类别的得分。
「保留主体网络权重」是什么意思
主体网络(前面的大部分层)已经在海量数据上学到了通用特征,比如:
图像模型:学到边缘、纹理、形状;
文本模型:学到语义、上下文表示。
这些特征对你的小任务也有帮助。
没必要从头再学一遍。
👉 所以我们只训练最后几层(输出层),而保留前面部分参数不动,这叫 冻结(freeze)。
4.设置训练超参数
学习率较小(通常 1e-5 ~ 5e-5),
避免破坏预训练权重结构。
5.训练微调
以真实标签计算损失函数:
loss = CrossEntropy(y_pred, y_true)
loss.backward()
通常策略:
全量微调:所有参数都更新
部分微调:只更新最后几层或 Adapter 模块(PEFT)
6.验证与保存
验证集评估 → early stopping → 保存 fine-tuned 模型
输出为 model_finetuned.pt
或 adapter.bin
结果:
预训练模型在新任务上表现更好,泛化性保留但针对性增强。
三、蒸馏(Knowledge Distillation)流程
1.准备 Teacher 模型
一般为性能较强、计算量较大的模型,例如:
Teacher: GPT-3
Student: GPT-2 / smaller GPT-Neo
2.准备 Student 模型
结构类似但规模更小。
Student 初始化可以是随机或从 Teacher 结构剪枝。
3.准备训练数据
可用:
同任务的真实数据;
或无标注的大量“软标签”数据。
4.Teacher 生成“软标签”
Teacher 模型输出的概率分布(Soft Targets):
teacher_logits = Teacher(x)
teacher_probs = softmax(teacher_logits / T)
其中 T
是温度参数,T>1 可让分布更平滑,传递更多“相似度信息”。
5.Student 模仿 Teacher
Student 预测:
student_logits = Student(x)
student_probs = softmax(student_logits / T)
定义 蒸馏损失(KL 散度):
L_distill = KLDiv(student_probs, teacher_probs)
如果有真实标签,还可以加上普通监督项:
L_total = α * L_distill + (1 - α) * CrossEntropy(student_logits, y_true)
6.训练 Student
反向传播仅作用于学生模型参数,教师冻结。
训练完成后,Student 模型在体积更小的情况下保留了教师的部分能力。
结果:
得到一个性能接近大模型、但推理更快、更轻量的小模型。
四、可视化对比流程
[Fine-Tuning]
预训练模型 -----> 加载下游数据 -----> 更新参数 -----> 专用模型[Distillation]
Teacher(大模型) ---> 生成软标签↓Student(小模型) <--- 模仿 + 学习标签 ---> 轻量模型
五、总结关键点
维度 | 微调 Fine-Tuning | 蒸馏 Distillation |
---|---|---|
目标 | 适配任务 | 模仿教师 |
输入 | 真实数据 | 教师输出(软标签) |
输出 | 定制化模型 | 小型模型 |
优点 | 性能强 | 速度快、体积小 |
缺点 | 计算开销大 | 需要教师模型 |
一句话总结:
微调让模型懂新任务,蒸馏让小模型学会大师的思考方式。