Appearance
microgpt 閱讀摘要
這是什麼?
microgpt 是 Andrej Karpathy 所寫的單一 Python 檔案,完整實作了一個 GPT(Generative Pre-trained Transformer)模型的訓練與推論。最關鍵的特色是:完全不用 PyTorch、TensorFlow 或其他深度學習框架——它從零手寫了反向傳播所需的 Autograd 引擎。
核心架構
| 元件 | 說明 |
|---|---|
| Value 類別 | 自製的自動微分引擎,支援 +, *, **, log, exp, relu 等運算,可建構計算圖並進行反向傳播 |
| Tokenizer | 最基本的字元級(character-level)tokenizer,將字元映射到整數 ID |
| 參數初始化 | 使用高斯分佈隨機初始化所有權重矩陣 |
| GPT 模型 | 包含 token embedding、positional encoding、transformer block(multi-head attention + MLP)、RMSNorm、線性投影到 vocab |
| Adam 優化器 | 從零手寫 Adam(帶 momentum 與 adaptive learning rate) |
| 訓練迴圈 | 使用 names 資料集訓練,逐字元預測(next token prediction) |
| 推論 | 溫度採樣(temperature sampling)生成新名字 |
檔案結構
整個程式僅 200 行,依序為:
- Value 類別(第 30–72 行)— 微型 Autograd 引擎
- 參數初始化(第 74–90 行)— 定義 n_layer, n_embd, block_size 等超參數
- 模型架構(第 92–144 行)— gpt() 函式、linear、softmax、rmsnorm
- Adam 優化器(第 146–149 行)— momentum 緩衝區
- 訓練迴圈(第 152–184 行)— 前向傳播 → 損失計算 → 反向傳播 → 參數更新
- 推論(第 187–200 行)— 從 BOS token 開始逐字元生成
與 production 的差異
microgpt 是教學用實作,刻意捨棄了效率換取可讀性:
- 使用純 Python scalar 運算而非 tensor 運算(無 GPU 加速)
- 單頭注意力用雙重迴圈實作而非批次矩陣乘法
- 無 batch dimension(每個 step 只處理一個樣本)
- 無 gradient checkpointing、mixed precision 等優化