轻量化模型-知识蒸馏1
硬标签、软标签和温度参数,其实就像老师给「水果分类」的三种不同判断方式 —— 硬标签是 “非黑即白定死类”,软标签是 “细致说清各概率”,温度参数则是 “调节概率的松紧度”。
1. 硬标签:简单粗暴的 “唯一答案”
硬标签就像老师拿到一个苹果后,只说一句:“这就是苹果,不是其他任何水果”——只给最终类别,完全忽略 “相似性”。
比如我们要分 3 类水果:「苹果」「梨」「橙子」,硬标签会用 “独热编码”(像 “只有一个 1,其他都是 0” 的密码)来表示:
- 如果样本是苹果,硬标签就是
[1, 0, 0]
(1 代表 “是”,0 代表 “不是”); - 如果样本是梨,硬标签就是
[0, 1, 0]
; - 如果样本是橙子,硬标签就是
[0, 0, 1]
。
2. 软标签:带 “相似性” 的 “概率清单”
软标签则像老师拿到苹果后,会细致分析:“这大概率是苹果(80%),但有点像梨(15%),不太像橙子(5%)”——给出每个类别的概率,能体现 “谁和谁更像”。
它不是凭空来的:模型(比如教师模型)会先算出每个类别的 “原始分数”(叫 logits,比如苹果得 9 分、梨得 5 分、橙子得 2 分),再通过一个叫 “softmax (T)” 的公式,把分数转换成 “加起来等于 100% 的概率”,这就是软标签。
比如刚才的苹果,软标签可能是 [0.8, 0.15, 0.05]
(80% 苹果、15% 梨、5% 橙子)。
3. 温度参数 T:调节概率的 “松紧旋钮”
温度参数 T,就是控制软标签 “概率分布平滑程度” 的旋钮 ——T 越小,概率越 “集中”(像硬标签);T 越大,概率越 “分散”(相似性越明显)。
还是用刚才的苹果(原始分数:苹果 9 分、梨 5 分、橙子 2 分),看 T 不同时软标签的变化:
温度参数 T | 软标签(概率分布) | 直观理解(老师的判断) |
---|---|---|
T=0.5(小 T) | [0.98, 0.02, 0.00] | “几乎 100% 是苹果,一点都不像梨和橙子”—— 概率高度集中,接近硬标签 |
T=1(中等 T) | [0.80, 0.15, 0.05] | “80% 是苹果,15% 像梨,5% 像橙子”—— 正常体现相似性 |
T=10(大 T) | [0.45, 0.35, 0.20] | “45% 像苹果,35% 像梨,20% 像橙子”—— 概率分散,更突出 “苹果和梨像” 的关联,甚至有点分不清 |
简单说:
- T 越小,就像老师 “越固执”,只盯着最像的类别,其他类的概率几乎被忽略;
- T 越大,就像老师 “越宽容”,会更细致地考虑 “和其他类的相似性”,把概率分给更多类别。
温度参数 T 的核心作用,是调节软标签(概率分布)的 “平滑程度”—— 简单说,它像一个 “松紧旋钮”:T 越小,概率越 “集中”(只盯着最可能的类别);T 越大,概率越 “分散”(更关注类别间的相似性)。
它不改变 “哪个类别最可能” 的结论,但会改变 “各个类别概率的差距”,最终影响模型能学到的信息(比如是否能捕捉到 “猫和老虎相似” 这类关联)。
比如在 “小模型学大模型(知识蒸馏)” 中:如果想让小模型学到 “类别相似性”(比如区分 “贵宾犬” 和 “比熊犬” 的细微关联),就会调大 T;如果只需要小模型快速明确分类(比如 “狗” 和 “猫” 的粗分类),就会调小 T。
4.损失函数
损失函数本质是模型的 “错题评分标准”—— 它专门用来衡量 “模型的预测结果” 和 “真实情况” 之间的差距(这个差距叫 “损失值”)。就像老师批作业:正确答案是 “真实情况”,学生答案是 “模型预测”,损失函数就是 “扣分规则”,差距越大,扣的分(损失值)越多。
它的核心作用是给模型 “指方向”:模型会根据损失值的大小,调整自己的参数(比如 “怎么判断一张图是猫”),最终让损失值越来越小 —— 也就是预测得越来越准。
核心总结:损失函数的 3 个作用
- “打分”:量化模型预测和真实情况的差距,损失值越小 = 预测越准。
- “指路”:模型通过减少损失值来调整参数(比如从 “猫 10%” 调到 “猫 90%”),是模型 “学习” 的核心依据。
- “适配任务”:回归任务(预测数值)用 MSE,分类任务(预测类别)用交叉熵 —— 不同任务用不同的 “评分规则”,才能评得合理。
5.“KL 散度” 的基础
它本质是计算两个 “概率分布” 的差异。比如教师对一张猫图的预测分布是 [0.9, 0.08, 0.02](猫、狗、鸟的概率),学生一开始的预测是 [0.3, 0.5, 0.2],KL 散度就会算出一个很大的 “差异值”;随着学生学习,预测变成 [0.88, 0.1, 0.02],KL 散度就变小了 —— 说明学生越来越像教师。
简单说:KL 散度是 “学生抄作业的评分标准”,分数越低(差异越小),抄得越像。
第二步:“扰动” 是用来解决什么问题的?
普通 KL 散度有个缺点:学生容易 “死记硬背” 教师的固定答案,遇到一点变化就慌了。
比如教师只给 “清晰的猫图” 输出固定分布 [0.9, 0.08, 0.02],学生学会了匹配这个分布,但遇到 “稍微模糊的猫图”“光线暗的猫图”,就不会判断了 —— 因为教师没教过 “遇到变化该怎么调整答案”。
这时候 “扰动” 就派上用场了:给教师的 “作业” 加一点 “小噪音”,让教师的答案稍微变一变,迫使学生不仅学 “固定答案”,还学 “应对变化的能力”。
一句话:它是 “加了小噪音的抄作业评分标准”。
在知识蒸馏中,通过给教师模型的输入 / 输出加微小扰动,让教师的 “知识” 变得更灵活;再用 KL 散度衡量学生与 “带扰动的教师知识” 的差异,迫使学生不仅学教师的 “核心答案”,还学教师 “应对微小变化的鲁棒性”,最终让学生模型在实际使用中(遇到不完美数据时)效果更好。
6.特征蒸馏损失和交叉熵损失
- 交叉熵损失(Cross-Entropy Loss):最常用的 “分类任务损失”,核心是让模型的 “预测结果” 贴近 “真实答案”(比如预测 “猫” 的概率要贴近标签里的 “猫 = 1,其他 = 0”)。
- 特征蒸馏损失(Feature Distillation Loss):知识蒸馏专属的 “特征模仿损失”,核心是让学生模型的 “中间特征” 贴近教师模型的 “中间特征”(比如学生模型卷积层输出的特征图,要和教师的长得像)。
- 交叉熵损失:保证学生模型 “分类结果准”(不跑偏,至少能正确识别类别);
- 特征蒸馏损失:让学生模型 “学到教师的深层特征”(不仅能分类,还能像教师一样理解图片的关键细节,提升泛化能力,比如抗噪声、识别罕见样本)。
比如:最终的蒸馏总损失 = α×(蒸馏交叉熵损失) + β×(特征蒸馏损失)(α、β 是权重,平衡两者的重要性)。