赵师傅这家川菜馆有个烦恼:名声在外,客人越来越多,可手艺顶尖的大厨只有一位。分店要开,总不能每家店都让他凌晨四点到店颠勺吧。于是赵师傅开始带徒弟,但他不教徒弟死背菜谱——菜谱是“盐5克、醋10毫升”这种标准答案,背得再熟也做不出那股锅气。他教的是自己几十年练出来的“手感”:油温烧到几成热用眼睛就能看出来,这勺豆瓣酱该放多半勺还是少半勺,客人说“微辣”时到底该放几颗辣椒。徒弟把整套心法琢磨透了,再配上勤学苦练的基本功,出师后做的菜能有师傅八分火候。 这个故事,就是 AI 领域“知识蒸馏”(Knowledge Distillation)的缩影。大模型就像一个见识广博的老师傅,什么都懂、但太重了端不动;小模型像身板单薄的徒弟,跑得快但懂的东西太少。蒸馏要做的,就是让老师傅把自己“脑中的分寸感”——不只是正确答案,还包括面对模糊问题时的那份犹豫和权衡——原原本本传给徒弟,让徒弟用更小的个头装下老师的智慧。这条“以师带徒”的技术路线,已经成为把大模型塞进手机、耳机、摄像头等小设备的头号利器。
对 AI 从业者而言,掌握知识蒸馏意味着你不再为“模型太大跑不动”而焦虑——把云端重模型的智慧搬进端侧轻模型,是从“只会调参”迈向“能落地部署”的必修课。
目录
可视化演示
展示两个事务并发执行时的读写操作调度,实时检测读写冲突和写写冲突,帮助理解并发控制的重要性。
本节配有交互动效(进入视口后自动加载,约 3KB)。
事务并发调度 T1时间线红色,T2时间线粉色 写操作橙色,读操作绿色 冲突:W-R 或 W-W 不同事务对同一数据项的读写操作构成冲突
蒸馏原理:师徒传承的智慧
赵师傅带徒弟的第一步,不是让徒弟抄菜谱,而是先立下规矩——“你要学的是我的判断力,不是我的答案”。他让徒弟坐在灶台边看自己颠勺,一边做一边念叨:“这糖色炒到枣红色就下肉,别等它发黑;豆瓣酱要先剁细再下油,香味才出得来。”这些话,就是菜谱上不会写的“软知识”。知识蒸馏的原理正是如此:大模型当“老师”,小模型当“学生”,老师不仅给学生标准答案(硬标签),更把自己面对每个输入时“心里那杆秤”——各分类的概率分布——完整告诉学生。
技术上说,知识蒸馏由 Hinton 在 2015 年系统提出。训练分两个阶段:先训练一个高精度的大模型作为教师,然后冻结教师参数,用它指导学生模型的训练。学生每看一个样本,要同时满足两个目标:一是别答错真实题目(硬标签),二是“答题风格”要像老师(软标签)。这两股力量合在一起,构成蒸馏损失函数:
这份“学艺计划书”上永远写着两条线:一条是基本功标准,一条是师傅心得。把两者合成一个损失函数,就是知识蒸馏的第一性原理——学生模型每学一步,都在“既答对题、又像老师”的双重约束下成长。
- 总损失学生模型训练的总目标,由两项损失加权求和得到,训练就是让这个值不断变小。
- 硬标签损失学生输出与真实标签之间的交叉熵(CE),保证基础分类正确,相当于“背标准答案”。
- 软标签损失学生与教师软输出之间的 KL 散度,让学生的“做题手感”向老师靠拢。
- 平衡系数α 固定软硬两股力量的配比,α 大则更看重标准答案,α 小则更在意老师心得。
软标签机制:老师的心得笔记
赵师傅给徒弟的“心得本”上,对招牌菜是这么写的:“这盘鱼香肉丝,起锅时八分鱼香、两分回甜,别做成死咸。”注意,他没写“这就是鱼香肉丝”一句话完事,而是给了个比例。这个“带比例的答案”,就是软标签的朴素形态。AI 里的硬标签,是 one-hot 向量:一张猫的图片,标签是 [1, 0, 0],猫就是猫,毫不含糊。而软标签是模型输出的概率分布:猫 0.8、狗 0.15、鸟 0.05——模型“心里”认为这图八成像猫,但也没完全排除狗和鸟。
这个分布里藏着的,正是深度学习里珍贵的“暗知识”(dark knowledge)。对猫和狗都算不准的鸟图?在硬标签里,鸟图就是“鸟”,一点信息都不给;但在软标签里,模型会流露“这图有点像猫又有点像狐狸”的犹豫,这种类别间的相似关系,是数据标注永远不会告诉你的隐性知识。学生模型透过软标签,等于捡到了一本“老师多年踩坑总结的错题集”。
软标签的数学基础,是模型最后一层输出的 softmax 归一化:
这组概率,就是师傅心得本上的“火候比例”。它比硬标签多了一层维度:不仅告诉你答案,还告诉你模型在答案之间的取舍,而这份取舍,正是小模型最值得偷师的部分。
- 第 i 类得分模型对第 i 个类别给出的原始打分,也叫 logit,可以理解为“这家店给这道菜打的底分”。
- 指数放大对得分取指数,拉大优势类别与劣势类别的差距,同时保证结果非负。
- 归一化分母把所有类别的指数值加起来,作为总刻度。
- 概率输出第 i 类得分占总刻度的比例,即模型认为输入属于类别 i 的概率。
温度系数调参:讲解的细腻程度
同一个赵师傅,对不同的徒弟,说话方式完全不同。对悟性高的徒弟,他一句“老规矩”就够;对刚入门的小白,他会掰开揉碎讲:“油温六成热,就是筷子插进去冒小泡的状态,你再看这肉丝下锅后边缘起的那层细密小泡……”这种“讲解的细腻程度”,对应到蒸馏里就是温度参数 T。
在蒸馏中,计算软标签时要在 softmax 里除一个温度 T:
温度对软标签形态的影响是决定性的。T=1 时,这就是普通 softmax,老师正常说话;T 增大到 4 或 8 时,概率分布被“摊平”,类别间的细微差异也被放大,学生能听到老师更多的内心戏;T 趋近于 0 时,分布会收缩成近乎 one-hot 的硬标签,相当于老师惜字如金,只报一个答案。
调参策略上,常用做法是选一个适中的固定温度(如 4)训练全程使用;也可以像炒菜先大火收汁再小火慢煨一样,训练初期用高温让学生快速把握全局,后期降温微调细节。温度太高,分布平得像白开水,学生什么都学不到;温度太低,又回到硬标签的老路,丢了暗知识。找到那个“讲得够细、又不啰嗦”的温度,是蒸馏工程师的基本功。
- 温度缩放把原始分数 z_i 除以温度 T,T 越大相当于把分数差距缩小。
- 指数归一化与普通 softmax 结构相同,只是内部多了温度缩放,输出仍是概率分布。
- 极限高温T→∞ 时所有类别的概率趋于相等,老师讲得“面面俱到”但失去重点。
- 极限低温T→0⁺ 时概率集中于最大得分那一类,退化为硬标签,老师只报最终答案。
教师模型选择:找个好师傅
赵师傅收徒前,街坊都建议他请位“名厨大家”来坐镇。可赵师傅心里清楚:请来的大师若只会做宫廷菜,跟川菜馆的烟火气不搭,徒弟学个四不像,还不如自己亲自带。教师模型的选择,同样是这个道理——不是越有名、越大越好,而是要“适合当老师”。
什么样的模型是好老师?第一,容量要足够大。大模型的表示能力更强,学到知识更完整,才有东西可教。第二,要有良好的预训练基础。一个从零训练的小模型,自己都没学明白,更别说教别人;而预训练大模型已经见过海量数据,表达的知识更稳健。第三,输出 logits 的质量要高——对难样本、模糊样本的区分能力要强。如果一个老师面对难题自己都懵,学生跟着学也只会更懵。
实践中,还有一个提高老师“教学质量”的技巧:集成教师。与其把宝押在一位老师身上,不如让几位各有所长的老师共同出题:
选教师还有个隐含标准:教师得“讲得清楚”。一个过于自信的教师,softmax 分布常常尖得像根针,学生反而学不到类间关系;一个训练不足的教师,分布又太混沌。经验上,比学生强一两个量级、但在验证集上表现稳健的教师,往往蒸馏效果最好——就像赵师傅这样“够厉害,又愿意为徒弟把话说明白”的师傅。
- 单个教师输出第 m 个教师模型对同一输入产生的 logits 分数。
- 平均集成将 M 个教师的分数逐类取平均,抵消单个模型的偏置。
- 集成软标签对平均后的分数做 softmax,得到质量更高的软标签。
学生模型设计:徒弟的身板与天赋
赵师傅挑徒弟,不看谁嘴甜,先看“身板”:臂力够不够颠勺,腕力稳不稳刀工。身板太单薄,师傅心法再妙也练不成;但也不必个个都练成大力士,毕竟后厨空间有限,颠勺的锅也要合手。学生模型的设计,就是给任务挑一副“合身的身板”。
学生模型的结构通常比教师轻量得多,常用轻量网络(如 MobileNet、ShuffleNet)或剪枝后的紧凑结构,但也不能无脑小。过小的模型表示能力不足,软标签里的暗知识根本“装不下”,最终精度会塌方;过大的模型虽然能学得更像,却违背了压缩的初衷——手机端部署要的不是一块更大的电池,而是一顿饭的工夫就能跑完的轻量推理。
设计学生模型时,需要从参数量级、深度宽度、部署约束三个角度综合权衡。参数量直接决定模型大小和内存占用,一个直观的计算方式是逐层累加权重和偏置:
学生模型的“天赋”也要与数据量匹配。数据量大,可以适当加宽加深;数据量小,模型太大会过拟合,学到的全是噪声。记住赵师傅的话:徒弟的身板决定上限,但后厨的灶台大小决定下限——部署时的内存、时延、功耗预算,才是学生模型设计的真正边界。
- 卷积核参数第 l 层卷积的权重个数,等于输入通道 × 输出通道 × 卷积核边长平方。
- 偏置参数每个输出通道对应一个可学习的偏置项。
- 逐层累加把网络所有层的参数求和,就是模型总体量。
蒸馏训练流程:拜师学艺的完整套路
徒弟学艺有一套固定的流程:先在旁边看师傅做菜(教师前向推理出软标签),然后自己上手做一遍(学生前向推理),最后跟师傅的作品对照,找出哪里火候过了、哪里味道淡了(计算蒸馏损失并反向更新)。蒸馏训练也是这三板斧。
流程上,先在训练集上把教师模型训好并冻结,然后让教师和学生同时前向推理同一批数据。学生模型的梯度来自两条路径:一条来自硬标签的交叉熵,另一条来自与教师软标签的 KL 散度。所谓 KL 散度,就是衡量“学生分布 Q 相对于教师分布 P 偏离了多少”:
训练环节里有几个提升效果的技巧。一是温度配合:软标签损失必须在同一个温度下算,且最后反向传播时要补回一个 T² 因子(因为梯度会随温度缩放),保证温度变化不改损失尺度。二是混合蒸馏:除了模仿教师软输出,还可以让学生的中间层特征也对齐教师的中间层特征,相当于让徒弟不只学成品菜,还要学切菜的刀法。三是损失配比:α 通常取 0.5~0.9,训练初期可以稍大,让学生先稳定基础,再逐步增加软标签的权重。
整套流程的核心精神,是“看一遍、做一遍、改一遍”。教师不需要参与梯度更新,只是一个安静的示范者;学生则在每一次反向传播中,既校正答案、又向老师的风格靠拢,一步步把师傅多年的手艺浓缩进自己的小身板里。
- 教师分布教师软标签中第 i 类的概率,是学生要模仿的“目标手感”。
- 学生分布学生软标签中第 i 类的概率,是当前的实际手感。
- 对数比率逐类计算 P 相对 Q 的“惊讶程度”——如果学生认为某类概率很小而老师认为很大,这一项就会很大。
- 加权求和用 P(i) 作为权重,把所有类别的差异汇总成一个非负数,越接近 0 越好。
效果评估方法:出师考核
徒弟三年学艺期满,能不能出师,赵师傅有三条硬标准:第一,招牌菜的口味要达到师傅的八成(精度);第二,上菜速度要比师傅快(速度);第三,一个人能同时看三口锅(成本)。知识蒸馏的效果评估,同样是三维考核:精度、压缩率、推理速度。
精度对比是最直观的指标:把学生模型拿到和教师相同的测试集上,看准确率掉了多少。一个合格的蒸馏,学生精度应接近教师,甚至在数据充足时反超也不奇怪——因为教师软标签相当于免费做了一次数据增强。压缩率衡量“身板缩水了多少”:
推理速度是端侧部署的生命线。同样的任务,教师可能需要 200ms,学生如果 50ms 内跑完,才算真正“出师”。实践中还要看内存峰值、功耗、首帧延迟等,综合成一个部署预算表。最后一步是端侧上线:把学生模型量化、编译成端侧推理引擎的格式,在真实设备上做灰度验证,对比线上业务指标——比如语音唤醒率、推荐点击率——确认压缩没有伤到业务根基。
还有一项容易被忽略的指标:精度保持率,即学生精度除以教师精度。比如教师 95%、学生 90%,保持率约 94.7%,说明蒸馏保住了大部分能力。评估的终极标准不是某一项达标,而是“精度、速度、体积”三者同时满足业务预算——就像出师考核不是单看某道菜,而是看徒弟能否在小店后厨里独当一面。
- 教师参数量大模型的总参数量,代表“老师傅的全部本事”。
- 学生参数量小模型的总参数量,代表“徒弟的身板大小”。
- 压缩率两者之比,衡量模型被压缩了多少倍。
实践应用场景:学成的徒弟走向江湖
徒弟出师后开了自己的小馆子,不搞大酒楼排场,靠几道拿手菜和亲民价格站稳了脚跟。这正是知识蒸馏在工业界的写照:教师模型留在云端大酒楼,学生模型走进千千万万小终端里掌勺。
最典型的场景是端侧部署。手机上的语音助手、相机里的场景识别、耳机里的唤醒词检测,都要求在本地实时推理、不能频繁联网。把动辄上百 MB 的大模型蒸馏成十几 MB 的轻量模型,就能在芯片上流畅运行,同时保护用户隐私。其次是大规模模型压缩降本:云端推荐系统每天要响应几十亿次请求,若能把百亿参数的大模型蒸馏成亿级小模型,推理机器成本能下降一个数量级。再次是迁移学习辅助:当新任务数据稀缺时,先用大模型在类似任务上预训练,再蒸馏给小模型,可以让小模型“继承”大模型在其他领域学到的一般特征,从而在小数据上也能快速收敛。
工业落地的路径通常遵循一个固定套路:先用云端数据训练一个强教师,设定好压缩目标(体积、延迟、精度下限),然后设计学生结构、调温度、定损失权重,最后在端侧做量化部署与 A/B 验证。整个过程,就是一次完整的“师带徒”——师傅的本事通过蒸馏这一纸“结业证书”,被合法地继承到学生身上。当你在手机上喊一声就能唤醒语音助手、摄像头里的小模型能实时识别缺陷时,别忘了背后那位默默发光的大模型老师傅。
AI 应用场景
手机端语音唤醒词模型压缩
阶段:模型压缩与端侧部署
解决的问题:云端语音识别大模型准确率高,但手机本地实时跑会卡顿、掉电快;传统做法要么联网等响应,要么离线用弱模型牺牲体验。知识蒸馏让本地小模型继承大模型的“语音理解手感”,离线也能高效唤醒。
具体案例:某语音助手团队用大 Transformer 模型做教师,蒸馏出一个 MobileNet 结构的学生模型,温度 T=4、α=0.7。参数量压缩 16 倍,唤醒率保持教师的 95%,端侧时延从 220ms 降到 45ms,且数据不出手机,隐私也保住了。
工业质检边缘盒子部署
阶段:模型压缩与边缘部署
解决的问题:产线缺陷检测用 GPU 服务器成本高、网络一抖就停摆,边缘盒子算力又有限。蒸馏让边缘小模型直连摄像头,实时输出检测结果,网络断点也不慌。
具体案例:某电子元件厂在云端训练了高精度缺陷检测大模型,蒸馏成适配 Jetson 边缘盒子的轻量学生模型。软标签保留了“这个瑕疵更像划痕还是压痕”的类间知识,学生模型误检率仅上升 0.3%,单机支持 8 路摄像头同步检测。
推荐系统在线推理降本
阶段:模型压缩与在线推理优化
解决的问题:搜广推大模型参数动辄几十亿,在线预测需部署庞大 GPU 集群,成本极高。蒸馏把大模型的“偏好分布”压缩进轻量学生模型,在几乎不损效果的前提下让在线服务成本大幅下降。
具体案例:某内容平台用 10 亿参数排序大模型当教师,蒸馏出千万级参数的学生模型。教师输出的软标签中包含“用户可能喜欢 A,但也不排斥 B”这类细粒度偏好,学生模型照单全收,在线 TPS 提升 8 倍,A/B 实验点击率基本持平。
Python 演示
import torchimport torch.nn as nnimport torch.nn.functional as Ffrom torch.utils.data import DataLoaderfrom torchvision import datasets, transforms class TeacherNet(nn.Module): def __init__(self): super(TeacherNet, self).__init__() self.fc1 = nn.Linear(784, 512) self.fc2 = nn.Linear(512, 256) self.fc3 = nn.Linear(256, 10) def forward(self, x): x = x.view(x.size(0), -1) x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) return self.fc3(x) class StudentNet(nn.Module): def __init__(self): super(StudentNet, self).__init__() self.fc1 = nn.Linear(784, 128) self.fc2 = nn.Linear(128, 10) def forward(self, x): x = x.view(x.size(0), -1) x = F.relu(self.fc1(x)) return self.fc2(x) def distillation_loss(student_logits, teacher_logits, labels, T, alpha): """蒸馏损失: 硬标签交叉熵 + 软标签KL散度""" loss_hard = F.cross_entropy(student_logits, labels) loss_soft = F.kl_div( F.log_softmax(student_logits / T, dim=1), F.softmax(teacher_logits / T, dim=1), reduction="batchmean" ) * (T * T) return alpha * loss_hard + (1 - alpha) * loss_soft def load_mnist(batch_size=128): transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) train_set = datasets.MNIST("./data", train=True, download=True, transform=transform) return DataLoader(train_set, batch_size=batch_size, shuffle=True) def train_teacher(teacher, train_loader, epochs=1): optimizer = torch.optim.Adam(teacher.parameters(), lr=1e-3) for epoch in range(epochs): for data, target in train_loader: optimizer.zero_grad() loss = F.cross_entropy(teacher(data), target) loss.backward() optimizer.step() return teacher def train_student(student, teacher, train_loader, epochs=2, T=4.0, alpha=0.7): optimizer = torch.optim.Adam(student.parameters(), lr=1e-3) for epoch in range(epochs): for data, target in train_loader: teacher_logits = teacher(data).detach() student_logits = student(data) loss = distillation_loss(student_logits, teacher_logits, target, T, alpha) optimizer.zero_grad() loss.backward() optimizer.step() def count_params(model): return sum(p.numel() for p in model.parameters()) if __name__ == "__main__": loader = load_mnist(batch_size=128) teacher = TeacherNet() student = StudentNet() teacher = train_teacher(teacher, loader, epochs=1) train_student(student, teacher, loader, epochs=2) tp, sp = count_params(teacher), count_params(student) print("教师参数量:", tp) print("学生参数量:", sp) print("压缩率: {:.2f} 倍".format(tp / sp)) print("蒸馏训练完成, 学生模型可部署到端侧设备")
class TeacherNet(nn.Module)定义教师网络,三层全连接,容量较大,负责“传授知识”。class StudentNet(nn.Module)定义学生网络,两层全连接,参数量远小于教师,负责“接棒”。teacher(data).detach()推理教师输出并阻断梯度,教师被冻结、不参与学生更新。F.kl_div(...) * (T * T)软标签 KL 散度损失,乘 T² 补偿温度缩放导致的梯度尺度变化。loss = distillation_loss(...)蒸馏损失 = α×硬标签交叉熵 + (1-α)×软标签 KL 散度。count_params(model)统计模型总参数量,用于计算压缩率、验证蒸馏效果。
常见误区
误区反正要压缩,干脆用现在最大的模型当老师,学生一定学到最多,蒸馏效果肯定最好。
正解教师模型容量过大、输出过度自信时,软标签分布尖得像根针,类别间的暗知识反而被压缩没了;同时超大模型训练成本翻倍。学生更适合“讲得清楚”的老师——容量适中、预训练充分、logits 质量高,必要时用多个中等教师集成。就像让学生听博导讲四大力学,不如听一位优秀中学老师把牛顿定律讲透。
为何常见:直观上认为“老师越厉害、学生越强”,忽视了蒸馏的本质是知识与容量的匹配,而非单方面碾压。
误区温度越高,软标签越平滑,暗知识保留越多,所以 T 直接设到 10 甚至 100。
正解T 过高时分布趋于均匀分布,类别间的差异被彻底稀释,学生学到的是“什么都差不多”,反而丢失判别性信息。T 通常在 2~8 之间,且要在“平滑传递暗知识”与“保留判别细节”之间做平衡——老师讲得太啰嗦,学生反而抓不住重点。
为何常见:软标签的信息量随 T 升高先增后减,初学者只看到前半段“越平滑越能学类间关系”,就把单调递增当成了准则。
误区软标签包含暗知识,那硬标签就是多余的,学生只匹配教师输出就行。
正解教师也会犯错,软标签里的错误同样会被学生继承。硬标签提供“标准答案”这块地基,软标签提供“答题风格”这座房子,两者缺一不可。损失函数中的 α 平衡正是为此而设——只学软标签就像徒弟只学师傅的怪癖、却没背熟基本法规,迟早出事。
为何常见:宣传软标签优点时容易走向另一个极端,忽略了交叉熵硬损失在蒸馏中兜底防偏的作用。
误区学生模型加宽加深,总能把教师知识学得更全,反正有教师带着不会差。
正解学生模型是为部署服务的,深度宽度必须受限于内存、时延、功耗预算。模型过大会过拟合小数据、增加端侧负担,背离模型压缩的初衷。蒸馏的理想状态是“在约束下逼近教师”,而不是训出另一个没有约束的大模型——赵师傅收徒看身板,不是力气越大越好,要的是在后厨转得开。
为何常见:把蒸馏误解为“加了教师监督的普通训练”,忽略了蒸馏的根本目标是压缩与高效部署。
面试题
Q1. 知识蒸馏的核心思路是什么?
- A.让大模型直接压缩成小模型
- B.让小模型模仿大模型的输出分布← 正确答案
- C.用更多数据训练小模型
- D.剪掉大模型不重要的层
答案:B。知识蒸馏的核心是“师带徒”——教师模型不直接缩身,而是把自己的输出分布(软标签)作为监督信号,让学生模型去模仿。A 理解成了压缩直接操作,C 是数据增强思路,D 是剪枝思路,均非蒸馏本质。
Q2. 硬标签和软标签的本质区别是什么?
- A.硬标签是数字,软标签是文字
- B.硬标签只含类别,软标签含概率分布← 正确答案
- C.硬标签只能用于分类任务
- D.硬软两种标签没有区别
答案:B。硬标签是 one-hot,只告诉“是哪个类”;软标签是概率分布,还包含“像哪个类的可能性有多大”。这份分布里的类间关联正是暗知识,硬标签无法提供,所以 B 正确。
Q3. 温度参数 T 增大时,softmax 输出分布会怎样变化?
- A.概率分布变得更加尖锐
- B.概率分布变得更加平滑← 正确答案
- C.概率分布保持完全不变
- D.概率输出总和会变为零
答案:B。T 增大相当于把原始分数差距缩小,softmax 输出的概率彼此更接近、分布更平滑,暗知识得以保留。T 减小时分布才尖锐,且无论 T 如何变化,概率和恒为 1。
Q4. 温度 T 趋近于 0 时,软标签会变成什么?
- A.均匀分布的软标签
- B.硬标签(one-hot 分布)← 正确答案
- C.高斯分布的输出
- D.伯努利分布的采样
答案:B。T→0⁺ 时,最大得分对应的类概率趋近 1,其他趋近 0,软标签退化成硬标签。老师“惜字如金只报答案”,正是低温极限的含义。
Q5. 知识蒸馏中,以下哪些属于“暗知识”?
- A.类别之间的相似关系← 正确答案
- B.模型对难样本的犹豫程度← 正确答案
- C.模型参数量的大小
- D.训练数据的具体顺序
答案:AB。暗知识藏在软标签分布里:类别相似性(猫狗难分)和模型对困难样本的不确定性都属于它。参数量是模型属性,数据顺序是训练细节,都不是从教师输出中学到的知识。
Q6. 蒸馏损失函数中的 KL 散度项起什么作用?
- A.让学生学到标准答案
- B.让学生匹配教师的软标签分布← 正确答案
- C.让教师反过来向学生学习
- D.主要是加快教师训练速度
答案:B。KL 散度逐类衡量学生分布相对教师分布的偏移,越小越接近。硬标签部分才负责标准答案,教师被冻结不参与训练,KL 散度也无关教师速度,因此 B 正确。
Q7. 选择教师模型时,应考虑哪些因素?
- A.模型容量足够大← 正确答案
- B.自带良好的预训练← 正确答案
- C.输出 logits 质量高← 正确答案
- D.参数量越小越好
答案:ABC。好教师需要容量大、预训练充分、输出区分度高。参数量小恰恰与教师“大而准”的要求相反,D 属于学生模型的设计约束,不是选教师的条件。
Q8. 学生模型设计时需要注意哪些问题?
- A.结构需适配端侧部署← 正确答案
- B.参数量并非越小越好← 正确答案
- C.越深效果必定越好
- D.需考虑推理延迟预算← 正确答案
答案:ABD。学生结构要服从内存、时延、功耗约束;过小则装不下暗知识,过大则失去压缩意义。深度增加未必带来收益,反而可能过拟合或延迟超预算,C 过于绝对。
Q9. 蒸馏训练中,选择合适温度 T 的根本原因是?
- A.高温时软标签更平滑,能保留更多暗知识← 正确答案
- B.高温时梯度消失现象会更严重
- C.低温时模型完全无法收敛
- D.温度只影响训练速度不影响精度
答案:A。温度的核心作用是调节软标签的信息形态——高温摊平分布、透露类间相似性,低温变尖锐、信息收窄。B、C 与实际不符,温度同时影响精度和速度,D 错误。
Q10. 某团队将 OCR 大模型蒸馏到手机端,学生参数量为教师的 1/10,T=12 且 α=0(只用软标签)。最可能出现的问题是?
- A.学生精度大幅超过教师
- B.温度过高导致软标签过度平滑← 正确答案
- C.教师未能提供足够暗知识
- D.学生模型过大无法端侧部署
答案:B。T=12 过高,软标签接近均匀分布,类别差异被稀释;α=0 又放弃了硬标签兜底,学生会学成“和事佬”。A 与常识相悖,C 是教师能力问题而非配置问题,D 与题设相矛盾。