EASE
Expandable Subspace Ensemble for Pre-Trained Model-Based Class-Incremental Learning
Paper (opens new window) | Code (opens new window) | CVPR 2024
0. Abstract
类增量学习(CIL)要求学习系统不断学习新类而不遗忘旧类。尽管预训练模型(PTM)在 CIL 中表现出色,但一个关键问题仍然存在:学习新类通常会导致覆盖旧类。过度修改网络会导致遗忘,而最小调整则会导致对新类的拟合不足。因此,如何在不损害原有知识的情况下进行高效的模型更新成为关键。在本文中,我们提出了基于 PTM 的 CIL 的可扩展子空间集成(EASE)。为了实现无冲突的模型更新,我们为每个新任务训练一个独立的轻量级适配器模块,以创建任务特定的子空间。这些适配器跨越高维特征空间,允许在多个子空间之间进行联合决策。随着数据的演变,扩展的子空间使得旧类分类器与新阶段空间不兼容。相应地,我们设计了一种语义引导的原型补充策略,无需使用任何旧类实例即可合成旧类的新特征。对七个基准数据集的大量实验验证了 EASE 的先进性能。
TODO
1. Introduction
深度学习的出现导致深度神经网络在现实应用中表现出色 [7, 9, 11, 41, 66]。然而,在开放世界中,数据通常以流的形式出现,需要学习系统增量吸收新类知识,即类增量学习(CIL) [46]。CIL 面临的主要障碍是:学习新类往往会覆盖先前获取的知识,导致现有特征的灾难性遗忘 [18, 19]。相应地,预训练技术的最新进展 [24] 激发了社区利用预训练模型(PTM)来缓解遗忘 [61, 62]。PTM 通过大量数据和丰富的资源进行预训练,固有地生成具有普遍性的特征。因此,基于 PTM 的 CIL 表现出优越的性能,为实际应用开辟了新的途径 [44, 49, 54, 60]。
使用通用的 PTM 作为初始化,算法倾向于冻结预训练权重,并附加最少的额外参数(例如提示 [31])以适应增量任务 [49, 60–62]。由于预训练权重被冻结,网络的普遍性将在整个学习过程中得到保留。然而,为了捕获新任务的特征,从提示池中选择和优化实例特定提示不可避免地会重写前面任务的提示。因此,它导致旧任务和新任务之间的冲突,引发灾难性遗忘 [32]。
在 CIL 中,学习新知识和保留旧信息之间的冲突被称为稳定性-可塑性困境 [23]。因此,学习新类不应破坏现有类。一些非 PTM 的方法,如可扩展网络 [10, 17, 56, 64],通过为每个新任务学习一个独特的主干来解决这个问题,从而创建任务特定的子空间。这确保了优化新主干不会影响其他任务,当这些主干连接在一起时,它们会在高维空间中促进跨任务特征的综合决策,并利用示例进行统一的分类器学习。
可扩展网络能够抵抗跨任务特征冲突,但它们需要大量的资源分配来存储主干,并且需要使用示例来进行统一的分类器学习。相比之下,提示学习允许不使用示例的 CIL,但难以防止前面提示的遗忘。这促使我们思考是否可以构建低成本的任务特定子空间来克服跨任务冲突而无需依赖示例。
实现这一目标有两个主要挑战:
- 构建低成本、任务特定的子空间。由于微调 PTM 需要大量资源,我们需要通过轻量级模块而不是整个主干来创建和保存任务特定子空间。
- 开发一个能够将持续扩展的特征映射到相应类别的分类器。由于无法使用前面的阶段的示例,前面阶段的分类器与持续扩展的特征不兼容。因此,我们需要利用类别间关系作为语义指导来合成先前学习的类别的分类器。
在本文中,我们提出了扩展子空间集成(EASE)来应对上述挑战。为了缓解跨任务冲突,我们为每个增量任务学习任务特定的子空间,使得学习新类不会损害原有类。这些子空间通过基于冻结 PTM 添加轻量级适配器来学习,因此训练和存储成本可以忽略不计。因此,我们可以连接 PTM 的特征与每个适配器的特征,以从多个子空间中汇总信息,进行整体决策。此外,为了弥补现有分类器与扩展特征之间的维度不匹配,我们利用共现空间中的类别间相似性来指导目标空间中的分类器映射,从而无需使用示例即可合成前面阶段的分类器。在推理过程中,我们通过特征和原型之间的兼容性来重新加权预测结果,并考虑所有子空间的对齐来建立一个鲁棒的集成。如图 1 所示,EASE 在有限的内存成本下表现出最先进的性能。
2. Related Work
类增量学习(CIL):要求学习系统在不遗忘现有类的情况下不断吸收新类知识 [13, 14, 20, 22, 38, 57, 59, 74, 81, 82],大致可以分为几类。基于数据重演的方法 [3, 6, 37, 45, 75] 在学习新类时选择并重放前面类的示例,以恢复前面知识。基于知识蒸馏的方法 [12, 16, 36, 46, 48, 52, 71] 通过知识蒸馏 [27] 建立前一阶段模型和当前模型之间的映射。映射的 logits/特征在更新过程中帮助增量模型反映前面特征。基于参数正则化的方法 [1, 2, 34, 68] 在模型更新过程中对重要参数的漂移施加正则化项,以保持前面知识。基于模型校正的方法 [5, 43, 47, 63, 67, 73] 修正增量模型的归纳偏差,以实现无偏预测。最近,可扩展网络 [10, 17, 29, 30, 56, 64] 在其他竞争者中表现出强大的性能。面对新的增量任务,它们将前一个主干保存在内存中,并初始化一个新主干以捕获这些新特征。在预测时,它们连接所有主干以生成一个大的特征图,并通过额外的示例学习相应的分类器来在所有类别中进行校准。模型扩展方法在基于预训练模型的 CIL 中的部署主要受两个因素的限制,即大规模预训练模型的巨大内存成本和对示例的需求。
基于预训练模型的 CIL:是当今 CIL 领域的热门话题 [39, 58, 79]。随着预训练技术的繁荣,将 PTM 引入 CIL 以获得更好的性能是直观的。相应地,大多数方法 [49, 60–62] 学习提示池以自适应选择实例特定提示 [31] 进行模型更新。在预训练权重冻结的情况下,这些方法可以将新特征编码到提示池中。DAP [32] 进一步扩展了提示选择过程,增加了提示生成模块。除了提示调整外,LAE [21] 提出了基于 EMA 的模型更新,结合在线和离线模型。SLCA [70] 将 [80] 中前类的高斯建模扩展到模型更新期间校正分类器。此外,ADAM [78] 表明原型分类器 [50] 是一个强大的基准,而 RanPAC [40] 探索了随机投影在这一设置中的应用。
3. Preliminaries
4. Methodology
EASE:可扩展子空间集成
观察到子空间扩展有潜力缓解 CIL 中的跨任务冲突,我们旨在不使用示例实现这一目标。因此,我们首先为顺序任务创建轻量级子空间,以控制总预算和计算成本。适配模块应反映任务信息,以提供任务特定特征,从而在学习新任务时不会损害旧知识。另一方面,由于没有示例,我们无法训练一个分类器来应对不断扩展的特征。因此,我们需要合成和完成扩展的分类器,并在没有历史实例的情况下校准不同任务之间的预测。相应地,我们尝试利用语义引导的映射来完成后面子空间中的前类。之后,模型可以在统一的高维决策空间中享受预训练模型的强大泛化能力和各种任务特定特征,并在不遗忘现有类的情况下做出整体预测。
我们首先介绍子空间扩展过程,然后讨论如何完成分类器。最后一部分总结了推理函数及伪代码。
4.1 适配器的子空间扩展 在式(3)中,通过完全微调前一个模型获得新嵌入函数。然而,微调和保存所有这些主干需要大量计算成本和内存预算。相比之下,我们建议通过轻量级适配器调整 [8, 28] 实现这一目标。假设预训练模型中有 L 个变换器块,每个块包含一个自注意模块和一个 MLP 层。遵循 [8],我们学习一个适配器模块作为 MLP 的侧分支。具体而言,适配器是一个瓶颈模块,包含一个向下投影层 Wdown ∈ Rd×r、一个非线性激活函数 σ 和一个向上投影层 Wup ∈ Rr×d。它调整 MLP 的输出如下:
xo = σ(xiWdown)Wup + MLP(xi) , (4)
其中 xi 和 xo 分别表示 MLP 的输入和输出。式(4)通过向原始输出添加残差项来反映任务信息。我们将所有 L 个变换器块中的适配器集记为 A,并将带适配器 A 的调整嵌入函数记为 ϕ(x;A)。因此,面对新增量任务,我们可以冻结预训练权重,只优化适配器:
min A∪W ∑ (x,y)∈Db ℓ ( W⊤ϕ̄ (x;A) , y ) . (5)
优化式(5)使我们能够在这些轻量级适配器中编码任务特定信息,并创建任务特定子空间。相应地,我们共享冻结的预训练主干,并为每个新任务学习可扩展适配器。在任务 b 的学习过程中,我们初始化一个新适配器 Ab 并优化式(5)以学习任务特定子空间。这样,我们可以轻松地通过连接预训练主干与每个适配器的特征来获得所有子空间中的连接特征:
Φ(x) = [ϕ(x;A1), ···, ϕ(x;Ab)] ∈ Rbd . (6)
可扩展适配器的效果:图 2(左、中)说明了适配器扩展过程。由于我们只调整与相应任务对应的任务特定适配器,训练新任务不会损害旧知识(即前适配器)。此外,在式(6)中,我们将预训练嵌入与各种任务特定适配器相结合,以获得最终表示。嵌入包含各种子空间中的所有任务特定信息,可以进一步集成以进行整体预测。此外,由于适配器只是轻量级分支,它们需要的参数比完全微调主干少得多。保存这些适配器的参数成本为(B × L× 2dr),其中 B 是任务数量,L 是变换器块数量,2dr 表示每个适配器的参数数量(即线性投影)。
获得整体嵌入后,我们讨论如何将 bd 维特征映射到类。我们使用基于原型的分类器 [50] 进行预测。具体而言,在每个增量阶段的
训练过程结束后,我们在适配器 Ab 的子空间中提取第 i 类的类原型:
pi,b = 1 N ∑|Db| j=1 I(yj = i)ϕ(xj ;Ab) , (7)
其中 N 是第 i 类的实例数。式(7)表示相应类在相应嵌入空间中最具代表性的模式,我们可以利用所有适配器嵌入空间中的原型连接 Pi = [pi,1,pi,2, ···,pi,b] ∈ Rbd 作为第 i 类的分类器。因此,分类基于相应嵌入 Φ(x)和连接原型的相似性,即 p(y|x) ∝ sim⟨Py,Φ(x)⟩。我们使用余弦分类器进行预测。
4.2 语义引导的原型补充 式(7)通过代表性原型构建分类器。然而,当新任务到来时,我们需要在新的子空间中学习新的适配器。这要求重新计算最新子空间中的所有类原型,以对齐原型与增加的嵌入,而我们没有任何示例来估计旧类的原型。例如,我们在第一个阶段用第一个数据集 D1 训练 A1,并在 D1 的子空间中提取类原型,记为 P1,1 = Concat[p1,1; ···p|Y1|,1] ∈ R|Y1|×d。P1,1 中的第一个下标表示任务索引,第二个下标表示子空间。在随后的任务中,我们用 D2 扩展适配器 A2。由于我们只有 D2,我们只能在 A1 和 A2 的子空间中计算 D2 的原型,即 P2,1, P2,2。换句话说,我们无法在新的嵌入空间中计算旧类的原型,即 P1,2。这导致原型和嵌入之间的维度不一致,我们需要找到一种方法在最新子空间中补全和合成旧类的原型。
一般来说,我们将上述问题表述为:给定两个子空间(旧的和新的)和两组类(旧的和新的),目标是使用 Po,o, Pn,o, Pn,n 在新子空间中估计旧类原型 P̂o,n。Po,o 和 Pn,o 表示旧子空间中的旧类和新类原型(我们称之为共现空间),Pn,n 表示新子空间中的新类原型。
由于相关类依赖相似的特征来确定标签,因此直观上可以重用相似类的原型来合成相关类的原型。例如,表示‘狮子’的基本特征也可以帮助定义‘猫’。我们认为这种语义相似性可以在不同的嵌入空间中共享,即‘猫’和‘狮子’之间的相似性应该在不同适配器的子空间中共享。因此,我们可以在共现空间中提取这种语义信息,并通过重组相关原型来恢复原型。具体而言,我们在旧子空间(所有类共现的空间)中测量旧类和新类之间的相似性,并利用它在新嵌入空间中重建原型。类之间的相似性通过共现子空间中的原型计算:
Simi,j = Po,o[i] ∥Po,o[i]∥2 Pn,o[j] ⊤ ∥Pn,o[j]∥2 , (8)
其中索引 i 表示第 i 类的原型。在式(8)中,我们测量旧类原型与新类原型在相同子空间中的语义相似性,并获得相似性矩阵。我们进一步通过 softmax 归一化相似性:Simi,j = expSimi,j∑ j expSimi,j 。归一化相似性表示旧类相对于新类在共现空间中的局部相对关系,假设这种关系可以在不同子空间中共享。
获得相似性矩阵后,我们进一步利用相对相似性在新子空间中重建旧类原型。由于类之间的关系可以在不同子空间中共享,旧类原型的值可以通过新类原型的加权组合来测量:
P̂o,n[i] = ∑ j Simi,j ×Pn,n[j] . (9)
原型补充的效果:图 2(右)描述了原型合成过程。通过式(9),我们可以在没有任何前示例的情况下在最新子空间中恢复旧类原型。在学习每个新适配器后,我们使用式(9)在最新子空间中重建所有旧类原型。补充过程是无训练的,使得学习过程高效。
4.3 子空间重加权的子空间集成 到目前为止,我们已经介绍了通过新适配器进行子空间扩展和通过原型补充恢复旧类原型。在适配器扩展和原型补充之后,我们可以得到一个完整的分类器(原型矩阵)如下:
P1,1 P̂1,2 ··· P̂1,B P2,1 P2,2 ··· P̂2,B ... ... . . . ... PB,1 PB,1 ··· PB,B
注意,主对角线上方的项通过式(9)估计。在推理期间,任务 b 的 logit 通过以下公式计算:
[Pb,1,Pb,2, ···,Pb,B ] ⊤Φ(x) = ∑ i P ⊤ b,iϕ(x;Ai) , (11)
这相当于在不同子空间中多个(原型-嵌入)匹配 logit 的集成。在式(11)中的项中,只有适配器 Ab 特别学习以提取 b 任务的任务特定特征。因此,我们认为这些原型更适合对相应任务进行分类,并应在最终推理中占据更大比例。因此,我们通过为匹配子空间赋予更高权重来变换式(11):
P⊤ b,bϕ(x;Ab) + α ∑ i ̸=b P ⊤ b,iϕ(x;Ai) , (12)
其中 α 是权衡参数,在我们的实验中设为 0.1。重新加权 logit 使我们能够突出核心特征在决策中的贡献。
EASE 总结:我们在补充材料中总结了 EASE 的训练流程。我们为每个新任务初始化并训练一个适配器以编码任务特定信息。之后,我们提取当前数据集的所有适配器原型,并合成前类原型。最后,我们构建完整的分类器并重新加权 logit 以进行预测。由于我们使用基于原型的分类器进行推理,每个学习阶段后将丢弃式(5)中的分类器 W。