CPP
Steering Prototypes with Prompt-tuning for Rehearsal-free Continual Learning (opens new window)
0. 摘要
原型(prototype)作为类嵌入的表示,已被探索用于减少内存占用或缓解持续学习场景中的遗忘问题。然而,基于原型的方法仍然会因语义漂移和原型干扰而导致性能急剧下降。在本研究中,我们提出了对比原型提示(Contrastive Prototypical Prompt, CPP),并展示了任务特定的提示调优(prompt-tuning)在对比学习目标的优化下,能够有效解决这两个障碍,并显著提升原型的效力。我们的实验表明,CPP 在四个具有挑战性的类增量学习基准测试中表现出色,比最先进的方法提升了 4% 到 6% 的绝对性能。此外,CPP 不需要回放缓冲区(rehearsal buffer),并且在持续学习与离线联合学习之间大幅缩小了性能差距,展示了在 Transformer 架构下持续学习系统的有前景的设计方案。我们的代码将公开发布。
1. 引言
持续学习(Continual Learning)[51] 是从连续的数据流中顺序学习的能力,对于现代智能系统至关重要,因为世界是动态变化的 [19]。然而,现有的深度神经网络容易受到灾难性遗忘(catastrophic forgetting)[36] 的影响,即模型在吸收新信息时,先前学习的任务性能会急剧下降。
在众多应对持续学习挑战的策略中 [54],原型(如类均值嵌入 [50])展现出有前景的功能,因为它们能够以内存高效的方式保留先前知识 [70],并在与最近类均值(Nearest Class Mean, NCM)[37] 分类器结合时,缓解对最新任务的偏见 [46, 66]。然而,原型本身也会因以下两个问题而导致性能急剧下降:
- 语义漂移:使用统一模型学习一系列任务可以被视为生成一系列模型快照,而只保留最新版本。因此,在推理时,数据样本与其对应的原型实际上是由不同的嵌入函数编码的(除了最新任务的数据样本)。这种不一致会导致潜在空间中的严重语义漂移,如图 1(上)所示。
- 原型干扰:当出现与先前数据语义相似的新数据样本时,它们的嵌入往往会靠近现有的原型,导致干扰,如图 1(底部)所示。
在持续学习过程中,这两种现象会同时发生并导致遗忘。
现有的原型增强方法通过保存和回放先前的示例 [46, 12] 或通过近似进行后补偿 [66, 18] 来缓解语义漂移。然而,这些方法要么需要大量内存,要么随着任务序列的累积容易出错。此外,干扰问题较少受到关注,通常通过额外的正则化项隐式处理 [1, 32, 33]。相比之下,我们试图以一种显式和独立的方式解决语义漂移和原型干扰问题。具体来说,我们提出显式对齐用于生成原型和推理的嵌入函数,以避免语义漂移,并直接在嵌入空间中限制原型之间的距离,以减少干扰。
受到提示调优(prompt-tuning)[28, 22] 的启发,这是一种新的迁移学习范式,能够通过少量额外的可学习 token 来适应冻结的 Transformer [55] 以执行下游任务,我们提出利用任务特定的提示来避免语义漂移。具体来说,我们允许推理时的数据样本检索其对应的任务特定提示,并组装用于生成其对应原型的完整嵌入函数。在我们的设计中,冻结的嵌入函数(即预训练的 Transformer)被视为巩固的全局知识,并在任务之间共享以保持系统的稳定性。任务特定提示则学习任务级别的专门化,保持系统的可塑性。
为了减少嵌入空间中的原型干扰,我们通过一种新颖的对比原型损失(Contrastive Prototypical Loss, CPL)来优化任务特定提示。该学习目标鼓励类内聚类,并增加类间距离,基于数据嵌入和迄今为止的原型的混合。由于我们仅将先前的知识保留为原型并将其作为锚点,任务特定提示能够有效引导当前原型,避免干扰,而无需保存和回放显式示例。此外,我们提出了多中心原型策略,该策略利用一组虚构的嵌入而不是单一的均值嵌入来表征类的分布。该策略无缝融入我们的框架,并提升了整体性能。
我们称我们的方法为对比原型提示(Contrastive Prototypical Prompt, CPP),这是一个简单而新颖的持续学习框架,全面探索嵌入空间。实验表明,CPP 在四个具有挑战性的类增量基准测试中表现出色,包括分割 CIFAR-100、5-datasets、分割 ImageNet 子集和分割 ImageNet-R,比最先进的方法带来了约 4% 到 6% 的绝对提升。此外,CPP 是无回放的,并且比现有替代方法至少少消耗 5 倍的额外内存。本工作的主要贡献总结如下:
- 我们提出了对比原型提示(CPP),这是一种简单而新颖的无回放持续学习框架。它利用对比学习的任务特定提示,有效解决了语义漂移和原型干扰问题。
- 我们提出了多中心原型策略,以更好地表征类分布并提高原型的代表性。该策略无缝融入 CPP,并进一步提升了整体性能。
- 我们通过实验证明,CPP 在轻量内存预算下显著优于最先进的方法。每个提出的组件都经过深入研究,并展示了明确且累积的益处。
2. 相关工作
2.1. 持续学习
现有的算法可以分为三类 [41, 54, 19]。基于正则化的方法旨在在稳定性和可塑性之间取得平衡。其中,参数正则化方法限制参数空间的变化范围 [33, 67] 或方向 [16, 48],而功能正则化方法则约束“锚点”的功能变化 [2, 52, 40]。尽管这些方法具有通用性,但在处理长任务序列时,它们的性能往往表现不佳 [19]。基于模块化的方法通过重组现有资源 [35, 49] 或分配额外的学习能力 [47, 65, 30] 来减少知识干扰。然而,大多数基于模块化的方法需要在测试时提供任务标识,并且难以扩展。在实践中,基于回放的方法 [4,6] 通过保存和回放先前数据样本展现出最大的通用性和鲁棒性。然而,这种策略对缓冲区大小敏感 [43, 19],并且在内存受限或隐私敏感的场景下不可行。本文提出的 CPP 是一种混合方法,结合了不同子类别的优势,同时避免了它们的局限性。
2.2. 原型在持续学习中的应用
研究表明,嵌入比参数化线性分类器更不容易丢失信息 [66, 11],而后者由于对最新任务的偏见是导致灾难性遗忘的关键原因之一 [68]。因此,大多数与原型相关的方法 [46, 66, 70] 将原型与 NCM 分类器结合使用。另一方面,PASS [70] 利用原型作为潜在空间中的锚点,以减少语义重叠。为了缓解语义漂移问题,现有方法通过保存显式示例来更新原型 [46, 12] 或通过从当前数据中近似漂移来进行后补偿 [66]。相比之下,CPP 从一开始就防止语义漂移,并显式处理原型干扰问题。此外,CPP 利用多中心原型而非均值嵌入,以更好地表征类分布。
2.3. 提示调优
从预训练权重初始化深度神经网络是一种广泛采用的实践。然而,传统的微调技术并不总是对下游任务有益 [25]。提示调优(prompt-tuning)[31, 28] 在自然语言处理中作为一种重用预训练知识的替代方法出现。VPT [22] 将提示调优技术应用于视觉领域。最近,它也被引入持续学习领域。L2P [60] 和 DualPrompt [59] 都利用跨任务共享的提示池或全局提示来学习增量知识。S-prompts [57] 使用领域特定提示来解决领域增量学习问题。本文中,CPP 应用任务特定提示来抵消语义漂移和原型干扰。此外,CPP 将原型作为分类器,而不是训练单独的参数化分类器。
3. 方法论
我们首先在第 3.1 节中描述问题设置并引入相关符号。随后,我们在第 3.2 节中介绍了一个最小可行的基于原型的框架,作为我们的基线模型。在第 3.3 节中,我们提出了基于基线模型的 CPP。最后,我们在第 3.4 节中阐述了多中心原型策略。图 2 展示了我们提出的框架的概览。
3.1. 问题设置与符号
监督持续学习可以定义为一个模型在
3.2. 无需训练的基线模型
设
其中,
其中,
3.3. 对比原型提示(CPP)
3.3.1 使用任务特定提示引导原型
理想情况下,一个完美的静态嵌入函数可以将数据样本投影到嵌入空间中与其对应原型最近的位置,从而防止遗忘。然而,在实践中,期望这样一个全能的嵌入函数是不现实的。因此,我们需要允许嵌入函数动态适应新的输入,同时最小化遗忘。为此,我们利用每个任务的少量额外可学习 token(即任务特定提示)来在冻结的嵌入函数上学习信息。
具体来说,我们将提示
其中
我们在内存空间中维护一组任务特定提示,每个任务特定提示与一个键原型和值原型相关联,后续将详细说明。得益于任务特定提示的设计,不同任务之间的知识干扰显著减少,因为它们不共享相同的参数空间。此外,通过组装冻结的嵌入函数与正确的任务特定提示,可以在推理时避免语义漂移(详见第 3.3.3 节)。
3.3.2 对比原型损失(CPL)
在本节中,我们提出了一种新颖的损失函数来优化任务特定提示,从而解决原型干扰问题。回想一下,我们的模型将不同类的信息保留为原型,并使用非参数化分类器(即 NCM)。因此,当添加到冻结的嵌入函数时,我们期望优化良好的任务特定提示能够将数据样本投影到一个空间中,使得类内数据样本紧凑,类间样本分离。 基于上述原理,我们提出了对比原型损失(CPL),它显式鼓励类内实体的紧凑性,同时推开类间实体,基于数据嵌入和原型的联合。在任务
其中

3.3.3 通过重新组装模型快照进行推理
在这里,我们展示了如何使用 CPP 进行推理。给定一个目标数据样本,我们设法检索其对应的任务特定提示以组装完整的嵌入函数(即模型快照)。请注意,此过程类似于预测任务标识,在任务增量学习下可以省略。 考虑任务
图 2(右)描绘了推理过程的信息流。详细算法见补充材料。 确保上述推理过程成功的关键有两个步骤。首先,我们需要检索包含目标提示的一组候选提示。通过适当的嵌入函数确保这一点,数据样本倾向于位于其对应分布质量中心附近(在补充材料中进行了经验验证)。其次,我们要求检索到的提示(即目标提示和错误匹配的提示)对最终预测有贡献。由于我们提出的对比学习目标,目标提示将减少样本与其对应值原型之间的距离,而错误匹配的提示将以相反的方式起作用。因此,目标提示和错误匹配提示的行为都有利于 NCM 分类器。
3.4. 多中心原型
持续学习中的现有文献通常采用类均值嵌入作为原型 [66, 70, 69]。在这种情况下,它隐式假设潜在空间中的分布是凸且各向同性的,并且距离函数属于 Bregman 散度 [50]。这一前提在实践中可能不成立,因为没有对嵌入分布施加严格的约束,并且余弦距离不属于 Bregman 散度(见图 3 中的示例)。为此,我们提出使用多中心原型,其中我们生成一组虚构的嵌入来表征目标类分布。具体来说,给定类

值得注意的是,多中心策略也与我们的推理过程互补。它可以被视为测试时的硬案例挖掘。例如,对于那些远离其质量中心或位于多个类分布混合区域的数据样本,多中心策略将允许检索更多候选提示以保持准确性。相反,当数据样本接近其对应的质量中心且位于类分布分离的区域时,该策略将检索较少的候选提示以提高效率。检索提示数量的上下限分别为
4. 实验
4.1. 数据集
分割 CIFAR-100 是一个广泛使用的持续学习基准。按照标准设置,我们将 CIFAR-100 均匀分割为 10 个独立的任务。更多关于不同分割(如 5 和 20)的结果见补充材料。
5-datasets 是 CIFAR-10 [24]、MNIST [26]、Fashion-MNIST [63]、SVHN [38] 和 notMNIST [3] 的集合,每个数据集被视为一个新任务。它作为现实场景的公平类比,其中任务间的差异较大。
分割 ImageNet 子集 是另一个广泛采用的基准,它将 ImageNet [13] 的一个子集(100 个类别)分为 10 个任务,每个任务包含 10 个类别。
分割 ImageNet-R 首次由 DualPrompt [59] 用于持续学习,以模拟现实场景,其中存在不同的图像风格且类内多样性显著。它将原始 ImageNet-R [21] 数据集分为 24,000 张训练图像和 6,000 张测试图像,并将总共 200 个类别分为 10 个独立的任务。
4.2. 配置与评估指标
配置:我们使用以下与数据集无关的配置进行所有实验,除非另有说明。所有实验均在四块 NVIDIA A100 GPU 上进行。我们使用 AdamW 优化器 [34] 训练 CPP 50 个 epoch,批量大小为 256。初始学习率设置为
评估指标:我们采用广泛使用的平均准确率(Avg. Acc)和遗忘率(Forget)作为评估指标。报告五次运行的平均值和标准差。更多关于每个指标的详细说明和不同协议下的结果见补充材料。
4.3. 与最先进方法的比较
在本节中,我们首先在分割 CIFAR-100、5-datasets 和分割 ImageNet-R 数据集上,将 CPP 与兼容 Transformer 架构的最先进方法进行比较,遵循 DualPrompt [59] 的设置。然后,我们复现了最先进的基于原型的方法以及基于 Transformer 的方法,并在分割 ImageNet 子集和分割 CIFAR-100 上进行比较。需要注意的是,本节中报告的所有方法均使用相同的预训练 ViT-B/16。
在分割 CIFAR-100、5-datasets 和分割 ImageNet-R 上的主要结果:我们将 CPP 与基于正则化的方法(EWC [33] 和 LwF [32])、先进的基于回放的方法(ER [8]、GDumb [43]、BiC [62]、DER++ [4] 和 Co
与基于原型的方法的比较:我们进一步将 CPP 与最先进的基于原型的方法(如 iCaRL [46] 和 PASS [70])在分割 ImageNet 子集和分割 CIFAR-100 上进行比较。为了校准,我们还在分割 ImageNet 子集上复现了 DualPrompt [59]。为了避免信息泄漏,我们在分割 ImageNet 子集上使用自监督的 MAE 进行模型预训练。复现细节见补充材料。如表 2 所示,预训练的 ViT 骨干网络显著提升了现有基于原型方法的性能,这与 [45] 中的观察一致。然而,CPP 在相同骨干网络下仍然表现出最先进的性能,表明 CPP 相对于其他基于原型方法的明显优势。
4.4. 消融实验
提出的模块的有效性:由于嵌入函数是我们框架的关键组成部分之一,因此分析 CPP 在不同嵌入函数下的表现至关重要。为此,我们使用四种最新的预训练方法(ViT [14]、Deit [53]、Dino [5] 和 MAE [20])实现 CPP,涵盖了监督和自/无监督学习以及判别和生成模型。如表 3 所示,任务特定提示和多中心原型在所有预训练方法下都具有鲁棒性,比基线模型带来了约 10% 到 20% 的绝对提升。此外,每个模块在独立应用时仍然有效,并且在组合时它们的益处是叠加的。一个有趣的观察是,不同的预训练方法与 NCM 分类器结合时会产生明显的差异,并且基线模型与其对应的 CPP 模型之间存在明显的正相关(例如,分割 CIFAR-100 的
对比原型损失优于替代方案:为了验证 CPL 的益处,我们首先将其与两种广泛使用的损失函数进行比较:CE(交叉熵)和 SupCon(监督对比损失)[23]。如表 4 所示,CPL 在两者之间表现出明显的优势。在比较中,SupCon 与我们的方法最为兼容,进一步验证了将对比损失设计与 NCM 分类器结合的优势。然后,我们分别在均匀性(w/ uniform)或移除原型(w/o proto)的情况下,在不同温度下验证每个提出组件的有效性。如图 4(右)所示,鼓励均匀性会降低性能,而移除原型会加剧原型干扰,这与我们在第 3.3.2 节中的分析一致。
稳定性和可塑性之间的权衡通过温度系数调节:如图 4(右)所示,较低的温度(导致对负对的更多惩罚)会减少遗忘,但也会降低准确率。较高的温度则相反,提高整体性能的代价是更高的遗忘率。我们经验上发现
MLP 不可忽视:我们在表 4 中展示了,无论损失设计如何,MLP 引入的非线性对于训练提示的成功至关重要。用单个线性层替换 MLP 头部会导致一致较差的结果。
5. 结论
我们提出了一种简单而新颖的无回放持续学习框架。它利用任务特定提示,通过设计的对比原型损失进行优化,以避免语义漂移并减少原型干扰。此外,我们提出了多中心原型策略,以提高原型的代表性。通过实验,CPP 显著超越了最先进的方法,并且每个提出的组件都经过了深入分析。我们相信 CPP 可以为可扩展持续学习系统的设计原则提供启示,尤其是结合当前网络架构设计和表示学习的进展。未来的研究方向包括进一步提高推理效率,以及将 CPP 扩展到其他复合场景,例如模糊任务边界、少样本和开放词汇设置。
6.附录
A. 对比原型损失的梯度分析
在这里,我们提供了对比原型损失(Contrastive Prototypical Loss)的梯度分析。为了简化符号,我们将向量
对于正样本对
经过推导,我们得到:
类似地,对于负样本对
可以看出,所提出损失的梯度与标准的监督对比损失遵循相同的模式。正样本对的处理方式相同,并且根据温度和正样本集的基数进行缩放。负样本项的梯度继承了典型对比损失的隐含难例挖掘特性,即与指数项
B. CPP 作为基于能量的模型
基于能量的模型(EBM)的整体目标是获得一个能量函数
其中
在我们的框架中进行预测时,类别分布可以表示为:
其中
在适当的温度
为了验证这一点,我们首先将公式 (8) 简化为仅包含一个正样本
通过将
当上述损失最小化时,第一项将降低目标值原型
最后,我们展示了鼓励均匀性与能量模型的原则相悖。通过鼓励均匀性,如典型的监督或自监督对比损失 [10, 23],我们将公式 (15) 重写为:
其中