KgCoOp:知识引导上下文优化,缓解 Prompt Tuning 中的灾难性遗忘

KgCoOp 提出了一种知识引导的 Prompt Tuning 方法,通过约束学习到的Prompt,缓解视觉-语言模型中的灾难性遗忘,提升新类别的泛化能力。

原文标题:知识引导上下文优化(KgCoOp):一种解决灾难性遗忘的 Prompt Tuning 机制

原文作者:数据派THU

冷月清谈:

本文介绍了 Knowledge-guided Context Optimization (KgCoOp),一种用于解决视觉-语言模型 Prompt Tuning 中灾难性遗忘的有效机制。Prompt Tuning 旨在将大型视觉-语言模型适配到特定下游任务,但常常导致模型牺牲原有的通用知识,造成在新类别上的泛化能力下降。KgCoOp 通过引入知识引导损失,约束可学习 Prompt 与原始手工 Prompt 之间的距离,从而在优化特定任务性能的同时,维持模型的通用知识和泛化能力。实验结果表明,KgCoOp 在多个图像分类基准测试中,显著提高了模型在新类别上的准确率,并有效平衡了任务特定性能与通用性。此外,KgCoOp 具有良好的兼容性,可以作为插件融合到其他 Prompt Tuning 框架中,进一步提升性能。

怜星夜思:

1、KgCoOp 通过约束 Prompt 的学习范围来避免灾难性遗忘,这种方法会不会限制模型在新任务上的创新能力?有没有可能存在一些任务,需要模型彻底摆脱原始知识的束缚才能达到最佳性能?
2、文章中提到 KgCoOp 可以作为插件融合到其他 Prompt Tuning 框架中,那么在实际应用中,如何选择合适的 Prompt Tuning 框架与 KgCoOp 结合?有哪些因素需要考虑?
3、文章中提到增加上下文长度可以提升性能,那么上下文长度存在上限吗?过长的上下文会带来什么问题?

原文内容

图片
来源:DeepHub IMBA
本文约3000字,建议阅读5分钟
本文提出了一种简单有效的约束机制。


视觉-语言模型(VLMs)如 CLIP 彻底改变了零样本图像识别的处理方式。这类模型在包含 4 亿个图像-文本对的大规模数据集上进行训练,捕获了海量通用知识,具备了识别未被明确训练过对象的能力。

当尝试通过 Prompt Tuning 过程将这些全能型模型适配到特定下游任务时通常会遇到瓶颈。这是因为模型在特定任务上变成了专家,却不可避免地牺牲了原有的基础智能;这种现象在业内被称为 Base-to-New 泛化困境。

论文《Visual-Language Prompt Tuning with Knowledge-guided Context Optimization》(KgCoOp)深入研究了这一问题,提出了一种简单有效的约束机制。

现代机器学习系统经常被部署在不断有新类别出现的环境中。如果一个模型只能在已知类别上保持高准确率,面对新类别时却表现糟糕,其在实际工程应用中的可靠性就会大打折扣。提高对未见类别的泛化能力,是构建泛化的视觉-语言系统的必由之路。

Knowledge-guided Context Optimization(KgCoOp)框架概述,展示了如何使用知识引导损失对可学习 Prompt 进行正则化以保持泛化能力。

为什么 CoOp 在未见类别上失败


Prompt Tuning 的具体实现之一 Context Optimization(CoOp),用可学习的上下文向量替代了固定的手工模板(如 a photo of a [Class])。这种微调方式拉升了模型在训练期见过的 Base 类别上的表现,随之而来的却是灾难性知识遗忘。

在少量标注样本上微调时,模型会学习到仅对这些特定类别有判别性的文本知识,从而严重偏离其他所有类别。跨 11 个基准测试的实证数据揭示了一个明显的趋势——标准微调(CoOp)虽然提升了 Base 准确率,却把新类别上的性能压低到了不仅不及预期,甚至低于原始零样本模型的水准。零样本 vs. 标准微调的性能对比:

图片

Data averaged across 11 benchmarks using ViT-B/16.

遗忘的几何学


新类别性能损失的程度(▽new)与可学习 Prompt 嵌入(wcoop) 和原始手工 CLIP 嵌入(wclip) 之间的欧几里得距离直接一致。

Base-to-New 泛化对比,显示标准 Prompt Tuning 提高了已见类别的性能,但降低了未见类别的准确率。

学习到的 Prompt 与手工 Prompt 之间的距离越大,未见类别上的性能退化越严重。

在 DTD(纹理)和 EuroSAT(卫星影像)等数据集中,学习到的 Prompt 偏离 CLIP 锚点最远,泛化差距也最为悬殊。如果能将可学习 Prompt 限制在原始通用知识的附近,就可以维持原有的泛化能力。

Knowledge-guided Context Optimization(KgCoOp)


KgCoOp 引入了一种新的正则化框架。该框架不再允许 Prompt 在优化过程中自由漂移,专门加入了一个知识引导损失 (Lkg),专门用于最小化可学习 Prompt 与手工 Prompt 之间的差距。

A. 前置知识 - CLIP 和 CoOp  

零样本 CLIP 中,图像嵌入 x 和类别 y 的预测概率 p(y|x) 计算方式为:

其中 d(x,__wy^__clip) 代表余弦相似度,(w^__clip) 代表来自手工模板的嵌入。CoOp 将这些模板替换为 M 个可学习的上下文向量 V= {v1, v2, …, vM };此时 Prompt 变为  ti^coop = {v1 , v2 , ..., vM , ci }ci 为类别 Token。

B. KgCoOp 公式

 KgCoOp 提出,减少可学习 Prompt 与手工 Prompt 之间的物理距离,能够有效缓解底层知识的遗忘。其训练目标是在标准交叉熵损失 (Lce) 的基础上叠加这一新约束:

图片

其中引入的知识引导损失 (Lkg),定义为微调后的嵌入 wi 与 CLIP 锚点 (wi^clip) 之间的均方欧几里得距离:

在最小化这个距离的过程中,KgCoOp 强制模型在针对当前任务进行参数优化的同时"记住"其通用预训练特征。

实验设置与基准测试


相关指标在 11 个多样化的图像分类基准上对 KgCoOp 进行了评估;实验骨干网络选用 ResNet-50 和 ViT-B/16,测试条件主要设定为 16-shot。

覆盖的数据集包含了 ImageNet、Caltech101 等通用对象,OxfordPets、StanfordCars、Flowers102、Food101、FGVCAircraft 等细粒度类别,以及 EuroSAT(卫星影像)、UCF101(动作识别)、DTD(纹理)、SUN397(场景)等专业领域。

Comparison in the base-to-new setting with different K-shot samples in terms of the average performance among all 11 datasets and backbones(ViT-B/16 and ResNet-50)

测试结果显示,KgCoOp 在所有参测设置的平均统计中取得了最高的调和均值。ProGrad 在 Base 类别上确实表现更好,但在处理新类别时与 KgCoOp 存在量级差异。具体到 ViT-B/16 骨干网络配合 16 个样本的场景下,KgCoOp 把新类别的准确率相较于 CoOp 基线拉高了 5.61%,比 CoCoOp 也高出 1.91%。这一数据佐证了 KgCoOp 较好地平衡了任务特定性能与通用性,基本化解了 Base-Novel 困境。

应对 Base-to-New 挑战


工程上的核心诉求是在不牺牲 Base(已见)类别准确率的前提下,尽可能挖掘 New(未见)类别的性能潜力。采用 ViT-B/16 前置配合 16-shot,KgCoOp 在新类别准确率指标上相对标准 CoOp 基线提升了 5.61%。综合 11 个数据集的数据,KgCoOp 测得 77.0% 的调和均值峰值,压制了 CoCoOp(75.83%)和 ProGrad(76.16%)等路线。在 EuroSAT、UCF101 这类特征专业性较强的数据集上,KgCoOp 也在 8 个基准中拿到了新类别的最高分。

领域泛化场景中的表现


领域泛化(DG)主要用于测试类别标签恒定但数据源发生分布偏移时,模型展现出的抵抗衰减能力。实验流程上,先使用 16-shot 样本在标准 ImageNet 集中进行训练,随后转至四个分布外的变体集(ImageNetV2、ImageNet-Sketch、对抗样本集 ImageNet-A 和渲染集 ImageNet-R)中跑评估。

Comparison of prompt learning in the domain generalization with 16-shot source samples where "vp" and "tp" denote the visual prompting and textual prompting, respectively.

效率与泛化的指标分解


超参数 λ 的敏感度表现。

定量分析揭示出一个直接规律:增大 λ 可以减小 Lkg 距离,迫使学习得到的 Prompt 进一步贴近手工 Prompt。距离收窄带动的调和均值拉升在 λ=8.0 时见顶。继续加大 λ 会让约束变得过于苛刻,反而阻断了模型对当前任务特有判别特征的吸收,引发指标回落。只要约束在一个合理的区间内,最小化学习知识与通用知识间的偏差,确实是保持未见领域泛化水位的主力手段。

计算开销与训练耗时比对。

计算嵌入空间的欧几里得距离带来的算力开销微乎其微。CoCoOp 因为需要给每一个实例单独生成图像条件的上下文,速度慢了将近 26 倍(160 ms/image)。ProGrad 要计算梯度并为每次参数更新做对齐检查,耗时同样居高不下(22 ms/image)。相比之下,KgCoOp 的吞吐量达到了 6m/s,基本做到了用最低的时间成本换取第一梯队的精度。

Lkg 项在现有框架里的兼容性。Lkg 约束不是一个孤立的技巧,它完全可以作为插件融合到其他的 Prompt Tuning 架构当中。从 ViT-B/16 的训练时间与性能表可以看出,外挂知识引导约束后,CoCoOp 和 ProGrad 的新类别性能和调和均值都出现了一致的上扬。

CoCoOp 叠加 Lkg 后,新类别准确率从 71.69% 升至 74.75%,调和均值涨了 0.49%。ProGrad 叠加 Lkg 后,新类别准确率从 70.75% 升至 74.72%,调和均值由 76.16% 爬到 76.63%。

针对标准文本 Prompt Tuning 发现的"灾难性遗忘",已被证实是跨网络架构的底层通病;而 KgCoOp 这一套逻辑,具备横向拓展到更多 Prompt 体系落地应用的潜力。

上下文长度的影响因素。

为了对标现有的基线,实验虽然把上下文长度 M=4 作为了默认测试标准,但在消融分析中发现:把长度设定为 8 个 Token,能在已见和未见类别上挤出更大的性能空间。如果有算力支撑稍长的序列长度,这是一个低成本的性能调优发力点。

Effect of contect length

Effect of Initialization

局限探讨


KgCoOp 在提拉未见类别泛化能力的同时,依然面临着稳定性与适应性博弈的老问题。给知识引导约束加码,未见类别的评分会变好看,但已见类别的上限往往会被压低几分。

这种此消彼长折射出一个硬约束的副作用:限定了学习到的 Prompt 与原始 CLIP 表征的物理距离,扼杀了过拟合的风险,也削弱了模型向特定偏门场景彻底倾斜的灵活性。

引入超参数 λ 意味着多了一层调参负担。设定偏差,轻则导致欠拟合,重则让 Prompt 机制的自适应能力名存实亡。

总结


自动匹配约束强度的机制依然是工程界亟待攻克的盲区。未来的迭代如果尝试引入数据驱动的超参数自适应,模型在稳定性和灵活性之间的切换将更加从容。

调整乃至约束本身,跟基础模型的参数优化处于同等地位。KgCoOp 提供了一套务实的调优路径参考清单。

面对基座模型,首要动作是跑通零样本基线,摸清泛化指标的绝对谷底在哪。在遇到硬件算力瓶颈或是延迟卡控严格的生产环境,KgCoOp 是直接拿来保底的降本方案。调试期间密切监测期望校准误差(ECE),可以规避 Lkg 约束过重引发的概率输出欠置信。

维护微调参数与源知识的几何对齐关系,是一套经过验证的轻量级技法;仅凭一个欧几里得距离损失便兜住了在新领域的下限,摆脱了对新样本增量数据的过度依赖。

by Gauri Kosurkar

编辑:文婧



关于我们

数据派THU作为数据科学类公众号,背靠清华大学大数据研究中心,分享前沿数据科学与大数据技术创新研究动态、持续传播数据科学知识,努力建设数据人才聚集平台、打造中国大数据最强集团军。




新浪微博:@数据派THU

微信视频号:数据派THU

今日头条:数据派THU


理论上,上下文长度应该与任务的复杂度和数据的丰富程度相匹配。如果任务比较简单,数据也比较少,那么较短的上下文可能就足够了。反之,如果任务比较复杂,数据也比较多,那么较长的上下文可能会更好。但是,过长的上下文也可能导致模型过拟合,因此需要在实际应用中进行权衡。

学术一点说,这实际上是在寻找一个更好的正则化策略。与其直接约束Prompt的距离,不如尝试约束其梯度。例如,如果模型在某个任务上梯度变化过大,就施加更大的约束,反之则放松约束。这可能需要更复杂的优化算法,但效果应该更好。

我觉得可以参考一些已有的研究,看看哪些Prompt Tuning架构在类似任务上表现比较好。然后,再将KgCoOp作为插件添加到这些架构中,看看能否进一步提升性能。另外,还可以考虑将KgCoOp与其他正则化方法结合使用,以获得更好的效果。

除了上下文长度,还可以考虑上下文的内容。与其使用随机的token作为上下文,不如使用一些与任务相关的token,或者使用一些从知识图谱中提取的实体。这样,即使上下文长度较短,也可能获得很好的效果。另外,还可以使用一些数据增强技术,例如随机mask掉一些上下文token,以提高模型的鲁棒性。

这要看具体任务和数据了。有些Prompt Tuning架构可能更适合处理文本信息,有些可能更适合处理图像信息。我觉得可以先做一些实验,比较不同架构与KgCoOp结合后的效果,再根据实验结果选择最合适的方案。

我觉得 Prompt Tuning 未来一个重要的发展方向是“Prompt 组合”。就像搭积木一样,我们可以将不同的 Prompt 组合起来,形成更强大、更灵活的 Prompt。例如,可以将 KgCoOp 与 CoCoOp 结合起来,既能保持泛化能力,又能提升任务特定性能。当然,这需要解决如何有效组合 Prompt 的问题。

我认同前两位的想法,λ值的选取确实需要精细的调参。从工程角度来说,可以先设定几个备选的λ值,然后通过A/B测试来确定最终的λ值。更进一步,可以考虑在模型中引入一个可学习的参数来自动调整λ值,这个参数可以根据模型的训练情况动态调整,让模型自己去学习最佳的约束强度。感觉这个思路有点像在模型中引入一个“自适应”的旋钮,让模型自己控制泛化能力和特定任务性能之间的平衡。

我赞同上面的观点,上下文长度不是越长越好,而是要看“有效信息密度”。如果一味增加长度,塞入过多的冗余信息,反而会干扰模型判断。从工程角度来看,可以设置一个最大长度阈值,然后通过一些信息检索的方法,从海量文本中提取出与类别最相关的短语,组成Prompt,这样既能保证Prompt的信息量,又能控制其长度。

从工程角度来看,兼容性是个大问题。不同的 Prompt Tuning 框架可能使用不同的计算库和硬件加速方式。为了保证 KgCoOp 的效率,需要针对不同的框架进行优化,避免引入额外的计算开销。此外,还需要考虑不同框架的超参数设置,找到与 KgCoOp 配合的最佳参数组合。

手动调参确实是个体力活,而且效果还不一定好。自适应调整λ是个很有潜力的方向!我想到了几种可能的思路:

1. 基于验证集的动态调整: 可以在每个epoch或几个epoch后,根据模型在验证集上的表现(例如,准确率、loss)来调整λ。如果模型在验证集上的表现开始下降,说明可能过拟合了,需要增大λ来增强约束;反之,如果模型表现还有提升空间,可以适当减小λ,让模型更自由地学习。
2. 基于梯度信息的调整: 可以监测Lce(交叉熵损失)和Lkg(知识引导损失)的梯度大小。如果Lkg的梯度远大于Lce的梯度,说明模型可能过于依赖先验知识,需要减小λ;反之,如果Lce的梯度远大于Lkg的梯度,说明模型可能忽略了先验知识,需要增大λ。
3. 元学习: 可以使用元学习的方法,训练一个模型来预测最佳的λ值。这个模型可以将当前任务的特征(例如,数据集大小、任务类型)作为输入,输出一个λ值。但这种方法需要大量的数据和计算资源。

这确实是个trade-off。KgCoOp相当于给模型加了个“紧箍咒”,不让它学得太野,虽然防止了遗忘,但也可能限制了它的潜力。我个人觉得,可以尝试更智能的约束方式,比如根据任务的复杂度动态调整约束的强度,或者只约束那些对泛化能力影响大的Prompt参数。

的确,手动调整 λ 比较繁琐,而且依赖经验。一个更智能的方法是使用自适应 λ 调整策略。例如,可以根据验证集上的性能动态调整 λ。如果验证集性能开始下降,则减小 λ,反之则增大 λ。另一种方法是使用元学习,训练一个模型来预测最佳的 λ 值,这可能需要更多的计算资源,但可以获得更好的性能。此外,还可以考虑使用 Bayesian Optimization 或 Reinforcement Learning 来自动搜索最佳的 λ 值。

这个问题问到了点子上!我觉得限制Prompt的自由度确实可能会影响模型在特定任务上的表现。想想看,如果一个学生太听话,只学老师教的,可能考试能及格,但很难拿高分,因为缺乏自己的理解和创新。KgCoOp就像给模型戴了个紧箍咒,防止它跑偏,但也可能限制了它的潜力。最佳距离范围肯定存在,但这个值可能因任务而异,需要大量的实验来确定。

关于这个“最佳距离”,我倒是有个脑洞:能不能搞个自适应的“松紧带”?前期让Prompt尽情发挥,探索各种可能性,后期再慢慢收紧,引导它回到正确的轨道。这样既能学到特定任务的知识,又能保证不把老本行给忘了。当然,具体实现肯定没那么简单,但我觉得这个思路值得研究。

并非越长越好!上下文长度增加,模型需要处理的信息量也随之增加,这会导致计算复杂度上升。同时,过长的上下文可能会引入不相关的信息,干扰模型的判断。因此,需要根据具体的任务和模型选择合适的上下文长度。

我认为可以这么说,但需要更严谨的分析。KgCoOp 在 EuroSAT 和 UCF101 等专业数据集上表现出色,可能的原因在于这些数据集中的类别特征更加明确和集中,而原始 CLIP 模型可能对这些特征的表达不够充分。通过 KgCoOp 的知识引导,可以帮助模型更好地学习和利用这些专业领域的特征,从而提高分类准确率。但是,这并不意味着 KgCoOp 只适合处理专业领域的图像分类问题。在通用领域的图像分类问题中,KgCoOp 同样可以发挥作用,只不过其优势可能没有在专业领域那么明显。总的来说,KgCoOp 的适用性取决于具体的数据集和任务,需要根据实际情况进行评估。
并且,专业数据集往往数据量较小,更容易过拟合,而KgCoOp的知识引导损失可以起到一定的正则化作用,从而提高模型的泛化能力。

我认为是有可能的。KgCoOp 的核心思想是在微调过程中,通过知识引导损失来约束 Prompt 向量,使其不能偏离原始 CLIP 嵌入太远。这样做的好处是可以保留模型的通用知识,避免在新类别上的泛化能力下降。但是,这种约束也可能限制模型学习到特定任务的更有用的知识。比如,在某些特定任务中,可能存在一些与原始 CLIP 嵌入差异较大的特征,这些特征对于提高模型在该任务上的性能至关重要。如果 KgCoOp 过度约束 Prompt 向量,就可能导致模型无法学习到这些特征,从而影响其在特定任务上的表现。当然,作者也提到了,需要调整超参数 λ 来平衡通用知识和特定任务知识的学习。

我觉得选择欧几里得距离是一个合理的选择,原因如下:

* 简单有效: 欧几里得距离的计算非常简单,易于实现和理解,能够在计算成本和性能之间取得良好的平衡。
* 物理意义明确: 欧几里得距离可以直观地表示向量在嵌入空间中的距离,反映了学习到的Prompt与原始CLIP嵌入之间的差异程度。

当然,也可以考虑其他的距离度量方式,例如:

* 余弦相似度: 余弦相似度衡量的是向量之间的角度,更关注向量的方向一致性,在某些情况下可能比欧几里得距离更有效。
* KL散度: 如果将Prompt的嵌入视为概率分布,可以使用KL散度来衡量它们之间的差异。KL散度对分布的形状更敏感。

最终的选择取决于具体的任务和数据集,需要通过实验来确定哪种距离度量方式效果最好。

这个问题问得很有深度!我个人认为,选择欧几里得距离可能更多的是出于工程上的考量。

首先,欧几里得距离的计算复杂度相对较低,在大规模数据集上进行训练时可以节省大量的计算资源。

其次,欧几里得距离具有良好的数学性质,方便进行优化和分析。

当然,其他的距离度量方式也可能更有效,例如余弦相似度可以更好地衡量向量之间的语义相似性,马氏距离可以考虑数据的协方差等。但是,这些方法的计算复杂度通常较高,而且可能需要对数据进行预处理。

总的来说,选择欧几里得距离是一种折衷方案,它在计算复杂度和性能之间取得了较好的平衡。