
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
- VLMは一つの固定architectureを指す言葉ではない
- 生成型VLMは3つのcomponentで考える
- 336×336画像をvisual tokenへ変えるshapeを追う
- Connectorはdimensionを合わせるだけではない
- LLaVA型はvisual tokenをtext sequenceへ連結する
- Flamingo型はCross-Attentionで視覚情報を注入する
- BLIP-2はQ-Formerを情報ボトルネックにする
- 代表的なVLM architectureを比較する
- VLMの学習は複数段階に分かれる
- 回答生成はvisual condition付き次token予測
- VLMでできることと出力の責任境界
- 高解像度・複数画像ではvisual token costが増える
- VLMがhallucinationする理由
- VLMを選ぶときの確認項目
- まとめ
- 参考文献
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からの画像合成 | 入力画像の事実確認 |

この境界は重要です。「画像とtextを扱う」ことと「画像について会話できる」こと、「画像を生成できる」ことは別の能力です。
CLIP型のContrastive Learning(正しい画像・文章pairを近づけ、誤ったpairを離す学習)については、CLIPとは?画像とテキストを同じ空間で扱う技術で詳しく説明しています。
生成型VLMは3つのcomponentで考える
現在よく使われる生成型VLMは、概念的に次の3部分へ分けると理解しやすくなります。
- Vision Encoder:pixelから位置を持つvisual featureを作る
- Connector:vision側の表現をlanguage側のinterfaceへ変換する
- Language Model:instructionとvisual informationを使ってtextを生成する

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の一辺は次のとおりです。
したがって、patch token数\(N\)は576です。
Vision Encoderが各patchを1024次元のfeatureへ変換すると、出力shapeは\(576\times1024\)になります。Linear Projectorのweightを\(W\in\mathbb{R}^{1024\times4096}\)とすれば、LLM側と同じdimensionへ射影できます。

promptが32 text tokensなら、単純な連結型ではLLMへ入るsequenceは608 tokensです。
実際には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の役割を正確に説明できます。
- 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を表す説明上の記号です。

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になります。

追加層の出力にはlearned scalar \(\alpha\)を使ったgateが付きます。
\(\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本の出力を作ります。
これはBLIP-2原論文にあるViT-L/14のshape例です。すべてのVLMやBLIP-2派生modelが同じ値を使うわけではありません。

BLIP-2はQ-Formerを二段階でpre-trainingします。
- Vision-Language Representation Learning:image-text contrastive、image-grounded text generation、image-text matchingで、言語に関係する視覚情報をqueryへ集める
- 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連結型とは実装構造が異なる |

同じ「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が復元されるわけではありません。

どの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は概念的に次の条件付き確率を最大化します。
training lossはanswer tokenのnegative log-likelihoodとして書けます。
実装では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長は次のようになります。
標準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(根拠付け)されているとは限りません。

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をどう分けて学ぶかを詳しく見ていきます。



コメント