對應原題(Common ‧ Multimodal, Speech and Voice AI)
- How do vision-language models get images into an LLM: projector, cross-attention, or native tokens?
— Asked at: Meta, Alibaba- What changes when you move from images to video? — Asked at: Meta
- How would you build multimodal retrieval over images, video and text in one index?
🎯 什麼情境該想到我
當你「要接一個看得懂圖的模型、或想知道為什麼傳圖片特別貴」的時候。
⚙️ Part 1:圖片怎麼進 LLM
三種架構
① Projector / Adapter(LLaVA 式)
圖 ─▶ ViT ─▶ [MLP 或 Q-Former] ─▶ 視覺 token ──┐
├─▶ LLM(架構不變)
文字 ─────────────────────────▶ 文字 token ──┘
★ 視覺被「翻譯」成 LLM 聽得懂的 token,佔用上下文
② Cross-Attention(Flamingo 式)
圖 ─▶ ViT ─▶ 視覺特徵 ──┐
▼
文字 ─▶ LLM 第 k 層 ─▶ [插入的 cross-attn] ─▶ 第 k+1 層 ─▶ ⋯
★ 視覺不佔文字的上下文,但要改 LLM 架構
③ Native / Early Fusion(原生多模態)
圖 patch 與文字 token 從「預訓練階段」就混在一起訓
★ 沒有「接上去」這回事,它天生就是多模態的
★ 對照表
| ① Projector | ② Cross-Attention | ③ Native | |
|---|---|---|---|
| 是否改動 LLM 架構 | ❌ 不改 | ✅ 插入新層 | ✅ 從頭設計 |
| 訓練成本 | 最低(可只訓 projector) | 中 | 最高(要重新預訓練) |
| 佔用文字上下文 | ✅ 會 —— 一張圖幾百到幾千 token | ❌ 不會 | ✅ 會 |
| 可處理多張圖 | ⚠️ 受上下文限制 | ✅ 很多張(Flamingo 的動機) | ✅ |
| 模態互動深度 | 淺(只在輸入層) | 中(每隔幾層) | 最深 |
| 能力上限 | 中 | 中高 | 最高 |
| 代表 | LLaVA、多數開源 VLM | Flamingo、Llama 3.2 Vision | 新一代前沿多模態模型(截至 2026-10 的判斷) |
★ 面試的一句話總結:
「Projector 用上下文預算換訓練成本,cross-attention 用架構複雜度換上下文預算,native 用預訓練成本換能力上限。」
★ 兩個關鍵細節
1. Token 數:一張圖有多貴
336×336 的 CLIP ViT-L/14,patch 是 14×14 → 24×24 = 576 個 patch → 576 個視覺 token。
高解析度是 VLM 的核心難題:ViT 的輸入解析度是固定的,但真實圖片(截圖、文件掃描、圖表)需要高解析度才看得清文字。
主流解法是 AnyRes / 切 tile:把大圖切成多塊各自過 ViT,再加一張縮圖。
→ 代價:token 數線性暴增。一張 1024×1024 的圖可能要數千 token。
★ 這直接影響成本與延遲:圖片的 prefill 成本遠高於同等「資訊量」的文字(見 Prefill 與 Decode)。
「為什麼傳圖片這麼貴」的答案就在這裡。
2. 2D 位置資訊
文字是 1D 序列,圖片是 2D。要讓模型知道 patch 的空間關係,需要 2D 位置編碼(或 2D 版的 RoPE,見 位置編碼與 RoPE)。切 tile 之後跨 tile 的位置關係尤其難處理。
⚙️ Part 2:從圖片到影片,多了什麼
| # | 新增的問題 | 說明 |
|---|---|---|
| 1 | ★ Token 爆炸 | 30 fps × 60 秒 = 1,800 幀。每幀 576 token → 超過一百萬 token。 → 必須抽幀:均勻抽樣 / 關鍵幀 / 場景切換偵測;再加時間維度的 token 池化或壓縮 |
| 2 | ★ 時序推理 | 「他先拿起杯子還是先開門?」——單幀無法回答。需要跨幀的因果與順序理解 |
| 3 | 時間定位 | 「這件事發生在第幾秒?」——要能輸出時間戳,不只是描述內容 |
| 4 | 音訊軌 | 影片通常有聲音。是要 ASR 轉文字,還是原生處理音訊?(見 級聯與原生語音) |
| 5 | 長度 | 兩小時的影片無法一次進上下文。需要階層式處理:分段理解 → 段落摘要 → 全片彙整 |
| 6 | 評估更難 | 影片描述沒有唯一正確答案;時序推理的評估集稀少 |
| 7 | 資料稀缺 | 高品質的「影片 + 細緻標註」遠少於「圖 + 文」 |
★ 最核心的一句:影片不是「很多張圖」,差別在於「時間」這個維度要被明確建模。
均勻抽 8 幀送進 VLM 能回答「影片裡有什麼」,但回答不了「發生了什麼」。
⚙️ Part 3:多模態檢索(一個索引裝圖、影片、文字)
★ 兩條路線
| A. 共享嵌入空間(CLIP 式) | B. 轉成文字再索引 | |
|---|---|---|
| 做法 | 圖與文映到同一個向量空間,直接跨模態比相似度 | 用 VLM 為圖/影片生成描述文字,索引文字 |
| 優點 | 單一索引、以文搜圖天然可行、快 | ★ 可用成熟的文字檢索棧(BM25 + dense + rerank)、可解釋、能處理細節 |
| 缺點 | ★ 對齊粒度粗 —— 對圖中的文字(OCR)、細節、物件間的組合關係表現弱 | 生成成本高、描述會丟失資訊、描述的角度固定 |
| 適合 | 「找一張有海灘的照片」 | 「找那張顯示 Q3 營收下滑的簡報」 |
★ 實務答案是兩者並用,再用 RRF 融合(見 稀疏與密集檢索)。
理由和文字檢索的 hybrid 完全一樣:兩者的失效模式互補。
設計要點
| 要點 | 說明 |
|---|---|
| ★ 影片的檢索粒度是「片段」不是「整支」 | 索引時就切成帶時間戳的片段(依場景切換或固定長度),命中後能直接跳到該秒 |
| 保留 metadata | 來源、時間、拍攝資訊、周邊文字(caption、alt text、檔名、上下文段落)——周邊文字常常比影像本身更好檢索 |
| 多向量 / late interaction | 一張圖存多個 patch 向量(類似 ColBERT 的 MaxSim,見 Reranker 重排序),比單一向量精細 |
| 重排 | 第一段召回後,用 VLM 當 cross-encoder 精排 top-k |
| ★ 描述要為檢索而生成,不是為人類閱讀 | 提示 VLM 輸出可能被查詢的關鍵詞(物件、文字、數字、場景、動作),而不是文學性描述 |
⚠️ 注意 / 什麼時候不適用
- ★ 圖片的 token 成本要先算清楚。高解析度 + 多張圖很容易把上下文與帳單吃掉。先量
圖片 → token 數的實際換算。 - VLM 的 OCR 能力不等於 OCR 工具。文件為主的場景,專用 OCR + 版面分析常常更準更便宜(見 切塊與文件解析)。
- ★ 圖片是注入載體。圖中的文字會被模型讀到——「隱藏在圖片裡的指令」是真實的攻擊手法(見 提示注入與分層防禦)。
- 解析度不足會靜默失敗。模型看不清小字時不會說「我看不清楚」,它會猜。
- 影片抽幀策略決定一切。均勻抽樣會漏掉關鍵瞬間;關鍵幀偵測會漏掉緩慢變化。要依任務選,並且要評估。
- 跨模態嵌入模型的偏誤繼承自訓練資料(多為網路圖文對),在專業領域(醫療影像、工業檢測)通常需要另外訓練。
- 多模態評估集稀缺,公開基準的污染也更難檢查(見 Benchmark 污染與分數失真)。
🧪 我實際套用的紀錄
- 2026-09-20:從面試題庫展開,尚未實際套用。
🔗 相關
- 即時語音 Agent —— 另一個模態的即時性挑戰
- 級聯與原生語音 —— 「接上去」vs「原生」的同一個架構取捨
- Prefill 與 Decode —— 圖片 token 的成本落在 prefill
- 位置編碼與 RoPE —— 2D 位置編碼
- 稀疏與密集檢索、Reranker 重排序 —— 多模態檢索沿用同一套管線
- 切塊與文件解析 —— 文件場景該用 OCR 還是 VLM
- 提示注入與分層防禦 —— 圖片作為注入載體