虽然我要讲一篇关于文生图扩散模型的蒸馏,但是最近DeepSeek R1这么火,必须先蹭一下DeepSeek的热度!
DeepSeek R1在春节期间公开发表了技术文档,并开源了多个蒸馏模型,其性能甚至可以超越OpenAI-o1-mini,验证了将671B大模型的模型能力通过简单的蒸馏可以快速迁移到规模更小的模型的可行性。
那么蒸馏模型和原始模型的区别是什么呢?它们之间又有怎样的关系?为什么使用大模型蒸馏后的小模型能比直接训练有更好的性能?想要解释这些问题就要先从蒸馏原理讲起。
知识蒸馏的过程,简单解释就是用教师模型教会学生模型知识。例如在DeepSeek R1的例子里,DeepSeek R1就是教师模型,用于蒸馏训练的小模型(Qwen或者Llama)就是学生模型。知识蒸馏的核心,就是让学生模仿教师的思考过程,而不是简单地背答案。
硬标签 v.s. 软标签
蒸馏训练时,学生模型通常会接收两组不同的答案,分别人工训练集的GT,也就是硬标签,和教师模型生成的概率分布,也就是软标签:
- 硬标签就像是正确答案,例如告诉你这张图片是猫还是狗。
- 软标签则是包含了教师模型的概率分布的更为复杂的答案:“这个图片有80%的概率是猫,但也有20%的可能是狗,因为它们有点像”,于是模型不但知道了答案,还学到了“猫和狗是比较容易混淆的”这个知识。
训练的时候,学生模型既看正确答案(保证正确性)又会看老师的软标签(学习老师的知识),这两个信号会“加权混合”成一个总目标。
那么为什么不全部用软标签呢?
因为教师模型也是有可能犯错的!只用软标签,学生模型的上限就是这个教师模型了。
既然教师模型可能出错,为什么不能把和硬标签冲突的错误标签筛选掉呢?
因为软标签是模型生成的,量级通常比硬标签大得多,人工筛选每一个软标签的成本非常大。把软标签和硬标签混合使用并用权重控制比例是更合适的做法。如果教师模型比较值得信任,就可以调大它的权重,反之亦然。
如果我们有一个比较精确的教师模型,它的输出可能是比较夸张化的,例如“这个图片有99%的概率是猫,有1%的可能是狗“,因为模型能很好区分猫和狗。但是如果让模型更温柔一些,也许学生模型反而能更好学到两者之间的关系。
这时候会引入温度参数T软化概率分布:
- T>1 时,概率分布更平滑,保留类别间相对关系(如“猫 vs 狗”的相似性);
- T=1 时退化为标准Softmax。
在DeepSeek R1的实验报告中提到,仅仅通过蒸馏DeepSeek R1的输出就可以让R1-7N模型的性能超越GPT-4o-0513。其他更大的蒸馏模型就更强了。这里的xxB指的就是参数量,可以简单理解为参数量越大,模型计算力越强,天赋越好。而后天的训练就是对不同天赋的模型进行教学。DeepSeek R1技术报告的蒸馏实验证明,对于天赋相同的模型(参数量和结构一致)用强力的大语言模型进行教学,比直接用人类知识教学更有效。在这里,蒸馏只用了DeepSeek R1的模型输出,并不涉及到更复杂的概率分布学习或者提供硬标签,就已经可以达到很好的效果了。
技术报告还提到一个有趣的观察点是,蒸馏后的模型如果继续用强化学习训练一段时间,可以进一步提高模型的性能。虽然他们没有开源这部分模型,不过这是一个很有意思的观察。可能学生在学习了教师模型之后,如果再强化学习一番,可以微调自己的知识结构,让其更适应自身的结构分布。
提了知识蒸馏的概念就顺便讲一下数据蒸馏。知识蒸馏学习的是教师模型的分布,而数据蒸馏侧重于通过数据增强等方法从数据的角度得到更纯净的训练数据来训练学生模型。数据蒸馏一般不涉及模型的压缩,而是对训练数据的精炼。
知识蒸馏和数据蒸馏的主要区别如图二
下一篇写文生图模型,先去吃饭了!