在深度学习模型不断发展的今天,模型规模和复杂度日益提升。GPT 等模型在各类任务上展现出了极高的性能,但也带来了巨大的计算资源消耗和部署难度。如何让这些大型模型的能力迁移到更轻量的模型上?知识蒸馏(Knowledge Distillation)正是解决这一问题的关键技术之一。
1.什么是知识蒸馏?
知识蒸馏是一种模型压缩与迁移学习技术。它通过训练一个"学生模型"(Student)去模仿一个已经训练好的"教师模型"(Teacher)的输出,从而使学生模型在保持较低复杂度的同时获得较强的性能。
蒸馏的核心思想是:教师模型输出的类别概率分布中,除了正确类别的概率(即 one-hot 标签)以外,还包含了丰富的类间关系信息。例如,某张图片的 ground truth 是"猫",而教师模型的输出可能是"猫:0.75,狗:0.2,飞机:0.01",这比直接用 one-hot 向量 [0,0,1,...] 能提供更多细腻的信息。
2.知识蒸馏的核心目的
- 用软标签提升小模型性能:用于训练模型的数据集往往只有硬标签(one-hot vector),而教师模型能输出各个软标签即概率分布,所以小模型可以更好地学习到类间关系,从而获得更好的泛化能力。
- 模型压缩与部署:在边缘设备或资源受限的场景(如移动端、物联网)中,大模型不易部署。通过知识蒸馏,能将大模型压缩成部署友好的小模型。
- 多任务融合与迁移学习:在一些任务中,教师模型可能融合了多个训练目标(如多标签分类、多模态学习)。学生模型通过蒸馏可以同时学习多个知识源的融合输出。
3.常见的蒸馏应用场景
场景1):有监督学习中的知识蒸馏
这是最经典的蒸馏应用。即便数据集中已有 ground truth 标签,我们仍可以通过蒸馏增强小模型的表现。
以图像分类任务为例,假设我们使用 ResNet-50 作为教师模型,MobileNet 作为学生模型,在 CIFAR-10 数据集上进行训练。CIFAR-10 提供了明确的 ground truth 标签,但我们仍通过蒸馏让学生模型学习教师模型的输出概率分布。这种"软标签"蕴含了更多类间结构的信息,有助于学生模型提升泛化能力。
这种情况下的蒸馏通常结合了两种损失:
- 硬标签损失:学生模型对 ground truth 的交叉熵损失(Cross-Entropy Loss);
- 软标签损失:学生模型与教师模型输出之间的 KL 散度(KL Divergence)或温度加权后的交叉熵损失。
最终的损失函数是两者加权的组合。
场景2):无标签数据的伪标签学习
在数据标注昂贵或稀缺的场景中,可以用大模型(或已有模型)对无标签数据进行预测,生成伪标签(pseudo labels),再用这些标签训练学生模型。
虽然这种方法本质上属于自训练(self-training),但其思想与知识蒸馏类似,都是借助强模型对弱模型进行引导。
与有监督蒸馏不同的是,这类场景中学生模型无法获得 ground truth,因此完全依赖教师模型的输出。这种做法在半监督学习和领域适应任务中非常常见。
场景3):跨任务蒸馏
在多任务学习中,一个教师模型可能掌握多个任务的知识,例如同时做分类和定位。学生模型可以通过蒸馏机制学习这种多任务融合的输出结构。
此外,还有跨模态蒸馏,如让语言模型指导视觉模型,或将图像理解迁移到文本生成模型中。