VLMとは?画像を理解する大規模言語モデル

画像を視覚特徴へ変換しConnectorでLLMへ接続して回答を生成するVLMの全体構造

画像を視覚特徴へ変換しConnectorでLLMへ接続して回答を生成するVLMの全体構造

VLM(Vision-Language Model:画像と言語を一緒に扱うmodel)は、画像を数値の特徴へ変換し、textとの関係を学習するmodelです。生成型VLMでは、その視覚特徴をLLM(Large Language Model:大規模言語model)が受け取れる形へ変換し、画像説明や質問への回答をtextとして生成します。

ただし、LLMがJPEGやpixelをそのまま「見ている」わけではありません。Vision Encoderが画像をvisual feature(視覚特徴)へ変え、Connectorが言語modelとのinterfaceを作り、LLMが視覚情報で条件付けされた次tokenを予測します。

3行で分かるVLM

  • Vision Encoderは画像をpatchなどの単位で処理し、複数の連続vectorへ変換します。
  • Connectorはvisual featureを圧縮または射影し、LLMへtokenとして連結するかCross-Attentionで参照させます。
  • VLMの自然な回答は視覚的事実の保証ではなく、解像度・training data・接続方式・言語priorによって誤認やhallucinationも起こります。

この記事では、Flamingo原論文BLIP-2原論文LLaVA原論文をもとに、VLMの共通構造と代表的な接続方式を整理します。

VLMは一つの固定architectureを指す言葉ではない

VLMは、visionとlanguageの関係を学ぶmodelの広い呼び名です。出力が必ず会話文になるとは限りません。

たとえばCLIPは、Image EncoderとText Encoderを別々に使い、画像と文章の類似度を計算します。これは広い意味でVLMですが、CLIP単体は自由形式の長文を生成しません。一方、LLaVAやFlamingoのような生成型VLMは、視覚情報でlanguage modelを条件付けし、captionや回答をautoregressive(直前までの出力を使って次を生成する方式)に生成します。

modelの種類 入力 主な出力 得意なこと 単体では担わないこと
画像分類model 画像 class score 定義済みclassの判定 自由形式の説明
CLIP型Dual Encoder 画像+text候補 類似度 検索、zero-shot分類 長文回答の生成
生成型VLM 画像+instruction text token列 caption、VQA、対話 pixel単位maskの保証
画像生成model textなど 画像 textからの画像合成 入力画像の事実確認

画像分類、CLIP型、生成型VLM、画像生成モデルの入力と出力の責任境界

この境界は重要です。「画像とtextを扱う」ことと「画像について会話できる」こと、「画像を生成できる」ことは別の能力です。

CLIP型のContrastive Learning(正しい画像・文章pairを近づけ、誤ったpairを離す学習)については、CLIPとは?画像とテキストを同じ空間で扱う技術で詳しく説明しています。

生成型VLMは3つのcomponentで考える

現在よく使われる生成型VLMは、概念的に次の3部分へ分けると理解しやすくなります。

  1. Vision Encoder:pixelから位置を持つvisual featureを作る
  2. Connector:vision側の表現をlanguage側のinterfaceへ変換する
  3. Language Model:instructionとvisual informationを使ってtextを生成する

画像、Vision Encoder、Connector、LLMを通って回答になる生成型VLMの情報経路

Vision EncoderにはViT(Vision Transformer)がよく使われます。ViTは画像をpatchへ分け、各領域をvectorとして処理します。詳しいpatch化は、前回のViTとは?画像をパッチとして読むTransformerを参照してください。

ConnectorはProjector、Adapter、Resampler、Q-Formerなど、modelによって名前と内部構造が異なります。単純なLinear layerの場合もあれば、learned queryとCross-Attentionを持つTransformerの場合もあります。

Language Modelは、受け取った視覚表現とtext promptを条件に次tokenを予測します。VLM全体を理解する鍵は、「Connectorがどのshapeを作り、LLMのどこへ視覚情報を入れるか」です。

336×336画像をvisual tokenへ変えるshapeを追う

具体例として、336×336のRGB画像をpatch size 14のViTへ入力します。ここでは仕組みを示すため、Vision Encoderの出力dimensionを\(D_v=1024\)、LLMのembedding dimensionを\(D_l=4096\)と仮定します。特定modelの固定値ではありません。

patch gridの一辺は次のとおりです。

\[\frac{336}{14}=24\]

したがって、patch token数\(N\)は576です。

\[N=24\times24=576\]

Vision Encoderが各patchを1024次元のfeatureへ変換すると、出力shapeは\(576\times1024\)になります。Linear Projectorのweightを\(W\in\mathbb{R}^{1024\times4096}\)とすれば、LLM側と同じdimensionへ射影できます。

\[H_v=Z_vW\]
\[Z_v\in\mathbb{R}^{576\times1024} \rightarrow H_v\in\mathbb{R}^{576\times4096}\]

336×336画像を576個の視覚特徴へ変換しProjectorでLLM次元へ射影するtensor shape

promptが32 text tokensなら、単純な連結型ではLLMへ入るsequenceは608 tokensです。

\[T=576+32=608\]

実際にはClass Tokenを使うか、どの層のfeatureを使うか、patchをmergeするか、画像をtileへ分けるかでtoken数は変わります。「336pxだから必ず576 visual tokens」と一般化せず、preprocessorとmodel configを確認する必要があります。

Connectorはdimensionを合わせるだけではない

Linear Projectorだけを見ると、Connectorは\(D_v\)から\(D_l\)へのshape変換に見えます。しかし、randomなmatrixでdimensionを合わせても、LLMはvisual vectorの意味を読めません。

VLMのtrainingでは、画像とcaption、画像と質問・回答などのpairを使い、Connector出力がLLMの生成に役立つようweightを更新します。ここで学ぶのがmodality alignment(異なる種類のdata表現を対応付けること)です。

Connectorが行う次元の整合と学習による画像言語の意味対応の違い

次の二つを区別すると、Connectorの役割を正確に説明できます。

  • dimension alignment:matrix multiplicationなどでvector幅を合わせる
  • semantic alignment:画像中のpatternがどの言語生成へ役立つかをdataから学ぶ

LLaVA原論文は、最初のfeature alignment段階でVision EncoderとLLMを凍結し、projection matrixだけを学習しました。これは「LLMに対応するvisual tokenizerを学ぶ」と捉えられます。ただし、BPEのように離散IDへ変換するtext tokenizerとは異なり、出力は連続vectorです。

LLaVA型はvisual tokenをtext sequenceへ連結する

original LLaVAは、CLIPのVision Encoderから得たgrid featureへtrainableなprojection matrixを適用し、LLMのword embeddingと同じdimensionへ変換します。そのvisual token列をinstruction tokenと一緒にLLMへ入力します。

概念的なsequenceは次のようになります。

<BOS> [IMG_1] [IMG_2] ... [IMG_N] USER: 画像には何がある? ASSISTANT: 猫が...

[IMG_i]は通常、語彙表にある「画像」という文字tokenではありません。Projectorが出力した連続vectorを表す説明上の記号です。

visual tokenとinstructionとanswerを一列に並べ、回答位置だけでlossを計算する連結型VLM

decoder-only LLMではCausal Self-Attention(未来tokenを見ないようmaskしたAttention)を使います。answer tokenは、それより前にあるvisual tokens、instruction、過去のanswer tokensを参照できます。

この方式は、既存LLMのsequence処理へvisual tokensを自然に組み込めるのが長所です。一方、画像tokenもLLMのcontextを占めます。高解像度、複数画像、動画で\(N\)が増えると、Attention計算とKV Cache(推論時に過去のKey/Valueを保存するmemory)が増えます。

Flamingo型はCross-Attentionで視覚情報を注入する

Flamingoは、画像・動画とtextが交互に現れるpromptを扱うために、二つの接続機構を使います。

最初に、凍結したVision Encoderの可変長featureをPerceiver Resamplerへ入れます。Perceiver Resamplerはlearned latent queryを使い、画像や動画ごとに固定64個のvisual tokenを出力します。大量のspatial・temporal featureを固定長へ圧縮するため、後段のCross-Attention costを制御できます。

次に、凍結したlanguage modelのblock間へ、新しいGated Cross-Attention層を挿入します。language hidden stateがQuery、visual tokensがKeyとValueになります。

\[\operatorname{CrossAttention}(Q_t,K_v,V_v) =\operatorname{softmax}\left(\frac{Q_tK_v^{\mathsf T}}{\sqrt{d_k}}\right)V_v\]

Flamingoで可変長の画像動画特徴を64 tokenへ圧縮しGated Cross-AttentionでLLMへ渡す構造

追加層の出力にはlearned scalar \(\alpha\)を使ったgateが付きます。

\[h’=h+\tanh(\alpha)\,f_{xattn}(h,H_v)\]

\(\alpha=0\)で初期化すると、training開始時の追加出力は0です。凍結済みLMの挙動を最初は保ち、visual conditionの影響を徐々に学べます。

Flamingoはtext tokenごとに、直前に現れたimageのvisual tokensをCross-Attentionで直接参照するmaskを使いました。過去の画像情報はlanguage streamのSelf-Attentionを通じて残るため、複数のimage-text pairを並べたfew-shot promptを扱えます。

BLIP-2はQ-Formerを情報ボトルネックにする

BLIP-2は、凍結したImage Encoderと凍結したLLMの間にQ-Former(Querying Transformer:学習可能なQueryで必要な視覚情報を抽出するTransformer)を置きます。

原論文の構成では32個のlearned queryを使います。各queryはCross-AttentionでImage Encoderのfeatureを参照し、入力解像度によらない32本の出力を作ります。

\[257\times1024 \rightarrow \operatorname{Q\text{-}Former} \rightarrow 32\times768\]

これはBLIP-2原論文にあるViT-L/14のshape例です。すべてのVLMやBLIP-2派生modelが同じ値を使うわけではありません。

32個の学習Queryが画像特徴へCross-Attentionし固定長表現をLLMへ渡すBLIP-2 Q-Former

BLIP-2はQ-Formerを二段階でpre-trainingします。

  1. Vision-Language Representation Learning:image-text contrastive、image-grounded text generation、image-text matchingで、言語に関係する視覚情報をqueryへ集める
  2. Vision-to-Language Generative Learning:Q-Former出力をLLM dimensionへ射影し、soft visual promptとして凍結LLMへ読ませる

固定数queryは、元のpatch数が増えてもLLMへ渡すtoken数を抑えられる長所があります。反対に、細かな文字や多数の物体などを少数queryへ圧縮すると、taskに必要な情報が落ちる可能性があります。効率と情報保持のtrade-offです。

代表的なVLM architectureを比較する

VLMをmodel名だけで覚えるより、「どこでvisionとlanguageを融合するか」で整理すると見通しが良くなります。

代表例 vision-language接続 LLMへの入力 主な長所 主なcost・制約
CLIP 二つのEncoder出力を共有Embedding空間で比較 生成LLMなし 検索や候補比較を効率化 自由形式textを単体生成しない
original LLaVA Linear Projector visual tokensをtext tokensと連結 構成が単純で既存decoder-only LLMを活用しやすい visual tokenがcontextとAttention costを使う
Flamingo Perceiver Resampler+Gated Cross-Attention language hidden stateがvisual K/Vを参照 複数画像・動画とtextのinterleaveを扱える LLM内部へ追加layerを挿入する
BLIP-2 Q-Former+FC projection 固定数query出力をsoft prompt化 凍結したunimodal modelを効率的に再利用 query bottleneckで情報を選別する
PaLI ViT+encoder-decoder language model encoder側でvisual・text inputを処理 taskをtext生成interfaceへ統一しやすい decoder-only連結型とは実装構造が異なる

Dual Encoder、visual token連結、Cross-Attention、Query bottleneckの融合位置比較

同じ「Projector」という語でも、単一Linear、2層MLP、token resampler、Cross-Attention moduleではparameter数も情報圧縮も異なります。checkpointを選ぶときはmodel名だけでなく、Vision Encoder、preprocessor、Connector、LLMを一組として確認します。

VLMの学習は複数段階に分かれる

生成型VLMは、完成済みのImage EncoderとLLMを単に配線するだけでは動きません。代表的には次の段階を組み合わせます。

画像と言語の表現を対応付ける

image-caption pairなどを使い、どのvisual featureがどのtextへ関係するかを学びます。LLaVAのfeature alignment、BLIP-2の第1段階、CLIPのcontrastive pre-trainingはobjectiveと構造が異なりますが、vision-languageの対応を作る点が共通します。

視覚条件付きtext生成を学ぶ

画像とcaption、question-answer pairを使い、visual representationで条件付けしたtextを生成します。Connectorだけを更新する場合も、LLMやVision Encoderまで更新する場合もあります。

instructionに従う形式を学ぶ

「画像を説明して」「表の最大値は?」「二つの画像の違いは?」のようなinstructionとanswerのpairでfine-tuningします。ここでは視覚認識だけでなく、要求された形式・粒度で答えるbehaviorも学びます。

必要に応じてpreference alignmentを行う

複数回答の選好や安全性dataを使い、役立ち方や拒否behaviorを調整する場合があります。ただし、alignmentでVision Encoderの解像度不足や失われたvisual detailが復元されるわけではありません。

Vision EncoderとLLMの再利用から画像言語対応、生成、指示追従へ進むVLM学習段階

どのcomponentをfreeze(weightを更新しないこと)するかで、costと適応範囲が変わります。

更新範囲 training cost 長所 注意点
Connectorのみ 小さい 既存componentを保ちやすい domain固有の視覚特徴へ適応しにくい
Connector+LLM 中〜大 回答形式と視覚利用を同時に調整 言語能力の変化、memory増加
Vision Encoder+Connector+LLM 大きい end-to-endでtaskへ適応可能 data量、計算資源、catastrophic forgettingに注意

instruction tuningの一般的な考え方は、指示チューニングとは?ChatGPTらしさの作り方で解説しています。

回答生成はvisual condition付き次token予測

画像\(x\)、instruction tokens \(q\)、answer tokens \(y_1,\ldots,y_L\)を考えます。生成型VLMは概念的に次の条件付き確率を最大化します。

\[p(y\mid x,q) =\prod_{\ell=1}^{L} p(y_\ell\mid y_{<\ell},q,x)\]

training lossはanswer tokenのnegative log-likelihoodとして書けます。

\[\mathcal{L}_{\mathrm{answer}} =-\sum_{\ell=1}^{L} \log p(y_\ell\mid y_{<\ell},q,x)\]

実装ではsystem messageやuser instructionを入力条件として与え、answer部分だけをloss対象にすることがあります。modelやtraining recipeによってmask方針は異なるため、すべてのVLMでprompt tokensを必ずmaskすると決めつけられません。

重要なのは、画像を追加しても生成原理が「次token予測」である点です。画像は、次token確率を変えるconditionとして働きます。

VLMでできることと出力の責任境界

生成型VLMは、多くの視覚taskをtext interfaceへ変換できます。

  • Image Captioning:画像全体を文章で説明する
  • VQA(Visual Question Answering):画像について質問へ答える
  • OCR支援・document理解:画像内の文字、表、layoutを読み取り要約する
  • chart理解:軸、凡例、値の関係をtextで説明する
  • multi-image reasoning:複数画像を比較し、変化や共通点を述べる
  • video理解:frame列から出来事を説明する

ただし、textで座標らしい値を出せることと、object detectorのように位置が校正されていることは同じではありません。pixel単位segmentation、厳密な寸法測定、医療画像の確定診断などには、専用model、tool、domain評価、人間確認が必要です。

またOCR能力は、Vision Encoderの解像度、patch size、tiling、training dataに強く依存します。小さな文字が入力時に潰れれば、LLMが後段で正確に復元することはできません。

高解像度・複数画像ではvisual token costが増える

連結型VLMでtext token数を\(T_t\)、1画像あたりのvisual token数を\(T_v\)、画像数を\(M\)とすると、単純な総sequence長は次のようになります。

\[T_{\mathrm{all}}=T_t+M T_v\]

標準Self-Attentionのscore matrixはおおむね\(T_{\mathrm{all}}^2\)に比例して増えます。visual tokenが4倍になれば、text長が十分小さい条件ではAttention pairは約16倍です。

ResamplerやQ-Formerで固定数へ圧縮すればLLM側のcostを抑えられます。一方、細部を残すにはtokenを増やしたくなります。高解像度入力では、次の設計を組み合わせます。

  • patchを細かくする
  • 画像を複数tileへ分割する
  • 近いtokenをmergeする
  • learned queryで必要情報を固定数へ圧縮する
  • Cross-Attentionでlanguage streamとvisual memoryを分ける

最適解はtaskで変わります。自然画像captionでは強い圧縮が機能しても、小さな文字を読むdocument taskでは情報損失が問題になることがあります。

VLMがhallucinationする理由

VLMは、visual evidence(画像から得た根拠)とlanguage prior(言語modelが学習済みのもっともらしさ)の両方で次tokenを選びます。画像が曖昧、低解像度、domain外、またはConnectorが必要情報を渡せない場合、language priorの影響が相対的に強くなります。

たとえば画像に見えない物体を「一般的な場面ならありそう」という理由で補ったり、読めない小文字を自然な語へ置き換えたりします。文章として流暢でも、画像にground(根拠付け)されているとは限りません。

画像の視覚証拠が弱いときに言語priorが強まり根拠のない回答が生じるVLM hallucination

hallucinationは一つのbenchmark scoreだけでは把握しにくいため、利用taskに合わせて分けて評価します。

評価slice 確認する失敗
Object existence 存在しない物体を挙げないか
Counting 個数を正確に数えられるか
Spatial relation 左右、上下、包含関係を取り違えないか
OCR 小さい文字、回転文字、表を誤読しないか
Attribute 色、材質、状態を取り違えないか
Abstention 判別不能なとき不確実性を示せるか
Domain shift 医療、工業、衛星など学習分布外で崩れないか

自然な説明文の評価と、visual groundingの評価を分けることが重要です。

VLMを選ぶときの確認項目

判断軸 確認すること trade-off
Task caption、VQA、OCR、chart、video、retrieval 得意taskと出力形式が異なる
Vision Encoder architecture、input resolution、patch size 高解像度ほどdetailとcostが増える
Connector Linear、MLP、Resampler、Q-Former、Cross-Attention 単純さ、表現力、圧縮率が異なる
Visual token policy token数、tiling、merge、複数画像上限 detailとlatency・memoryの交換
Language backbone decoder-onlyかencoder-decoderか、context長 生成能力と実行資源に影響する
Training alignment data、instruction data、更新component domain適応とforgettingの交換
Evaluation task別・解像度別・domain別slice 平均scoreだけでは弱点が隠れる
License・data model、code、weight、datasetの利用条件 公開・商用利用条件が別々の場合がある

local実行では、LLM weightだけでなくVision EncoderとConnectorの対応も必要です。異なるcheckpointのProjectorを適当に組み合わせても、dimensionが一致するだけではsemantic alignmentが一致しません。

まとめ

VLMは、画像をvisual featureへ変え、language modelへ接続して、visionとlanguageにまたがるtaskを解くmodelです。

  • Vision Encoderがpixelを位置付きfeatureへ変換する
  • Connectorがdimension、token数、fusion位置を調整し、trainingで意味対応を学ぶ
  • LLMがvisual conditionとinstructionから次tokenを生成する
  • LLaVA型はvisual token連結、Flamingo型はResampler+Cross-Attention、BLIP-2型はQ-Formerという違いがある
  • 高解像度と複数画像は情報を増やす一方、token costを増やす
  • 流暢な回答とvisual groundingは別に評価する

VLMを「画像も入力できるLLM」とだけ捉えると、Vision EncoderとConnectorで起きる情報圧縮が見えません。どの視覚情報を何本のvectorへし、LLMのどこへ渡すかがarchitecture上の中心です。

次回はLLaVAを題材に、Visual Instruction Tuningで画像・instruction・answer dataをどう作り、feature alignmentとinstruction followingをどう分けて学ぶかを詳しく見ていきます。

参考文献

コメント

タイトルとURLをコピーしました