PriViLege
Pre-trained Vision and Language Transformers Are Few-Shot Incremental Learners (opens new window)
CVPR 2024
0. 摘要
少样本类增量学习(Few-Shot Class Incremental Learning,简称 FSCIL)是一项任务,要求模型在每个类别只有少量样本的情况下,逐步学习新类别而不遗忘旧类别。
FSCIL 面临两大挑战:灾难性遗忘和过拟合。这些挑战促使以往的研究主要依赖于浅层模型,如 ResNet-18。虽然浅层模型因容量有限,可以缓解遗忘和过拟合问题,但也导致了在少样本增量阶段中知识迁移的不足。
在本文中,我们主张:在大规模数据集上预训练的大型模型(如视觉与语言 Transformer)可以成为优秀的少样本增量学习者。为此,我们提出了一种新颖的 FSCIL 框架,称为 PriViLege(即 Pre-trained Vision and Language transformers with prompting functions and knowledge distillation)。
我们的框架通过新提出的预训练知识调优(Pre-trained Knowledge Tuning,PKT)及两种新型损失函数——基于熵的发散损失(entropy-based divergence loss)和语义知识蒸馏损失(semantic knowledge distillation loss),有效应对了大型模型中的灾难性遗忘和过拟合问题。
实验结果表明,所提出的 PriViLege 方法在多个数据集上大幅度超越了当前的最新方法。例如,在 CUB200 上提高了 +9.38%,在 CIFAR-100 上提高了 +20.58%,在 miniImageNet 上提高了 +13.36%。
我们的实现代码公开在:
https://github.com/KHU-AGI/PriViLege
1. 引言
人类具有卓越的能力,能够仅凭少量数据快速理解新的概念。为了使深度神经网络具备这种能力,最早在文献【33】中引入了少样本类增量学习(Few-Shot Class Incremental Learning,简称 FSCIL)。
FSCIL 模仿人类的学习方式,通常包括一个基础阶段(base session)和多个增量阶段(incremental sessions)。在基础阶段,网络利用充足的训练数据学习大量类别;而在增量阶段,网络需针对每个新类别,使用极少的样本进行训练。
由于增量阶段数据受限,如何有效地传递基础阶段所学到的多样知识,成为 FSCIL 成功的关键。
在 FSCIL 中,主要存在两大挑战:灾难性遗忘【20】和过拟合【33】。灾难性遗忘是指,当网络依次学习新类别时,严重遗忘了之前学到的知识。而过拟合则指,网络过度专注于有限的训练样本,导致整体性能下降。
为了解决这些问题,已有研究主要采用浅层模型,如 ResNet-18【12, 39, 40】。
浅层模型参数数量有限,便于通过部分冻结减少遗忘,并抑制过拟合。但浅层模型的容量受限,无法充分捕捉和迁移基础阶段的领域知识到增量阶段。
最近,像 Vision Transformer (ViT)【3】和 Contrastive Language-Image Pretraining (CLIP)【26】等大型预训练模型在计算机视觉领域广泛应用,因其出色的适应性和性能表现。
因此,大型预训练模型能够有效学习和迁移基础阶段的领域知识,克服浅层模型在知识迁移能力上的局限。
然而,微调大型预训练模型容易导致预训练知识的遗忘;而完全冻结模型,又阻碍了基础阶段的领域知识学习。如何在保留预训练知识和获取新领域知识之间权衡,成为在 FSCIL 中应用大型模型的一大挑战。
为了深入探讨大型模型在 FSCIL 中的挑战和应用潜力,我们在 CIFAR-100【14】数据集上进行了 5-way 5-shot 的实验。
2. 相关工作
2.1 少样本类增量学习
少样本类增量学习(Few-Shot Class Incremental Learning,FSCIL)是一种类别增量学习(Class Incremental Learning, CIL)的变体,但更具挑战性,因为模型需要仅凭少量训练样本学习新类别。
在以往众多的 FSCIL 方法【34】中,动态网络结构方法【29, 33, 38, 40】通过在训练过程中调整网络结构,来保留先前知识,减少遗忘。
基于特征和特征空间的方法【2, 12, 23, 30, 41, 42】使模型能够更好地适应新类别,同时提升特征提取器对新类别的泛化能力。
基于原型(prototype-based)的方法【6, 19, 39】旨在通过对齐原型与分类器权重,提升分类性能。
然而,之前的方法主要关注于在浅层网络中缓解遗忘和过拟合问题,因此在受限的模型容量下,性能提升是有限的。
本文采用了如预训练 ViT 和 CLIP 这样的大型模型用于 FSCIL,并介绍了如何有效利用它们来克服 FSCIL 的主要挑战。
2.2 视觉 Transformer 中的提示工程
提示微调(prompt tuning)【16】和前缀微调(prefix tuning)【17】被广泛应用于视觉 Transformer 的提示工程中。
提示微调是在输入序列中添加可学习的提示;而前缀微调则通过将提示附加到查询(key)和值(value)上,直接影响注意力模式,以便进行任务特定的知识获取。
使用提示工程的视觉 Transformer 在类增量学习中展现了显著的性能。
L2P【37】和 DualPrompt【36】分别利用提示微调和前缀微调来学习新类别,同时冻结预训练的 ViT。L2P 和 DualPrompt 都使用随机初始化的提示进行提示工程。
近期一些方法【9, 31, 32】提出了通过生成提示以适配领域空间的方法,以实现有效的持续学习。
例如,CODA-Prompt【31】需要收集多个提示组件,并用与输入相关的权重组合,生成输入特定的提示。
APG【32】和 DAP【9】则采用了包括交叉注意力层、可学习参数组、线性层等多组件构成的提示生成器。
这些提示生成方法通常需要额外的组件和提示生成器的训练开销。
与需要额外可学习组件的提示生成方法不同,本文提出了一种轻量化的提示调制(modulation)方法,大幅度减少了额外训练组件的需求,同时提升了提示的表示学习能力。
2.3 来自语言模型的语义引导
在广义零样本学习(Generalized Zero-Shot Learning)【1, 25】领域中,利用语言嵌入来有效学习新类别已经被广泛研究。
最近,研究【11】探索了在持续学习(Continual Learning)中引入语言引导以增强表示学习的方法。
在 FSCIL 领域,已有多种方法引入了额外的语言信息(尤其是类别名称)来提升基础阶段的表示学习。
例如,文献【42】通过校准已有类别与新类别之间的编码语言信息,解决了分类器权重漂移问题。
此外,文献【2】提出了一种正则化方法,利用从 GloVe 网络【24】中提取的类别词嵌入所推导出的关系信息。
3. 方法
3.1 少样本类增量学习的定义
在 FSCIL 中,训练数据集表示为:
其中,
在这里,基础阶段的数据集
相比之下,增量阶段的数据集
其中,
不同阶段之间的类别是互不重叠的,且在每个阶段,模型仅能访问当前阶段的数据。
在这种设定下,FSCIL 的目标是使模型能够从极少量样本中逐步学习新类别,同时保持对所有已遇到类别的分类能力。
3.2 方法概览
图 2 展示了我们所提出方法的整体框架,其中预训练的 Vision Transformer (ViT) 被用作主干网络(backbone network)。
为了优化 ViT 中的预训练知识,我们提出了一个新方法,称为 预训练知识调优(Pre-trained Knowledge Tuning,PKT) (详见第 3.1 节)。
PKT 通过训练基础提示(B-Prompt)、视觉 - 语言提示(VL-Prompt)以及 ViT 的部分选定层,来增强基础阶段知识向增量阶段的迁移能力。
此外,为了在基础阶段强化判别能力,我们引入了一个基于熵的发散损失(详见第 3.2 节),它作用于 VL-Prompt 中的视觉标记(vision token)。
最后,我们提出了一个语义知识蒸馏损失(详见第 3.3 节),以将语义知识注入到 VL-Prompt 中的语言标记(language token),从而提升模型的表示学习能力。
在少样本环境下,为了稳定学习,我们采用了各类别的原型(prototype)作为分类器。
3.3 预训练知识调优(PKT)
近期,基于提示(prompting)方法的预训练大型 ViT 在类增量学习(CIL)中取得了显著性能【21, 36, 37】。
然而,将大型预训练 ViT 有效地应用于 FSCIL 仍未被深入探索。现有方法在应用时,仍然面临灾难性遗忘和过拟合的问题。
同时,已有基于提示的方法由于提示量有限,难以充分将基础阶段的知识传递到增量阶段。
因此,本文提出了一个新方法,称为 预训练知识调优(PKT),通过额外添加提示,并选择性地微调特定层,来在基础阶段有效地学习领域特定知识。
在 PKT 中,我们特别更新 ViT 主干网络
经过实证分析,我们确定了最优的微调层数,例如,在 ViT-B 中设置
由于大部分层被冻结,预训练知识得以在增量学习中保留下来。
经过基础阶段微调后的 ViT 将被冻结,以保存所学习的领域特定知识,并将其迁移到增量阶段。
由于冻结了大部分层,因此有效学习领域知识成为一大挑战。为此,我们引入了两个关键提示:
- 基础提示(B-Prompt),记为
,其中 是嵌入维度; - 视觉 - 语言提示(VL-Prompt),记为
。
其中,B-Prompt 主要在基础阶段捕捉领域知识,并帮助知识迁移到增量阶段;而 VL-Prompt 则由视觉标记和语言标记组成,旨在将所有先前阶段的正向知识传递到下一个阶段。
我们使用前缀微调(prefix tuning)训练 B-Prompt,使用提示微调(prompt tuning)训练 VL-Prompt。
不过,前缀微调存在一个已知的问题【4,5】,即学习速度较慢,导致 B-Prompt 难以有效学习领域知识,且可能被微调的层忽略。
为此,我们提出了新的调制提示(modulation prompts)
调制提示由两个部分组成:
- 头部特定提示(Head-specific Prompt)
- 通用提示(Generic Prompt)
这两部分分别来源于 ViT 的多头自注意力(Multi-Head Self-Attention,MSA)层和后续的 MLP 层。
它们的公式如下:
首先,多头注意力的输出为:
然后,头部特定调制提示为:
接下来,MLP 层的输出为:
再通过卷积得到通用提示:
其中,
通过预训练层和输入数据,这些调制提示可以扩大 B-Prompt 的特征向量,从而提升 B-Prompt 对领域知识的捕捉能力。
具体的 PKT 前缀微调过程如下:
扩展后的键提示:
扩展后的值提示:
最终的 MSA 计算为:
其中,
总结来说,PKT 带来了两大优势:
- 通过在前
层引入额外可塑性,并结合调制提示,有效地学习了基础阶段的领域知识。 - 通过放大 B-Prompt,促进了其更新,从而学习到了有用的领域特定知识。
实验证明,PKT 能显著提升性能,并促进增量阶段的正向知识迁移。
3.2 基于熵的发散损失(Entropy-based Divergence Loss)
在使用 PKT 训练提示(prompts)和选择的层的过程中,我们的模型能够有效获取领域知识,以便在增量阶段实现正向迁移。
为了嵌入多视角(multi-perspective)的知识,我们不仅利用 [CLS] 标记,还引入了视觉标记(vision token)进行分类,并通过平均池化(average pooling)融合它们。
然而,由于这两个标记具有相同的目标,随着训练的进行,它们的输出特征会趋于相似,这会妨碍视觉标记自身的有效训练。
为了增强视觉标记本身的判别能力,我们提出了一个新的正则化项,称为 基于熵的发散损失(LED)。
为了计算 LED,我们首先构建了一个原型分类器
对于每一个基础类别
其中,
因此,原型分类器可以表示为:
接着,我们用原型分类器
其中,
需要注意的是,原型分类器
最后,定义基于熵的发散损失
其中:
是交叉熵损失(Cross Entropy Loss); 是 Kullback-Leibler 散度(KL Divergence Loss)【15】; 表示 softmax 函数。
为了最小化
- 同时最小化
和 ,即提升视觉和 [CLS] 特征各自的分类能力; - 同时最大化
,即让视觉特征和 [CLS] 特征输出尽可能不同,从而避免特征退化成相似表示。
通过这个基于熵的发散损失,我们的模型可以有效利用视觉标记学习领域特定知识,并在基础阶段建立可迁移的特征表示,为后续增量阶段提供支持。
3.3 语义知识蒸馏损失(Semantic Knowledge Distillation Loss)
即使从基础阶段迁移过来的知识丰富且有用,
但在增量阶段,依然很难仅凭少量训练样本准确地学习新类别的表示。
为了缓解这一问题,
我们需要向模型提供与新类别相关的外部知识,以促进更好的适应。
为此,本文引入了一个新的损失项,称为 语义知识蒸馏损失(Semantic Knowledge Distillation Loss,LSKD),
利用预训练语言模型(如 BERT【10】)生成的语言嵌入,向视觉模型提供附加的语义知识。
具体实现如下:
首先,利用预训练语言模型(PLM)
其中,
与此同时,通过 ViT 主干网络
这里的
为了将语言嵌入特征
我们采用了文献【7】提出的知识蒸馏损失(Knowledge Distillation Loss,
然而,考虑到
直接应用蒸馏损失以匹配这两种不同分布可能效果不佳。
为了解决这一问题,我们再次使用前文定义的原型分类器
具体地,将语言标记特征
随后,我们计算交叉熵损失(
最终定义**语义知识蒸馏损失(
其中:
是特征间的知识蒸馏损失; 是交叉熵损失; 是权衡超参数,我们在所有实验中将其设置为 。
总结来说,提出的
为增量阶段的少样本表示学习提供额外支持。
这不仅有助于缓解少样本带来的学习困难,还能通过基础阶段充分学习大量类别的知识,
从而在增量阶段实现正向知识迁移。
小结:基础阶段与增量阶段的总损失
在基础阶段(base session),总的损失函数为:
其中,
而在增量阶段(incremental sessions),
由于少样本数据不足以支撑判别性特征学习,因此我们不再使用
此时,总的损失函数为:
4. 实验
4.1 实验设置
数据集与评估指标
我们在三个数据集上与当前最新的 FSCIL 方法进行了对比评估:CIFAR-100【14】、miniImageNet【27】和 CUB200【35】。
如表 2 所示,我们在所有数据集上均遵循文献【33】提出的划分设置。
评估指标包括:
- 基础阶段准确率
; - 最后阶段准确率
; - 所有阶段的平均准确率
。
我们在不同随机种子下进行了 5 次独立实验,并报告其平均结果。
基线方法与实现细节
我们将以下最新的 FSCIL 方法作为对比基线:
- CEC【40】、
- WaRP【12】、
- NC-FSCIL【39】。
此外,还将以下基于 ViT 的方法作为比较:
- L2P【37】、
- DualPrompt【36】。
在所有方法中(包括我们的方法),统一使用 ViT-B/16【3】作为主干网络,并且该模型预训练于 ImageNet-21K【28】。
我们使用 BERT-base【10】提取类别名称的词嵌入。
对于预训练知识调优(PKT),我们设置微调前两层。
对于损失项比例因子,我们统一设置:
, 。
优化器使用 Adam【13】,学习率设为
训练硬件为 RTX 3090 GPU。
批次大小(batch size)设为 128。
训练轮次设置:
- 基础阶段:训练 5 个 epoch;
- 增量阶段:每阶段训练 3 个 epoch。
表 2. FSCIL 基准测试的配置设置
数据集 | 基础阶段类别数 | 增量阶段设定 | 总阶段数 |
---|---|---|---|
CUB200 | 100 | 10-way 5-shot | 1+10 |
CIFAR-100 | 60 | 5-way 5-shot | 1+8 |
miniImageNet | 60 | 5-way 5-shot | 1+8 |
4.2 主要实验结果
我们分别在 CUB200、CIFAR-100 和 miniImageNet 上报告了基础阶段、最后阶段以及平均准确率,详见表 1。
表 1. 在 CUB200、CIFAR-100 和 miniImageNet 上的性能比较
方法 | CUB200 | CUB200 | CUB200 | CIFAR-100 | CIFAR-100 | CIFAR-100 | miniImageNet | miniImageNet | miniImageNet |
---|---|---|---|---|---|---|---|---|---|
Fine-Tuning + Proto | 84.21±0.13 | 3.79±1.47 | 21.60±1.32 | 91.36±0.15 | 5.19±0.13 | 37.04±1.06 | 93.67±0.02 | 9.87±5.42 | 44.60±0.92 |
CEC | 75.40±8.01 | 65.70±8.03 | 72.41±1.18 | 74.20±2.03 | 61.48±3.33 | 67.10±2.92 | 87.43±5.90 | 80.74±7.51 | 83.06±7.14 |
L2P | 44.97±2.32 | 15.41±3.45 | 24.99±4.30 | 83.29±0.50 | 49.87±0.31 | 64.08±0.39 | 94.59±0.21 | 56.84±0.32 | 72.97±0.36 |
DualPrompt | 53.37±1.83 | 23.25±2.02 | 36.30±2.39 | 85.11±0.29 | 50.93±0.21 | 65.45±0.27 | 95.05±0.20 | 57.14±0.11 | 73.31±0.15 |
NC-FSCIL | 78.49±2.32 | 38.80±1.14 | 57.92±1.71 | 89.51±0.23 | 53.70±0.14 | 68.96±0.17 | 77.25±0.42 | 46.35±0.25 | 59.52±0.33 |
WaRP | 67.74±5.57 | 49.36±6.56 | 55.85±6.06 | 86.20±1.46 | 65.48±1.87 | 74.55±1.67 | 83.30±1.06 | 67.97±1.28 | 74.13±1.08 |
PriViLege(本文方法) | 82.21±0.35 | 75.08±0.52 | 77.50±0.33 | 90.88±0.20 | 86.06±0.32 | 88.08±0.20 | 96.68±0.06 | 94.10±0.13 | 95.27±0.11 |
从表 1 可以看出,
我们的 PriViLege 方法在所有数据集上大幅超越了现有最先进方法。
具体来说,在:
- CUB200:相较于 CEC 方法,
提高了约 +9.38%, 提高了约 +5.09%。 - CIFAR-100:相较于 WaRP 方法,
提高了约 +20.58%, 提高了约 +13.53%。 - miniImageNet:相较于所有其他方法也有显著提升。
此外,与 L2P 和 DualPrompt 这些基于提示的方法相比,
我们的 PriViLege 也表现出更强的性能,充分验证了:
- 有效的领域知识学习,
- 以及增强迁移能力的重要性。
综合来看,PriViLege 所结合的 PKT、LED 和 LSKD 三大机制,
使预训练大模型在 FSCIL 中取得了卓越的效果。
4.3 消融实验(Ablation Study)
为了验证我们方法中各个组件的有效性,
我们在 CUB200 数据集上进行了消融实验。
作为基线(Baseline),
我们使用了直接微调预训练 ViT 并使用原型分类器
表 3. CUB200 上各组件的消融实验结果
配置 | |||
---|---|---|---|
Baseline(微调 ViT+ 原型分类器) | 84.21±0.13 | 3.79±1.47 | 21.60±1.32 |
PKT | 79.06±0.77 | 70.81±0.76 | 73.36±0.77 |
PKT + LED | 80.31±0.54 | 72.70±0.45 | 75.04±0.40 |
PKT + LSKD | 82.10±0.57 | 73.44±0.40 | 76.27±0.30 |
Ours(完整方法) | 82.21±0.35 | 75.08±0.52 | 77.50±0.33 |
从表 3 可以观察到:
- 仅应用 PKT 时,相比基线,
和 都有了大幅提升,
说明我们提出的预训练知识调优(PKT)在基础阶段有效学习了领域知识,并成功迁移到了增量阶段。 - 引入基于熵的发散损失(LED) 后,
提升了约 +1.89%, 提升了约 +1.68%。 - 引入语义知识蒸馏损失(LSKD) 后,
提升了约 +2.63%, 提升了约 +2.91%。
最终,
结合了 PKT、LED 和 LSKD 的完整方法(PriViLege),
在所有指标上取得了最佳性能,且提升幅度显著。
4.4 分析(Analysis)
4.4.1 在预训练 CLIP 网络上的 PriViLege
为了验证我们方法 PriViLege 的适应性,
我们将其应用于 CLIP【26】预训练模型,并进行了性能比较。
在集成 PriViLege 到 CLIP 中时:
- 仅训练了 CLIP 的视觉编码器;
- 使用 CLIP 的文本编码器提取语言嵌入,用于语义知识蒸馏损失(LSKD)。
此外,我们还将现有方法 CEC 与 CLIP 的零样本(zero-shot)性能进行了比较。
实验结果:
如图 3 所示,
我们发现:
- 现有方法 CEC 的性能低于 CLIP 的零样本基准;
- 而我们提出的 PriViLege 方法则在零样本性能基础上显著提升。
这表明:
- PriViLege 所提出的基于熵的发散损失(LED)和语义知识蒸馏损失(LSKD)在 CLIP 框架中同样能带来显著的性能提升。
特别地,
由于 CLIP 本身是以视觉和语言的对比学习方式进行预训练,
因此:
- LED 有助于提升表示的判别能力,
- LSKD 有效地注入了额外的语义知识,
从而促进了少样本增量学习中的适应能力。
4.4.2 PKT 的可微调层数探究
我们进一步在 CUB200 上研究了 PKT 中微调层数对性能的影响。
表 4. 不同微调层数下的性能比较(CUB200)
微调层数(L) | |||
---|---|---|---|
0 层 | 76.07±0.56 | 60.19±1.11 | 67.08±0.71 |
2 层 | 79.06±0.77 | 70.81±0.76 | 73.36±0.77 |
5 层 | 78.42±0.84 | 68.52±0.84 | 71.99±0.84 |
7 层 | 76.96±0.74 | 63.15±2.73 | 68.06±1.54 |
10 层 | 74.95±0.78 | 57.78±2.30 | 64.19±1.59 |
12 层 | 73.62±2.72 | 56.02±1.47 | 62.71±2.14 |
分析结果:
- 微调前 2 层(L=2)时,在所有指标上性能最佳。
- 如果不微调任何层(L=0),由于缺乏学习能力,基础阶段和增量阶段的性能都较低。
- 如果微调层数太多(如 10 层或 12 层),则由于过度破坏预训练知识,导致
和 都明显下降。
这说明:
当可微调的层数适中时(如 2 层),可以在保留预训练知识的同时,有效地捕捉领域特定知识。
若调节不当,随机初始化提示反而会妨碍表示学习。
4.4.3 基于熵的发散损失(LED)的有效性验证
为了进一步验证 LED 的有效性,
我们进行了特征空间可视化对比实验。
实验设定:
- 对比不使用 LED(w/o LED)和使用 LED(w/ LED)两种情况下,特征分布的变化。
可视化结果:
- 图 4(a):不使用 LED,部分类别(如 “Herring Gull” 和 “Ivory Gull”)的决策边界模糊。
- 图 4(b):使用 LED 后,类别边界变得更清晰,分类效果明显改善。
结论:
应用 LED 能够提升视觉标记的判别性,
从而在基础阶段有效捕获领域知识,
并为增量阶段学习打下坚实基础。
4.4.4 语义知识蒸馏(LSKD)的效果分析
我们进一步分析了 LSKD 对各类别性能的具体影响,
使用指标
实验结果:
- 图 5 展示了前 10 个提升最大的类别和后 10 个下降最大的类别。
在前 10 个提升最多的类别中,性能提升约 +19.90%;
而后 10 个下降最多的类别中,下降约 -6.76%。
特别值得注意的是:
- 提升最多的类别名称中包含了**颜色(red、green、yellow、white)或形状特征(headed、tailed、palm、billed、pelagic、fish)**等描述词。
这表明:
当类别名称中包含丰富的语义特征信息时,LSKD 能更有效地帮助模型学习,尤其在细粒度数据集(如 CUB200)中效果显著。
5. 结论
在本研究中,
我们提出了一种基于大型预训练视觉与语言 Transformer 的新型少样本类增量学习(Few-Shot Class Incremental Learning,FSCIL)方法,命名为 PriViLege。
我们针对 Vision Transformer(ViT)中普遍存在的灾难性遗忘和过拟合问题,
提出了以下创新技术:
- 预训练知识调优(Pre-trained Knowledge Tuning,PKT),
- 基于熵的发散损失(entropy-based divergence loss,LED),
- 语义知识蒸馏损失(semantic knowledge distillation loss,LSKD)。
通过这些方法,
我们在多个 FSCIL 基准数据集上实现了显著的性能提升。
此外,
我们还验证了 PriViLege 框架不仅适用于 ViT,
同样也可以有效应用到如 CLIP 这样的不同预训练模型上,进一步证明了其广泛适用性和鲁棒性。
我们相信,
PriViLege 为未来在 FSCIL 领域利用大型预训练模型的研究方向开辟了新的可能性。
未来的工作方向包括:
探索如何在没有基础阶段的更加困难的 FSCIL 场景下,
有效应用大型预训练模型进行增量学习。