micrograd
用100行代码完整实现深度学习反向传播,AI入门者的第一性原理学习工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
用100行代码完整实现深度学习反向传播,AI入门者的第一性原理学习工具
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象一下,你手里有一块乐高积木,只有巴掌大小,却能拼出一台迷你计算机的核心逻辑——micrograd 就是这样一件「袖珍神器」。由斯坦福大学教授、李飞飞高徒、OpenAI 创始成员 Andrej Karpathy 用大约 150 行 Python 代码手写而成,它是目前 GitHub 上最受欢迎的 AI 教学工具之一,帮助全球数万名开发者和学生,真正理解深度学习背后最核心的数学原理——反向传播(Backpropagation)。
图1:micrograd 在月亮数据集(Moon Dataset)上训练的 2 层 MLP 神经网络决策边界

深度学习已经无处不在——ChatGPT 写诗、Midjourney 画画、自动驾驶认路——但大多数人对它的理解停留在「调 API」层面。反向传播,这个让神经网络能够「学习」的核心算法,反而被层层框架和库封装得严严实实。
Karpathy 在 2020 年写 micrograd 时说:"我想让人们亲手摸到这条线的每一根纤维。"他选择了一条最「笨」也最「聪明」的路——把所有计算拆解成最基础的加法、乘法、激活函数,每一步都让你看得清清楚楚。
图2:micrograd 作者 Andrej Karpathy
micrograd 的核心是 engine.py(约 100 行)和 nn.py(约 50 行),加起来不到 200 行代码,却完整实现了一个反向传播引擎。
传统框架(如 PyTorch、TensorFlow)的计算图是隐式的,用户不需要感知。但 micrograd 把这张图显式地暴露出来——每个 Value 对象知道自己是谁的输入、谁是自己的输出,就像一张蜘蛛网,每根丝都清晰可见。
当你调用 backward() 时,micrograd 从输出节点出发,沿着这张图反向遍历,链式法则逐层求导,最终算出每个叶节点(即初始输入)的梯度。整个过程一目了然。
micrograd 复刻了 PyTorch 的核心接口:
Value 类:标量运算,支持 +、*、-、/ 和 relu()、sigmoid() 等激活函数MLP 类:多层感知机,构造方法和 PyTorch 的 nn.Module 几乎一致.backward():触发反向传播.grad:访问梯度值
这种设计让有过 PyTorch 经验的开发者几乎零成本上手,同时又能在细微处体会框架的底层逻辑。整个训练流程只需要这几行代码:
from micrograd.nn import MLP
from micrograd.engine import Value
# 定义网络:输入维度2,隐藏层[16, 16],输出维度1
model = MLP(2, [16, 16, 1])
# 初始化数据(也可直接用 demo.ipynb 中的月亮数据集)
# ... 训练循环省略
# 前向传播
output = model(inputs)
# 计算损失(SVM max-margin loss)
loss = ...
# 反向传播
loss.backward()
虽然功能简单,但足以训练一个能对月亮数据集进行二分类的神经网络,决策边界如上图所示。
| 文件 | 职责 | 行数 |
|---|---|---|
micrograd/engine.py | 核心:Value 类 + 反向传播逻辑 | ~100 |
micrograd/nn.py | MLP / Neuron 等神经网络组件 | ~50 |
demo.ipynb | 完整训练演示(带可视化) | Notebook |
trace_graph.ipynb | 计算图可视化(Graphviz) | Notebook |
整个项目没有任何外部依赖(numpy 和 matplotlib 仅在演示中使用),纯 Python 标准库即可运行。代码质量评分高:变量命名直观、注释充足、没有过度工程化。 |
micrograd 有两个公认的局限性:
micrograd 的成功反映了 AI 教育领域的一个趋势:从调 API 的「黑箱使用者」,到理解原理的「白箱建造者」。 它的 GitHub stars 从 2020 年的几千增长到如今的 16000+,已经成为全球多所顶尖高校(斯坦福 CS231n、MIT 6.S191 等)深度学习课程的推荐读物。无数人在学习 Transformer、RLHF 之前,先用 micrograd 把反向传播的手推了一遍。 可以说,micrograd 不仅是 Andrej Karpathy 对开源社区最慷慨的馈赠之一,也是 AI 时代「理解比使用更重要」这一理念的最佳注脚。