讀論文筆記-Learning to Prompt for Vision-Language Models
Problems
現有基于prompt engineering的多模態模型在設計合適的prompt時有很大困難,從而設計了一種更簡單的方法來制作prompt。
Motivations
- prompt engineering雖然促進了視覺表示的學習,實現了zero-shot遷移到其他任務上,但設計合適的prompt耗時費力。
- NLP領域提供了用連續提示詞來改善離散prompt的方法,但也有無法解釋到底學到了什么詞的缺陷。
Methods
Key:初始化連續向量建模上下文,并通過大量數據進行學習,實現prompt的自動學習。提出統一上下文unified context和特定類別上下文specific context兩種prompt。
- unified context的形式:
t = [ v ] 1 [ v ] 2 [ v ] 3 . . . [ v ] M [ C L A S S ] t=[v]_1[v]_2[v]_3...[v]_M[CLASS] t=[v]1?[v]2?[v]3?...[v]M?[CLASS]
[ v ] M [v]_M [v]M?是與詞嵌入相同維度的向量,個數M是一個超參數, [ C L A S S ] [CLASS] [CLASS]是類別標簽對應的詞嵌入向量,也可以放在中間。可學習向量和類別對應的詞向量是concatenate從而形成提示詞t的。 - specified context的形式:
t = [ v ] 1 i [ v ] 2 i [ v ] 3 i . . . [ v ] M i [ C L A S S ] t=[v]_1^i[v]_2^i[v]_3^i...[v]_M^i[CLASS] t=[v]1i?[v]2i?[v]3i?...[v]Mi?[CLASS]
對于不同的類別所使用的可學習向量都是不同的。
網絡結構:和CLIP類似,利用text encoder處理每個類別的prompt t i t_i ti?,就是基于一個Transformer的結構,從[EOS]token中得到能表示視覺概念的分類權重 g ( t i ) g(t_i) g(ti?)。image encoder可以是ResNet或ViT,得到特征f。計算相似度、預測概率:
p ( y = i ∣ x ) = e x p ( c o s ( g ( t i ) , f ) / t ) ∑ j = 1 K e x p ( c o s ( g ( t j ) , f ) / t ) p(y=i|x)=\frac{exp(cos(g(t_i),f)/t)}{\sum_{j=1}^Kexp(cos(g(t_j),f)/t)} p(y=i∣x)=∑j=1K?exp(cos(g(tj?),f)/t)exp(cos(g(ti?),f)/t)?
訓練過程:encoders都是凍結參數的,使用的是交叉熵損失函數(是圖文對比學習方法,我理解的就是余弦相似度+交叉熵損失=對比學習損失),反向傳播更新context的參數。
Experiments
- 比較在少樣本學習設置下,模型的小樣本學習能力:
- 數據集:和CLIP一樣的1個圖像分類數據集,組成了一個綜合的benchmark;
- 模型結構:vision encoder用的ResNet50,對上下文使用的是均值為0,標準差為0.02的高斯分布初始化,用SGD優化器,使用余弦退火和warmup的技巧。
- 比較的基線模型:零樣本的CLIP和線性探針的CLIP
- 對比角度:(1)與使用handcrafted prompt的模型相比(CLIP),在特定任務、細粒度數據集和場景、行為識別的數據集上有更好的效果,但在pest\food這兩個數據上提升不明顯且有過擬合傾向(作者認為這是因為有臟數據);(2)與線性探針CLIP專門對比:大部分都顯著好于,在2個細粒度和特定任務上相當,其中CSC方法能完全超越線性探針模型;(3)比較通用類別和特定類別上下文:通用類別更適合對通用物體、場景和行為上的檢測,特定類別上下文適合細粒度的數據集且需要更大的訓練數據。
- 在有Domain gap設定下,模型的泛化能力:
- 數據集:源域數據是ImageNet,目標域數據是4個風格不同的ImageNet變體;
- 模型結構:vision encoder是ResNet50/101, ViT-B32/16;
- 結果:CoOp能顯著提升模型的泛化能力,而線性探針模型不擅長有域遷移domain shift的場景
- 超參數選擇
- 不同上下文長度(M的大小):更長有更好的效果,當M很大時,[CLASS]在中間位置有更好的效果。但性能好會面對魯棒性下降。
- 不同vision encoders:更好的vision encoders,CoOp效果更好。
- 與Prompt Ensembling對比:設計連續可學習prompt效果更好。
- 與其他微調方法相比:與原始CLIP、使用線性探針(就是一個線性層,這里可以理解成提取CLIP的特征后輸入線性層,訓練線性層進行分類)、添加image encoder微調、在text encoder后添加變形層微調、在文本輸出添加偏置項的方法進行比較,CoOp的優化上下文方法是最好的色;
- 上下文初始化方法:對CoOp上下文隨機初始化和使用CLIP的hand-crafted比較,發現效果差不多,都是很好的上下文,不過后續對CoOp上下文通過學習優化會有更好的效果。
- 對上下文的解釋:暫時無法給出解釋,因為用距離度量向量的語義是不準確的。