什么是数据集蒸馏?快速概览
了解数据集蒸馏如何通过用少量经过优化的合成样本替代大型数据集,加快模型训练并降低计算成本。
Abirami Vina11 分钟阅读
训练模型看起来可能是数据科学家工作中最耗时的部分。但他们的大部分时间,通常有 60% 到 80%,实际上都花在准备数据上:收集、清理数据,并整理数据以用于建模。随着数据集不断增大,准备数据所需的时间也随之增加,实验因此变慢,迭代也变得更加困难。
为了解决这个问题,研究人员多年来一直在寻找简化训练流程的方法。合成数据、数据集压缩和更好的优化方法等方案,都旨在降低处理大规模数据集的成本和阻力,并加快机器学习工作流程。
由此引出的一个关键问题是:我们能否大幅缩小数据集,同时仍然达到与使用完整数据训练模型相同的性能?数据集蒸馏是一个颇有前景的答案。
它能创建大型训练数据集的紧凑版本,同时保留模型有效学习所需的关键模式。它为更快的训练、更低的计算需求和更高效的实验提供了途径。你可以把它想象成给模型准备的学习速查表:一小组合成数据样本,旨在教会模型与完整数据集相同的核心模式。
本文将探讨数据集蒸馏的工作原理,以及它如何支持真实应用中的可扩展机器学习和深度学习。
了解数据集蒸馏#
数据集蒸馏是将大型训练数据集浓缩成小得多的数据集的过程,同时仍能让模型学到与原始数据集几乎相同的信息。许多研究人员也将这一过程称为数据集凝练,因为其目标是捕捉完整数据集中出现的关键模式。
蒸馏后的数据集不同于随机生成的合成数据,也不同于简单地挑选较小的真实图像子集。它既不是随机生成的虚假数据集,也不是原始数据集的删减版。
相反,它经过有针对性的优化,以捕捉最重要的模式。在这一过程中,每个像素和特征都会经过调整和优化,因此使用蒸馏数据训练的神经网络,学到的内容几乎与使用整个数据集训练时一样。
这一想法最早出现在 2018 年一篇由王同舟、朱俊彦、Antonio Torralba 和 Alexei A. Efros 撰写的 arXiv 论文中。早期测试使用了 MNIST 和 CIFAR-10 等简单数据集,因此很容易证明,少量蒸馏样本就能代替数千张真实图像。

图 1. 将数据集蒸馏用于图像数据(来源)
此后,后续研究进一步推进了数据集蒸馏的发展,包括在 ICML 和 ICLR 上发表的方法,让数据凝练更加高效且可扩展。
数据集蒸馏的重要意义#
数据集蒸馏可以提高训练效率并加快开发周期。它减少了模型需要学习的数据量,从而降低计算需求。
这对持续学习尤其有用,因为模型会随时间不断更新;对神经架构搜索也很有帮助,因为这一过程需要测试大量模型设计;此外,它也适用于边缘训练,因为边缘设备的内存和算力有限。总的来说,这些优势使数据集蒸馏成为快速初始化、快速微调以及在多种机器学习工作流程中构建早期原型的理想选择。
数据集蒸馏的工作原理概览#
数据集蒸馏会创建合成样本,也就是人工生成的训练样本。这些样本能帮助模型以一种与使用真实数据训练非常相似的方式进行学习。它会在常规训练过程中追踪三个关键因素。
第一是损失函数,它是衡量模型预测错误程度的误差分数。第二是模型参数,也就是网络在学习过程中不断更新的内部权重。
第三是训练轨迹,它描述误差和权重如何随时间逐步变化。随后,系统会优化合成样本,使模型在这些样本上训练时,误差下降和权重更新的方式都与使用完整数据集时相同。
逐步了解数据集蒸馏#
下面详细看看数据集蒸馏的工作流程:
- 步骤 1 - 初始化合成像素:流程从充当可学习输入的合成图像开始。起初,这些图像几乎没有结构,看起来像一张白纸。随着时间推移,它们会经过优化,成为包含信息的样本。
- 步骤 2 - 使用梯度匹配和反向传播进行优化:模型在这些合成图像上训练时,会生成梯度,指出每个像素应如何变化,才能更好地匹配真实数据的训练行为。反向传播是网络从错误中学习的方法。它会将误差沿着模型向后传递,以找出导致误差的像素和权重,然后对它们进行细微更新。借助这些梯度,反向传播会逐步调整合成图像,使其更适合用于训练。
- 步骤 3 - 匹配训练过程中的行为:该方法还会匹配训练轨迹,也就是模型学习过程中经历的逐步变化。这样可以确保蒸馏数据集引导模型走上与使用完整数据集时相似的学习路径。
- 步骤 4 - 验证与泛化:最后,使用真实验证数据评估蒸馏数据集,检查训练后的模型在新样本上的表现。这可以确认合成数据教会模型的是广泛适用、有效的模式,而不是让模型记住特定样本。

图 2. 数据集蒸馏一览(来源)
数据集蒸馏的主要方法#
所有数据集蒸馏方法都基于相同的核心思想,只是采用了不同的算法。大多数方法可分为三类:性能匹配、分布匹配和参数匹配。
接下来,我们逐一了解这些方法及其工作原理。
性能匹配#
数据集蒸馏中的性能匹配,着重创建一个经过优化的极小训练集,让模型达到几乎与使用完整原始数据集训练时相同的准确率。蒸馏样本并非随机选取,而是经过优化,使使用这些样本训练的模型获得与使用原始数据集训练的模型相似的预测结果、相似的训练损失表现,或相近的最终准确率。
元学习是改进这一过程的常用方法。蒸馏数据集会在反复的训练过程中不断更新,从而能够在多种可能的场景下发挥作用。
在这些训练过程中,该方法会模拟学生模型如何从当前蒸馏样本中学习,检查学生模型在真实数据上的表现,然后调整蒸馏样本,让它们成为更好的教师。随着时间推移,蒸馏数据集会学会支持快速学习和良好泛化,即使学生模型采用不同的初始权重或不同的架构也不例外。这样一来,蒸馏数据集会更加可靠,不再依赖单次训练过程。

图 3. 元学习过程(来源)
分布匹配技术#
另一方面,分布匹配会生成与真实数据集统计模式相匹配的合成数据。这种方法不只关注模型的最终准确率,还会关注神经网络在学习过程中生成的内部特征。
接下来,我们看看推动分布匹配的两种技术。
单层分布匹配#
单层分布匹配聚焦于神经网络中的单个层,并比较该层对真实数据和合成数据生成的特征。这些特征也称为激活值,体现了模型在网络这一阶段学到的内容。
通过让合成数据生成相似的激活值,这种方法促使蒸馏数据集反映原始数据集中的相同重要模式。在实际操作中,合成样本会不断更新,直到所选层的激活值与真实图像产生的激活值高度匹配。
这种方法相对简单,因为它一次只对齐一个层级的表示。对于较小的数据集,或无需匹配深层、多阶段特征层次结构的任务,这种方法尤其有效。通过清晰地对齐一个特征空间,单层匹配为使用蒸馏数据集进行学习提供了稳定且有意义的信号。
多层分布匹配#
多层分布匹配基于比较真实数据与合成数据的思路,但它在神经网络的多个层进行比较,而不只是一个层。不同层会捕获不同类型的信息,从早期层中的简单边缘和纹理,到深层中的形状和更复杂的模式。
通过匹配这些层的特征,蒸馏数据集会被调整为反映模型在多个层级学到的内容。由于这种方法会对齐整个网络中的特征,因此有助于合成数据保留模型区分类别所依赖的更丰富信号。
这对计算机视觉尤其有帮助,也就是模型学习理解图像和视频的任务,因为有用的模式分布在许多层中。当多个深度上的特征分布都能良好匹配时,蒸馏数据集就能更可靠、更有力地替代原始训练数据。
参数匹配方法#
数据集蒸馏中的另一个重要类别是参数匹配。它不匹配准确率或特征分布,而是匹配模型权重在训练过程中的变化。通过让模型在蒸馏数据集上训练时产生与使用真实数据训练时相似的参数更新,模型就会沿着几乎相同的学习路径前进。
接下来,我们将介绍两种主要的参数匹配方法。
单步匹配#
单步匹配会比较模型仅在真实数据上训练一步后权重的变化。随后调整蒸馏数据集,使模型在该数据集上训练一步后产生非常相似的权重更新。由于这种方法只关注这一次更新,因此易于理解且运行速度快。
缺点是单步无法反映完整的学习过程,尤其是对于需要多次更新才能构建更丰富特征的困难任务。因此,单步匹配通常最适用于模式能够快速学会的简单问题或较小数据集。
多步参数匹配#
相比之下,多步参数匹配会考察模型权重在多个训练步骤中的变化,而不只是一步。这一系列更新就是模型的训练轨迹。
构建蒸馏数据集的目标是让模型在合成样本上训练时,其训练轨迹紧随模型在真实数据上训练时的轨迹。通过匹配更长一段学习过程,蒸馏数据集能捕获原始训练过程中的更多结构。
由于它反映了学习随时间展开的过程,因此多步匹配通常更适用于较大或更复杂的数据集,在这些数据集中,模型需要多次更新才能学到有用模式。它需要跟踪多个步骤,因此计算量更大,但与单步匹配相比,它通常能生成泛化能力更强、性能更好的蒸馏数据集。
合成数据集的生成与优化方式#
了解主要的蒸馏方法后,我们现在来看看如何生成合成数据。在数据集蒸馏中,合成样本经过优化,以捕获最重要的学习信号,因此一小组样本就能替代大得多的数据集。
接下来,我们将了解如何生成和评估这些蒸馏数据。
创建和评估蒸馏图像#
在数据集蒸馏过程中,合成像素会在许多训练步骤中不断更新。神经网络从当前的合成图像中学习,并提供基于梯度的反馈,指出每个像素应如何变化,才能更好地匹配真实数据集中的模式。
之所以能做到这一点,是因为整个过程具有可微性(也就是说,每个步骤都平滑且梯度定义明确,因此像素的微小变化会带来可预测的损失变化),从而让模型能够在梯度下降过程中平滑地调整合成数据。
随着优化持续进行,合成图像开始形成有意义的结构,包括模型能够识别的形状和纹理。这些经过改进的合成图像常用于图像分类任务,因为它们捕获了分类器学习所需的关键视觉线索。
评估蒸馏数据集时,会在其上训练模型,并将结果与使用真实数据训练的模型进行比较。研究人员会测量验证准确率,并检查合成数据集是否保留了区分类别所需的判别特征(即模型用来区分不同类别的模式或信号)。他们还会在不同运行或模型设置下测试稳定性和泛化能力,以确保蒸馏数据不会导致过拟合。
数据蒸馏的现实应用#
接下来,我们将仔细了解一些示例,看看蒸馏数据集如何在保持高性能的同时加快训练、降低计算成本,即使数据量有限或高度专业化,也能发挥作用。
将数据集蒸馏用于计算机视觉应用#
在计算机视觉领域,目标是训练模型理解图像和视频等视觉数据。这些模型会学习边缘、纹理、形状和物体等模式,然后将这些模式用于图像分类、目标检测或分割等任务。由于视觉问题通常涉及光照、背景和视角的巨大变化,计算机视觉系统通常需要大型数据集才能实现良好的泛化,这使得训练成本高、速度慢。

图 4. 数据集蒸馏示例(来源)
在医学扫描、野生动物监测或工厂缺陷检测等图像分类应用中,模型往往面临准确率与训练成本之间的艰难取舍。这些任务通常涉及海量数据集。
数据集蒸馏可以将原始训练集压缩为少量合成图像,同时保留分类器所需的最重要视觉线索。在 ImageNet 这类大型基准数据集上,研究表明,只使用约占原始图像4.2%的蒸馏数据集,也能保持较高的分类准确率。这意味着一个极小的合成代理集就能替代数百万个真实样本,同时大幅减少计算量。
神经架构搜索#
神经架构搜索(NAS)是一种自动探索多种神经网络设计并为特定任务找到最佳方案的技术。由于 NAS 必须训练和评估大量候选模型,因此在完整数据集上运行可能速度很慢,而且计算开销很大。
数据集蒸馏可以创建一个极小的合成训练集,同时保留原始数据的主要学习信号,从而大幅加快对每个候选架构的测试速度。这样一来,NAS 就能高效比较各种设计,同时基本可靠地判断架构优劣,降低搜索成本而不过多牺牲最终模型质量。
持续学习与边缘部署#
持续学习系统(即随着新数据到来持续更新,而不是只训练一次的模型)需要快速且节省内存的更新方式。边缘设备(例如摄像头、手机和传感器)也面临类似限制,因为它们的计算和存储预算有限。
数据集蒸馏可以通过将大型训练集压缩为极小的合成数据集,同时帮助解决这两类问题,让模型能够使用小型回放集进行适配或重新训练,而不必使用完整数据集。例如,一项关于基于核的元学习的研究表明,仅用 10 个蒸馏样本,就能在 CIFAR-10(一种标准图像分类基准数据集)上达到超过 64% 的准确率。由于回放集非常紧凑,更新速度会快得多,也更实用,尤其适用于需要频繁更新的模型。
数据集蒸馏也可以与大语言模型的知识蒸馏配合使用。小型蒸馏数据集可以保留教师模型中最重要的任务信号,因此训练或更新压缩后的学生模型时效率更高,同时性能损失很小。由于这些数据集非常小,它们尤其适用于边缘端或设备端场景:在存储和计算资源有限的情况下,仍可让模型在更新后保持准确。
数据蒸馏的优缺点#
以下是使用数据集蒸馏的一些优势:
- 非常适合快速实验。 你可以测试新的架构、损失函数或超参数,而不必每次都在大型数据集上重新训练。
- 可能有利于保护隐私。 分享蒸馏后的合成样本可能比分享真实用户数据点更安全,因为原始样本不会直接暴露。
- 通常优于简单的子集选取。 蒸馏不会只挑选样本,而是会主动优化样本,使其包含尽可能多的信息。
虽然数据集蒸馏有多项优势,但也有一些局限需要注意:
- 过拟合。蒸馏数据通常最适合蒸馏时使用的架构,迁移到差异很大的模型时效果可能不佳。
- 对超参数敏感。 结果可能在很大程度上取决于学习率、初始化方式或蒸馏步数等因素。
- 难以扩展到现实世界的复杂场景。 在基准数据集上表现良好的方法,在大型、复杂或高分辨率数据集上可能会损失准确率。
要点#
数据集蒸馏让少量合成样本也能几乎与完整数据集一样有效地教会模型。这让机器学习变得更快、更高效,也更容易扩展。随着模型不断增大、需要更多数据,蒸馏数据集提供了一种实用方法,可以在不牺牲准确率的情况下降低计算成本。
加入我们的社区,并查看我们的 GitHub 代码库,了解更多 AI 相关内容。如果你想构建自己的视觉 AI 项目,可以查看我们的许可选项。访问我们的解决方案页面,深入了解医疗健康领域的 AI和零售领域的视觉 AI等应用。
作者
评论
提出问题、分享你的结果,或帮助其他人。










