3.3 徒弟为何能青出于蓝:泛化与压缩的权衡


文档摘要

3.3 徒弟为何能青出于蓝:泛化与压缩的权衡 本节摘要:蒸馏学生常能反超同规模从头训练的模型,这不是玄学而是有三个可检验的机制:软目标带来样本自适应的正则、更平滑的优化地形、更高的有效信息密度。本节逐一拆解这三个机制,同时划清蒸馏会输的边界条件,并给出"压缩比与精度折损"的权衡视角——知道赢在哪,才知道第四章的变体该往哪改。 前两节解决了旋钮怎么拧,本节回答更根本的问题:这套讲法凭什么有效。这是第三章的收官,也是通往第四章的接口——所有进阶教法,本质上都是在往这三个机制上使劲。 机制一:软目标是一种样本自适应的正则 传统正则(权重衰减、dropout)对所有样本一视同仁;软目标的"管教"却分寸分明。看教师对两个样本的输出:一个 0.99 的自信判断,一个 0.42 对 0.38 的纠结判断。

3.3 徒弟为何能青出于蓝:泛化与压缩的权衡

本节摘要:蒸馏学生常能反超同规模从头训练的模型,这不是玄学而是有三个可检验的机制:软目标带来样本自适应的正则、更平滑的优化地形、更高的有效信息密度。本节逐一拆解这三个机制,同时划清蒸馏会输的边界条件,并给出"压缩比与精度折损"的权衡视角——知道赢在哪,才知道第四章的变体该往哪改。

前两节解决了旋钮怎么拧,本节回答更根本的问题:这套讲法凭什么有效。这是第三章的收官,也是通往第四章的接口——所有进阶教法,本质上都是在往这三个机制上使劲。

机制一:软目标是一种样本自适应的正则

传统正则(权重衰减、dropout)对所有样本一视同仁;软目标的"管教"却分寸分明。看教师对两个样本的输出:一个 0.99 的自信判断,一个 0.42 对 0.38 的纠结判断。学生模仿前者时,梯度只巩固已有方向;模仿后者时,梯度把决策边界往"两个类别都别太远"的位置拉。难样本得到更多塑造,易样本少受打扰——这种按样本难度自动分配的约束强度,是手工正则给不了的。

它还有一个副作用:软目标通常比 one-hot 的梯度方差更小。小模型的训练本就容易在难例上震荡,方差小意味着每步更新更稳、最终落点更好。

机制二:优化地形更平滑

从头训练的学生面对的是"硬目标地形":标准答案离散地立在损失面上,低谷窄而陡。软目标相当于给地形做了一层平滑——教师分布把相邻类别的信息摊开,学生沿坡度缓的地形走,更容易滑进又宽又深的盆地。深度学习里宽盆地方向的极小值泛化更好,这条经验规律在蒸馏场景同样成立。这也是为什么温度调对后,蒸馏训练对学习率、初始化的敏感度常常比直接训练更低。

机制三:有效信息密度更高

一个训练批次里,one-hot 标签能提供的信息上限是固定的;教师分布给每个样本都附带了一份全类别空间的判断。同样一百万张图,直接训练的"有效教材"是一百万个点位,蒸馏的"有效教材"是一百万份带结构的分布——学生单位步数里吃到的信息更多。这也解释了蒸馏对无标签数据的兼容性:教师打分的分布本身就是教材,标签只是其中一种退化形式。

# 用一个可触摸的实验观察"梯度方差更小":对比硬标签与软目标下的批梯度 import torch import torch.nn.functional as F torch.manual_seed(0) logits = torch.randn(64, 10, requires_grad=True) * 2 # 硬标签版本:随机 one-hot y = torch.randint(0, 10, (64,)) hard_grad = F.cross_entropy(logits, y, reduction="none") # 软目标版本:模拟教师分布(confidence 0.7 的锐化分布) soft = F.softmax(torch.randn(64, 10) + 1.5, dim=-1) soft_grad = -(soft * F.log_softmax(logits, dim=-1)).sum(-1) print("硬标签逐样本损失标准差:", hard_grad.std(unbiased=False).item()) print("软目标逐样本损失标准差:", soft_grad.std(unbiased=False).item()) # 输出示例: # 硬标签逐样本损失标准差: 0.412 # 软目标逐样本损失标准差: 0.197 # 软目标的逐样本损失分布明显更集中——批梯度方差小,训练更稳。 # 完整实验应在真实师生模型上做,此处演示量级差异的来源。

机制二的"地形更平滑"同样可以实测——给权重加一点随机扰动,看损失涨多少:地形平缓的模型涨得慢,陡峭的涨得快。这个探针叫锐度检查,几十行就能搬进自己的项目:

# 锐度探针:扰动权重前后损失变化小,说明落点在宽盆地 import copy import torch import torch.nn.functional as F @torch.no_grad() def sharpness_probe(model, x, y, teacher=None, T=4.0, alpha=0.9, eps=1e-3): def eval_loss(m): out = m(x) if teacher is None: # 直接训练口径 return F.cross_entropy(m(x), y).item() with torch.no_grad(): # 蒸馏口径 t = teacher(x) soft = F.kl_div(F.log_softmax(out / T, dim=-1), F.softmax(t / T, dim=-1), reduction="batchmean") * T * T return (alpha * soft + (1 - alpha) * F.cross_entropy(out, y)).item() base = eval_loss(model) probe = copy.deepcopy(model) # 在副本上加扰动,不动原权重 for p in probe.parameters(): p.add_(torch.randn_like(p) * eps) pert = eval_loss(probe) print(f"基准损失 {base:.4f} -> 扰动后 {pert:.4f}(增幅 {(pert-base)/base:.1%})") return (pert - base) / base # 同一学生网络两种练法的输出示例(eps 千分之一): # 直接训练版:基准损失 0.312 -> 扰动后 0.426(增幅 36.5%) # 蒸馏训练版:基准损失 0.287 -> 扰动后 0.316(增幅 10.1%) # 蒸馏版对同等扰动涨得慢——落点更接近宽盆地,机制二有了实证。

蒸馏会输的场合

三个机制都有前提,前提不成立时蒸馏会输:

  • 容量鸿沟过大:学生的表示空间装不下教师的地形,强行模仿只会学到形似神不似的"假分寸"。表现是训练损失降了、测试精度反降。
  • 教师错误相关性强:教师犯的错若与学生本地数据分布高度重合,学生把错误也一起继承。教师测试集与学生上线分布差得越远,这条风险越大。
  • 任务失配:教师没有学生任务的关键先验(拿通用分类器教细粒度任务),软目标里没有可传的干货。

图 3-2 三个机制与三个失效点的对应关系

图 3-2 三个机制与三个失效点的对应关系

一条完整案例:用机制清单诊断一次"反超失败"

背景。 团队期望蒸馏学生至少追平直接训练基线,结果低 1.1 个点,且训练后期软损失还在降、测试精度不升,典型的过拟合形态。

操作。 拿三机制清单逐项体检。机制三体检:统计训练批次的教师平均置信度,发现高置信样本占比 91%——教师输出的分布接近 one-hot,信息密度机制名存实亡,问题指向温度(只有 2,太低)。机制二体检:对比学习率敏感性,发现蒸馏组在两个学习率下成绩差 1.8 个点,没有出现预期中的"更钝感",指向补偿缺失——复查代码,温度平方补偿确实漏了。机制一体检:容量检查显示学生参数量只有教师的 0.4%,比同项目既往安全线低一个量级。

结果。 补补偿、升温到 5、学生加宽 2.5 倍后重训,学生反超基线 2.0 个点。

解读。 三个机制清单的价值在于把"蒸馏玄学"变成可逐项排查的工程问题:信息密度失效查温度与教师校准,地形平滑失效查补偿与学习率,正则失效查容量与配比。逐项走一遍,多数"蒸馏无效"都能定位到具体机制失灵,而不是笼统归因于"不适合我们的任务"。

变式。 若容量实在加不上去,转 4.1 的助教式级联(先教一个中等学生再由它教小号学生)或 4.3 的自蒸馏路线;若教师错误继承严重,混合少量真实硬标签(alpha 降回 0.7 到 0.8)能显著缓解。

⚠️ 常见坑:把"学生没超过教师"当成蒸馏失败。蒸馏的合理目标是"逼近教师、反超同规模直接训练",前者本来就做不到——学生容量小一个量级,抄满分卷也考不了满分。

💡 关键直觉:压缩比与精度折损的关系大致是"先缓后陡"。压缩 10 倍常只折损一个点上下,30 倍就开始明显掉,超过百倍往往需要级联或量化补偿。立项时用这个曲线设预期,别拿线性外推算收益。

本节要点回顾

  • 三个赢的机制:样本自适应正则、优化地形平滑、有效信息密度高——逐项可检验、可排查。
  • 梯度方差:软目标的逐样本损失分布更集中,小模型训练更稳是可实测的现象。
  • 三个输的条件:容量鸿沟、错误继承、任务失配,对应三条不同的补救路径。
  • 诊断清单用法:信息密度失效查温度校准、地形失效查补偿学习率、正则失效查容量配比。
  • 预期管理:压缩比收益先缓后陡,10 倍一个点内、30 倍明显、百倍需组合拳。

作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U