3 ポイント 投稿者 GN⁺ 2026-03-02 | 1件のコメント | WhatsAppで共有
  • 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 構造を単純化した形で、RMSNormReLU残差接続(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件のコメント

 
GN⁺ 2026-03-02
Hacker News のコメント
  • 誰かが microgpt を改変して、韓国語の名前を生成する小さな GPT を作った
    トークナイズから推論まで、パイプライン全体を探索できるように、全工程を可視化した Web ページもある
    English GPT lab で直接体験できる

    • こういうものは、もっと 軽量なモデル でも簡単に実装できる
      PyTorch char_rnn チュートリアル を参考にするとよい
    • サイトの作者とは無関係だが、LLM の内部構造を学ぶのにとても役立つサイトだ
      トークナイズ、埋め込み、アテンション、損失・勾配、学習、推論、Real GPT との比較 までうまく説明されている
    • 「改変した」といっても、実際には英語の名前リストを韓国語の名前に置き換えた程度だ
      サイト自体は元のブログ記事をベースにした AI 生成の可視化 に近い
  • 私は microgpt を C++ に移植した
    コードへのリンク
    コード行数は 2 倍だが、速度は 10 倍速い
    いちばん難しかったのは Value クラスを C++ で表現することで、最終的に shared_ptr を使った

    • 私は autodiff なしの明示的な逆伝播 を実装したが、Python より 8 倍速かった
  • 幻覚 (hallucination)」とは何なのか気になっていた
    モデルは単に確率分布からトークンをサンプリングしているだけで、真実という概念は持っていない
    だとすると、LLM は 自分の回答に対する信頼度スコア を持てるのだろうか、という疑問が湧く

    • モデルは出力分布の confidence を報告できるかもしれないが、それが実際に正しく較正 (calibrated) されているとは限らない
      事前学習モデルでは較正されていても、指示追従 (post-training) の後には崩れる
      関連研究: 論文1論文2
    • 信頼度スコアは、訓練データの サンプリング方法 が分からなければ意味がない
      統計で母集団が分からない信頼区間のように、LLM の確率にも現実世界とのつながりはない
      結局のところ LLM は、世界を経験せず本だけ読んだ人のようなものだ
    • 実際、LLM は 確率分布 を返し、それをサンプリングしてトークンを生成する
      だがこの確率は「真実である確率」ではなく、「この状況で自分がこのトークンを出す確率」だ
    • 生成はできても、『本当の分布』を知らない以上、その信頼度に意味はない
    • 「よく分からないけど、たぶんこうだろう」のような文は出力には見えないが、内部推論過程 には存在する
  • 私は学習用に microgpt を Rust に変換した
    microgpt-rs
    autograd グラフ構造 を Rust の型で表現するのが最も厄介だった
    今は WebAssembly でブラウザ上で動かせるよう修正中で、ブログに載せる予定だ
    Karpathy のコードは本当に 詩的で簡潔な設計

    • 重み構造に微分値を保存するのはかなりハックっぽいが、たいていはそうしている
    • 私も別の言語で一度実装してみたい
  • コードは美しくて読みやすいが、backbone.js のように 1 行ずつ注釈付きの説明があればよかった
    Backbone ドキュメント 参照

    • Backbone の注釈付きソースは Docco で生成されたものだ
      Docco プロジェクト も同じ作者が作った素晴らしいツールだ
    • 本当に美しい 文芸的プログラミング (literate programming) の例だ
      HTML 版コード もある
    • Karpathy の ウォークスルーブログ もある
      microgpt ブログ
    • 単に 高性能な LLM に説明させてみろ という提案もある
  • Karpathy の動画とコードのおかげで、勾配降下法、逆伝播、連鎖律 を初めて本当に理解できた気がする
    数学だけ見ていたときは混乱していたが、コードと一緒に見ると明確になった
    個人的には 人生の達成感 に近い体験だった

    • 私もそれを 直感的に説明 してみようと思う
      Karpathy が言っていたように、本当に理解するには 人に教えてみること が重要だ
  • このプロジェクトが HN に今ごろ上がったのが驚きだ
    私は PicoGPT という 35 行の JS 版と Python 版を作っていて、
    Web 上ですぐ実行できる
    しかも QR コードでも実行できる超小型 LLM

    • 私も驚いた。こんな素晴らしいプロジェクトが 2 週間もたってから HN のトップに載った のは意外だ
      関連スレッド: リンク1リンク2
    • 実は以前にすでに投稿されていた — 以前の投稿
  • 私は microgpt のコードを 可視化ブログ記事 にした
    ブログへのリンク
    コードの流れを追いながら、インタラクティブに見せてくれる

    • 学習が終わると「kamon」「karai」「anna」「anton」のような名前を生成すると言っていたが、
      実際にはこの 4 つすべてが データセットに含まれている
    • この記事は HN に別途 記事として投稿する価値がある
    • 普段は LLM が手伝って書いたブログには批判的なほうだが、これは 本当に素晴らしい例
    • ML 初心者の私にとっても、Karpathy の原文と同じくらい 役に立つ資料 だった
    • 本当にすばらしい仕事だ
  • 最近の AI における 「micro」トレンド は興味深い
    単にモデルを大きくするより、小さく特化したモデル のほうが効率が高まっている
    実際に Gemini Flash をドメイン分析に使っているが、速度とコストの比率がずっと良い
    レイテンシ の違いだけでも、作れる製品の種類が変わる

    • ただしこれは実用アプリケーションというより 教育目的 の micro モデルだ
  • microgpt という名前にするには nanogpt より小さいので、picogpt のほうがふさわしいと思う
    それでも素晴らしいプロジェクトだ