量化与知识蒸馏的区别
-
量化(Quantization):
- 目的:量化主要用于减少模型的大小和提高推理速度,特别是在部署到资源受限的设备(如移动设备或嵌入式系统)时。量化通过降低模型权重和激活的精度(例如,从32位浮点数降到8位整数)来减少模型的内存占用和计算需求。
- 实现方式:量化涉及将模型的权重和激活从浮点数转换为低精度的表示形式,如整数。这个过程通常包括选择一个量化策略(如均匀量化或非均匀量化),确定量化范围(量化级别),以及在训练后应用量化或在训练过程中进行量化感知训练。
- 效果:量化可以显著减少模型大小和加速推理,但可能会略微影响模型的精度。
-
知识蒸馏(Knowledge Distillation):
- 目的:知识蒸馏用于将一个大型、复杂模型(教师模型)的知识转移到一个更小、更简单的模型(学生模型)。这样做的目的是为了在保持相似性能的同时减少模型的复杂性和计算成本。
- 实现方式:知识蒸馏通常涉及训练一个学生模型来模仿教师模型的行为。这可以通过多种方式实现,例如,让学生模型学习教师模型的输出概率分布,或者使用教师模型的中间层输出作为额外的监督信号。
- 效果:知识蒸馏可以有效地压缩模型,同时保持或接近原始大型模型的性能。
区别:
- 目标不同:量化主要关注减少模型大小和加速推理,而知识蒸馏关注于模型压缩和性能保持。
- 方法不同:量化通过改变模型权重的表示形式来实现优化,而知识蒸馏通过训练一个新模型来学习原始模型的知识。
- 影响不同:量化可能会对模型精度产生一定影响,而知识蒸馏则更注重在压缩的同时保持性能。
2. 为什么要进行知识蒸馏?
深度学习在计算机视觉、语音识别、自然语言处理等内的众多领域中均取得了令人难以置信的性能。但是,大多数模型在计算上过于昂贵,无法在移动端或嵌入式设备上运行。因此需要对模型进行压缩,这样小的模型就适用于部署在终端设备上了。
2.1 提升模型精度
如果对目前的网络模型A的精度不是很满意,那么可以先训练一个更高精度的teacher模型B(通常参数量更多,时延更大),然后用这个训练好的teacher模型B对student模型A进行知识蒸馏,得到一个更高精度的A模型。
2.2 降低模型时延,压缩网络参数
如果对目前的网络模型A的时延不满意,可以先找到一个时延更低,参数量更小的模型B,通常来讲,这种模型精度也会比较低,然后通过训练一个更高精度的teacher模型C来对这个参数量小的模型B进行知识蒸馏,使得该模型B的精度接近最原始的模型A,从而达到降低时延的目的。
2.3 标签之间的域迁移
假如使用狗和猫的数据集训练了一个teacher模型A,使用香蕉和苹果训练了一个teacher模型B,那么就可以用这两个模型同时蒸馏出一个可以识别狗、猫、香蕉以及苹果的模型,将两个不同域的数据集进行集成和迁移。
蒸馏损失计算过程
在分类网络中知识蒸馏的 Loss 计算
- 上部分教师网络,它进行预测的时候, softmax要进行升温,升温后的预测结果我们称为软标签(soft label)。
- 学生网络一个分支softmax的时候也进行升温,在预测的时候得到软预测(soft predictions),然后对soft label和soft predictions 计算损失函数,称为distillation loss ,让学生网络的预测结果接近教师网络;
- 学生网络的另一个分支,在softmax的时候不进行升温T =1,此时预测的结果叫做hard prediction 。然后和hard label也就是 ground truth直接计算损失,称为student loss 。
- 总的损失结合了distilation loss和student loss ,并通过系数a加权,来平衡这两种Loss ,比如与教师网络通过MSE损失,学生网络与ground truth通过cross entropy损失, Loss的公式可表示如下: