コンテンツにスキップ
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前後を足し戻して勾配消失を防止