Motivation
为避免复杂的特征工程,CoOp 等方法通过上下文优化来学习一个有效的 Prompt,Prompt Tuning 大多应用于文本分支,因此提出一种方法在文本 / 图像分支添加适配器。
Method
3.1 Classifier Weight Generation for Few-Shot Learning
3.2 CLIP-Adapter
与 CoOp 的 Learnable Prompt 不同,提出的替代框架通过微调附加的特征适配器,在 Few-Shot 实现更好的效果。以前广泛采用的 “预训练微调” 范式由于参数量巨大和训练样例的缺乏,在 Few-Shot 下无法对整个 CLIP 进行微调。因此提出了 CLIP-Adapter,它只在 CLIP 的语言和图像分支中附加少量额外的可学习 Bottle Linear Layers,而在几次微调期间保持原始CLIP主干冻结。
然而,带有附加层的 Naive Fine-Tuning 仍然可能导致过拟合。为解决该问题,提高 CLIP-Adapter 的鲁棒性,采用残差连接将微调后的知识与来自 CLIP 主干的原始知识动态融合。
f
=
Backbone
(
I
)
,
p
i
=
exp
(
W
i
T
f
)
/
τ
∑
j
=
1
N
exp
(
W
j
T
f
)
/
τ
f=\text{Backbone}(\textbf{I}), p_i=\frac{\text{exp}(\textbf{W}^T_if)/\tau}{\sum^N_{j=1}\text{exp}(\textbf{W}^T_jf)/\tau}
f=Backbone(I),pi=∑j=1Nexp(WjTf)/τexp(WiTf)/τ (1)
W
i
=
BERT
(
Tokenizer
(
[
H
;
C
i
]
)
)
\textbf{W}_i=\text{BERT}(\text{Tokenizer}([H; C_i]))
Wi=BERT(Tokenizer([H;Ci])) (2)
其中,对于 CoOp 计算权重的公式为:
W
i
=
BERT
(
[
S
;
Tokenizer
(
C
i
)
]
)
\textbf{W}_i=\text{BERT}([S; \text{Tokenizer}(C_i)])
Wi=BERT([S;Tokenizer(Ci)]) (3)
具体而言,给定输入图像 I \textbf{I} I 和一组类别名称 { C i } i = 1 K \{C_i\}^K_{i=1} {Ci}i=1K,由式 (1) 和 (2) 计算原始 CLIP 的图像特征和分类器权值。
将两个可学习的特征适配器 A v ( ⋅ ) A_v(·) Av(⋅) 和 A t ( ⋅ ) A_t(·) At(⋅) 集成,每个适配器都包含两层线性变换,分别对 f f f 和 W \textbf{W} W 进行变换。对特征适配器采用残差连接,以避免遗忘预训练 CLIP 的原始知识。
采用两个恒定值
α
α
α 和
β
β
β 作为 “残差比”,以帮助调整保持原始知识的程度,以获得更好的性能。