当前位置:首页 > AI其它类

让小模型学会大模型的本事:知识蒸馏原理拆解

5天前AI其它类17

大模型效果好,但部署又贵又慢;小模型跑得快,能力又差一截。能不能两头都占?知识蒸馏干的正是这件事:让一个小模型(学生)去模仿一个大模型(老师)的判断,把老师的"功夫"压缩进学生的小身体里。

它为什么能成,关键藏在一个看起来不起眼的选择上——学生学的不是"标准答案",而是老师给的一张概率分布。这篇把这件事拆开讲。

只学「正确答案」,丢了不少信息

zhengliu-cover.jpg

训练一个分类模型,常规做法是给它正确答案:这张图是猫,就告诉它猫=1,其它=0。这叫硬标签,只有一个位置亮着,其余全灭。

但老师模型在判断时,心里是有"犹豫"的:它可能给猫 0.8,给豹子 0.15,给狗 0.05。这张"犹豫的分布"里藏着一句话——猫和豹子长得像,和狗没那么像。硬标签把这些相对关系全抹掉了,学生只记住"这就是猫",却不知道"它离豹子很近"。这层信息,就叫软标签里的"暗知识"。

软标签:让老师吐出整张分布

蒸馏的做法,是不光让老师说"答案是猫",还让它把对每个类别的打分都亮出来,形成一张概率分布;学生不去背那个孤零零的正确答案,而是去拟合老师整张分布的形状。

老师对"猫"和"豹子"给的分很接近,学生学着学着也就"知道"这俩是近亲。于是学生得到的不是一条答案,而是一张"老师怎么看这个世界"的认知地图。信息量一下子厚了很多,小模型也能学到大模型对样本之间相似性的理解。

温度 T:把「犹豫」放大出来

这里有个实操细节。老师模型通常很强,它输出的分布往往很"硬"——对正确类别的概率接近 1,其它类别的差距被压得很小,那点"犹豫"几乎看不见。

为了让暗知识浮出来,就在 softmax 里加一个温度参数 T,把输出除以 T 再归一化:

p_i = exp(z_i / T) / Σ exp(z_j / T)

T 越大,分布越平缓,"第二名、第三名"之间的差异被放大,学生能看清楚老师到底在哪些类别之间犹豫。训练时用较高的 T 提信息,推理时再把 T 设回 1 正常输出。温度这一拧,是把"藏起来的相似性"显影出来的关键动作。

损失怎么算:学老师,也别完全忘本

学生训练时的目标常写成两部分之和:一部分让学生输出的分布去贴近老师软标签的分布(常用 KL 散度衡量两者差距),另一部分让学生和真实硬标签也保持对齐(交叉熵)。

为什么还要留着硬标签这一项?因为老师的软标签也可能有它自己的偏见和错误。拿真实的标注做修正,学生既不丢"老师的感觉",又不背离"事实的答案"。两者配比一调,就是蒸馏里常见的旋钮。

蒸馏到底图什么

一句话:把"大而全"的能力,压进"小而快"的身体里。

蒸馏出来的小模型,参数少、推理快、显存省,适合塞进手机、浏览器、边缘设备这些跑不动大模型的地方。训练时它需要一个大老师,部署时却只剩一个轻学生。这也是它和压缩类方法(如量化)不同之处——蒸馏学的是"能力",量化省的是"存储",两者还能叠着用。

小结

把知识蒸馏收一下:老师不直接给答案,而是给出整张概率分布当软标签;升温参数 T 把分布里的相似性放出来;学生同时拟合老师的软标签和真实硬标签;于是得到一个小而快、却保留了大模型判别感的学生模型。

它教会我们的其实是一个朴素道理:知识不止藏于"正确的那个答案",更藏在"错得有多接近"的细节里。

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。