之前看论文的时候,一直有学生模型,教师模型,然后前天刷到:这种叫做知识蒸馏,所以来了解一下,什么是知识蒸馏

目录

结合硬目标的改进版(更常用)

一、核心定义

二、逐点拆解

1. Bagging(装袋法)

2. Boosting(提升法)

三、关键对比(一张表记全)

四、使用时机

数学原理


简单理解就是,假如一组数据,使用不同的模型训练,然后再把他们类似于加一起,然后平均这种思考,这样他的泛化性啥的会更优

但是在于移动端,比如手机,平板,这些没有所谓的高级显卡,即硬件条件有限,那么该怎么办呢,于是引入数据蒸馏

下面需要谨记:Logits是softmax的输入,全连接层的输出

核心思路

  • 硬目标(Hard Target):就是我们平时用的 one-hot 标签(比如 MNIST 里,数字 2 就是 [0,0,1,0,...]),它只告诉模型 “这是 2”,但没说 “这个 2 长得更像 3 还是更像 7”。
  • 软目标(Soft Target):是大模型(教师模型)softmax 输出的概率分布(比如 [0.000001, 0.999998, 0.000001, ...]),它包含了大模型学到的数据相似性信息

对于 MNIST 这种简单任务,大模型几乎能 100% 猜对,所以 softmax 输出里,正确类别的概率接近 1,其他类别概率接近 0(比如 10⁻⁶、10⁻⁹)。这些极小概率藏着宝贵知识:比如 “这个 2 看起来更像 3,那个 2 看起来更像 7”,但在普通交叉熵损失里,这些接近 0 的概率对损失影响微乎其微,小模型学不到这些细节。

前人方案:直接用 logits 训练Caruana 等人的办法是:不用 softmax 后的概率,而是拿大模型最后一层的 logits(softmax 之前的原始输出) 当目标,让小模型的 logits 去拟合大模型的 logits(用 MSE 损失)。这样能保留那些细微的相似性信息,但不够通用。

本文方案:知识蒸馏(软化目标)作者提出更通用的知识蒸馏

  • 给大模型的 softmax 加一个温度参数 Tsoftmax(logits / T)
  • 提高 T 会让概率分布变 “软”:原本接近 0 的小概率会被放大,分布更平滑,相似性信息就凸显出来了。
  • 训练小模型时,用同样的高温 T 去拟合大模型的软目标,这样小模型就能学到大模型的 “暗知识”(Dark Knowledge)。
  • 作者还指出:当温度 T 趋近无穷大时,拟合 logits 就是知识蒸馏的特殊情况

结合硬目标的改进版(更常用)

当迁移集有部分 / 全部真实标签时,用两个损失的加权平均训练,效果更好:

  1. 软目标损失
    • 学生模型用高温 T 的 softmax 输出,和教师模型的软目标算交叉熵。
    • 作用:学习大模型的 “暗知识”(数据相似性)。
  2. 硬目标损失
    • 学生模型用温度 T=1 的 softmax 输出,和真实标签算交叉熵。
    • 作用:保证模型不会偏离正确分类方向,做 “兜底”。
  • 权重设置:通常给硬目标损失很低的权重(比如 0.1 或更小),软目标损失占主导。


知识补充

集成学习(Ensemble Learning) 的两大核心范式

一、核心定义

方法 核心思想 人话解释
Bagging 并行训练 + 独立投票 + 降低方差 找一群 “水平差不多的专家”,各自独立判断,最后少数服从多数(避免单个专家的偏见)
Boosting 串行训练 + 知错就改 + 降低偏差 找一群 “新手”,第一个新手犯错后,第二个新手专门盯着第一个错的地方学,依次迭代,最后加权投票(越往后的模型越专注难样本)

二、逐点拆解

1. Bagging(装袋法)
  • 全称:Bootstrap Aggregating(自助聚合)
  • 核心步骤
    1. 采样:对原始数据集做有放回抽样(Bootstrap),生成多个不同的子数据集(比如 100 个子集);
    2. 训练:用每个子数据集训练一个独立的基模型(比如决策树),所有模型并行训练(互不影响);
    3. 融合:分类任务用 “投票”,回归任务用 “平均”。
  • 典型代表:随机森林(Random Forest)—— 在 Bagging 基础上,给每个决策树随机选特征,进一步降低过拟合。
  • 适用场景:解决过拟合(降低方差),适合高方差、易过拟合的模型(比如单棵决策树)。
  • 例子:你要判断一张图是不是猫,找 10 个独立的 AI,每个 AI 看不同的猫图子集,最后 9 个说 “是”,1 个说 “不是”,就判定是猫。
2. Boosting(提升法)
  • 核心步骤
    1. 初始化:给所有样本赋相同权重,训练第一个基模型(比如弱决策树,只能比随机猜好一点);
    2. 权重调整:把第一个模型判错的样本权重调高(让下一个模型重点学这些难样本);
    3. 串行训练:训练第二个模型,专门纠正第一个的错误;重复迭代,每一轮都聚焦上一轮的错误;
    4. 融合:给每个模型赋权重(表现好的模型权重高),最后加权投票 / 平均。
  • 三、关键对比(一张表记全)

    维度 Bagging Boosting
    训练顺序 并行(所有模型同时训) 串行(模型按顺序训,后一个依赖前一个)
    样本使用 有放回抽样,各模型样本独立 全样本训练,通过权重聚焦难样本
    模型权重 所有模型权重相等 表现好的模型权重高
    核心目标 降低方差(防过拟合) 降低偏差(提准确率)
    过拟合风险 低(多模型平均稀释噪声) 高(过度聚焦难样本,易过拟合)
    代表算法 随机森林 AdaBoost、GBDT、XGBoost
  • 四、使用时机

  • 什么时候用 Bagging?当你的模型 “学太细”(比如单棵决策树在训练集 100% 准,测试集 50% 准),用随机森林(Bagging)平均多个树的结果,能显著提升测试集准确率。
  • 什么时候用 Boosting?当你的模型 “学不会”(比如单棵浅决策树训练集准确率只有 60%),用 XGBoost(Boosting)迭代纠正错误,能把准确率提到 90%+。
  • 避坑提醒:Boosting 对异常值敏感(会把异常值当成 “难样本” 反复学习),使用前要先做数据清洗;Bagging 对异常值不敏感,因为多模型平均会抵消异常值的影响。

模型可解释性差(不知道哪个模型最有用)

算力消耗大,运算时间长

模型的选择具有随机性,不能确保是最佳组合

模型的参数信息保留了模型学到的知识,学习如何从输入向量映射到输出向量,将图像分类为母牛的概率是将其分类为汽车的概率的10倍,Hinton在其论文中首先描述的正是这种knowledge,需要教师网络向学生中蒸馏。

比如 [ cat ,dog ,car,cow]这种预测,正确值【0.01,0.9,0.01,0.08】这种

数学原理

温度参数的数学原理
温度参数T 是应用在 logits 上的,而不是直接应用在概率上:

# 标准softmax(T=1)
probs = F.softmax(logits, dim=-1)

# 带温度的softmax
probs = F.softmax(logits / T, dim=-1)

详细解释
1. 温度 > 1 时
假设我们有logits: [5, 2, 1]

- T=1 : softmax([5, 2, 1]) → [0.953, 0.037, 0.010] (尖锐分布)
- T=2 : softmax([2.5, 1, 0.5]) → [0.786, 0.138, 0.076] (较平滑)
- T=5 : softmax([1, 0.4, 0.2]) → [0.554, 0.263, 0.183] (更平滑)
结论 :温度越高,概率分布越平滑,保留更多类别间的关系信息

 2. 温度 < 1 时
同样的logits: [5, 2, 1]

- T=0.5 : softmax([10, 4, 2]) → [0.998, 0.002, 0.000] (更尖锐)
- T=0.1 : softmax([50, 20, 10]) → [1.000, 0.000, 0.000] (接近one-hot)
结论 :温度越低,概率分布越尖锐,接近one-hot编码

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐