开源项目

nn-zero-to-hero

从零开始手写神经网络与语言模型的系列教程,配有 Jupyter Notebook 和 YouTube 视频,覆盖 backpropagation、MLP、BatchNorm、WaveNet 到 GPT 的完整实现。由 Karpathy 亲自讲解,代码逐行实现,适合想深入理解神经网络底层原理而非只调用框架的开发者。

README

Neural Networks: Zero to Hero

一门从基础讲起的神经网络课程。课程是一系列 YouTube 视频,我们一起编码并训练神经网络。视频中构建的 Jupyter notebook 已收录在 lectures 目录下。每节课的视频描述中还包含一组练习。(未来可能会发展得更完善。)


第 1 讲:神经网络与反向传播的入门详解——构建 micrograd

神经网络的反向传播与训练。假定具备基础的 Python 知识以及对高中微积分的模糊记忆。


第 2 讲:语言建模的入门详解——构建 makemore

我们实现了一个二元字符级语言模型,后续视频会将其逐步复杂化,最终演变为现代 Transformer(自注意力架构)语言模型(如 GPT)。本视频的重点是:(1)介绍 torch.Tensor 及其微妙之处,以及如何高效评估神经网络;(2)语言建模的整体框架,包括模型训练、采样和损失评估(例如分类中的负对数似然)。


第 3 讲:构建 makemore 第二部分——MLP

我们实现了一个多层感知器(MLP)字符级语言模型。本视频还介绍了机器学习的许多基础知识(例如模型训练、学习率调整、超参数、评估、训练/开发/测试集划分、欠拟合/过拟合等)。


第 4 讲:构建 makemore 第三部分——激活函数与梯度、BatchNorm

我们深入探讨多层 MLP 的内部机制,仔细分析前向传播激活值、反向传播梯度的统计特性,以及当它们缩放不当时可能出现的一些陷阱。我们还介绍了诊断工具和可视化方法,用于了解深度网络的健康状况。我们学习了为什么训练深度神经网络可能很脆弱,并介绍了第一个让训练变得更容易的现代创新:Batch Normalization(批归一化)。残差连接和 Adam 优化器留待后续视频讲解。


第 5 讲:构建 makemore 第四部分——成为反向传播忍者

我们对上一个视频中的 2 层 MLP(含 BatchNorm)进行手动反向传播,而不使用 PyTorch autograd 的 loss.backward()。也就是说,我们手动反向传播了交叉熵损失、第二线性层、tanh、批归一化、第一线性层以及嵌入表。在此过程中,我们直观地理解了梯度如何在计算图中反向流动,并且是在高效 Tensor 层面,而不仅仅是像 micrograd 中那样的单个标量。这有助于建立关于神经网络优化方式的胜任力和直觉,使您能够更自信地创新和调试现代神经网络。

我建议您自己完成练习,但可以边做边看视频,每当卡住时暂停视频,看我给出答案。本视频并不适合单纯观看。练习在这里(Google Colab):点击链接。祝好运 :)


第 6 讲:构建 makemore 第五部分——构建 WaveNet

我们将上一个视频中的 2 层 MLP 加深为树状结构,形成类似于 DeepMind 的 WaveNet(2016)的卷积神经网络架构。在 WaveNet 论文中,相同的层次架构使用因果空洞卷积(causal dilated convolutions)更高效地实现(本视频尚未涉及)。在此过程中,我们更好地理解了 torch.nn 是什么、它如何工作,以及典型的深度学习开发流程是怎样的(阅读大量文档、跟踪多维 tensor 形状、在 Jupyter notebook 和仓库代码之间切换等)。


第 7 讲:让我们构建 GPT:从零开始、代码逐行详解

我们按照论文《Attention is All You Need》以及 OpenAI 的 GPT-2 / GPT-3,构建了一个生成式预训练 Transformer(GPT)。我们会讨论与席卷全球的 ChatGPT 之间的联系。我们还看到 GitHub Copilot(它本身就是一个 GPT)帮助我们编写 GPT(元!:D)。建议先观看前面的 makemore 视频,以熟悉自回归语言建模框架以及 tensor 和 PyTorch nn 的基础知识,本视频将把这些视为已知。


第 8 讲:让我们构建 GPT Tokenizer

Tokenizer(分词器)是大语言模型(LLM)中必不可少且无处不在的组件,它在字符串和 token(文本块)之间进行转换。Tokenizer 是 LLM 流程中完全独立的一个阶段:它有自己独立的训练集、训练算法(Byte Pair Encoding,字节对编码),并且训练后实现两个基本函数:从字符串到 token 的 encode() 和从 token 返回字符串的 decode()。本讲中,我们从零构建 OpenAI GPT 系列使用的 Tokenizer。在此过程中,我们会看到 LLM 的许多奇怪行为和问题实际上都追溯到 tokenization。我们将讨论其中一些问题,解释为什么 tokenization 是罪魁祸首,以及为什么理想情况下有人能找到完全删除这一阶段的方法。


持续更新中...

许可证

MIT

开源项目karpathy2026-05-22原文

相关内容