microgpt
(karpathy.github.io)- 200行の純粋な Python 単一ファイルで、GPTモデルの学習と推論の全工程を実装した最小構成の言語モデルアーキテクチャ
- データセット、トークナイザー、自動微分エンジン、GPT-2風のニューラルネットワーク、Adam オプティマイザ、学習および推論ループをすべて含む
- 名前データセットを学習して新しい名前を生成し、独自実装の autograd と Transformer 構造を通じて GPT の中核原理を明らかにする
- 大規模 LLM と異なり、依存関係なしで純粋な Python だけで動作し、アルゴリズムの本質だけを残した形
- microgpt を理解すれば、ChatGPT などの大規模モデルの根本的なアルゴリズム構造を理解できる
microgpt の概要
- microgpt は200行の Python コードで書かれた最小構成の GPT 実装で、外部ライブラリへの依存がない
- データセット、トークナイザー、自動微分、GPT-2風の構造、Adam オプティマイザ、学習および推論ループをすべて含む
- Karpathy がLLM を本質レベルまで単純化するために作った芸術的プロジェクトで、micrograd・makemore・nanogpt などの延長線上にある
- 全コードは GitHub Gist、Webページ、Google Colab で提供されている
データセット
- 約32,000個の名前を1行ずつ含むテキストファイルを使用
- 各名前は1つのドキュメントと見なされ、モデルはこのパターンを学習して新しい名前を生成する
- 学習後の生成例: kamon, ann, karai, jaire, vialan など
トークナイザー
- 各固有文字に整数 ID を割り当てる単純な文字ベースのトークナイザー
- アルファベット a–z とBOS(beginning of sequence) トークンを含む計27トークン
- 各ドキュメントは
[BOS, e, m, m, a, BOS]の形で囲まれて学習される
自動微分 (Autograd)
Valueクラスがスカラー値と勾配を追跡し、計算グラフを構成する- 加算、乗算、累乗、対数、指数、ReLU など基本演算の局所微分値(local gradient) を保存
backward()メソッドが連鎖律を適用して逆伝播を実行- PyTorch の
.backward()と同じアルゴリズムをスカラー単位で直接実装
パラメータ初期化
- モデルは約4,192個のパラメータを持つ
- 埋め込みテーブル、アテンション重み、MLP 重み、出力射影などで構成される
- 各パラメータはガウス分布の乱数で初期化される
モデルアーキテクチャ
- GPT-2 構造を単純化した形で、RMSNorm、ReLU、残差接続(residual connection) を使用
- 主な構成:
- 埋め込み段階: トークン埋め込みと位置埋め込みを加算
- マルチヘッドアテンション: Q、K、V ベクトルを計算し、KV キャッシュを通じて過去トークンの情報を活用
- MLP ブロック: 2層フィードフォワードネットワークで局所的な計算を行う
- 出力段階: 語彙サイズ(27)に対するロジット(logit)を生成
- KV キャッシュは学習中も有効で、逆伝播がキャッシュを通って流れる
学習ループ
- 各ステップでドキュメントを選び、
[BOS, ... , BOS]にトークナイズする - モデルが次トークン確率を予測し、交差エントロピー損失を計算
loss.backward()で勾配を計算した後、Adam オプティマイザでパラメータを更新- 学習率は線形減衰(linear decay)方式
- 1,000ステップのあいだに損失は約3.3 → 2.37へ減少
推論(Inference)
- 学習完了後、BOS トークンから開始して新しい名前を生成
- 各段階で softmax 確率に従って次トークンをサンプリング
- temperature 値で創造性を調整(低いほど保守的、高いほど多様)
- 出力例: kamon, ann, karai, jaire, vialan, karia, yeran, anna など
実行方法
- Python さえあれば実行可能 (
python train.py) - 約1分で学習が完了し、損失値がステップごとに出力される
- Colab ノートブックでも同様に実行可能
コード発展段階
train0.pyからtrain5.pyまで段階的に拡張- Bigram → MLP → Autograd → Attention → Multi-head → Adam
- 各段階は Gist の build_microgpt.py リビジョンで確認できる
実際の LLM との違い
- データ: microgpt は 32K の名前、実際の LLM は数兆トークン
- トークナイザー: 文字単位 vs. BPE ベースのサブワード
- Autograd: スカラーベースの Python vs. GPU テンソル演算
- アーキテクチャ: 4K パラメータ vs. 数千億パラメータ
- 学習: 単一ドキュメントの反復 vs. 大規模バッチ・混合精度学習
- 最適化: 単純な Adam vs. 緻密に調整されたハイパーパラメータとスケジューリング
- 後処理: SFT と RL の段階を経てChatGPT の形へ発展
- 推論インフラ: GPU 分散、KV キャッシュ管理、量子化、speculative decoding など
FAQ 要約
- モデルは数学的関数であり、入力トークンを次トークン確率へ変換する
- 「理解」はなく、統計的規則の学習を通じて予測を行う
- ChatGPT と同じトークン予測ループを縮小した形で実装
- 「ハルシネーション(hallucination)」は確率的サンプリングの自然な結果
- 速度は遅いが、LLM の中核アルゴリズムを完全に再現している
- より良い結果のために学習ステップ、モデルサイズ、データセットを調整可能
- データセットを置き換えれば、都市名、ポケモン名、詩などさまざまなパターンを学習可能
microgpt は LLM のすべての中核アルゴリズムを最小単位で実装した教育的・実験的モデルであり、大規模言語モデルの動作原理を完全に明らかにする例である。
1件のコメント
Hacker News のコメント
誰かが microgpt を改変して、韓国語の名前を生成する小さな GPT を作った
トークナイズから推論まで、パイプライン全体を探索できるように、全工程を可視化した Web ページもある
English GPT lab で直接体験できる
PyTorch char_rnn チュートリアル を参考にするとよい
トークナイズ、埋め込み、アテンション、損失・勾配、学習、推論、Real GPT との比較 までうまく説明されている
サイト自体は元のブログ記事をベースにした AI 生成の可視化 に近い
私は microgpt を C++ に移植した
コードへのリンク
コード行数は 2 倍だが、速度は 10 倍速い
いちばん難しかったのは Value クラスを C++ で表現することで、最終的に shared_ptr を使った
「幻覚 (hallucination)」とは何なのか気になっていた
モデルは単に確率分布からトークンをサンプリングしているだけで、真実という概念は持っていない
だとすると、LLM は 自分の回答に対する信頼度スコア を持てるのだろうか、という疑問が湧く
事前学習モデルでは較正されていても、指示追従 (post-training) の後には崩れる
関連研究: 論文1、論文2
統計で母集団が分からない信頼区間のように、LLM の確率にも現実世界とのつながりはない
結局のところ LLM は、世界を経験せず本だけ読んだ人のようなものだ
だがこの確率は「真実である確率」ではなく、「この状況で自分がこのトークンを出す確率」だ
私は学習用に microgpt を Rust に変換した
microgpt-rs
autograd グラフ構造 を Rust の型で表現するのが最も厄介だった
今は WebAssembly でブラウザ上で動かせるよう修正中で、ブログに載せる予定だ
Karpathy のコードは本当に 詩的で簡潔な設計 だ
コードは美しくて読みやすいが、backbone.js のように 1 行ずつ注釈付きの説明があればよかった
Backbone ドキュメント 参照
Docco プロジェクト も同じ作者が作った素晴らしいツールだ
HTML 版コード もある
microgpt ブログ
Karpathy の動画とコードのおかげで、勾配降下法、逆伝播、連鎖律 を初めて本当に理解できた気がする
数学だけ見ていたときは混乱していたが、コードと一緒に見ると明確になった
個人的には 人生の達成感 に近い体験だった
Karpathy が言っていたように、本当に理解するには 人に教えてみること が重要だ
このプロジェクトが HN に今ごろ上がったのが驚きだ
私は PicoGPT という 35 行の JS 版と Python 版を作っていて、
Web 上ですぐ実行できる
しかも QR コードでも実行できる超小型 LLM だ
関連スレッド: リンク1、リンク2
私は microgpt のコードを 可視化ブログ記事 にした
ブログへのリンク
コードの流れを追いながら、インタラクティブに見せてくれる
実際にはこの 4 つすべてが データセットに含まれている
最近の AI における 「micro」トレンド は興味深い
単にモデルを大きくするより、小さく特化したモデル のほうが効率が高まっている
実際に Gemini Flash をドメイン分析に使っているが、速度とコストの比率がずっと良い
レイテンシ の違いだけでも、作れる製品の種類が変わる
microgpt という名前にするには nanogpt より小さいので、picogpt のほうがふさわしいと思う
それでも素晴らしいプロジェクトだ