想象一位做了三十年淮扬菜的老师傅,决定把手艺传给刚入行的学徒。老师傅不会只丢给学徒一本菜谱让他背——他深知“鲜甜咸辣各有层次,火候刀工皆是功夫”。他会亲自下厨,让学徒观摩每道菜的细节;他会根据学徒的进步,今天教红烧肉,明天教清蒸鱼;他甚至会故意让学徒用不同的食材组合练手,见多识广才能随机应变。几天下来,学徒虽然没有老师傅的功力,但已经学到了老师傅做菜的核心思路。 大模型的世界里,这位老师傅就是“教师模型”(大模型),学徒就是“学生模型”(小模型)。把老师傅的功力传给学徒,这趟“传艺之旅”叫做知识蒸馏。但传艺远不是“把答案抄给学徒”那么简单——什么时候教、用什么材料教、怎么评价学徒的进步,这些细节决定了学徒最终能学到几成功力。本文讲的动态蒸馏和数据增强蒸馏,正是“传艺”过程中最讲究的两门功夫。

岗位关联

掌握动态蒸馏与数据增强蒸馏,你就能在模型压缩实战中把小模型调教得又快又准,这是端侧大模型部署的核心竞争力。

目录
  1. 可视化演示
  2. 蒸馏原理概述
  3. 动态蒸馏机制
  4. 数据增强蒸馏
  5. 温度参数调节
  6. 损失函数设计
  7. 师生模型选择
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示知识蒸馏中温度参数对软标签分布的影响,以及师生模型架构中知识传递与数据增强的完整流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

蒸馏温度对软标签的影响 教师模型:大模型输出原始logits 学生模型:小模型学习软标签 KL散度:衡量分布差异的损失 L = α·T²·KL(p_t||p_s) + (1-α)·CE(y,p_s) 高温软化分布,传递更多暗知识

蒸馏原理概述

老师傅教徒弟时,不会只问“咸了还是淡了”这种非黑即白的问题。他会说:“这道菜鲜味可以,但花椒的麻香被盖住了,木耳的脆度差了一点。”每一句点评都透露着他对食材深处关系的理解。这正是蒸馏区别于传统教学的灵魂:传递的不只是答案,而是答案背后的“知识结构”。

2015 年 Hinton 提出知识蒸馏(Knowledge Distillation, KD),核心思想就是让教师模型的“软标签”去指导学生模型。普通训练用硬标签(one-hot,如“猫=1, 狗=0”),而软标签是一个概率分布(如“猫=0.7, 狗=0.2, 狐狸=0.1”)。这 0.2 和 0.1 看似微不足道,却携带着“猫和狗比猫和狐狸更相似”这类宝贵知识。

要生成软标签,需要在 softmax 中引入温度参数 T:

就像学徒从师傅那听来的每一句细腻点评,软标签里那些微小的概率值,就是大模型用“火候”和“刀工”换来的真功夫。学生模型从软标签中学到的,比从一本写满“对错”的菜谱里学到的多得多。

pi=exp⁡(zi/T)∑jexp⁡(zj/T)\displaystyle p_i = \frac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}
当 T=1 时就是标准 softmax;T>1 时分布变平滑,类别间细微差异被放大,携带的类别关系信息更丰富。
  1. logits z_i教师模型输出的原始得分(未归一化的各类别分数),类似厨师对每道工序给出的“印象分”。
    ziz_i
  2. 除以温度 T将得分按温度缩放,T 越大得分越“柔和”,相当于师傅点评时语气更委婉。
    zi/Tz_i / T
  3. 指数运算对所有缩放后的得分取指数,保证结果非负,同时放大高低分之间的差距。
    exp⁡(zi/T)\exp(z_i / T)
  4. 归一化分母对所有类别的指数结果求和,使概率总和为 1,形成一个合法的概率分布。
    ∑jexp⁡(zj/T)\sum_{j} \exp(z_j / T)
  5. 完整 softmax每个类别的概率等于其指数得分除以总指数和,输出软标签。
    pi=exp⁡(zi/T)∑jexp⁡(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}

动态蒸馏机制

老师傅的教学从来不是一成不变的。第一周,他让徒弟站在旁边看,每道菜从头到尾演示一遍,不管徒弟能不能记住步骤——先混个眼熟。第二周,他开始让徒弟上手,自己只在旁边提点关键环节。第三周,徒弟做菜时,师傅会专门挑毛病:“回锅肉要起灯盏窝,你这火候过了。”教学的重点和节奏,随着徒弟的水平动态变化。

动态蒸馏(Dynamic Distillation)的精髓也在于“因材施教、循序渐进”。固定不变的温度和损失权重,就好比师傅从头到尾用同一种语气教——前期该“广撒网”时太严格,后期该“抠细节”时又太宽泛,效果都打折扣。动态蒸馏根据训练进度动态调整蒸馏温度和蒸馏损失占比等超参数。

一种常用的动态温度调度策略是指数衰减:

动态蒸馏,就是那个会看徒弟眼色调整教法的老师傅。先用“大致方向”把徒弟领进门,再用“细枝末节”把徒弟磨炼成行家——每一个时间节点都有最合适的教学方式。

T(t)=Tmax⋅(TminTmax)t/ttotal\displaystyle T(t) = T_{\text{max}} \cdot \left( \frac{T_{\text{min}}}{T_{\text{max}}} \right)^{t / t_{\text{total}}}
训练初期 T 大,软标签平滑,学生模型快速学到类别间的宏观关系;训练后期 T 趋近 1,软标签接近硬标签,学生模型专注于精细化区分。
  1. 初始温度 T_max训练起点的高温值,通常设为 4~5,此时分布平滑、类别关系丰富。
    TmaxT_{\text{max}}
  2. 终止温度 T_min训练终点的低温值,通常设为 1,此时分布接近硬标签。
    TminT_{\text{min}}
  3. 训练的进度比例 t/t_total当前训练步数占总步数的比例,取值从 0 到 1。
    tttotal\frac{t}{t_{\text{total}}}
  4. 指数缩放将比例作为指数作用于温度比值,使温度按指数曲线从 T_max 平滑衰减到 T_min。
    (TminTmax)t/ttotal\left( \frac{T_{\text{min}}}{T_{\text{max}}} \right)^{t / t_{\text{total}}}
  5. 完整调度函数任意训练时刻 t 的温度值。
    T(t)=Tmax⋅(TminTmax)t/ttotalT(t) = T_{\text{max}} \cdot \left( \frac{T_{\text{min}}}{T_{\text{max}}} \right)^{t / t_{\text{total}}}

数据增强蒸馏

老师傅发现徒弟对常见的青椒肉丝练得滚瓜烂熟,可一遇到冬笋炒肉就手忙脚乱。于是他故意换了各种食材组合,甚至把不常搭配的食材混在一起让徒弟试做。见多识广的徒弟,慢慢学会了做菜的“通法”而不是某一道菜。

数据增强蒸馏(Data Augmentation Distillation)解决的是“见识不足”的问题。当训练数据有限或分布单一时,学生模型能模仿的内容也有限。通过在蒸馏过程中对输入进行增广,让教师模型在更广阔的输入空间上输出软标签,学生模型就能学到更鲁棒的知识。

常见的数据增强策略包括 Mixup 样本混合:

数据增强蒸馏就像是给徒弟的一桌“百变宴席”——同一道菜,换不同的食材、调料、火候反复练,徒弟才能真正掌握做菜的精髓,而不是只会背下某一套菜谱。

x~=λxi+(1−λ)xjλ∼Beta(α,α)\displaystyle \tilde{x} = \lambda x_i + (1 - \lambda) x_j \quad \lambda \sim \text{Beta}(\alpha, \alpha)
Mixup 将两个样本线性混合,教师模型对混合样本的输出也介于两者之间,相当于让教师讲述“中间地带”的知识。
  1. 两个原始样本 x_i 和 x_j从训练集中随机选取的两个输入样本,比如两张不同的菜品图片。
    xi,xjx_i, x_j
  2. 混合系数 λ从 Beta 分布中采样得到的一个 0~1 之间的随机数,控制两个样本的混合比例。
    λ∼Beta(α,α)\lambda \sim \text{Beta}(\alpha, \alpha)
  3. 加权线性组合按比例将两个样本逐元素混合,生成一个新的增强样本。
    x~=λxi+(1−λ)xj\tilde{x} = \lambda x_i + (1 - \lambda) x_j

温度参数调节

师傅点评徒弟的菜,有个“委婉度”的旋钮。旋钮调到很高,师傅连一道做得一般的菜都能找出几个优点;旋钮调低,师傅就直截了当:“咸了,重做。”这个旋钮,在蒸馏中就是温度 T。

温度 T 直接控制教师软标签的“平滑程度”。蒸馏时,学生模型在温度 T 下的梯度遵循如下关系:

温度并不是越高越好。T=10 时各类别概率几乎相同,所有“关系知识”都被抹平了;T=1 时又丢失了类别间的细微联系。实践经验表明,T 取 2~5 通常能兼顾“知识丰富”与“特征清晰”,训练中配合温度衰减效果更佳。温度旋钮,是师傅手里的“语气调节器”——教新手时和气一些,教老手时严格一些,拿捏好这个旋钮,学生模型才能从教师那里汲取到恰到好处的养分。

∂LKD∂zs=1T(pT−ps)\displaystyle \frac{\partial L_{KD}}{\partial z_s} = \frac{1}{T} (p_T - p_s)
温度越高,梯度越小,学生学得越“慢”但越“稳”;这就是为什么损失中需要乘以 T² 来抵消温度带来的梯度缩放效应。
  1. 损失对学生 logits 的偏导蒸馏损失 L_KD 对学生模型原始输出 z_s 的梯度,即“学生该往哪个方向调整”。
    ∂LKD∂zs\frac{\partial L_{KD}}{\partial z_s}
  2. 1/T 缩放因子温度 T 越大,梯度整体缩小,学习更新幅度变小。
    1T\frac{1}{T}
  3. 分布差 p_T - p_s教师软标签分布与学生输出分布之差,学生沿着差值方向调整自己的输出。
    (pT−ps)(p_T - p_s)
  4. 梯度整体关系梯度量级约等于分布差距除以温度。
    1T(pT−ps)\frac{1}{T} (p_T - p_s)

损失函数设计

师傅考核徒弟时,不会只看“菜做熟了没有”这一项。他会从色、香、味、摆盘、创意五个维度分别打分,再按权重汇总。每个维度的权重怎么定,直接决定了徒弟往哪个方向努力。

蒸馏损失的设计,就是几个考核维度的加权组合。最经典的 Hinton 蒸馏损失包含两部分:蒸馏损失(KL 散度)和交叉熵损失:

就像师傅将五个维度按不同权重综合打分,蒸馏损失的设计也是在“模仿教师”和“追随真相”之间寻找最佳平衡。权重调得好,徒弟既不是教师的复印机,也不会丢掉真实世界的正确答案。

L=α⋅T2⋅DKL(pT∥qT)+(1−α)⋅LCE(y,q)\displaystyle L = \alpha \cdot T^2 \cdot D_{KL}(p_T \| q_T) + (1 - \alpha) \cdot L_{CE}(y, q)
其中 p_T 是教师模型在温度 T 下的软标签,q_T 是学生模型的软化输出,y 是真实标签。第一项让学生模仿教师的“思考方式”,第二项保证学生不偏离正确答案。
  1. KL 散度项度量教师软标签 p_T 与学生软化输出 q_T 两个概率分布之间的差距,差距越小学生学得越像教师。
    DKL(pT∥qT)D_{KL}(p_T \| q_T)
  2. T² 系数抵消 softmax 梯度中 1/T² 的缩放效应,使梯度大小与温度选择解耦。
    T2T^2
  3. 平衡系数 α控制蒸馏损失与交叉熵损失的相对权重,通常取 0.5~0.9。
    α\alpha
  4. 交叉熵损失让学生模型直接学习真实标签 y,确保不偏离正确答案。
    LCE(y,q)L_{CE}(y, q)
  5. 完整损失蒸馏损失与交叉熵的加权组合。
    L=α⋅T2⋅DKL(pT∥qT)+(1−α)⋅LCE(y,q)L = \alpha \cdot T^2 \cdot D_{KL}(p_T \| q_T) + (1 - \alpha) \cdot L_{CE}(y, q)

师生模型选择

如果让国宴大师傅去带一个刚切菜的小帮厨,徒弟只会觉得师傅的厨艺高不可攀,学了半天连皮毛都没摸到。师徒之间的“段位差”不能太大,教学才能顺水推舟。

师生模型选择是蒸馏的“前置条件”。教师与学生之间的容量差距、结构差异、初始化方式,都会影响最终蒸馏效果。学生模型的学习目标可以写为:

容量匹配是重中之重。教师模型太强,学生模型无法拟合其输出分布,会产生“过强的软标签”导致学生欠拟合;一般教师参数总量是学生的 2~5 倍较为合理。结构上,教师与学生可以同构(如同为 Transformer 不同层数),也可以异构(如 Transformer 蒸馏到 CNN),后者需要额外的特征对齐模块。初始化时,如果师生结构相似,可以直接用教师的部分权重初始化学生,相当于“继承师傅部分手艺再学新本事”。选师傅,不是越厉害越好,而是“越教得来”越好——师生的段位匹配,决定了蒸馏这趟传艺之旅的顺畅程度。

LKD=Ex∼D[DKL(pT(x)∥pS(x;θS))]\displaystyle \mathcal{L}_{KD} = \mathbb{E}_{x \sim \mathcal{D}} \left[ D_{KL} \left( p_T(x) \| p_S(x; \theta_S) \right) \right]
这个公式表达的是:在教师选定的前提下,学生模型在参数 θS 下要尽量让自己的输出分布贴近教师的输出分布。
  1. 期望符号 E对所有训练数据求平均,类似师傅在所有教学场景下评价徒弟的综合表现。
    Ex∼D\mathbb{E}_{x \sim \mathcal{D}}
  2. 教师分布 p_T(x)教师模型对输入 x 的输出分布,即软标签。
    pT(x)p_T(x)
  3. 学生分布 p_S(x; θS)学生模型以 θS 为参数对同一输入 x 输出的概率分布。
    pS(x;θS)p_S(x; \theta_S)
  4. KL 散度衡量教师与学生分布之间的差异,差异越小说明学生学得越好。
    DKL(pT∥pS)D_{KL}(p_T \| p_S)

AI 应用场景

端侧大语言模型部署

阶段:模型压缩与部署

解决的问题:7B 大模型推理需要数 GB 显存,无法在手机等端侧设备运行。传统做法是直接量化,但精度损失大。使用动态蒸馏+数据增强蒸馏,把 7B 模型蒸馏到 0.5B 学生模型,精度损失控制在 3% 以内,即可在手机端流畅运行。

具体案例:某手机厂商把 7B 参数的对话大模型蒸馏成 0.5B 的端侧模型用于语音助手。教师模型在 1000 万条对话数据上生成软标签,配合温度衰减策略和 Mixup 增强,蒸馏后的模型在手机 CPU 上推理延迟从 8 秒降到 0.4 秒,意图识别准确率仅下降 2.1%。

视觉模型压缩

阶段:模型优化

解决的问题:目标检测大模型参数量大,无法在边缘设备上运行。用数据增强蒸馏,对训练图像做 MixUp、CutMix 等增强,让教师模型在增强图像上输出软标签,指导轻量级学生网络学习。

具体案例:工业质检场景中,用 ResNet-50 蒸馏出 MobileNet-V3 学生模型,在 10 万张增强后的产品图像上蒸馏,缺陷检测 mAP 从 0.72 提升到 0.77,推理速度提升 6 倍。

语音识别模型蒸馏

阶段:模型压缩

解决的问题:大型语音识别模型(如 Whisper-large)无法在嵌入式设备实时运行。通过动态蒸馏,在训练前期用高温让学生快速学习音素分布,后期降低温度精细调优。

具体案例:某智能音箱厂商将 Whisper-large 蒸馏为 3 层 Transformer 学生模型,动态温度从 5 衰减到 1,词错误率(WER)仅增加 1.8%,而实时率从 0.05 提高到 0.005。

Python 演示

python68 行
"""蒸馏训练器: 动态温度 + Mixup 数据增强"""import numpy as np  def softmax_with_temperature(logits, temperature):    """带温度的 Softmax: 温度越高, 分布越平滑"""    logits = logits / temperature    exp_logits = np.exp(logits - np.max(logits, axis=-1, keepdims=True))    return exp_logits / exp_logits.sum(axis=-1, keepdims=True)  def dynamic_temperature(step, total_steps, t_max=5.0, t_min=1.0):    """动态温度调度: 前期高温学宏观, 后期低温学细节"""    progress = min(step / total_steps, 1.0)    return t_max * (t_min / t_max) ** progress  def mixup_batch(x_batch, alpha=0.4):    """Mixup 增强: 两个样本加权混合, 扩充输入分布"""    lam = np.random.beta(alpha, alpha)    idx = np.random.permutation(len(x_batch))    return lam * x_batch + (1 - lam) * x_batch[idx]  def kl_divergence(p, q):    """KL 散度: 度量两个软标签分布的差距"""    p = p + 1e-10    q = q + 1e-10    return (p * np.log(p / q)).sum(axis=-1).mean()  class DistillTrainer:    """动态蒸馏训练器"""     def __init__(self, teacher_w, feat_dim=8, num_classes=10, lr=0.05):        self.teacher_w = teacher_w        self.lr = lr        self.student_w = np.random.RandomState(0).randn(feat_dim, num_classes) * 0.1        self.gc_count = 0  # 梯度更新计数器     def train_step(self, x_batch, step, total_steps, distill_alpha=0.7):        temp = dynamic_temperature(step, total_steps)        x_aug = mixup_batch(x_batch)        teacher_logits = x_aug @ self.teacher_w        soft_target = softmax_with_temperature(teacher_logits, temp)        student_prob = softmax_with_temperature(x_aug @ self.student_w, temp)        loss = distill_alpha * temp * temp * kl_divergence(soft_target, student_prob)        grad = (student_prob - soft_target) / len(x_batch)        self.student_w -= self.lr * (x_aug.T @ grad)        self.gc_count += 1        return loss  def main():    rng = np.random.RandomState(42)    x_train = rng.randn(256, 8)    teacher_w = rng.randn(8, 10) * 0.6    trainer = DistillTrainer(teacher_w)    total_steps = 300    for step in range(total_steps):        batch_idx = rng.choice(len(x_train), 16)        loss = trainer.train_step(x_train[batch_idx], step, total_steps)        if step % 50 == 0:            print(f"step {step:3d}  distill loss {loss:.4f}")  if __name__ == "__main__":    main()
目的:用 NumPy 从零实现一个支持动态温度调度与 Mixup 数据增强的蒸馏训练器,演示教师软标签如何指导学生更新。
  1. def softmax_with_temperature(logits, temperature):带温度的 Softmax,温度越高输出分布越平滑,是生成软标签的核心函数。
  2. def dynamic_temperature(step, total_steps, t_max=5.0, t_min=1.0):温度随训练进度指数衰减,前期高温学宏观、后期低温学细节。
  3. def mixup_batch(x_batch, alpha=0.4):把同一批次内的样本两两加权混合,让教师模型在“中间地带”输出软标签。
  4. loss = distill_alpha * temp * temp * kl_divergence(soft_target, student_prob)蒸馏损失 = α · T² · KL 散度,T² 抵消梯度缩放效应。
  5. self.student_w -= self.lr * (x_aug.T @ grad)用梯度下降更新学生权重,方向是缩小学生分布与教师软标签的差距。

常见误区

误区“蒸馏不就是在训练集上先用教师模型预测一遍,把结果当标签给学生训练吗?跟普通训练没多大区别吧。”

正解这个理解只看到了“软标签”的表层。蒸馏的关键在于软标签经过温度 T 软化后包含了类别间的相似度关系,这是硬标签完全无法提供的。此外,损失函数要同时包含蒸馏损失和交叉熵损失;数据增强、动态温度等手段也都是蒸馏的一部分。简单地用教师预测值当硬标签训练,学生只能学到“答案”,学不到“老师傅的思路”。

为何常见:因为很多介绍蒸馏的文章把流程简化成了“教师预测 → 学生训练”两步,初学者容易忽略软标签和温度这些核心细节。

误区“温度越高,软标签越平滑,包含的信息越多,所以 T 设成 10 甚至 20 效果应该更好吧?”

正解温度过高时,各类别概率趋于均匀,类别间的差异被抹平,反而丢失了关键知识。比如 T=20 时,10 个类别的概率几乎都接近 0.1,学生看不出“猫和狗更相似”还是“猫和飞机更相似”。实践中 T 取 2~5 效果最好,结合温度衰减策略动态调整。

为何常见:直观上“信息越多越好”是常见直觉,但软标签中的“信息”需要同时包含区分度,过度平滑会让信息失去意义。

误区“大模型懂得多,用 70B 的模型去蒸馏一个 0.5B 的小模型,效果肯定比 7B 教师更好吧?”

正解教师太大而学生太小,会产生严重的“能力鸿沟”。70B 教师输出的软标签分布非常精细,0.5B 学生根本没有能力拟合这种精细度,结果是学生的损失居高不下,学到的东西反而不如跟一个中等教师。一般师生容量比控制在 2~5 倍为宜。

为何常见:“越大越好”是深度学习中的常见认知偏差,但蒸馏本质上是一个“模仿”过程,模仿者的能力上限决定了它能从被模仿者那里学到多少。

误区“数据增强蒸馏就是先对训练集做随机翻转、裁剪,然后正常蒸馏呗,跟我平时做数据增强有什么区别?”

正解常规数据增强的目标是提升模型泛化能力;蒸馏中的数据增强除了扩充样本外,还要求教师模型在增强后的输入上产生丰富且有意义的软标签。例如 Mixup 生成混合样本,教师的软标签也落在两个类别之间,这相当于给学生提供了一条“平滑的类别过渡带”,是普通数据增强无法提供的。

为何常见:因为两者都涉及“对输入做变换”,初学者容易把蒸馏中的数据增强等同于通用的数据增强手段。

面试题

Q1. 知识蒸馏中,教师模型输出的“软标签”相比硬标签最大的优势是什么?

单选题 · easy

  • A.计算量更小训练更快
  • B.包含类别间相似度等关系信息← 正确答案
  • C.不需要标注数据就能工作
  • D.直接使用真实标签无需训练

答案:B。软标签是概率分布(如“猫=0.7, 狗=0.2”),其中的小概率值携带了类别间相似度知识。硬标签是 one-hot,只有对错信息,无法传递“猫和狗比猫和飞机更相似”这类关系信息。A 错在蒸馏反而增加了计算开销;C、D 与软标签的核心价值无关。

Q2. 蒸馏温度 T 越大,教师输出的概率分布会有什么变化?

单选题 · easy

  • A.分布越尖锐接近独热编码
  • B.分布越平滑类别概率趋近← 正确答案
  • C.分布保持不变不受影响
  • D.分布变为均匀随机噪声

答案:B。T 越大,softmax 分母中的指数缩放越温和,各类别概率差距缩小,分布趋于平滑。T→∞ 时各概率趋近相等;T→0 时趋近 one-hot。A 描述的是低温效果,C 和 D 不符合温度定义。

Q3. 动态蒸馏中“动态”主要体现在哪个方面?

单选题 · mid

  • A.训练数据实时更换为新样本
  • B.温度和损失权重随进度调整← 正确答案
  • C.教师模型参数持续被更新
  • D.学生模型结构动态增加层

答案:B。动态蒸馏的核心是在训练过程中动态调整蒸馏温度、蒸馏损失占比等超参数——前期高温学宏观、后期低温抠细节,同时减小蒸馏权重、增大真实标签权重。A、C、D 都不是动态蒸馏的标准做法。

Q4. Mixup 数据增强的核心操作是?

单选题 · mid

  • A.将样本随机旋转和裁剪
  • B.将两个样本加权线性混合← 正确答案
  • C.用生成模型合成新样本
  • D.将标签做平滑处理

答案:B。Mixup 从 Beta 分布采样 λ,对两个样本 x_i 和 x_j 做逐元素加权混合:λ·x_i + (1-λ)·x_j。教师对这种“中间样本”输出的软标签也会落在两个类别之间,相当于给学生提供类别间的平滑过渡信息。A 是传统数据增强,C 是生成式方法,D 与输入无关。

Q5. 训练初期使用较高温度的主要目的是?

单选题 · mid

  • A.让学生快速拟合真实硬标签
  • B.让学生学到类别间相似关系← 正确答案
  • C.减少计算资源的消耗
  • D.避免梯度消失的问题

答案:B。训练初期温度高(如 T=4),软标签分布平滑,每个类别都携带概率信息,学生能快速学到“类别间相似关系”这类宏观知识。如果一开始就低温,学生只能看到硬标签,容易陷入局部最优。A 是后期低温阶段的目标,C、D 与温度设置无关。

Q6. 已知蒸馏损失 L = αT²·KL(p∥q) + (1-α)CE,若去掉 T² 因子,当 T 增大时梯度会?

单选题 · extreme

  • A.梯度增大损失发散
  • B.梯度减小学生学不动← 正确答案
  • C.梯度不变没有影响
  • D.梯度符号反转方向

答案:B。softmax 的梯度天然带有 1/T² 的缩放因子,温度越高梯度越小。没有 T² 补偿时,高温环境下学生模型几乎得不到有效更新信号,学习停滞。乘以 T² 后梯度大小与温度解耦,使温度只影响分布平滑度而不影响学习速率。

Q7. 师生模型容量差距过大时,哪个做法更合理?

单选题 · mid

  • A.坚持用超大教师模型蒸馏
  • B.选择适中容量的教师模型← 正确答案
  • C.缩小学生模型的参数量
  • D.减少训练数据以降低难度

答案:B。教师在知识蒸馏中扮演“教练”角色,教练水平要与学员接受能力匹配。超大教师(如 70B)输出的软标签过于精细,小容量学生无法拟合,效果反而不如中容量教师(7B~13B)。实践表明师生容量比 2~5 倍最佳。

Q8. 以下哪些属于数据增强蒸馏的常见策略?

多选题 · easy

  • A.Mixup 样本线性混合增强← 正确答案
  • B.添加对抗扰动样本增强← 正确答案
  • C.使用无标注数据软标签← 正确答案
  • D.随机丢弃训练集样本

答案:ABC。Mixup(混合样本)、对抗扰动(在输入上加小扰动让教师输出鲁棒软标签)、无标注数据(教师给无标签数据打软标签扩充训练集)都是数据增强蒸馏的常用策略。D 是丢弃样本,减少数据量,与增强目的相悖。

Q9. 关于蒸馏温度衰减策略正确的是?

多选题 · mid

  • A.前期用高温学习宏观结构← 正确答案
  • B.后期用低温学习细节差异← 正确答案
  • C.全程固定温度效果最佳
  • D.温度衰减配合权重调整← 正确答案

答案:ABD。训练前期高温让软标签平滑,学生快速掌握类别间宏观关系;后期低温专注细节区分。同时蒸馏损失权重 α 也应从大变小,前期多模仿教师、后期多关注真实标签,两者配合效果最佳。C 违背了“因材施教”的动态蒸馏思想。

Q10. 设计蒸馏损失函数时,以下说法正确的有?

多选题 · hard

  • A.蒸馏损失与交叉熵可以组合← 正确答案
  • B.平衡系数影响两类损失权重← 正确答案
  • C.损失函数与温度相互独立
  • D.KL 散度衡量分布差距常用← 正确答案

答案:ABD。经典蒸馏损失 = α·T²·KL(教师||学生) + (1-α)·CE(真实标签)。KL 散度是衡量两个概率分布差距的常用度量,α 控制两类损失的平衡。C 错误:损失函数中的 T² 系数和软标签都与温度强相关,蒸馏损失与温度并不独立。