Learning to Prompt for Continual Learning (CVPR2022)
持续学习的学习激励
paper
code
持续学习背后的主流范式是适应非平稳数据分布的模型参数,其中灾难性遗忘是核心挑战。典型的记忆方法依赖于预演缓冲器或已知的测试时的任务识别来恢复已学习的知识并解决遗忘问题,而本研究为持续学习提供了一种新的范式,旨在训练一个更简洁的记忆系统,而不需要在测试时访问任务识别。
我们的方法学习动态提示(L2P)一个预先训练的模型在不同的任务转换下顺序地学习任务。在我们提出的框架中,激励是一种很小的可学习的参数,它被维护在内存空间中。其目的是优化提示以指导模型预测,明确管理任务不变和任务特定知识,同时保持模型的可塑性。我们在不同具有挑战性的连续学习设置下,在流行的图像分类基准下进行了全面的实验,其中L2P始终优于现有的最先进的方法。令人惊讶的是,即使没有彩排缓冲,L2P也能取得与基于排练的方法相媲美的结果,并且直接适用于具有挑战性的任务不可知的持续学习。
与训练独立同分布(i.i.d.)数据的普通监督学习不同,持续学习解决了在不同分类任务顺序呈现的非平稳数据分布上训练单一模型的问题。然而,由于模型只能访问学习周期中单个阶段的当前数据,它很容易对当前可用的数据进行过拟合,并且由于灾难性的[37]遗忘,对之前训练过的数据的性能下降。
图1所示。L2P框架概述。与传统的基于预习缓冲区的顺序调整整个或部分模型权值的方法相比,L2P采用单一骨干模型,并学习提示池来有条件地对模型进行指令。特定于任务的知识存储在提示池中,因此回放缓冲区不再是缓解遗忘的必要条件。L2P以实例的方式自动从池中选择和更新提示,因此在测试时不需要任务标识。值得注意的是,我们最大的提示空间小于一张224 × 224图像的大小
持续学习的主要工作遵循学习范式,即随着数据分布的变化不断调整整个或部分模型权重,重点是保留过去的知识[9,34]。尽管许多类型的方法都取得了良好的结果,但仍然有一些关键的限制需要解决。首先,根据互补学习系统(CLS)理论[23,36],受海马体中的情景记忆的驱动,许多最先进的方法[3,4,8]依赖排练缓冲来重新训练过去的部分例子。然而,较小的缓冲区大小[4]会导致性能大幅下降,当不允许使用彩排缓冲区时,它们会失效——例如,在真实场景中,数据隐私关系到[54]。这表明,简单地缓冲过去的数据并重新训练模型可能不是检索过去知识的最佳方法。在不访问排练缓冲区的情况下,另一个分支[19,26,45]通过假设测试时已知的任务标识绕过遗忘问题,从而能够将与任务无关的模块附加到共享模型上进行推理。然而,在测试时知道任务标识会限制实际使用。
以往研究的局限性对持续学习提出了重要的问题[13,16]:(1)情景记忆的形式能否超越对过去数据的缓冲,形成更智能、更简洁的情景记忆系统?(2)如何在不知道任意样本任务标识的情况下自动选择相关的知识组件?
为了回答第一个问题,我们从自然语言处理(NLP)领域的一种新的迁移学习技术——基于提示的学习[29]的最新进展中获得了启示。提示技术使用模板化或可学习的提示标记设计文本输入模型,提示标记包含额外的特定于任务的信息,这样,预先训练的语言模型可以处理参数化的输入,以便执行特定于提示的预测[25,27,53]。直观地说,基于提示的学习将学习下游任务从直接适应模型权重到设计提示来“指示”模型有条件地执行任务重新定义。提示对特定任务的知识进行编码,并能够比普通微调更有效地利用预先训练的冻结模型[25,47]。因此,在持续学习的背景下,利用提示来学习知识,并进一步存储所学的知识是有希望的。
然而,如何在持续学习中直接应用激励来解决上述第二个问题还不清楚:一方面,如果我们在持续学习环境中针对不同的任务训练不同的提示,使用适当的特定于任务的提示进行预测仍然需要测试时间任务标识。另一方面,提示作为一种迁移学习技术,其目的是使冻结的预训练模型单独而不是顺序地实现良好的下行性能。因此,如果我们为所有任务维护一个单一的共享激励,灾难性遗忘的问题可能仍然存在(见章节5.4)。
为此,我们提出了一种新的持续学习方法,称为学习促进持续学习(learning To Prompt for continuous learning, L2P),它与目前流行的基于排练的方法是正交的,适用于没有已知任务标识或边界的实际持续学习场景。图1概述了我们的方法,并与典型的连续学习方法进行了对比。L2P利用了预训练模型的代表性特征;然而,L2P并没有在持续学习过程中调整参数,而是保持预先训练的模型不变,而是学习一组激励,动态地指导模型解决相应的任务。 具体来说,提示是在一个名为提示池的键-值共享内存空间中结构化的,我们 设计了一种查询机制来基于实例输入特性动态查找与任务相关的提示的子集。提示池与监督损失共同优化,确保共享提示编码共享知识以实现知识转移,非共享提示编码任务特定知识以保持模型的可塑性。 我们的 设计显式地解耦了共享的和特定于任务的知识,从而在优化过程中大大减少了特定于任务的知识之间的干扰,导致最小的灾难性遗忘,而不需要彩排缓冲。 实例查询机制消除了了解任务标识或边界的必要性,从而实现了最具挑战性、但研究不足的任务不可知论持续学习。然后,选择的提示被预先添加到输入嵌入(图2),它隐式地向预先训练的模型添加了与任务相关的指令,以便模型回忆起最相关的特征来执行相应的任务。综上所述,本工作做出了以下贡献:
在此,我们对相关工作的方法进行了联系和讨论。
连续学习。 目前连续学习算法主要有三类。
基于正则化的方法[1,21,28,65]通过限制对先前任务的重要参数的学习率,限制了模型的可塑性。尽管这些方法在一定程度上解决了灾难性遗忘问题,但在具有挑战性的[34]或复杂数据集[49,61]下,它们无法获得令人满意的性能。
基于回放的方法[7,8,17]构造一个数据缓冲区来保存旧任务的样本,用当前任务的数据进行训练。基于这一简单而有效的想法,许多最近的方法通过加入额外的知识蒸馏惩罚[3,6,49,61]或利用自我监督学习技术[4,44]对其进行了改进。尽管概念简单,但基于排练的方法在各种基准上都达到了最先进的性能[34,42]。但是,当缓冲区大小[4]越小,基于预演的方法性能一般会下降,最终无法应用于需要考虑数据隐私的[54]场景。不同于直接从过去的知识中保存数据来重新训练模型,我们的方法将过去的知识存储在小的可学习提示参数中,以指示模型处理当前的任务,进而将当前的知识积累到提示中。我们的方法不需要彩排缓冲来达到接近基于排练的方法的性能,并且可以进一步改进,在一个小的彩排缓冲下设置一个新的艺术状态
基于模型结构的方法旨在为每个任务提供单独的组件。可以通过扩展网络[26,31,48,50,64,68]或关注特定任务的子网络[19,35,51,59]来识别特定任务的组件。然而,大多数方法需要任务标识在测试时对网络进行条件化,在任务标识未知的情况下,不能适用于更现实的类增量和任务无关设置。一些最近的方法要么直接推断任务标识[60],要么额外添加排练缓冲区来绕过这个问题[44,63]。然而,这些方法需要大量的附加参数,有时接近整个模型的大小[19,59]。相反,L2P不需要测试时间任务标识,只增加了微不足道的额外参数(~ 0.1%)。虽然L2P也引入了额外的提示参数,但它与基于体系结构的方法有着完全不同的设计原则:L2P设计了一种新的基于提示的内存,从模型输入中学习高级指令来引导模型输出,并保持学习到的体系结构不变。相反,大多数基于体系结构的方法旨在分离模型参数。
最后,CTN[45]和DualNet[44]最近的工作开始考虑通过一个控制器进行知识管理,该控制器除了骨干模型外,还对任务级信息建模。然而,CTN在测试时仍然需要任务标识,而DualNet需要一个排练缓冲区才能工作。此外,CTN和DualNet的灵感来自CLS的不同视角,认为人类通过两种分别促进快速学习和长期记忆的系统来实现持续学习。有趣的是,虽然我们的灵感来源不同,但L2P可以通过CLS理论得到准确的解释:提示池处理的是快速学习,而骨干模型是长期记忆。
促进迁移学习。
提示的高级思想是应用一个函数来修改输入文本,以便语言模型获得关于任务的附加信息。然而,提示函数的设计具有挑战性,需要启发式方法。最近的工作,包括提示调优[25]和前缀调优[27],试图通过在连续空间中应用可学习的提示来解决这个问题,在迁移学习中取得了优异的性能。与竞争对手(如Adapter[43,58]和LoRA[18])相比,提示符使用更小的附加参数捕获特定于任务的知识。提示的中心思想主要是针对迁移学习而设计的。请注意,在持续学习中直接应用提示是很重要的。我们提出的新框架揭示了它对持续学习问题的价值。
连续学习通常被定义为在序列任务的非平稳数据上训练机器学习模型。我们定义一个序列的任务D = {D1 , · · · , DT},第t任务DT = {(xti yti)} nti = 1包含元组的输入样本xti∈X和其相应的标签yti∈Y的目标是培养一个模型fθ:X→由θ,Y参数化,使其预测标签Y = fθ(X)∈Y给定一个看不见的试样X从任意的任务。在训练未来的任务时,可能看不到以前任务的数据。
根据任务转换环境的不同,持续学习可以分为不同的挑战。常见的任务增量、类增量和域增量设置假设任务数据Dt依次到达t ={1,…, T}以离散的方式。与类增量式学习不同,任务增量式学习假设在测试时任务的同一性是已知的,通常被认为是最简单的设置[34,38]。与每个任务都有不同类的任务增量设置不同,领域增量学习对每个任务保持相同的类集,只改变x在任务中的分布。在更具挑战性的任务无关设置中,任务数据D变化平稳,任务标识t是未知的。我们的论文处理了更具挑战性的类增量式和领域增量式,并进一步探索了任务无关设置。
快速学习是自然语言处理中的一种新兴技术。与传统的supervised fine-tuning不同,这类方法设计了任务特定的提示函数,指示预先训练过的模型有条件地执行相应的任务[29]。最近的一项技术,提示调优(PT)[25],提出了通过学习提示参数(提示参数被放在输入标记的前面,用来指导模型预测),简单地使冻结的t5类语言模型[47]执行下游的NLP任务。在不失一般性的前提下,这里我们使用基于图像模态变压器的序列模型引入PT的定义[10,56]。该定义很容易推广到其他模式和基于顺序的模型。
图2。测试时L2P示意图。我们在训练时遵循相同的过程:首先,L2P根据我们提出的实例级查询机制从键值配对提示池中选择提示的子集。然后,L2P将选择的提示前缀到输入标记。最后,L2P将扩展令牌提供给模型,并通过公式5中定义的损失优化提示池。目的是学习选择和更新提示来指导预先训练的骨干模型的预测。
给定一个二维图像x∈RH×W ×C的输入,一个预训练的视觉转换器(ViT) f = fr◦fe(不包括分类头),其中fe为输入嵌入层,fr为一组自我注意层[10]。将图像重构为平坦的2D patch xp∈RL×(S2·C)序列,其中L为令牌长度,即patch数量,S为patch大小,C为原始通道数。为了简化表示法,我们假设xp中的第一个标记是作为预训练模型[10]一部分的[class]标记。预训练的嵌入层fe: RL×(S2·C)→RL×D将修补后的图像投影到嵌入特征xe = fe(x)∈RL×D,其中D为嵌入维数。在解决多个下游任务时,我们将大规模预训练骨干保持冻结状态,以保持其跟随PT的一般性。PT的直接应用是将可学习参数Pe∈RLp×D,称为提示符,提前到嵌入特征xp = [Pe;,并将扩展序列提供给模型函数fr(xp)以执行分类任务。不同的任务有独立的提示并共享一个大模型的副本。
文献表明,与普通的微调相比,基于提示的学习在基于序列的模型中具有更高的特征学习能力[25,29]。尽管在迁移学习中成功地为每个任务训练了个别提示,但提示不能直接应用于测试时间任务识别未知的连续学习场景。
引入激励池的动机有三个方面。
首先,测试时的任务识别是未知的,因此训练任务独立提示是不可行的。
第二,即使在测试时可以知道任务独立提示,它也会防止类似任务[16]之间可能的知识共享。
第三,尽管,学习一个单一的共享激励 的原始方式 对于所有的任务能够实现知识共享,但它仍然会导致严重的遗忘问题(见章节5.4)。
理想情况下,人们应该学习这样一个模型:当任务相似时能够共享知识,而在其他情况下保持知识独立。因此,我们建议使用提示池来存储编码的知识,这些知识可以被灵活地分组作为模型的输入。提示池定义为
其中
是单个激励,标记长度Lp,嵌入大小D与xe相同。按照3.2节中的符号,我们分别设x和xe = fe(x)为输入及其对应的嵌入特征。请注意,我们在表示法中省略了任务索引t (x),因为我们的方法对于任务无关设置足够通用。将{si}Ni=1表示为从[1,M]开始的N个索引的子集,我们可以对输入嵌入进行如下调整:
在那里;表示沿着标记长度维的连接。提示可以自由编写,因此它们可以共同编码知识(例如,视觉特征或任务信息),供模型处理。理想情况下,我们希望通过实例级的提示组合实现更细粒度的知识共享方案:相似的输入往往共享更常见的提示,反之亦然。
我们设计了一种基于键值对的查询策略来动态地为不同的输入选择合适的激励(见图2)。这种键值内存查询机制与其他领域的方法有一些相同的设计原则,如可微神经计算机[14]和VQ-VAE[41],它们需要维护外部内存。把它们用在不同的地方。
我们将每个提示符作为值关联到一个可学习的键:{(k1, P1), (k2, P2),···,(kM, PM)},其中ki∈RDk。我们用K = {ki}Mi=1表示所有键的集合。理想情况下,我们希望让输入实例本身通过查询键匹配来决定选择哪些提示。为此,我们引入了一个查询函数q: RH×W ×C→RDk,它将输入的x编码为与键相同的维数。此外,q对于不同的任务应该是一个确定性函数,没有可学习的参数。我们直接将整个预训练模型作为冻结的特征提取器,得到查询特征:q(x) = f(x)0,:。其他特征提取方法如ConvNet也同样可行。标记γ: RDk × RDk→R作为函数来评分查询和提示键之间的匹配(我们发现余弦距离工作良好)。给定一个输入x,我们使用q(x)通过简单求解目标来查找top-N键:
其中Kx表示k中为x选择的topn键的子集。注意,这种键值策略的设计解耦了查询机制学习和快速学习过程,实验表明这是关键的(见第5.4节)。此外,查询提示是以实例方式完成的,这使得整个框架与任务无关,这意味着该方法在训练期间不需要明确的任务边界,在测试期间也不需要任务标识。
**激励选择多样化。**虽然我们的方法不需要任务边界信息,但在现实场景和实验数据集中,任务过渡是离散的,因此任务边界在训练时是已知的,这是很常见的。我们发现,在我们的框架中添加这样一个先验可以帮助模型更好地学习特定于任务的提示,特别是当任务具有高度多样性时。为此,我们提出了一个简单的扩展,在L2P中增加任务边界是可选的。在任务t的训练过程中,我们维持一个提示频率表Ht = [h1, h2,···,hM],其中每一项表示在任务t−1之前选择提示Pi的归一化频率。为了鼓励查询机制选择不同的提示,我们将公式3修改为
对常用的选择题进行惩罚,鼓励多样化的选择。式4仅适用于训练期间; 在测试时,使用公式3。
在每个训练步骤中,按照上述查询策略选择N个提示后,将自适应嵌入特征xp输入到预训练模型fr的其余部分中,最终由φ参数化的分类器gφ中。总的来说,我们寻求最小化端到端训练损失函数:
其中f avgr = AvgPool(fr(xp)[0: N Lp,:]),即N·Lp提示位置对应的输出隐藏向量在分类头前取平均值。第一项是softmax交叉熵损失,第二项是替代损失,将选定的键拉向相应的查询特性。λ是表示损失权重的标量。
为了评估所提出的L2P,我们严格遵循先前工作[32,55,66]中提出的设置,并进行综合实验。特别地,我们主要考虑(1)类增量设置,在推理过程中任务标识是未知的;(2)域-增量设置,输入域随时间变化;(3)任务不可知论设置,即没有明确的任务边界。在适当的实验设置下,我们仔细比较了L2P与不同类别的最先进(SOTA)方法。此外,我们进行了广泛的消融研究,以提供对我们方法的更深入的理解。
我们将L2P与几种基线和最先进(SOTA)持续学习方法进行比较。我们的方法是基于预先训练的vitb /16[11,67],它已经成为先进视觉社区的一种常见资产。在相同的环境下,我们谨慎地选择比较方法进行公平比较。许多最近的方法声称SOTA性能在最简单的任务增量设置中,其中任务标识在测试时已知[19,45,57]。我们不包括这些方法,因为它们不适用于更一般的类增量设置。我们参考了近期的多篇综述论文[9,34]和近期的工作[3,4,46],并选择了公认的和性能最好的方法。为了完整起见,我们还包括幼稚的顺序训练方法和代表性的基于正则化的方法。此外,我们参考了用于实现和超参数选择的原始代码库,以确保可能的最佳性能。
Baseline methods.
upper -bound通常是对所有任务的i.i.d.数据进行有监督的微调,通常被认为是一种方法所能达到的性能上限。FT-seq-frozen是将预训练模型冻结的初始顺序微调方法。相反,FT-seq也可以微调预先训练的模型权重。EWC[21]和LwF[28]是具有代表性的基于正则化的方法,被广泛比较。
SOTA rehearsal-based methods.
我们选取了5种先进的基于预演的方法进行比较,包括ER[8,17]、GDumb[46]、BiC[61]、DER++[3]和Co2L[4]。ER和GDumb概念简单,但他们不仅在自己的作品中取得了非常强的表现,在后来的文献[3,34]中也取得了非常强的表现。DER++和Co2L是最新的SOTA方法。
SOTA architeture-based methods.
我们选择了两种具有代表性的基于架构的方法进行比较。SupSup[60]和DualNet[44]都是基于ResNet18的,是由他们的原作者推荐的。为了公平,我们将相对性能与相应的上限性能进行比较
Our methods.
L2P是我们提出的没有彩排缓冲的方法。L2P- r是为与SOTA方法进行公平比较而配备了排练缓冲区的L2P。
L2P是一种较强的连续学习方法,在各个领域都有很大的应用潜力。然而,它也可能在某些方面被滥用。我们的方法以一个预训练良好的模型作为骨干,因此原始模型[38]中的任何偏差和公平问题都可以在持续学习过程中进行延续。我们鼓励任何用户彻底检查预训练模型,以减轻任何偏见和公平问题。此外,该方法可以应用于安全关键应用,如自动驾驶系统[15],可能会出现敌对攻击[33]方面的潜在安全问题。我们建议在未来的工作中测试我们的方法的鲁棒性,并设计相应的防御技术来处理潜在的安全问题。
虽然我们的方法是在视觉模型上演示的,但它没有对模态做任何假设。我们将其他模式的探索留作以后的工作。此外,L2P假设存在预先训练的基于序列的模型。虽然它们已经成为先进社区的共同资产和未来方向,但如何将我们的框架推广到其他视觉架构(例如ConvNet)可能是一个有吸引力的研究方向。如何实现能够满足现实需求的持续学习是一个重要的方向,仍然具有挑战性。例如,任务不可知论设置被认为是最具挑战性的设置,非常接近现实场景。虽然我们的方法向这个目标又迈进了一步,但是,目前常用的高斯调度的CIFAR-100是合成的,离现实还很远。因此,我们认为它还需要更复杂的基准来评估任务不可知论持续学习方法的能力,并推动这一现实世界挑战的进步。
为了更好地说明我们提出的方法,我们在算法1中展示了整个训练过程。注意,对于预测,我们只是用损失计算来标记预测。可选地,当任务边界先验已知时,我们可以用公式4替换top-N键查找。
写在最后的题外话:转自https://blog.csdn.net/weixin_44010756/article/details/119334603
SOTA 是 state-of-the-art 的缩写
SOTA model:state-of-the-art model,并不是特指某个具体的模型,而是指在该项研究任务中,目前最好/最先进的模型。
SOTA result:state-of-the-art result,指的是在该项研究任务中,目前最好的模型的结果/性能/表现。
持续学习+元学习+无监督学习文章调研(六)_Man in Himself的博客-CSDN博客
https://blog.csdn.net/weixin_42939529/article/details/124107526
本文将prompt的微调方式应用在持续学习中。借助预训练好的ViT模型,通过引入prompt池的概念,实现在图像分类任务上的class-incremental的持续学习。相比于使用Rehearsal的方法,不仅在存储上更加高效(不需要额外的生成模型或者存储),而且可以做到task-agnostic(不需要知道任务变化的边界)。
基于Prompt池进行学习
Prompt学习最早来自于自然语言理解,指的是通过对输入的处理,让模型在不改变参数的情况下通过对输入做一定的微调让模型完成新的任务。该方法常用于对语言输入的修改,适合RNN或Transformer的结构。本文同样选择了基于Transformer的ViT预训练模型进行prompt学习,这样,对于多个任务通过使用不同的prompt就可以标明不同的任务从而改变模型的行为。
然而在持续学习的特殊情况下,直接运用这样的方法有几个问题:
后面两个问题实际上都是模块化不足的结果。因此,本文中使用了prompt池的概念。具体而言,对于ViT输入的图像patches,模型选从prompt池中选择N NN个promps,附加到模型的输入之前,如下所示:
Prompt的选择
为了从prompt池中选择prompts,作者设计了一套基于key-value的匹配方式,该方式和VQ-VAE等模型中的设计异曲同工。具体而言,对于prompt池中的每一个prompt,我们为它赋予一个key,表示为k kk,这样prompt池就是: