本节摘要:当一个强大的大模型难以部署,可以把它的"判断方式"蒸馏到一个小模型里。本节讲解知识蒸馏用"软标签"传递知识的原理、温度参数的作用,以及它与迁移学习的区别和适用边界。
阅读完本节,你应当能够:
上一节迁移解决"借力",这一节解决"瘦身后别掉太多"。现实场景:你训练出一个很准的大模型,但它在手机上推理太慢、内存装不下。知识蒸馏的思路不是"把小模型从头再训一遍",而是让大模型(老师)把自己的知识"一对一"教给小模型(学生)。
这会引出一个关键前提:能蒸馏的前提,是先有一个已经足够准的大模型。也就是说,知识蒸馏不会替你把模型从烂变好,它的本职是把"已经很好、但太大"的好给尽量保住。所以做蒸馏之前,务必先确认你的大模型在验证集上是真可信的——如果连老师都是半吊子,再好的"转移"也只是在传递垃圾。
陷阱要先点破:若只拿老师的最终答案(硬标签)去训学生,学生学到的只是"答案是什么",可老师真正值钱的是它对各候选接近程度的偏好——比如看到一张图,老师给猫 0.7、狗 0.2、兔 0.1,这种"0.7 比 0.2 更接近"的相对偏好,才是知识。软标签正是把这种连续偏好传下去,学生学得比单纯分类目标更细腻。
用一个具体数字把它说明白。假设老师在判断一张"很像狗的猫"时,输出硬标签是"猫",但它内心的概率分布其实是猫 0.60、狗 0.35、兔 0.05。如果拿硬标签(猫=1,其余=0)训学生,学生完全不知道"这图跟狗也有点像";而拿软标签(0.60/0.35/0.05)训,学生就学会了"猫和狗在这里接近、和兔子远得多"。正是这层"相似关系"让学生模型学到了比标签本身更丰富、更容易泛化的结构知识。
但软标签往往太"尖"(接近 one-hot,好查不出来)。蒸馏引入一个温度参数 T:把 logits 先除以 T 再做软化,让分布更平、大小关系被放大。T 越大,分布越平滑,学生越能学到"这类到底为什么不是另一类"的微妙知识;但 T 太大会把有用的判别信息也抹平。实践中配一个损失 = 蒸馏损失(软标签,配高T) + 学生自带分类损失(硬标签,保正确),两者加权。
T 的实际取值通常落在 1 到 10 之间,太小等于没蒸馏、太大又抹平细节。不少实践建议对同一张图先画出"不同 T 下老师预测分布的平坦程度"来感受一下——T 越大分布压得越平,你要找的是一个"既保留了类间差异、又不过尖"的中间档。这个 T 其实也像超参数一样可以搜索,但它影响的是学生学到的"细腻度",而不是直接的精度曲线,观察时要看学生最终的压缩后验证分。
把原理落到脚本上,蒸馏通常四步走:第一,先把你信任的老师模型完整训练好(或直接用已有的强模型),并在验证集上确认它确实可信;第二,选定学生结构的规模——它要比老师小得多才值得蒸,但又不能小到表达力彻底不足;第三,同时算两笔损失——学生以自己的硬标签分类损失报出"它自己会怎么判",再以老师软标签 + 温度 T 的蒸馏损失学"老师怎么判、为什么偏向这种接近程度",二者加权求和;第四,把 T、以及两个损失的权重系数当超参,在蒸馏的验证集上做一次小而快的搜索。
训练时有个常见的实现细节:老师的前向往往在最开始就把整个数据集跑一遍,把软标签一次性缓存下来,学生训练时直接读缓存,而不用每步都再喂一次老师——这样能省下大量重复计算。学生"边学老师边自摸"(在线蒸馏)在个别场景更准但成本更高,而"把老师输出先算好、离线蒸馏"是绝大多数情况下的性价比之选。要不要更新老师、多久更新一次,也是一道实打实的成本账:离线蒸馏里老师固定不动,最省事也最可复现。
蒸馏不是万能的瘦身术,有几种情况要提前想清楚。一是学生的容量比任务的复杂度还低——如果问题本身很难、你的小结构在没蒸馏时就已经表达力见底,那再好的蒸馏也只是"矮子里拔将军",压下去就真回不来了;此时该先考虑换更大一点的学生结构,而不是硬蒸。二是老师自己就不稳定——对同一张图老师每次给出的软标签抖动很大,那蒸馏传下去的就是噪声偏好,学生学不到稳定的"接近程度"。三是大模型本身在验证集上就只能算及格——这时蒸馏的价值不大,你的第一优先级应该是先救老师,而不是急着复制它。判断一次蒸馏值不值得做,核心一条:老师是否足够强、且学生的压缩依然守得住任务需要的精度。
两者常被搞混,但分工很清楚:
| 维度 | 迁移学习 | 知识蒸馏 |
|---|---|---|
| 动机 | 数据/算力不足 | 模型太大难部署 |
| 传递物 | 网络的通用特征(结构) | 老师的判断偏好(软标签) |
| 起点 | 复用预训练权重 | 训练一个小模型 |
| 关注 | 学起得快 | 学完省推理 |
一句话:迁移给"起重能力",蒸馏给"压缩能力"。实践中常可叠加——先迁移借特征,再蒸馏把大而准的模型压成小而快的学生。
⚠️ 常见坑:T 开太大,蒸馏损失主导,学生学歪了只顾"姿态像"而丢了"答案对";加油时要观察学生自己的硬标签任务损失别跑飞。
💡 直觉:把蒸馏当成"老师全职家教、手把手讲过程,而不是只告诉你答案"。硬件标签给标准答案,软标签+温度像老师把"我为什么这么判"的原因也讲给你听。
蒸馏压缩的是"知识",下面要压缩的是"模型本身"——剪枝与量化。