---
# System prepended metadata

title: CLIP-Adapter
tags: [clip, coop, align, deepseek, residual connection]

---

# CLIP-Adapter 論文對話總結

## 🎯 論文核心是什麼？

### 名詞解釋
Contrastive Language-Image Pre-Training(CLIP)
A Larger-scale Image and Noisy-text embedding(ALIGN)
殘差連接（residual connection）

好啦!以下正文

這篇論文提出了一個叫 **CLIP-Adapter** 的方法，主要解決一個問題：**如何用極少的標註資料（Few-Shot Learning），讓強大的 CLIP 模型在特定任務上表現得更好**。

它沒有用當時流行的「提示詞調優（Prompt Tuning）」方法，而是回歸傳統的「特徵微調（Feature Adaptation）」，但加上了一個非常巧妙的設計，讓它又快又好。

---

## related work-CLIP

首先，CLIP 本身**不是一個傳統的分類器**，它是一個**視覺-語言特徵比對引擎**。

*   **輸入**：一張圖片 + 一段文字描述
*   **輸出**：圖片和文字的特徵向量
*   **怎麼做分類**？我們把每個類別名稱（如 "狗"）變成一句話（如 `"一張 狗 的照片"`），讓 CLIP 生出所有類別的**文字特徵**。然後把待分類的圖片送進 CLIP 生出**圖片特徵**，最後看圖片特徵跟哪個文字特徵最像，就分到哪一類。
*   **特點**：**零樣本（Zero-Shot）** 能力超強，不用訓練就能分類。

CLIP 的核心概念是「把 text 跟 image 映射到同一個空間」。這邊的「空間」可以把他想成就是一種抽象概念。每一個我們的想法，都會是這個空間當中的某一點，就代表一個抽象概念。當我們講出「狗」的時候，我們心中想的是一隻狗，當然我們看到一張狗的圖片的時候，我們心中想的也是「狗」。那個狗，就是 CLIP 嘗試把 text 跟 image 都映射過去的那個點。


### CLIP Training

而 CLIP 訓練的方法，就是有兩個 encoder：

1. 一個 text encoder (transformer)用來把一段文字映射到空間當中的某一點
2. 一個 image encoder (U-Net)用來把一張圖片映射到空間當中的某一點
![image](https://hackmd.io/_uploads/SJKOlQzhge.png)

### CLIP TEST

![image](https://hackmd.io/_uploads/BywCgXM3xe.png)

在訓練完畢以後，這個空間就同時表達了文字與圖片的抽象意義。今天給定

一組文字
一張圖片

我們只要把文字通通透過 text encoder 映射到空間中，也把一張圖映射到空間中，然後看看這張圖距離哪個文字最接近，那就是那一類。至於哪個最近，能透過內積(現在都用正規化再cosin，超級快)計算得到結果。

---

## ⚔️ 兩大門派：CoOp vs. CLIP-Adapter

當時大家想提升 CLIP，主流做法是像 CoOp 那樣去「調提示詞」。這篇論文則開了另一條路：「調特徵」。

| 特性 | CoOp (Context Optimization) | CLIP-Adapter (本篇論文主角) |
| :--- | :--- | :--- |
| **核心思想** | **提示調優 (Prompt Tuning)** <br> 學習更好的「輸入」 | **特徵調適 (Feature Adaptation)** <br> 調整模型的「輸出」 |
| **怎麼做** | 把人工寫的提示詞換成**可學習的向量**<br>（軟提示 Soft Prompts） | **不動提示詞**，用原始的就好<br>在特徵輸出後加個**輕量適配器** |
| **修改對象** | **輸入空間 (Input Space)** | **特徵空間 (Feature Space)** |
| **訓練開銷** | **大** <br> (需反向傳播通過文本編碼器) | **小** <br> (只需計算適配器的梯度) |
| **實際數據** | Train Time: ~14h <br> GPU Mem: ~7.2 GB | Train Time: ~**50min** <br> GPU Mem: ~**2.2 GB** |
| **效果** | 比 Zero-Shot CLIP 好很多 | **比 CoOp 更好一點**，還更快更省資源 |

---

## 🔧 CLIP-Adapter 技術細節

### 1. 整體架構
它非常簡單，就只是在凍結的 CLIP 模型後面，幫圖像和文本特徵各加一個小網路（Adapter），再用一個神奇的比例把新舊特徵混起來。

```mermaid
graph LR
  A[輸入圖像] --> B["凍結的<br/>Visual Encoder"]
  C["類別提示詞<br/>e.g., &quot;a photo of a dog&quot;"] --> D["凍結的<br/>Text Encoder"]

  B -- 原始圖像特徵 f --> E[Visual Adapter] --> F{特徵融合}
  D -- 原始文本特徵 W --> G[Text Adapter] --> H{特徵融合}

  F -- 融合後圖像特徵 f* --> I[相似度計算<br/>與分類]
  H -- 融合後文本特徵 W* --> I

```

### 2. 靈魂所在：Residual-style Feature Blending

這不是普通的 Residual Connection (`y = F(x) + x`)，而是一個**可調式的混合閥**：

| | 公式 | 說明 |
| :--- | :--- | :--- |
| **視覺特徵融合** | $f^* = \alpha \cdot A_v(f) + (1-\alpha) \cdot f$ | 調節圖片特徵要多少新知識 |
| **文本特徵融合** | $\mathbf{W}^* = \beta \cdot A_t(\mathbf{W}) + (1-\beta) \cdot \mathbf{W}$ | 調節文字特徵要多少新知識 |

*   **$f$, $\mathbf{W}$**: 凍結的 CLIP 編碼器產生的**原始特徵**，代表強大的通用知識。
*   **$A_v(f)$, $A_t(\mathbf{W})$**: 輕量的**適配器**產生的新特徵，從少量樣本學來的任務知識。
*   **$\alpha$, $\beta$**: **殘差比例 (Residual Ratio)**，一個超參數或可學習參數，**控制新舊知識的混合比例**。
    *   `α=0`： 完全相信原始 CLIP (Zero-Shot)
    *   `α=1`： 完全相信適配器 (容易過擬合)
    *   `0<α<1`： 新舊知識的加權平均 (最佳選擇!)

### 3. 為什麼這個設計這麼厲害？

1.  **對抗過擬合 (Anti-Overfitting)**：強制模型輸出錨定在強大的原始特徵附近，等於一個超強的正則化（Regularization），確保模型不會學歪。
2.  **穩定訓練 (Training Stability)**：適配器只需要學習一個小小的「殘差偏移」，而不是從頭學整個特徵，所以收斂又快又穩。
3.  **動態知識融合 (Dynamic Fusion)**：論文中發現，不同任務需要不同的 $\alpha$。
    *   **細粒度任務**（如衛星影像）：和預訓練資料差很多，需要多學新東西 → **$\alpha$ 較大 (~0.8)**
    *   **通用任務**（如 ImageNet）：和預訓練資料很像，多相信原始知識 → **$\alpha$ 較小 (~0.2)**

---

## 💡 重點總結與心得

*   **別忘了微調特徵這條路**：當大家都在瘋 Prompt Tuning 時，這篇論文證明回頭做特徵微調，加上好設計（殘差混合），效果可能更好、更高效。
*   **Residual Connection 的新用法**：這裡的 Residual 主要目的不是解決梯度消失，而是**對抗過擬合**和**進行可控的知識融合**，是一個「特徵混合閥」。
*   **實務優勢巨大**：**訓練速度快 16 倍以上，顯存占用少 3 倍**，這在資源有限的情況下簡直是福音。
*   **簡單即強大**：方法本身非常簡潔優雅，就是凍結主幹 -> 特徵提取 -> 適配器轉換 -> 殘差混合，沒有複雜的魔法，但效果驚人。

這篇論文給我們的啟發是：**有時最好的創新不是發明新東西，而是用一個聰明的設計，把舊方法的核心價值重新發揮出來。**