从零用 Rust 实现大语言模型 —— 学习计划
目标:不使用任何深度学习框架(如 tch-rs / candle / burn),仅用 Rust 标准库,
从零手写张量、自动微分、神经网络层、Transformer 架构,最终训练出一个能生成文本的小型 GPT 模型。
核心理念:每一步都亲自动手实现,每一步都配套教程文档。
每节课的文档都在 docs/ 目录下,代码在 src/ 目录下,一一对应。
为什么从零写?
- 学习张量/自动微分/反向传播,才能真正理解 PyTorch 等框架背后的原理。
- 理解每一个数学公式如何变成一行行代码。
- 训练过程透明可控,随时可以打印中间结果检查正确性。
依赖策略
- 原则上零依赖:所有张量、数学运算、自动微分、网络层全部自己写。
- 允许极少量工具库,使用时会明确说明并解释其作用(例如
rand 用于生成随机数)。
- 每新增一个依赖都必须有理由,不能"图省事"。
总体路线图(6 个阶段,21 课)
阶段一:地基 —— 张量与自动微分(第 1-4 课)
| 课 |
主题 |
知识点 |
| 01 |
张量 Tensor |
数据布局、形状、reshape、逐元素运算、矩阵乘法 |
| 02 |
自动微分 Autograd |
计算图、反向传播、梯度链式法则 |
| 03 |
张量运算扩展 |
广播、sum/mean、softmax、广播减法 |
| 04 |
模块化重构 |
把张量库整理成独立模块,为上层打基础 |
阶段二:神经网络基础(第 5-7 课)
| 课 |
主题 |
知识点 |
| 05 |
线性层与激活函数 |
Linear、ReLU、Sigmoid、Tanh、参数管理 |
| 06 |
损失函数与优化器 |
CrossEntropy、MSE、SGD、梯度下降原理 |
| 07 |
第一个 MLP |
用自己写的库训练 XOR / 分类任务,验证反向传播正确性 |
阶段三:分词器(第 8 课)
| 课 |
主题 |
知识点 |
| 08 |
BPE 分词器 |
文本→token、字节级编码、词表构建 |
阶段四:Transformer 架构(第 9-12 课)
| 课 |
主题 |
知识点 |
| 09 |
注意力机制 |
Scaled Dot-Product Attention、softmax、mask |
| 10 |
多头注意力 |
Multi-Head Attention、权重拼接 |
| 11 |
位置编码 |
正弦位置编码、LayerNorm、残差连接 |
| 12 |
完整 GPT 模型 |
Transformer Block、Embedding、输出头 |
阶段五:训练与推理(第 13-16 课)
| 课 |
主题 |
知识点 |
| 13 |
训练循环 |
前向/反向/更新、损失下降观察、梯度裁剪 |
| 14 |
数据加载 |
数据集处理、batch、序列化样本构造 |
| 15 |
推理与采样 |
temperature、top-k、top-p 采样 |
| 16 |
训练小 GPT |
在小型数据集上训练并生成有意义的文本 |
阶段六:进阶优化(第 17-21 课)
| 课 |
主题 |
知识点 |
| 17 |
AdamW 优化器 |
动量、自适应学习率、权重衰减 |
| 18 |
KV Cache |
推理加速,逐步生成时避免重复计算 |
| 19 |
RoPE 旋转位置编码 |
现代 LLM 的位置编码方式 |
| 20 |
学习率调度与收尾 |
warmup、cosine decay、总结与展望 |
| 21 |
GPU 加速(可选) |
wgpu 计算着色器加速热点算子,失败自动回退 CPU |
每个阶段会学到的核心数学/ML 概念
- 线性代数:矩阵乘法、转置、点积(第 1、5 课)
- 微积分:偏导数、链式法则、梯度(第 2 课)
- 概率:softmax、交叉熵、采样(第 6、15 课)
- 优化:梯度下降、学习率、动量(第 6、7、17 课)
- 深度学习:反向传播、正则化、归一化(第 2、5、11 课)
- NLP:分词、词嵌入、注意力、Transformer(第 8-12 课)
推荐阅读顺序
- 先读每课的教程文档(
docs/XX-xxx.md),理解原理。
- 再看对应源码(
src/),对照实现。
- 自己动手改代码、跑实验,验证理解。
- 完成课后"动手练习"。
验收标准
- 每一课结束,
cargo run 能正常运行并输出预期结果。
- 每一课都有配套文档,说明原理 + 代码讲解 + 练习。
- 第 7 课结束时,我们的 MLP 能在 XOR 任务上收敛(验证自动微分正确)。
- 第 16 课结束时,模型能生成通顺的短文本。