# Summary
这是一个简洁的 GPT (Generative Pre-trained Transformer) 实现,旨在教育目的。核心代码仅约 300 行。
核心特点:
- 简洁清晰 - 专注核心 Transformer 实现
- 教育导向 - 代码可读性高,适合学习
- 灵活配置 - 支持多种模型大小和训练配置
# Cues
[[自回归]]
# Notes
## 主要功能
1. GPT 模型训练和推理 - 支持从头训练或加载预训练模型
2. 多种模型规格 - 从 nano (3层) 到 xl (48层)
3. 字符级和 [[BPE]] 分词 - 支持文本生成任务
## 代码执行链路
### 1. 模型定义 (mingpt/model.py:95-310)
GPT类
├── 初始化: 构建 Transformer 架构
│ ├── wte: 词嵌入层
│ ├── wpe: 位置嵌入层
│ ├── Block x N层: Transformer块
│ │ ├── LayerNorm1 $\rightarrow$ 自注意力 (CausalSelfAttention)
│ │ └── LayerNorm2 $\rightarrow$ 前馈网络 (MLP)
│ └── lm_head: 输出投影层
│
├── forward(): 前向传播
│ ├── 输入token $\rightarrow$ 词嵌入 + 位置嵌入
│ ├── 通过N个Transformer块
│ └── 输出logits (+ 可选loss计算)
│
└── generate(): 文本生成
└── 自回归预测下一个token
### 2. 训练流程 (mingpt/trainer.py:61-109)
```Java
Trainer.run()
├── 配置优化器 (AdamW)
├── 创建 DataLoader
└── 训练循环:
├── 获取批次数据 (x, y)
├── 前向传播: logits, loss = model(x, y)
├── 反向传播: loss.backward()
└── 参数更新: optimizer.step()
```
### 3. 应用示例
- 字符级语言模型 (projects/chargpt/):
- 读取文本 $\rightarrow$ 字符编码 $\rightarrow$ 训练 GPT $\rightarrow$ 生成文本
- 数字加法任务 (projects/adder/):
- 生成加法数据 $\rightarrow$ 训练 GPT 学习加法规律
- 预训练模型使用 (simple_generate.py):
- 加载 GPT-2 权重 $\rightarrow$ BPE 分词 $\rightarrow$ 生成文本