大模型中的知识蒸馏,简单说就是“让一个轻量级学生模型,去模仿一个重量级老师模型的行为”,最终把“大模型的知识”迁移到“小模型”里。知识蒸馏的核心目标只有一个:在尽量不损失效果的前提下,大幅降低模型的体积和计算成本。为了让大家更好理解,本文分三步来讲知识蒸馏:
1、谁是老师和学生?
老师模型:参数量巨大(如千亿级)、性能很强,但推理慢、耗电高,难以在手机等设备上部署(比如GPT-4、Claude等)。
学生模型:参数量很小(如几亿级)、推理极快,但自己从头训练效果往往很差(比如轻量级开源模型)。
2、怎么“教”?
传统的训练(比如教学生做选择题)只看最终正确答案(硬标签),比如图片是“猫”还是“狗”。但这样学生学到的信息太少了。
知识蒸馏的精髓在于,让学生去学习老师输出的“软概率分布”。比如老师看到一张猫图,不仅输出“猫”(概率90%),还输出“狗”(概率5%)、“狐狸”(概率3%)。这个概率分布里包含了老师对事物相似性的理解(“猫和狗比猫和汽车更接近”),这被称为“暗知识”。学生通过模仿这些概率分布,能学得更深入、更高效。
3、结果怎么样?
效果接近:优秀的学生模型能达到老师模型 95%以上 的效果。
效率飞升:推理速度可能提升 10倍以上,显存占用大幅减少。
典型例子:像Google的DistilBERT,体积缩小40%,速度提升60%,但保留了97%的性能;很多手机上的端侧AI助手,也是云端大模型蒸馏到端侧小模型的结果。
知识蒸馏不止用于压缩:知识蒸馏也常用于把多个专家大模型的能力“蒸馏”到一个通用模型里,或者把最新学到的知识“蒸馏”进旧模型以防止遗忘。
知识蒸馏的两种主流方式:除了上面说的离线蒸馏(老师固定不动),还有在线蒸馏(师生一起学习,互相促进)和自蒸馏(自己当自己的老师)。
知识蒸馏和传统微调(Fine-tuning)的本质区别在于:它们的“学习目标”和“解决的根本问题”完全不同。如果用一句话概括:微调是“转专业”(把通才变成专才),而知识蒸馏是“减肥降维”(把大教授的知识压缩给小学生)。
为了让大家更直观地理解,本文从四个核心维度来对比:
1、根本目的不同(为什么做)
传统微调:目的是“激活”。大模型(如GPT)预训练时是通才(什么都会一点),微调是用特定领域数据(如医疗、法律)去调整模型参数,让它变成某个领域的专才。解决的是“方向不对”的问题。
知识蒸馏:目的是“压缩”。大模型已经很强了,但太大了跑不动,所以需要一个学生小模型来模仿大模型的行为。解决的是“体型太大跑不动”的问题。
2、学习的数据标签不同(学什么)
传统微调:学的是“硬标签(Hard Labels)”。就是人类给的绝对正确答案,比如“这张图是猫”=1,“是狗”=0。这就像考试只告诉学生“选A是对的”,信息量很有限。
知识蒸馏:学的是“软标签(Soft Labels)”。学生不只看正确答案,还看老师输出的概率分布。比如老师输出“猫0.9,虎0.07,狗0.03”。这就像老师不仅说选A,还告诉学生“B和A很像,容易混淆”,信息量丰富得多。
3、训练数据的要求不同(用什么学)
传统微调:必须有标注好的高质量数据。比如你想微调一个法律模型,必须准备几千上万条“问题-标准答案”对,人工成本极高。
知识蒸馏:可以用无标注数据。你只需要拿一批任意文本(甚至是没标过的网络文章)让老师先输出结果,学生照着这个结果模仿就行。这大大降低了对人工标注的依赖。
4、参数更新方式不同(怎么改)
传统微调:更新所有参数。预训练模型里上亿的参数全部被反向传播“扰动”一遍,所以极其消耗算力和显存(需要全量微调)。
知识蒸馏:老师参数完全冻结不动,只更新学生那小模型的参数。老师只负责“输出答案”供学生参考,整个过程的计算开销远小于重新训练或全量微调一个大模型。
再给大家打一个形象的比方:
传统微调,像一位物理学博士(大模型)入职了生物公司,你给他看大量生物文献(领域数据),他利用原来的学习能力,转型成了生物物理专家。
知识蒸馏,像这位物理学博士(老师)不亲自干活,而是每天给一个高中毕业生(学生)讲题,把自己的解题思路(软标签)教给这个高中生,最后高中生能独立完成博士80%的工作,而且工资要求低、反应还快(小模型部署优势)。
在实际工程中,两者经常结合使用。比如:先在特定领域数据上微调大模型(让它变专才),然后用这个微调后的大模型做老师,去蒸馏一个小模型(让它变小变快)。这是目前工业界落地最常用的“微调+蒸馏”两阶段方案。
如果顺着这个思路,你可能会好奇:在实际项目中,到底什么时候优先选蒸馏,什么时候优先选微调?或者两者成本具体差多少? 如果你感兴趣,我可以接着帮你拆解一下落地选型的考量。