概要
- Andrej Karpathyが作成した 約200行のPythonスクリプト でGPTの基本アルゴリズムを解説
- 32,000件の人名データセット を使い、文字単位でモデルを訓練
- トークナイズ、予測、損失計算、逆伝播 の仕組みを丁寧に説明
- Attention、埋め込み、残差接続 などTransformerのコア要素を視覚的に解説
- ChatGPTのような大規模モデルとの 違いは規模と効率化のみ で、原理は同じ
Karpathyの200行GPTスクリプト入門
-
Andrej Karpathy が公開した 200行のPythonスクリプト
- ライブラリ・外部依存なし、 純粋なPython のみで動作
- ChatGPTの基盤となる LLMアルゴリズム を実装
-
データセット
- 32,000件の 人名リスト (例: emma, olivia, ava, ...)
- 各名前が 1ドキュメント 扱い
- モデルは 名前の統計的パターン を学習し、新たな名前を生成可能
-
トークナイズ
- ニューラルネットワークは 数値 のみ扱うため、文字を整数IDへ変換
- 26文字+ BOS(開始記号) で計27トークン
- 例: "emma" → [BOS, e, m, m, a, BOS](両端にBOSを付与)
- 整数ID自体に意味はなく、単なる記号 として扱う
-
予測タスク
- スライディングウィンドウ方式 で、各位置で「次の文字」を予測
- 例: "emma"なら5組の入力-ターゲットペアが生成
- ChatGPTを含む全ての言語モデル がこの手法で訓練
-
Softmaxによる確率化
- モデル出力は 生のスコア(ロジット) (正負・大小さまざま)
- Softmax関数 で確率に変換
- exp関数で増幅、合計で割ることで合計1に正規化
- 最大値を引いてからexp することでオーバーフロー防止
-
損失関数(クロスエントロピー)
- 予測がどれだけ外れたかを -log(p) で計算
- 正解トークンの確率が高いほど損失は低く、低いと損失は高くなる
- モデルはこの損失を最小化するよう訓練
-
逆伝播(Backpropagation)
- 各パラメータを微調整した場合の 損失変化量(勾配) を計算
- 演算ごとに計算グラフを構築 し、損失から逆方向に勾配を伝播
- 変数が複数経路で利用される場合、 勾配は経路ごとに加算 (多変数の連鎖律)
- PyTorchの loss.backward() と同じ仕組みを スカラー値で手作業 実装
モデル構造とTransformerの仕組み
-
埋め込み(Embedding)
- トークンIDを 16次元ベクトル に変換(学習可能な表現)
- 位置埋め込み も加算し、位置情報も考慮
- 似た役割のトークンは 似たベクトル に収束
-
Attention(注意機構)
- 各トークンが Query・Key・Value ベクトルを生成
- Queryと全Keyの 内積 で関連度を計算
- Softmaxで重み付け し、Valueの加重平均を出力
- Causal Mask により未来のトークンは参照不可
- 複数の Attention Head で多様なパターンを並列学習
- 例: 直前トークン重視、BOS記憶、母音検出など
-
ネットワーク全体の流れ
- 埋め込み→正規化→Attention→残差加算→正規化→MLP→残差加算→出力射影
- MLP(多層パーセプトロン) は各位置で独立に思考
- 2層構造、ReLU活性化で非線形性
- 残差接続 により勾配消失を防止し、深いネットワークでも学習安定
- RMSNorm で出力のスケールを正規化、訓練安定化
学習と生成
-
訓練ループ
- 1,000回繰り返し
- 名前を選択→トークナイズ→モデル順伝播→各位置の損失計算→平均損失→逆伝播→パラメータ更新
- Adamオプティマイザ で学習効率向上
- モーメンタム・適応学習率で安定収束
- 損失は初期3.3(ランダム予測)→2.37程度まで低下
- 生成される名前も 徐々に自然なものへ進化
- 1,000回繰り返し
-
生成(推論)
- BOSから開始し、 順伝播とサンプリングを繰り返し 新トークンを生成
- 温度パラメータ で多様性を制御
- 低温度:最頻出トークン優先(平均的な出力)
- 高温度:ランダム性増加(創造性とノイズのバランス)
- 名前生成の最適温度は 0.5前後
ChatGPTとの違いと本質
- アルゴリズム自体は同じ
- 違いは 規模・効率化・実装技術 のみ
- トークン数:数兆 vs 32,000
- サブワード分割(10万語彙)
- GPUテンソル計算
- パラメータ数:数千億 vs 4,192
- 層数:数百 vs 1
- 分散学習・大規模最適化
- 根本の原理は200行スクリプトと変わらない
- 違いは 規模・効率化・実装技術 のみ
このスクリプトを通じて、 GPTの本質的な仕組み を直感的かつ視覚的に理解可能。 ChatGPTの“魔法”の正体 が、シンプルな計算と統計的パターン学習の積み重ねであることが実感できる。