📚 核心思想
知识蒸馏由 Hinton 等人在 2015 年系统推广:先训练一个能力强但笨重的教师模型, 再让一个轻量的学生模型不仅学习真实标签(硬标签),还学习教师对各类别的概率分布(软标签)。
软标签里含有「各类别相对可能性」——例如某张图 90% 像猫、8% 像狗,这种暗知识(dark knowledge)比单纯的「是猫」信息更丰富,小模型更容易学到类间相似性。
🧮 损失函数与温度 \(T\)
对 logits \(z\) 除以温度 \(T\) 再 softmax:\(T\) 越大,分布越「软」(各类概率更接近);\(T=1\) 为普通 softmax。
\(\mathcal{L}_{\text{hard}}\):学生与真实标签的交叉熵;\(\mathcal{L}_{\text{KL}}\):学生与教师软分布的 KL 散度。 乘以 \(T^2\) 是为了保持梯度尺度(Hinton 原文中的标准做法)。\(\alpha\) 在硬/软损失间权衡。
🏷️ 硬标签 vs 软标签
对同一个样本 \((x_1, x_2)\),本演示里会有两种「正确答案」形式: 硬标签来自数据生成规则算出的真实类别 \(y\); 软标签来自已训练教师对该点的类别概率(经温度 \(T\) 的 softmax)。
硬标签(Hard Label)
只告诉你唯一正确类别,常见写法是 one-hot 向量或整数 \(y \in \{0,1\}\)。 例如真实类别为 1 时,硬标签可写成 \([0,\,1]\)——类 0 概率为 0,类 1 概率为 1,没有「也许有点像另一类」的信息。
在本页散点图上,每个点的颜色就是硬标签:蓝点 \(y=0\),橙点 \(y=1\)。 点 ② 学生(仅硬标签) 的损失只含 \(\mathcal{L}_{\text{hard}}\),相当于只背标准答案。
软标签(Soft Label)
教师对各类别给出的概率分布,各类概率之和为 1,且错误类上往往仍有非零概率。 例如 \([0.12,\,0.88]\) 表示「更像类 1,但类 0 也有一点可能」——这就是暗知识:类间相对关系。
温度 \(T\) 越大,分布越平坦(更「软」);\(T=1\) 为教师普通预测。 点 ③ 学生(蒸馏) 同时学硬标签与教师的软分布(\(\mathcal{L}_{\text{hard}} + \mathcal{L}_{\text{KL}}\))。 下方大图里的紫色背景即教师在各处的软概率(类 1 越深紫越高)。
这与常见知识蒸馏流程一致:学生在与教师相同(或教师已标注)的训练数据上学习; 差别在于监督信号——② 只有硬标签,③ 额外用教师在同一点上给出的软标签。 真实项目里教师可能先在更大数据上预训练,也可能另有验证集;本页为便于对比做了简化。
⚖️ 为何有效 & 常见变体
| 要点 | 说明 |
|---|---|
| 暗知识 | 错误类上的非零概率揭示类间相似度(如 7 与 1 的写法) |
| 正则化效果 | 软目标相当于平滑标签,减轻学生过拟合硬 one-hot |
| 模型压缩 | 大模型 → 小模型,适合边缘部署、低延迟推理 |
| 自蒸馏 / 在线蒸馏 | 同一网络不同层或不同 checkpoint 互教,无需独立大模型 |
| 特征蒸馏 | 对齐中间层表示,不只对齐输出概率 |
📦 演示数据如何生成?
本页数据全是合成的二维二分类,用于教学,并非真实采集数据。生成方式统一为两步:
- 随机采样坐标 \((x_1, x_2)\):按所选规则从某种分布里抽点(多为高斯或均匀);
- 确定性打标签 \(y \in \{0,1\}\):用固定公式由坐标算出类别(同一坐标永远同一标签)。
点击「重新生成数据」会重新随机抽点,但打标公式不变;切换下方数据类型会换一套公式。网络权重初始化也含随机性,故每次完整实验结果会略有波动。
🎮 交互演示:二维分类小例子
教师是较大的神经网络(2→24→24→2,tanh),学生是线性分类器(2→2,容量小)。 三者共用当前画面上的同一批 120 个点(见上文「硬标签 vs 软标签」)。 对比「只学硬标签」(②)与「硬标签 + 教师软标签蒸馏」(③)时的决策边界与准确率。
选择数据生成规则
👀 如何从图上看蒸馏效果?
建议按顺序点按钮:① 训练教师 → ② 仅硬标签 → ③ 蒸馏,再对照下面三张图与损失曲线。参数可先设 T≈4、α≈0.3,数据类型选「环带⊕象限」或「XOR」更容易看出差别。
● 蓝点 = 真实类别 0, ● 紫点 = 真实类别 1。 分类对了 = 边界把同色点分在同侧。
线是模型「认为 0/1 分界」的位置(须先点对应训练按钮才会出现):紫线+白边教师、灰线硬标签学生、绿线蒸馏学生。 紫线与紫点同色,教师图用白边描边以便辨认。
各图上方「训练集准确率」= 有多少散点被分对(本演示未单独划测试集)。 一般:教师最高 → 蒸馏学生次之且接近教师 → 仅硬标签最低。
仅蒸馏图有:淡紫区域 = 教师认为「更像类 1」。 绿线若贴着紫色背景形状走,说明学生在学教师的软知识,而不只是死记 0/1。
- 蒸馏图 绿线 与教师 紫线 形状更接近,而 灰线 更直、更偏、或明显偏到一侧;
- 蒸馏学生准确率 高于 仅硬标签学生(可多试几次「重新生成」或换 XOR / 环带数据);
- 错分点(边界切进对方色块里的点)在蒸馏图上 更少;
- 损失曲线里 绿色(蒸馏)最终往往不低于灰色,且边界更合理时准确率更高。
完成训练后,这里会显示针对当前结果的简要读图提示。
🎓 教师(大网络)
点击 ① 训练教师 后:淡紫背景 = 教师认为「像类 1」的区域;紫线/橙点 = 决策边界(P=50%)。若准确率约 60% 且无紫线,多为教师塌缩成「几乎全判一类」——请再点训练或看「概率跨度」是否 >20%。
📋 学生 · 仅硬标签
线性学生能力弱:灰线多为直线或很简单;错分点多、准确率通常明显低于教师。
✨ 学生 · 知识蒸馏(硬 + 软)
重点对比:绿线是否比灰线更贴近背景紫区与教师紫线;绿线若更贴合弯曲分界,即蒸馏在起作用。
损失曲线:数值越低不一定等于分得更准,最终以图上边界与准确率为准;绿色为蒸馏总损失(含软标签项)。
🌍 应用场景
- BERT → DistilBERT、大语言模型 → 小模型部署
- 视觉 backbone 压缩(ResNet → MobileNet 系列常结合蒸馏)
- 集成多模型蒸馏为单模型(ensemble distillation)
📖 扩展阅读
- Hinton et al., Distilling the Knowledge in a Neural Network (2015) — arXiv:1503.02531
- Wikipedia: Knowledge distillation
- 相关:本站 过拟合与欠拟合、机器学习入门