karpathy/nn-zero-to-hero

GitHub: karpathy/nn-zero-to-hero

一门从零开始构建神经网络的系列视频课程,通过逐行代码实现 micrograd、makemore、GPT 等项目来深入讲解深度学习与语言模型的核心原理。

Stars: 23629 | Forks: 3463

## 神经网络:从零到英雄 一门从最基础知识开始的神经网络课程。本课程是一系列 YouTube 视频,我们将在一起编写代码并训练神经网络。我们在视频中构建的 Jupyter 笔记本随后会保存在这里的 [lectures](lectures/) 目录中。每节课还包含一组视频描述中的练习。(这可能会发展成更完善的内容)。 **第 1 讲:神经网络与反向传播详解:构建 micrograd** 神经网络的反向传播与训练。需要具备基础的 Python 知识,以及对高中微积分的模糊记忆。 - [YouTube 视频课程](https://www.youtube.com/watch?v=VMj-3S1tku0) - [Jupyter notebook 文件](lectures/micrograd) - [micrograd Github 仓库](https://github.com/karpathy/micrograd) **第 2 讲:语言模型详解:构建 makemore** 我们实现了一个 bigram 字符级语言模型,在后续视频中,我们将进一步将其复杂化为一个现代的 Transformer 语言模型(如 GPT)。本视频的重点是 (1) 介绍 torch.Tensor 及其在高效评估神经网络时的微妙之处和用法,以及 (2) 语言建模的整体框架,包括模型训练、采样和损失评估(例如分类的负对数似然)。 - [YouTube 视频课程](https://www.youtube.com/watch?v=PaCmpygFfXo) - [Jupyter notebook 文件](lectures/makemore/makemore_part1_bigrams.ipynb) - [makemore Github 仓库](https://github.com/karpathy/makemore) **第 3 讲:构建 makemore 第 2 部分:MLP** 我们实现了一个多层感知机(MLP)字符级语言模型。在本视频中,我们还介绍了机器学习的许多基础知识(例如模型训练、学习率调优、超参数、评估、训练/开发/测试集拆分、欠/过拟合等)。 - [YouTube 视频课程](https://youtu.be/TCH_1BHY58I) - [Jupyter notebook 文件](lectures/makemore/makemore_part2_mlp.ipynb) - [makemore Github 仓库](https://github.com/karpathy/makemore) **第 4 讲:构建 makemore 第 3 部分:激活函数与梯度、BatchNorm** 我们深入探讨多层 MLP 的一些内部结构,仔细研究前向传播激活、反向传播梯度的统计特性,以及当它们缩放不当时的一些陷阱。我们还介绍了你想要用来了解深度网络健康状况的典型诊断工具和可视化方法。我们学习了为什么训练深度神经网络可能会很脆弱,并介绍了第一个使这一切变得容易得多的现代创新:Batch Normalization。残差连接和 Adam 优化器仍是后续视频的重要内容。 - [YouTube 视频课程](https://youtu.be/P6sfmUTpUmc) - [Jupyter notebook 文件](lectures/makemore/makemore_part3_bn.ipynb) - [makemore Github 仓库](https://github.com/karpathy/makemore) **第 5 讲:构建 makemore 第 4 部分:成为反向传播忍者** 我们提取上一讲中的 2 层 MLP(带有 BatchNorm),并手动通过它进行反向传播,而不使用 PyTorch 的 autograd 的 loss.backward()。也就是说,我们手动反向传播穿过交叉熵损失、第 2 个线性层、tanh、batchnorm、第 1 个线性层以及 embedding 表。在此过程中,我们对梯度如何在计算图以及高效的 Tensor 层面(而不仅仅是像 micrograd 中那样的单个标量)向后流动建立直观的理解。这有助于培养关于神经网络如何优化的能力和直觉,并为您在未来更自信地创新和调试现代神经网络打下基础。 我建议你自己完成这些练习,但可以与视频同步进行,当你卡住时,取消暂停视频看我给出答案。这段视频并非主要用来单纯观看的。练习在[这里以 Google Colab 形式提供](https://colab.research.google.com/drive/1WV2oi2fh9XXyldh02wupFQX0wh5ZC-z-?usp=sharing)。祝你好运 :) - [YouTube 视频课程](https://youtu.be/q8SA3rM6ckI) - [Jupyter notebook 文件](lectures/makemore/makemore_part4_backprop.ipynb) - [makemore Github 仓库](https://github.com/karpathy/makemore) **第 6 讲:构建 makemore 第 5 部分:构建 WaveNet** 我们提取上一讲的 2 层 MLP,并用树状结构使其更深,最终得到类似于 DeepMind 的 WaveNet (2016) 的卷积神经网络架构。在 WaveNet 论文中,相同的分层架构通过因果空洞卷积(尚未涵盖)得到了更高效的实现。在此过程中,我们将更好地了解 torch.nn 是什么以及它是如何工作的,并了解典型的深度学习开发过程是什么样的(大量阅读文档、跟踪多维 tensor 形状、在 Jupyter notebooks 和仓库代码之间切换等等)。 - [YouTube 视频课程](https://youtu.be/t3YJ5hKiMQ0) - [Jupyter notebook 文件](lectures/makemore/makemore_part5_cnn1.ipynb) **第 7 讲:让我们构建 GPT:从零开始,用代码详细解释。** 我们遵循论文“Attention is All You Need”和 OpenAI 的 GPT-2 / GPT-3 构建一个生成式预训练 Transformer(GPT)。我们讨论了与席卷全球的 ChatGPT 之间的联系。我们观看了 GitHub Copilot(它本身就是一个 GPT)是如何帮助我们编写 GPT 的(非常 Meta :D!)。我建议大家先观看之前的 makemore 视频,以熟悉自回归语言建模框架以及 tensor 和 PyTorch nn 的基础知识,这些我们在本视频中视为理所当然。 - [YouTube 视频课程](https://www.youtube.com/watch?v=kCc8FmEb1nY)。有关所有其他链接,请参阅视频描述。 **第 8 讲:让我们构建 GPT Tokenizer** Tokenizer 是大型语言模型(LLM)不可或缺且无处不在的组件,它在字符串和 token(文本块)之间进行转换。Tokenizer 是 LLM pipeline 中完全独立的一个阶段:它们有自己的训练集、训练算法(Byte Pair Encoding),并且在训练后实现两个基本功能:将字符串转为 token 的 encode(),以及将 token 转回字符串的 decode()。在这节课中,我们将从零开始构建 OpenAI 的 GPT 系列中使用的 Tokenizer。在这个过程中,我们将看到 LLM 的许多奇怪行为和问题实际上都可以追溯到 tokenization。我们将探讨其中的一些问题,讨论为什么 tokenization 是罪魁祸首,以及为什么理想情况下最好有人能找到彻底删除这个阶段的方法。 - [YouTube 视频课程](https://www.youtube.com/watch?v=zduSFxRajkE) - [minBPE 代码](https://github.com/karpathy/minbpe) - [Google Colab](https://colab.research.google.com/drive/1y0KnCFZvGVf_odSfcNAws6kcDD7HsI0L?usp=sharing) 待续... **许可证** MIT
标签:AI, Apex, NoSQL, 凭据扫描, 教程, 机器学习, 深度学习, 神经网络, 自动化代码审查, 逆向工具