Distilling the Knowledge in a Neural Network 知识蒸馏
之前看论文的时候,一直有学生模型,教师模型,然后前天刷到:这种叫做知识蒸馏,所以来了解一下,什么是知识蒸馏
目录
简单理解就是,假如一组数据,使用不同的模型训练,然后再把他们类似于加一起,然后平均这种思考,这样他的泛化性啥的会更优
但是在于移动端,比如手机,平板,这些没有所谓的高级显卡,即硬件条件有限,那么该怎么办呢,于是引入数据蒸馏
下面需要谨记: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 加一个温度参数 T:
softmax(logits / T)- 提高 T 会让概率分布变 “软”:原本接近 0 的小概率会被放大,分布更平滑,相似性信息就凸显出来了。
- 训练小模型时,用同样的高温 T 去拟合大模型的软目标,这样小模型就能学到大模型的 “暗知识”(Dark Knowledge)。
- 作者还指出:当温度 T 趋近无穷大时,拟合 logits 就是知识蒸馏的特殊情况。
结合硬目标的改进版(更常用)
当迁移集有部分 / 全部真实标签时,用两个损失的加权平均训练,效果更好:
- 软目标损失:
- 学生模型用高温 T 的 softmax 输出,和教师模型的软目标算交叉熵。
- 作用:学习大模型的 “暗知识”(数据相似性)。
- 硬目标损失:
- 学生模型用温度 T=1 的 softmax 输出,和真实标签算交叉熵。
- 作用:保证模型不会偏离正确分类方向,做 “兜底”。
- 权重设置:通常给硬目标损失很低的权重(比如 0.1 或更小),软目标损失占主导。





知识补充
集成学习(Ensemble Learning) 的两大核心范式
一、核心定义
方法 核心思想 人话解释 Bagging 并行训练 + 独立投票 + 降低方差 找一群 “水平差不多的专家”,各自独立判断,最后少数服从多数(避免单个专家的偏见) Boosting 串行训练 + 知错就改 + 降低偏差 找一群 “新手”,第一个新手犯错后,第二个新手专门盯着第一个错的地方学,依次迭代,最后加权投票(越往后的模型越专注难样本)
二、逐点拆解
1. Bagging(装袋法)
- 全称:Bootstrap Aggregating(自助聚合)
- 核心步骤:
- 采样:对原始数据集做有放回抽样(Bootstrap),生成多个不同的子数据集(比如 100 个子集);
- 训练:用每个子数据集训练一个独立的基模型(比如决策树),所有模型并行训练(互不影响);
- 融合:分类任务用 “投票”,回归任务用 “平均”。
- 典型代表:随机森林(Random Forest)—— 在 Bagging 基础上,给每个决策树随机选特征,进一步降低过拟合。
- 适用场景:解决过拟合(降低方差),适合高方差、易过拟合的模型(比如单棵决策树)。
- 例子:你要判断一张图是不是猫,找 10 个独立的 AI,每个 AI 看不同的猫图子集,最后 9 个说 “是”,1 个说 “不是”,就判定是猫。
2. Boosting(提升法)
- 核心步骤:
- 初始化:给所有样本赋相同权重,训练第一个基模型(比如弱决策树,只能比随机猜好一点);
- 权重调整:把第一个模型判错的样本权重调高(让下一个模型重点学这些难样本);
- 串行训练:训练第二个模型,专门纠正第一个的错误;重复迭代,每一轮都聚焦上一轮的错误;
- 融合:给每个模型赋权重(表现好的模型权重高),最后加权投票 / 平均。
三、关键对比(一张表记全)
维度 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编码
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)