マルチモーダル融合:CLIP・視覚言語モデルの内部
画像とテキストを同じ意味空間で扱える理由が腑に落ちる。CLIPの共有埋め込みから、ビジョンエンコーダとLLMを繋ぐ投影層・Q-Former、融合方式までを内部から解説します。
- 1.CLIPは画像とテキストを別エンコーダで符号化し、対のコサイン類似度を対照学習で揃えることで、両者を1つの共有埋め込み空間に写像する。
- 2.現代のVLMはビジョンエンコーダの出力をLLMの語彙空間へ投影し、画像を「視覚トークン」として言語トークン列に差し込む後期融合が主流。接続には線形/MLP投影とQ-Formerの2系統がある。
- 3.解像度・パッチ数が視覚トークン数を決め、計算量とディテール認識のトレードオフになる。動的タイル分割で高解像度を扱う手法が広がっている。
2つのモダリティを「同じ空間」で扱う
画像とテキストはデータ構造がまったく異なります。それでも「犬の写真」と「a photo of a dog」を同じものとして扱えるのは、両者を共通の意味空間(共有埋め込み空間)に写像するからです。本記事では、その代表である CLIP の仕組みから始め、ビジョンエンコーダと LLM を接続して画像について会話できる視覚言語モデル(VLM)の内部設計までを、原理に沿って解説します。
土台となる埋め込みの考え方は 埋め込み(Embedding) を、CLIP が依拠する損失の数理は 対照学習の原理 を前提にすると、より深く理解できます。
CLIP:対照学習で作る共有埋め込み
CLIP(Contrastive Language-Image Pre-training)は、画像エンコーダ(ViT や ResNet)とテキストエンコーダ(Transformer)の2本立てです。両者は独立に符号化し、最後に各出力を共有空間へ線形投影して L2 正規化します。
image_emb = normalize(W_i · ImageEncoder(image)) # 形状 d
text_emb = normalize(W_t · TextEncoder(text)) # 形状 d
学習は、N 個の画像・テキスト対をミニバッチで集め、N×N の総当たり類似度行列を作ります。対角(正しい対)の類似度を上げ、非対角(無関係な対)を下げる——これが対照学習です。
logits[i][j] = (image_emb[i] · text_emb[j]) / temperature
# 行方向 softmax で正例 i==j を当てる損失 + 列方向 softmax の損失、の平均
ここで temperature(温度)は類似度のスケールを決める学習可能パラメータで、小さいほど分布が鋭くなり負例の区別が厳しくなります。重要なのは、この設計が画像とテキストを直接マッチさせる教師信号を一切持たない点です。ラベルの代わりに「Web 上の画像とその近傍テキスト(alt 文など)」の対応だけを使うため、数億規模の対を安価に集められます。
CLIP は分類器を学習しません。推論時はクラス名を「a photo of a {class}」のような文に展開してテキスト側を符号化し、画像埋め込みと最も近いクラス文を選ぶだけです。{class} の部分を差し替えれば任意のラベル集合に対応できるため、未知のクラスにもゼロショットで分類できます。これは共有空間に画像とテキストが同居しているからこそ成立します。
CLIP の埋め込みは検索・分類の土台として優秀ですが、文章を生成する能力はありません。画像について説明させたり質問に答えさせたりするには、生成器としての LLM と接続する必要があります。
早期融合 vs 後期融合
画像情報をどの段階でテキスト処理へ混ぜるかで、設計が大きく分かれます。
| 観点 | 早期融合(クロスアテンション型) | 後期融合(視覚トークン注入型) |
|---|---|---|
| 混ぜる場所 | LLM内部の各層にクロスアテンションを挿入 | 入力段で視覚トークンを言語トークン列に連結 |
| LLMの改変 | 層を追加・改造する必要がある | 本体は無改造のまま使える |
| 代表例 | Flamingo, Llama 3.2 Vision | LLaVA, BLIP-2, Qwen-VL系 |
| 長所 | 画像とテキストの相互作用が密 | 実装が単純で既存LLM資産を活用しやすい |
| 短所 | 学習・改造コストが高い | 視覚トークンが系列長を圧迫する |
近年は実装の単純さと既存 LLM の流用しやすさから、後期融合(視覚トークンを入力に差し込む方式)が主流です。以下ではこの方式を中心に、接続部の設計を見ていきます。
ビジョンエンコーダと LLM の接続
後期融合 VLM の典型パイプラインは次のとおりです。
画像 → ビジョンエンコーダ(例 CLIP-ViT)→ パッチ特徴列(n_patch × d_vision)
→ コネクタ(投影層 or Q-Former)→ 視覚トークン列(n_vis × d_llm)
→ 言語トークン列の先頭などに連結 → LLM が通常どおり自己回帰生成
核心はコネクタです。ビジョンエンコーダが出すパッチ特徴は、次元も意味の並びも LLM の単語埋め込み空間とは異なります。これを LLM が「単語と同じように」読める形へ橋渡しするのがコネクタの役割で、大きく2系統あります。
1. 線形 / MLP 投影(LLaVA 系)
最も単純なのは、各パッチ特徴を全結合層で LLM の隠れ次元へ写すだけの方式です。
visual_tokens = MLP(patch_features) # (n_patch × d_vision) → (n_patch × d_llm)
パッチ数がそのまま視覚トークン数になります(例:24×24 パッチなら 576 トークン)。実装が軽く、ビジョンエンコーダと LLM を凍結したまま投影層だけを学習させても高い性能が出るのが利点です。一方、画像のディテールが多いほどトークン数が増え、系列長を圧迫します。
2. Q-Former / リサンプラ(BLIP-2 系)
Q-Former(Querying Transformer)は、学習可能な少数のクエリベクトル(例 32 本)を用意し、それらがビジョンエンコーダの全パッチ特徴にクロスアテンションして情報を吸い上げる小型 Transformer です。
queries: 学習可能な (n_query × d) のベクトル列(n_query ≪ n_patch)
for each block:
queries = cross_attention(query=queries, key/value=patch_features)
queries = self_attention(queries)
visual_tokens = Projection(queries) # 出力は n_query 本に圧縮される
ここでのクロスモーダルアテンションが要点です。クエリ(テキスト寄りの空間)を Query、画像パッチを Key・Value とすることで、画像から「言語タスクに有用な情報」を選択的に抽出します。アテンションそのものの数理は Self-Attention の計算 と同じで、入力の出どころが異なるだけです。利点は、画像の解像度やパッチ数に関わらず視覚トークン数を固定できること——n_query 本に圧縮するので LLM 側の負荷が一定に保てます。
線形/MLP 投影は「情報を落とさず全パッチを渡す」素直な方式で、データと計算が潤沢なら高性能。Q-Former は「少数クエリへ圧縮する」ボトルネック設計で、視覚トークン数を抑えたい・長文脈と併用したい場面で効きます。近年は学習の単純さから投影系が好まれる一方、トークン削減が効くタスクでは圧縮系が選ばれる、という住み分けです。
解像度・パッチ・トークン化のトレードオフ
ビジョンエンコーダ(ViT)は画像を固定サイズのパッチに分割し、各パッチを1トークンとして埋め込みます。ここに本質的なトレードオフがあります。
- 入力解像度を上げると細部(小さな文字・表・遠くの物体)を捉えられるが、パッチ数 ∝ 解像度の二乗で増え、視覚トークンが急増する。
- アテンションは系列長の二乗で効くため、トークン増は LLM 側の計算量・メモリを直撃する。
固定低解像度(例 224×224)だと文書画像の文字が潰れ、固定高解像度だとトークンが膨れます。これを解くのが動的タイル分割です。
高解像度画像を複数タイル(例 448×448 ごと)に分割
→ 各タイルを独立にビジョンエンコーダへ
→ さらに全体の縮小版(サムネイル)も1枚加える
→ 全タイルの視覚トークンを連結して LLM へ
タイルごとに細部を保ちつつ、サムネイルで全体の構図を渡す設計です。画像の縦横比やサイズに応じてタイル数を可変にすることで、必要なところだけトークンを増やすことができます。多くの実装が、トークン爆発を抑えるため投影後にピクセルアンシャッフルや隣接パッチ結合でトークンを間引く処理も併用します。
解像度を倍にするとパッチ数は約4倍、アテンション計算は約16倍に膨らみます。OCR や図表理解では高解像度が効きますが、一般的な物体認識では中解像度で頭打ちになりがちです。タスクに対して過剰な解像度は、推論コストを押し上げるだけで精度に寄与しない場合があると理解しておくことが重要です。
学習の進め方
後期融合 VLM の学習は、ふつう段階的です。第1段階ではコネクタだけを学習し、ビジョンエンコーダと LLM は凍結します。大量の画像・キャプション対で、視覚特徴を LLM の語彙空間へ揃える「アライメント」を取る段階です。第2段階では指示チューニングとして、視覚 QA や対話形式のデータでコネクタと LLM(場合により LLM を LoRA などで部分的に)を学習し、画像について自然に応答できるようにします。
ビジョンエンコーダに CLIP 由来の重みを使うのは合理的です。CLIP のビジョンエンコーダはすでにテキストと整合した空間で訓練済みなので、LLM の言語空間へ橋渡しする距離が短く、アライメントが速く済むからです。LLM 側は LLM と Transformer の自己回帰生成をそのまま用い、入力の先頭に視覚トークンが差し込まれている点だけが通常のテキスト生成と異なります。
- CLIP の学習:2本の独立エンコーダ+共有空間への投影、
N×N類似度行列の対角を当てる対照損失、温度パラメータの役割。生成能力は持たない点。 - 早期 vs 後期融合:クロスアテンション挿入型(Flamingo 系)と視覚トークン注入型(LLaVA 系)の違い、後者が主流な理由。
- コネクタ2系統:線形/MLP 投影(パッチ数=トークン数)と Q-Former(少数クエリへクロスアテンションで圧縮、トークン数固定)。
- 解像度のトレードオフ:パッチ数は解像度の二乗、アテンションはさらにその二乗で効く。動的タイル分割の動機。
まとめ
マルチモーダル融合の骨子は、異なるモダリティを共通の意味空間へ写すことにあります。CLIP は2本のエンコーダと対照学習で画像・テキストを同じ空間に並べ、ゼロショット分類を可能にしました。生成までこなす VLM は、ビジョンエンコーダの出力をコネクタ(投影層か Q-Former)で LLM の語彙空間へ橋渡しし、画像を視覚トークンとして言語列に差し込みます。設計上の勘所は、(1) 融合を入力段で行う後期融合が主流であること、(2) コネクタが全パッチを渡すか少数クエリに圧縮するかでトークン数特性が変わること、(3) 解像度・パッチ数が視覚トークン数を決め、計算量とディテールのトレードオフを生むこと——この3点を押さえれば、各種 VLM のアーキテクチャ差分を一貫した視点で読み解けます。
AI/機械学習 Article
マルチモーダル融合:CLIP・視覚言語モデルの内部を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
マルチモーダル
比較で見る軸
難易度: advanced / カテゴリ: AI/機械学習 / タグ数: 5
導入後に効く点
現代のVLMはビジョンエンコーダの出力をLLMの語彙空間へ投影し、画像を「視覚トークン」として言語トークン列に差し込む後期融合が主流。接続には線形/MLP投影とQ-Formerの2系統がある。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- AI/機械学習
- タグ数
- 5
判断チェックリスト
- 自社の用途が「マルチモーダル / CLIP」に近いか確認する。
- 強みである「CLIPは画像とテキストを別エンコーダで符号化し、対のコサイン類似度を対照学習で揃えることで、両者を1つの共有埋め込み空間に写像する。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。