JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

把凍結的視覺編碼器橋接到大型語言模型

投影器、重採樣器與門控交叉注意力——在不重頭訓練任一座塔的前提下,把像素餵進語言模型的四種方式。

為何凍結、為何橋接

從頭訓練一個視覺編碼器與一個大型語言模型各自所費不貲。因此,視覺語言模型的主流做法是把兩者都重複利用:取一個預訓練的視覺編碼器(常是上一篇的 CLIP 圖像塔)與一個預訓練的 LLM,凍結它們大部分的權重,只訓練一個小小的,把影像特徵轉成 LLM 讀得懂的東西。這在設計上就是參數高效的——你訓練的是數百萬個橋接參數,而非數十億個骨幹參數。

底下每個設計選擇,其實都在回答同一個問題:視覺特徵要如何進入語言模型的注意力? 它們分成兩大陣營——輸入空間的橋把影像轉成偽 token,讓 LLM 像讀字一樣讀它們;以及逐層的橋,透過在 LLM 內部新增的交叉注意力把視覺注入進去。

最簡單的橋:投影器

最小可行的橋是視覺編碼器投影器:一個小小的 MLP(有時只是單一線性層),把每個影像區塊的嵌入映射到 LLM 的 token 空間。投影後的區塊向量就直接前置到文字 token 前,彷彿它們是字。LLM 自己的自注意力接著免費把它們與提示融合起來。這就是 LLaVA 的做法——而它驚人的啟示是:一個兩層 MLP 加上好的指令資料,就足以打造一個有能力的助手。

\mathbf{h}_i = \mathbf{W}_2\,\phi\!\left(\mathbf{W}_1\mathbf{e}_i + \mathbf{b}_1\right) + \mathbf{b}_2,\qquad i = 1,\dots,P

投影器其实就是一个小型 MLP,把每个图块嵌入 e_i 映射成 LLM 输入空间中的伪 token h_i。

patch_feats = vision_encoder(image)        # (P, d_vis), frozen
vis_tokens  = mlp_projector(patch_feats)   # (P, d_llm), trained
seq = concat(vis_tokens, embed(text))      # treat patches as tokens
out = llm(seq)                             # self-attention fuses both
投影器把 P 個影像區塊轉成 P 個偽 token,LLM 就和提示一起讀。

用可學習查詢重採樣:Perceiver 與 Q-Former

與其傳入全部 P 個區塊,不如把它們重採樣成固定的 K 個(比方 32 或 64)。Perceiver 的點子是保留一小組可學習的潛在查詢,讓它們對(龐大的)影像特徵集合做交叉注意力。往後傳遞的是潛在向量——而非影像本身——因此成本與輸入大小脫鉤。Flamingo 的 Perceiver 重採樣器正是這樣,把數量不定的區塊(或影片影格)轉成固定的少量視覺 token。

重采样让一小组可学习的潜在查询,通过软性的查询–键–值检索对冻结的图像特征做交叉注意力。

注意力作为带 softmax 权重的查询–键–值检索的示意图。

Q-Former(出自 BLIP-2)把同一招打磨成一座兩階段的橋。一組可學習的查詢 token 通過一個小型 transformer,對凍結的影像特徵做交叉注意力;這些查詢同時也對文字訓練,因此這座橋被教會抽取與語言相關的視覺證據——而非任意的壓縮。最終的查詢輸出成為 LLM 的視覺前綴。整個 Q-Former 相對任一骨幹都很小,而兩座骨幹都保持凍結。

逐層注入視覺:門控交叉注意力

另一個陣營在輸入端不動文字 token,而是在 LLM 既有區塊之間插入新的跨模態注意力。這就是 Flamingo 的門控交叉注意力:每隔幾層,文字隱狀態就對重採樣後的視覺 token 做注意力。巧妙之處——也是優雅之處——在於一個初始化為零的 tanh 門。訓練之初門是關閉的,因此增強後的模型與原本凍結的 LLM 逐位元相同;隨著新層學習,門逐漸打開,這讓預訓練的語言能力不致崩塌。

\tilde{\mathbf{x}} = \mathbf{x} + \tanh(\alpha)\,\mathrm{CrossAttn}\!\left(\mathbf{x},\,\mathbf{V}\right),\qquad \alpha_{\text{init}} = 0

Flamingo 式的门控交叉注意力加入一个初始为零的 tanh 门,使新的视觉通路在第 0 步贡献为零。

如何選一座橋

  1. 想要最簡單的路徑、又手握指令資料集?用 MLP 投影器(LLaVA 風格)。它強得驚人,又好除錯。
  2. token 預算吃緊,或要餵影片/多張影像?用 Perceiver 或 Q-Former 重採樣到固定的小數量。
  3. 必須保住 LLM 純淨的文字行為、又要交錯許多影像?門控交叉注意力(Flamingo)在初始時完全保留凍結的 LLM。

橋告訴模型怎麼看。它還沒告訴模型怎麼變得有用——怎麼回答問題、遵循指令、為自己的說法找依據。那需要資料與一個微調階段,正是下一篇的主題。