Vision Transformer — 画像をトークン列として読む
「画像は16×16の単語の集まりである」— ViT は画像をパッチに切ってトークン列に変換し、Transformer にそのまま流し込みます。CNN が半世紀かけて磨いた帰納バイアスを捨て、データ量で殴るこの発想が、なぜ・いつ勝つのか。そして CLIP・SAM・DINO が拓いた基盤モデル時代までを一気に見渡します。
1. 画像は「16×16の単語」 — パッチ埋め込み
Transformer の入力はトークン(ベクトル)の列です(Transformer 章参照)。画像をこの形に変換するために、ViT は画像を P×P 画素のパッチに格子状に切り分け、各パッチを1本のベクトルに平坦化して線形層 E で埋め込みます。224×224 の画像を 16×16 のパッチで切れば 196 トークン — ちょうど1つの文と同じ長さのトークン列です。
切り分けた瞬間に「どのパッチがどこにあったか」という空間情報が失われるため、位置埋め込み Epos を各トークンに加算します。さらに文の先頭に、画像全体の要約役となる学習可能な [CLS] トークンを連結します。下のデモでこの変形をステップ実行してください。
2. ViT は画像のどこを見ているか — Attention マップ
Self-Attention の重みを可視化すると、[CLS] トークンが各パッチにどれだけ注目しているかが分かります。実際の ViT で観察される典型的な傾向は次の2つです。
- 浅い層:ヘッドごとに近傍パッチを見る「局所的」な注意が多い(CNN の小さな受容野に似た挙動を学習で獲得している)。
- 深い層:ほぼ全ヘッドが画像全体・特に物体領域に注意を集める。層が進むほど「意味」で見るようになる。
下のデモは、この傾向を手設計で再現した模式図です。層スライダーとヘッド切替で、注意の広がり方の変化を確かめてください。
3. CNN との違い — 帰納バイアスとデータ量
CNN は「画像は局所的な構造の集まりで、パターンは平行移動しても同じ」という帰納バイアス(局所結合・重み共有)を構造に焼き込んでいます。これは少ないデータで効率よく学べる強力な事前知識ですが、同時に「遠く離れた画素同士の関係は深い層まで見えない」という制約でもあります。
ViT はこのバイアスをほぼ持ちません。第1層から全パッチ対を Self-Attention で見られる代わりに、「局所性が大事」ということすらデータから学ぶ必要があります。だから少データでは CNN に負け、巨大データ(JFT-300M など)で事前学習すると逆転する — これが ViT 原論文の核心的な観察です。
4. 基盤モデル時代のCV — CLIP・SAM・DINO
ViT がもたらした最大の変化は精度そのものより、「1つの巨大な事前学習モデルを、あらゆる視覚タスクの土台にする」という基盤モデル(foundation model)のパラダイムです。その転換点が CLIP でした。
CLIP(2021)は、4億組の「画像とその説明文」ペアを使い、画像エンコーダ(ViT)とテキストエンコーダを同じ埋め込み空間に対照学習で写像します。正しいペアのコサイン類似度を上げ、間違ったペアを下げる — それだけで、「クラス名を文章として埋め込み、一番近いものを選ぶ」ゼロショット分類が可能になります。ラベル固定の分類器という枠組みそのものが不要になったのです。
5. まとめ
- パッチ埋め込み:画像を P×P のパッチに切って線形埋め込み+位置埋め込み。以降は標準 Transformer。
- Attention の分化:浅い層は局所的、深い層は物体全体へ。CNN 的な局所性を学習で獲得する。
- 帰納バイアス vs データ:少データでは CNN、巨大データでは ViT。DeiT・Swin はその中間解。
- 基盤モデル時代:CLIP のゼロショット、SAM のプロンプト型分割、DINO の自己教師あり特徴。CV は「学習済みの巨大 ViT をどう使うか」の時代へ。