Zenn Dev Karaage0703 Articles 1e7106add712d1
Karpathy氏の200行GPT「microGPT」を1行1行読み解く
- URL: https://zenn.dev/karaage0703/articles/1e7106add712d1
- 日付: 2026-06-26
- Tier: Tier 3
- 要旨: Andrej Karpathy氏が2026年2月に公開した200行・外部ライブラリ依存なしのGPT実装「microGPT」をコードレベルで読み解いた解説記事だ。PyTorchもNumPyも使わずに自動微分エンジンから始めてTransformerの訓練・推論まで実装しており、約32,000個の英語人名データから人名らしい文字列を生成することで動作を確認できる。コードは6セクションに分かれ、スカラー値の自動微分・多ヘッドアテンション・Adam最適化の各実装が丁寧に解説されており、GPTアーキテクチャの内部動作を理解するための素材として有効だ。
詳細
microGPTの概要
- パラメータ数: 4,192(GPT-4の数千億と比べ極小)
- 学習データ: 約32,000個の英語人名
- 依存ライブラリ: なし(Python標準ライブラリのみ)
- 実行:
curl -O https://gist.githubusercontent.com/karpathy/.../microgpt.py && python3 microgpt.py
6セクションの構成
- データ準備(~20行): 人名データセット読み込みとランダムシャッフル
- トークナイザ(~5行): 文字レベルの文字→数値ID変換、語彙サイズ27(26文字+BOS)
- Autograd(~50行): Valueクラスにdata/grad/_children/_local_gradsを持たせ計算グラフを構築、backward()でトポロジカルソート→連鎖律で逆伝播
- パラメータ初期化(~15行): n_embd=16, n_head=4, n_layer=1, block_size=16
- モデル定義(~60行): GPT-2準拠。LayerNorm→RMSNorm、GeLU→ReLU、バイアスなしの3点を簡略化
- 訓練+推論(~50行): Adam最適化(beta1/beta2の移動平均)で1000ステップ学習
マルチヘッドアテンション実装のポイント
- Q/K/V射影後に4ヘッドで並列処理
- スケーリングはhead_dim**0.5で除算(内積が大きくなりsoftmaxが極端にならないよう)
- 残差接続でアテンション前後・MLP前後を足し戻して勾配消失を防止