授权与合规声明
本文为作者原创技术分享,内容基于公开可查的工程实践与官方文档整理,仅用于学习交流。文中涉及的工具、命令与配置均在你自建的隔离环境中操作;引用第三方内容已尽量标注来源。若你对文中任何技术细节有疑问,以官方最新文档为准。本文不含任何攻击步骤、利用载荷与绕过手法,请勿将内容用于非自有、未获授权的系统。
第一章 蒸馏是什么
1.1 Teacher 与 Student 的角色
模型蒸馏的核心思想是"让小模型向大模型学习"。我们把参数量大、效果好的模型称为 Teacher(教师模型),把目标部署的小模型称为 Student(学生模型)。
传统监督学习只用到训练集的 hard label(例如"这张图是猫"),而蒸馏让 Student 同时学习 Teacher 输出的概率分布,从而拿到更丰富的"类别之间相似性"信息。
1.2 Soft Label 与温度 (Temperature)
Teacher 输出的原始 softmax 概率里,正确答案往往占大头,但错误答案中也藏着结构信息(比如"狗 0.08、狼 0.02")。蒸馏用一个温度系数 T 软化分布:
softmax(z_i / T) 除以 Σ softmax(z_j / T)
T 越大,分布越平滑,错误类别的相对概率被放大,Student 能学到更多暗知识。这部分超参(T 取值、损失权重等)需结合任务调,本文给出的是入门骨架,具体数值待验证。
第二章 蒸馏和量化不是一回事
2.1 量化改的是推理表示
我之前写过「小模型量化」:它的思路是把高精度权重压成低精度表示,降低显存与计算量,模型结构基本不变,改的是"推理时怎么表示参数"。量化几乎不碰训练过程,部署侧改动为主。
2.2 蒸馏改的是训练过程
蒸馏则相反:它需要一个训练阶段,让 Student 在 Teacher 监督下重新学一遍,得到结构更小、但"被教过"的模型。两者可以叠加——先用蒸馏得到小模型,再量化进一步压缩,是常见组合。
第三章 为什么非要用小模型
3.1 成本与延迟
大模型每次推理的算力成本高,且响应延迟随参数量上升。在高频、对延迟敏感的业务(如实时推荐、端侧输入)里,小模型的单次成本与延迟通常更友好。
3.2 边缘与私有部署
很多场景数据不能出内网,或要在手机、嵌入式设备上跑。此时小模型能放进有限内存,离线可用,也更便于私有化交付。蒸馏是"把大模型能力留下、把大模型体积卸掉"的常用手段。
第四章 典型蒸馏流程
4.1 用大模型打软标签
第一步:把训练数据喂给 Teacher,收集它的软化输出(soft label)作为监督信号。你也可以同时保留原始 hard label,做混合监督。
4.2 小模型学习
第二步:Student 用一份组合损失训练——一部分对齐 Teacher 的软标签(通常用 KL 散度),一部分对齐真实标签(交叉熵)。训练完,Student 即可独立部署,不再依赖 Teacher。
第五章 蒸馏损失怎么写
5.1 PyTorch 风格伪代码
下面是一段未实际跑过的训练骨架,仅用于说明损失组合方式,超参待验证:
⚠️代码待验证
importtorchimporttorch.nn.functionalasFdefdistillation_loss(student_logits,teacher_logits,labels,T=4.0,alpha=0.7):# 软标签损失:KL 散度对齐 Teacher 的软化分布soft_s=F.log_softmax(student_logits/T,dim=-1)soft_t=F.softmax(teacher_logits/T,dim=-1)kd_loss=F.kl_div(soft_s,soft_t,reduction='batchmean')*(T*T)# 硬标签损失:常规分类ce_loss=F.cross_entropy(student_logits,labels)returnalpha*kd_loss+(1-alpha)*ce_loss第六章 蒸馏还是直接调 API
6.1 怎么选
如果你的场景调用量不大、能接受网络依赖、且数据允许上云,直接调大模型 API 往往更快上线,不必自训。
如果调用频次高、成本敏感、要求低延迟或离线/私有部署,那蒸馏出自有小模型更划算。注意:蒸馏需要你有 Teacher 模型、训练数据与算力,前期投入比调 API 大。
第七章 入门实践建议
7.1 上手路线
建议先从"已开源的小模型 + 现成 Teacher"做起:用公开数据集跑通上面的损失函数,观察 Student 在验证集上的表现是否接近 Teacher,再逐步尝试不同 T 与 alpha。具体超参组合与最终收益因任务而异,待验证。
写在最后:这篇用到的资料
写这篇文章时,我在把「小模型怎么继承大模型能力」这件事理成可落地的路子,顺手也整理了几份配套的东西:
- 模型蒸馏入门图解:Teacher/Student 与温度软标签一张图讲清
- 小模型落地检查单:什么场景该蒸馏、什么场景直接用 API
- 蒸馏损失伪代码模板:可套用的 PyTorch 风格训练骨架
资料是我自己整理的,放在下面这个码上,扫码即可获取:
资料较多,建议先看「全套 AGI 大模型学习路线」,再挑一个实战项目跟练。
附表 A 本文引用事实与出处对照表
| 序号 | 事实 | 出处 | 本文位置 |
|---|---|---|---|
| 1 | 蒸馏让 Student 学习 Teacher 的软标签分布 | 社区共识(待验证) | 第一章 |
| 2 | 温度 T 用于软化 softmax 输出分布 | 社区共识(待验证) | 1.2 |
| 3 | 量化压缩的是参数表示、不改训练 | 社区共识(待验证) | 第二章 |
| 4 | 蒸馏与量化可叠加使用 | 社区共识(待验证) | 2.2 |
| 5 | 蒸馏损失常由 KL 散度与交叉熵组合 | 社区共识(待验证) | 第五章 |
| 6 | 高频低成本场景更适合自蒸馏小模型 | 社区共识(待验证) | 第六章 |
附表 B 术语速查表
| 术语 | 英文 | 一句话解释 |
|---|---|---|
| 模型蒸馏 | Knowledge Distillation | 让小模型在教师模型监督下学习其输出分布 |
| 教师模型 | Teacher Model | 参数量大、效果好的被模仿模型 |
| 学生模型 | Student Model | 目标部署的小模型 |
| 软标签 | Soft Label | Teacher 输出的软化概率分布 |
| 温度 | Temperature | 软化 softmax 分布、放大暗知识的系数 |
| KL 散度 | KL Divergence | 衡量两个概率分布差异的损失 |
| 量化 | Quantization | 把高精度参数压缩为低精度表示 |