图片速览 CLIP-Adapter: Better Vision-Language Models with Feature Adapters

CLIPAdapter是一种针对视觉语言模型的微调方法,通过在视觉或语言分支上使用轻量级适配器层进行特征混合。这种方法避免了全模型微调的过拟合问题,同时在少样本设置下表现优于上下文优化。通过残差连接,CLIPAdapter能够结合原始CLIP的知识和新学习的特征,提高在各种视觉分类任务上的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

  • 以下为解释
papercode
添加链接描述https://github.com/gaopengcuhk/CLIP-Adapter

在这里插入图片描述

大规模对比视觉语言预训练在视觉表征学习方面取得了显著进展。与由一组固定的离散标签训练的传统视觉系统不同,在(Radford等人,2021)中引入了一种新范式,以直接学习在开放词汇环境中将图像与原始文本对齐。在下游任务中,使用精心选择的文本提示进行零炮预测。
为了避免非平凡的提示工程,提出了上下文优化(Zhou等人,2021),将连续向量学习为任务特定的提示,并使用少量的快照训练示例。在本文中,我们展示了实现更好的视觉语言模型的另一种途径,而不是快速调优。虽然提示调优是针对文本输入的,但我们建议CLIP Adapter在视觉或语言分支上使用功能适配器进行微调。具体来说,CLIPAdapter采用了一个额外的瓶颈层来学习新特征,并与原始预处理特征进行残差样式特征混合。因此,CLIPAdapter能够在保持简单设计的同时,性能优于上下文优化。实验和对各种视觉分类任务的广泛消融研究证明了我们的方法的有效性。

不幸的是,为每项视觉任务收集大规模高质量数据集是劳动密集型的,而且成本太高,无法扩展。为了解决这个问题,“预训练微调”范式,即对大型数据集(如Imagenet)进行预训练(Krizhevsky等人,2012),然后对各种下游任务进行微调,已被广泛应用于视觉领域。然而,这些方法仍需要大量注释才能对许多下游任务进行微调。最近,对比语言图像预训练(CLIP)(Radford等人,2021)是通过利用大规模噪声图像-文本对的对比学习来解决视觉任务的。它通过将视觉分类放入合适的手工制作的模板中作为提示,在没有任何注释(即零镜头转移)的情况下,在各种视觉分类任务上实现手工模板的prompts。

尽管基于提示的零触发转移学习显示出良好的性能,但设计好的提示仍然是一个工程问题,需要大量的时间和领域知识,语境优化Coop)Context Optimization(Zhou等人,2021) 进一步提出学习连续软提示,用少量镜头示例替换精心选择的硬提示。Coop在零镜头剪辑和线性探测剪辑设置的基础上显著改进了少量镜头分类。展示了在大规模预训练视觉语言模型上进行提示调整的潜力

在本文中,我们提出了一种不同的方法,用特征适配器更好地适应视觉语言模型,而不是快速调整。与执行软提示优化的CoOp不同,我们只需对轻量级附加功能适配器进行微调。由于CLIP的过度参数化和缺乏足够的训练示例,幼稚的微调将导致对特定数据集的过度拟合,并且由于在所有CLIP层中向前和向后传播,训练过程将非常缓慢。受参数高效传递学习中适配器模块的激励(Houlsby等人,2019),我们提出了CLIP适配器,它只微调少量附加权重,而不是优化CLIP的所有参数。CLIP Adapter采用了一种轻量级瓶颈架构,通过减少参数的数量来防止少数镜头学习的潜在过拟合问题。同时,CLIP Adapter与Houlsby et al.(2019)在两个重要方面有所不同:CLIP Adapter仅在视觉或语言主干的最后一层之后添加了两个额外的线性层。相反,原始适配器模块被插入语言主干的所有层;
此外,CLIP适配器通过剩余连接将原始零快照视觉或语言嵌入与相应的微调功能混合。通过这样一种“残余风格融合”,CLIP Adapter可以同时将存储在原始CLIP中的知识和从少数射击训练示例中获得的新知识进行输出。总体而言,我们的贡献可以总结如下:

  • 我们建议使用CLIP Adapter进行剩余样式特征混合,以通过微调实现高效的few-shot转换学习。

  • 与CoOp相比,CLIP Adapter实现了更好的少数镜头分类性能,同时具有更简单的设计,这表明CLIP适配器是快速调整的一个很有前景的替代方案。

2 Related Work

2.1 Model Fine-Tuning

2.2 Prompt Design

2.3 Vision-Language Models

3 Our Approach

3.1 Classifier Weight Generation for Few-Shot Learning

输入图像 I ∈ R H × W × 3 ⇒ D 维图像特征向量 f ∈ R D → W ∈ R D × K ( 分类投影向量 ) 输入图像I ∈ R^{H×W×3} \Rightarrow D维图像特征向量 f\in R^{D} \xrightarrow{ W ∈ R^{D×K}(分类投影向量) } 输入图像IRH×W×3D维图像特征向量fRDWRD×K(分类投影向量)

 τ stands for the temperature of Softmax

         与监督训练不同,在本文中,我们感兴趣的是具有少量示例的图像分类。用少量样本从头开始训练主干和分类器,很容易过度拟合某些数据集,并可能在测试剥离时性能严重下降。通常,代表性的少镜头学习模式是首先对大规模数据集的主干进行预处理,然后通过直接进行零镜头预测或对少镜头示例进行进一步微调,将所学知识转移到下游任务

adheres - CLIP adheres to the zero-shot transfer style Clip 可在 大型的image-text pairs预训练之后,无需微调,直接应用。

         对于带有自然名称 { C 1 , . . . , C k } \{C_1, . . . , C_k\} {C1,...,Ck}的K类数据,语言提取器将提取分类特征 classifier weight W i W_i Wi
W i = B E R T ( T o k e n i z e r ( [ H ; C i ] ) ) , H 为预定义的硬 p r o m p t 模板 W_i= BERT(Tokenizer([H;C_i])),H为预定义的硬prompt模板 Wi=BERT(Tokenizer([H;Ci])),H为预定义的硬prompt模板
         或者,Coop采用连续提示,而不是手工制作的硬提示。Coop创建一个随机初始化可学习软令牌S的列表∈Rの, 其中L表示软标记序列的长度。然后,软令牌序列SI连接到每个类名C;然后给我一个提示。我们将整个过程表示为

         对于CLIP和Coop,使用生成的分类器权重Wi,其中f1,…K],我们可以通过前面提到的等式(1)计算i类的预测概率pi

3.2 CLIP-Adapter

         与Coop的快速 prompt tuning不同,与Coop的快速调整不同,我们提出了一个替代框架,通过微调额外的特征适配器,在少镜头图像分类上实现更好的视觉语言模型。我们声称,以前广泛采用的“由于大量参数和训练示例的不足,预处理微调范式在少数镜头设置下无法微调整个CLIP主干。因此,我们提出了Cllp适配器,它只向CLIP的语言和图像分支附加少量额外的可学习瓶颈线性层,同时在镜头微调期间保持原始CLIP主干冻结-调谐。然而,在少数几个示例中,带有附加层的简单微调可能仍会过度适用。为了处理过度适用并提高Cllp适配器的健壮性,我们进一步采用剩余连接动态地将微调知识与CLIP主干的原始知识相结合。
         Specifically, 对于给定的图像 I I I和K个类别 C i i = 1 K {C_i}_{i=1}^K Cii=1K,可以通过以下式子得到特征f和w。

在这里插入图片描述

在这里插入图片描述

         然后两个可学习的特征适配器 A v ( ⋅ ) a n d A t ( ⋅ ) Av(·) and At(·) Av()andAt(),每个包含两个线性层。为了避免遗忘预处理CLIP编码的原始知识,我们对特征适配器采用了残差连接。使用两个常量值α和β作为“剩余比率”,以帮助调整保持原始知识的程度,从而提高绩效。

在这里插入图片描述

在这里插入图片描述

在得到新的特征之后,继续使用等式1,计算 P = { p i } i = 1 K P=\{p_i\}_{i=1}^K P={pi}i=1K,图像的预测类别为 i = a r g m a x i   p i i = arg max_i \ p_i i=argmaxi pi

在这里插入图片描述

3.3 Variants of CLIP-Adapter

4 Experiments

4.1 Few-Shot Learning

4.1.1 Training Settings

C&G

https://openai.com/blog/clip/
视频理解论文串讲(上)【论文精读】

### K-Adapter 的工作机制 K-Adapter 提供了一种灵活的技术方案,允许在预训练模型中注入知识而无需重新调整整个模型的权重。这种方法的核心在于引入 **适配器 (Adapters)** 结构来实现知识融合[^1]。 #### 1. 适配器的设计原则 适配器是一种轻量级模块,嵌入到预训练模型的不同层之间。这些模块通常由全连接网络组成,具有较少的可训练参数。通过这种方式,K-Adapter 能够显著减少计算开销并提高效率[^3]。 #### 2. 知识注入的具体过程 K-Adapter 使用两种主要方式完成知识注入: - **保持原模型参数不变**:预训练模型的主要结构及其参数被完全冻结,仅对新加入的知识适配器进行微调。这种设计有效防止了“灾难性遗忘”,即在学习新知识时不丢失已有能力[^4]。 - **分布式训练支持**:由于各个适配器之间的信息流相互独立,因此它们可以在不同的设备上分别训练,进一步提升了系统的扩展性和灵活性。 #### 3. 下游任务的表现优化 当应用于具体任务时,K-Adapter 可以针对不同类型的任务定制化相应的适配器配置。实验表明,在多种自然语言处理场景下(如问答、分类等),该方法均取得了优异的效果。 ```python class AdapterLayer(nn.Module): def __init__(self, input_size=768, hidden_size=512): super(AdapterLayer, self).__init__() self.down_project = nn.Linear(input_size, hidden_size) self.up_project = nn.Linear(hidden_size, input_size) def forward(self, x): z = gelu(self.down_project(x)) output = self.up_project(z) return x + output ``` 上述代码展示了简单的适配器层实现逻辑,其中 `gelu` 表示激活函数 GELU,此架构能够轻松集成至现有 Transformer 架构之中。 ### 总结 综上所述,K-Adapter 利用适配器实现了高效且无损的知识注入策略,既保留了基础模型的强大泛化性能,又增强了其特定领域内的专业知识掌握程度[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值