Tensor Core、Triton、残差ネットワーク、Vision Transformer

2015 年から現在までに、ディープラーニングは手作業で調整された C++ GPU コードと畳み込みネットワークから、ハードウェア加速された行列エンジンと Transformer アーキテクチャへと進化しました。これら 3 つのマイルストーンが、現代の AI モデルの設計とスケーリングの方法を定義しています。
1. 現代の CUDA の進化:Tensor Core と OpenAI Triton
2012 年、Alex Krizhevsky は低レベルの CUDA C++(cuda-convnet)を書き、標準的な CUDA コア上で個々の浮動小数点演算を計算しました。今日、ディープラーニングは専用の行列ハードウェアと高レベルコンパイラに依存しています。
- CUDA コアから Tensor Core へ。従来の CUDA コアは 1 クロックサイクルに 1 回のスカラー乗算と加算を実行します。Volta アーキテクチャ(2017 年)以降、NVIDIA は Tensor Core を導入し、小さな行列全体(4×4 や 16×16 のブロックなど)を 1 クロックサイクルで乗算できるようにしました。現代の Tensor Core は FP16、BF16、FP8 などの混合精度フォーマットを使い、行列乗算を桁違いに高速化します。
- cuDNN と自動カーネル選択。研究者がカスタムの C++ 畳み込みを書く代わりに、NVIDIA の cuDNN ライブラリには現在、数百のプリコンパイル済みアセンブリカーネルが含まれています。実行時に、PyTorch などのフレームワークが実際のテンソル形状に対して異なるアルゴリズムをベンチマークし、最速の Tensor Core ルーチンを自動的に選択します。
- OpenAI Triton(Python ベースの GPU プログラミング)。生の CUDA C++ を書くには、スレッドインデックス、共有メモリのバンクコンフリクト、ワープ同期を手動で管理する必要があります。OpenAI がリリースした Triton を使えば、研究者は高性能な GPU カーネルを Python で直接書くことができます。ブロックレベル(データのタイル)で演算を定義すれば、Triton コンパイラがメモリコアレッシング、共有メモリのタイル化、Tensor Core のスケジューリングを自動的に処理し、しばしば手調整の CUDA C++ に匹敵するか、それを上回る性能を発揮します。
2. ResNet のスキップ接続と逆伝播の流れ
ResNet(2015 年)以前は、約 20 層を超える畳み込み層を積み重ねると訓練誤差が急増しました。勾配が数十の乗算ステップを逆向きにたどる間に、ゼロに向かって縮小(勾配消失)するか、不安定になっていたのです。
- 生出力ではなく残差を学習する。標準的なネットワークブロックでは、積み重ねられた層が入力 x からの直接写像 H(x) を学習しようとします。ResNet はスキップ接続(恒等ショートカット)を導入し、元の入力 x をブロックの出力にそのまま加えます:
y=F(x)+x
ここで、F(x) は積み重ねられた畳み込み層を表します。これらの層は表現全体をゼロから再構築するのではなく、残差(小さな調整量 F(x) = y - x)を学習するだけで済みます。ある層が不要な場合、ネットワークは F(x) を容易にゼロへ近づけ、クリーンな恒等のパススルーを残すことができます。
- 途切れない勾配のハイウェイ。逆伝播の際、連鎖律は損失(L)の入力 x に関する勾配を計算します:
(∂ L)/(∂ x)=(∂ L)/(∂ y)((∂ F(x))/(∂ x)+1)
恒等ショートカットによって生じる + 1 項のおかげで、上流の勾配((∂ L)/(∂ y))は (∂ F(x))/(∂ x) 内の小さな重み行列で縮小されることなく、前の層へ直接逆向きに流れます。これにより、勾配は 100 層以上、場合によっては 1,000 層以上でもクリーンに伝播できます。
3. CNN から Vision Transformer(ViT)への移行
AlexNet 以降の約 10 年間、畳み込みニューラルネットワーク(CNN)は小さなローカルフィルタを画像上でスライドさせることでコンピュータビジョンを支配していました。2020 年、Google は Vision Transformer(ViT)を導入し、自然言語処理の Transformer アーキテクチャを画像に適応させました。
| 特徴 | 畳み込みニューラルネットワーク(CNN) | Vision Transformer(ViT) |
|---|---|---|
| 入力処理 | スライド式フィルタ(例:3×3)で完全な 2D 画像グリッドを処理します。 | 画像を固定サイズのパッチ(例:16×16 ピクセル)に分割し、トークンのシーケンスに平坦化します。 |
| 受容野 | 最初はローカル。初期層は近傍ピクセルしか見えず、グローバルなコンテキストは深い層でゆっくり構築されます。 | 即座にグローバル。Self-Attention は第 1 層からすべての画像パッチ同士を結びつけます。 |
| 帰納バイアス | 高い。平行移動不変性と 2D 空間の局所性に関する組み込みの仮定により、CNN は小規模なデータセットでもうまく学習できます。 | 低い。組み込みの 2D 空間ルールがなく(位置埋め込みに依存)、視覚構造の学習に大規模なデータセットが必要です。 |
| ハードウェアスケーリング | 専用の畳み込みカーネルと複雑なメモリアクセスパターンに依存します。 | ほぼ完全に密行列乗算(GEMM)に依存し、現代の GPU Tensor Core を最大効率で飽和させます。 |
- ViT が現代 AI を席巻した理由。CNN は軽量なモバイルやエッジデバイスでは依然として効率的ですが、Vision Transformer は数億枚の画像で訓練した場合にはるかに優れたスケーリングを示します。さらに、ViT は画像をトークンシーケンスとして表現するため(テキストや音声とまったく同じ形式)、GPT-4o や Gemini のような現代のマルチモーダル AI モデルが単一の統合アーキテクチャ内で視覚と言語を処理することを可能にしました。