ステータス: ドラフト(2026-10-13)、一部実測。 例はノートPCのCPUで直接動かした値です(
code/07_vit.py, 1秒以内)。論文の数値は原文を開いて条件とともに転記し、ハードウェアはグレードで記載しました。 執筆ルール: 実測データが基本であり、測れなかったものは「未実測」と表記します。
目次
- 1. アテンション: すべてのペアの関係を見る
- 2. ViT: 画像をパッチの文章にする
- 3. 解像度のコスト
- 4. なぜデータが多く必要なのか
- 5. DeiT: ImageNetだけで学習する
- 6. 階層構造への回帰: Swin、Hiera
- 7. 限界と私たちのプロジェクト
- 参考文献
1. アテンション: すべてのペアの関係を見る
Transformer(2017)は翻訳のために作られたモデルです。コアとなる演算は 自己注意です。文章の単語ごとに3つのベクトルを作ります。
- クエリ(Q): 「私は何を探しているのか」
- キー(K): 「私はどのような情報を持っているのか」
- バリュー(V): 「私を選べばこれを渡す」
単語iのクエリと単語jのキーの内積を取ることで「iがjをどれだけ見るか」を決め、その割合でバリューを混ぜ合わせます。
Attention(Q, K, V) = softmax( Q·Kᵀ / √d_k ) · V
√d_kで割る理由について論文では次のように説明しています。次元d_kが大きいと内積の値が大きくなり(成分の平均が0、分散が1の場合、内積の分散はd_k)、ソフトマックスが一方に偏ることで勾配が非常に小さくなります。割ることで分散を1のあたりに戻します。
畳み込みと比較すると違いは明確です。畳み込みの出力の1マスは近傍の3×3しか見ておらず、遠くを見るには層を重ねる必要がありました(パート1の受容野)。アテンションは 最初の層からすべての位置を見ます。 誰を見るのかは固定された窓ではなく、データ(Q・K)が決定します。
2. ViT: 画像をパッチの文章にする
DosovitskiyらによるViTは画像を文章のように扱います。
- 224×224の画像を 16×16のパッチに分割します。14×14 = 196個のパッチになります。
- 1つのパッチ(16×16×3 = 768個の数値)を展開して 線形射影によりD次元のベクトル(トークン)に変換します。
- 先頭に学習する CLSトークンを1つ追加します。最後の層でこのトークンの出力を画像全体の表現として用いて分類を行います。
- 各トークンに 位置埋め込み(学習するベクトル)を加算します。
- 標準的なTransformerエンコーダー(自己注意 + MLP、それぞれ残差結合と層正規化を持つ)をL層積み重ねます。
| モデル | 層 | 隠れ次元 D | MLP | ヘッド | パラメータ数 |
|---|---|---|---|---|---|
| ViT-Base | 12 | 768 | 3072 | 12 | 8,600万 |
| ViT-Large | 24 | 1024 | 4096 | 16 | 3億700万 |
| ViT-Huge | 32 | 1280 | 5120 | 16 | 6億3,200万 |
名称の「/16」、「/14」はパッチサイズです。パート9のSAMが使用している画像エンコーダーがこのViT-Huge(パッチ16)です。
やってみる 1: パッチ + 線形射影 = ストライド16の畳み込み
パッチに切り分けてから行列を掛け合わせる処理と、16×16のフィルターをストライド16でスライドさせる畳み込みは同一の計算になります。同一の重みを用いて2つの方法で計算し比較しました(実測)。
224×224 → 패치 196개(14×14), 패치 하나 768개 숫자 → 64차원 토큰
「잘라서 선형 변환」과 「보폭 16 합성곱」의 최대 차 2.7e-15
違いは浮動小数点数の丸め誤差のみです。実際の実装でもこの部分は畳み込みの1層として組まれることがほとんどです。ViTの最初の層は「ウィンドウが重ならない非常に大きな畳み込み」であり、畳み込みらしい部分はそこまでです。
やってみる 2: 位置埋め込みがなければ順序が分からない
自己注意はトークンの 順序を考慮しません。 入力トークンをシャッフルすると出力も同じようにシャッフルされるだけです(置換同変性)。そのため、画像の左上のパッチと右下のパッチを入れ替えてもモデルは気づきません(実測)。
토큰 순서를 섞어 넣은 출력 == 원래 출력을 같은 순서로 섞은 것: 최대 차 1.3e-15
위치 임베딩을 더하면 같은 패치를 섞었을 때 출력이 달라진다: 상대 차 0.28
このため位置埋め込みが必要になります。ViT論文の実験(ViT-B/16、ImageNetの5枚ずつの線形評価)において、位置埋め込みがない場合は0.614、1D学習済み埋め込みは0.642、2D埋め込みは0.640、相対位置は0.640でした。 あるかないかでは大きな差があり、どのような種類であるかにはほとんど差がありませんでした。 パッチレベル(14×14)においては、1Dの番号を与えるだけでもモデルが2Dの配置を自ら学習できることを意味しています。
3. 解像度のコスト
アテンションはすべてのトークンのペアを見るため、コストはトークン数Nの 二乗になります(実測計算)。
| 入力の一辺 | トークン数 N | アテンション行列 N² | 224px 比 |
|---|---|---|---|
| 224 | 196 | 38,416 | 1.0倍 |
| 384 | 576 | 331,776 | 8.6倍 |
| 512 | 1,024 | 1,048,576 | 27.3倍 |
| 1024 | 4,096 | 16,777,216 | 436.7倍 |
SAM は 1024×1024 を入力します。そのため SAM の ViT-H はほとんどの層で 14×14 ウインドウ内でのみ アテンションを行い、グローバルアテンションは 4 つの層にのみ配置します(第 9 回)。解像度が重要なタスクに ViT を使用するには、このような妥協が必要です。
4. なぜ多くのデータが必要なのか
ViT 論文の最も重要な結果は、精度の数値ではなく データサイズによる逆転です。
- ImageNet-1k(約 130 万枚)のみで事前学習した場合、大きな ViT は ResNet(BiT)に劣り、ViT-Large は ViT-Base にも劣っていました。
- ImageNet-21k(約 1,400 万枚)では、Large と Base が同等になりました。
- JFT-300M(約 3 億枚)になってようやく大型モデルの利点がすべて発揮され、ViT が ResNet を超えました。
| モデル(事前学習データ) | ImageNet top-1 | 事前学習コスト(TPUv3 コア・日) |
|---|---|---|
| ViT-H/14(JFT-300M) | 88.55% | 2,500 |
| ViT-L/16(JFT-300M) | 87.76% | 680 |
| ViT-L/16(ImageNet-21k) | 85.30% | 230 |
| BiT-L(ResNet152×4, JFT-300M) | 87.54% | 9,900 |
| Noisy Student(EfficientNet-L2) | 88.4–88.5% | 12,300 |
(論文の表 2。ViT-H/14 は 518px、ViT-L/16 は 512px でファインチューニング。)
論文ではその理由を 帰納バイアスで説明しています。畳み込みは「近い画素同士の関係が深い(局所性)」と「同じ模様はどこでも同じである(移動等変性)」を構造として持って生まれます(第 1 回)。ViT でその性質を持っているのはパッチ内の MLP のみであり、セルフアテンションはグローバルです。そのため、「近いパッチをより多く見ろ」というルールを データから自ら学ぶ必要が あり、データが少ないと、そのルールを学ぶ前に学習データを暗記してしまいます。データが十分であれば、逆にその自由度が利点となります。構造によって強制されないため、データに合ったより良いルールを見つけることができます。
実際に学習された ViT を詳しく見ると、 最下層においても 一部のヘッドは画像全体を見渡し、他のヘッドは近傍のみを見るなど、層が深くなるにつれて見る距離が長くなっていました(論文セクション 4.5)。畳み込みのように局所的に見るヘッドを自ら作り出したと言えます。
コスト面も興味深いです。上の表で、ViT-H/14 は BiT-L より高精度でありながら、事前学習コストは約 4 分の 1 でした。データが十分であれば、トランスフォーマーは計算効率の面でも有利でした。
5. DeiT: ImageNet のみでの学習
大半の人は 3 億枚の非公開データを使用できません。Touvron らの DeiT(2021)は、 ImageNet-1k のみで ViT をうまく学習する方法を示しました。鍵は 2 つあります。
- 強力なデータ拡張と正則化。 RandAugment、mixup、CutMix、Random Erasing、確率的深さ(Stochastic Depth)、Repeat Augmentation をすべて使用します。1 つずつ除外した実験(DeiT-B、224px)では、mixup と CutMix を同時に外すと 81.8% から 75.8% へ、Repeat Augmentation を外すと 76.5% へ低下し、Random Erasing や確率的深さを外すと学習自体が失敗しました。データから学ぶべき帰納バイアスを、データを水増しして教え込むようなものです。
- 蒸留トークン。 CLS トークンの隣に、「教師モデルの答えを真似る」トークンをもう 1 つ配置します。教師は畳み込みネットワーク(RegNetY-16GF、82.9%)です。畳み込みの帰納バイアスを、教師の答えを通じて継承していると見なすことができます。
| モデル(ImageNet-1k のみ) | 224px | 384px |
|---|---|---|
| DeiT-B | 81.8% | 83.1% |
| DeiT-B + 蒸留 | 83.4% | 84.5% |
学習は 8 基の GPU を搭載した 1 台のサーバーで 2〜3 日でした(300 エポックで 53 時間)。論文の別の箇所には「4 基の GPU で 3 日」という表現もあり、原文内で条件が食い違っています。
6. 階層構造への回帰: Swin、Hiera
ViT は最初から最後まで 14×14 という単一の解像度です。検出やセグメンテーションのように多様なサイズの物体を扱うタスクでは、畳み込みの ピラミッド(高解像度 → 低解像度)が恋しくなりました。
- Swin Transformer(2021): 小さなウインドウ内でのみアテンションを行い、層ごとにウインドウを半マス ずらして ウインドウ間の情報を混合します。コストが画像サイズに対して 線形になり、ステージごとにトークンを結合してピラミッドを作成します。COCO test-dev ボックス AP は 58.7、ADE20K セグメンテーション mIoU は 53.5 でした。
- Hiera(2023): 階層型 ViT に付随していたパーツ(相対位置バイアス、畳み込み、重なり合うプーリングなど)をすべて取り除き、代わりに強力な MAE 事前学習(画像の一部を隠して復元する)によってその役割を学習させました。精度を維持しながら高速化されました(Hiera-L は比較対象の MViTv2-L と比べて 1 秒あたりのスループットが約 2.4 倍、データセンター GPU・FP16)。Hiera-H は ImageNet-1k で 86.9% です。 SAM 2 の画像エンコーダーは Hiera です(第 10 回)。
MAE のような自己教師あり事前学習の原理については、姉妹シリーズ(自己教師あり学習・動画・姿勢・スポーツ)で取り上げます。
7. 限界と私たちのプロジェクト
- データと計算量。 帰納バイアスが弱い分、大規模なデータや強力なデータ拡張・事前学習が必要です。
- 解像度のコスト。 N² のコストがかかるため、高解像度にはウインドウアテンションのような妥協が必要です。
- 小さな物体。 16×16 のパッチ 1 つよりも小さな物体は、1 つのトークンの中に埋もれてしまいます。モデルへの入力において直径 3px の卓球のボールは、パッチの 1% にも満ちません。
そのため、TT Score では役割が分かれています。 ボールの検出は畳み込み(HRNet 系), 卓球台のセグメンテーションはトランスフォーマー(SAM 2.1 の Hiera) です。卓球台は大きくシンプルであり、試合開始時に一度見つければよいため重いトランスフォーマーを使用しても問題ありませんが、ボールは小さくフレームごとに検出する必要があるため、軽くて局所的な畳み込みが適しています(TT Score モデル解剖編 第 1 回)。
次の記事は、Transformerで検出を書き直したDETRです。アンカーもNMSもありません。
TTの一言。 パズルのピースの順番を混ぜても、位置埋め込みがなければモデルは気づきません。画像を用紙のピースの山として見るわけです。番号札を付けてこそパズルが組み合わされます。
参考文献
- Vaswani, A. et al. (2017). Attention Is All You Need. NeurIPS 2017. https://arxiv.org/abs/1706.03762
- Dosovitskiy, A. et al. (2021). An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale. ICLR 2021. https://arxiv.org/abs/2010.11929
- Touvron, H. et al. (2021). Training data-efficient image transformers & distillation through attention. ICML 2021. https://arxiv.org/abs/2012.12877
- Liu, Z. et al. (2021). Swin Transformer: Hierarchical Vision Transformer using Shifted Windows. ICCV 2021. https://arxiv.org/abs/2103.14030
- Ryali, C. et al. (2023). Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles. ICML 2023. https://arxiv.org/abs/2306.00989
- サンプルコードと出力: このフォルダの
code/07_vit.py,code/07_vit.out.txt