神经网络:从零到精通
这是一门从最基础开始的神经网络课程。课程由一系列YouTube视频组成,我们将一起编码和训练神经网络。我们在视频中构建的Jupyter笔记本都保存在lectures目录中。每节课的视频描述中还包含了一系列练习。(这可能会发展成更正式的内容)。
第1讲:神经网络和反向传播的详细介绍:构建micrograd
神经网络的反向传播和训练。假定学习者具备基本的Python知识和高中微积分的模糊记忆。
第2讲:语言建模的详细介绍:构建makemore
我们实现了一个二元字符级语言模型,在后续视频中我们将进一步将其复杂化为现代的Transformer语言模型,如GPT。本视频的重点是:(1) 介绍torch.Tensor及其细节,以及在高效评估神经网络中的应用;(2) 语言建模的整体框架,包括模型训练、采样和损失评估(例如分类任务中的负对数似然)。
第3讲:构建makemore 第2部分:MLP
我们实现了一个多层感知器(MLP)字符级语言模型。在本视频中,我们还介绍了机器学习的许多基础知识(例如模型训练、学习率调整、超参数、评估、训练/开发/测试集划分、欠拟合/过拟合等)。
第4讲:构建makemore 第3部分:激活函数与梯度、批量归一化
我们深入研究了多层MLP的内部结构,仔细检查了前向传播激活、反向传播梯度的统计特性,以及它们不当缩放时可能出现的一些陷阱。我们还学习了用于理解深度网络健康状况的典型诊断工具和可视化方法。我们了解了为什么训练深度神经网络可能很脆弱,并介绍了使其变得更容易的第一个现代创新:批量归一化。残差连接和Adam优化器仍然是后续视频中值得注意的内容。
第5讲:构建makemore 第4部分:成为反向传播忍者
我们以上一个视频中的2层MLP(带批量归一化)为基础,手动进行反向传播,而不使用PyTorch自动求导的loss.backward()。具体来说,我们通过交叉熵损失、第二个线性层、tanh、批量归一化、第一个线性层和嵌入表进行反向传播。在此过程中,我们直观地理解了梯度如何在计算图中向后流动,并且是在高效张量的层面上,而不仅仅是像micrograd中那样的单个标量。这有助于建立对神经网络如何优化的能力和直觉,并使你能够更自信地在现代神经网络上进行创新和调试。
我建议你自己完成练习,但在遇到困难时可以随时暂停视频,看看我给出的答案。这个视频并不是为了单纯观看而设计的。练习在这个Google Colab中。祝你好运 :)
第6讲:构建makemore 第5部分:构建WaveNet
我们以前面视频中的2层MLP为基础,通过树状结构使其更深,最终得到一个类似于DeepMind的WaveNet(2016)的卷积神经网络架构。在WaveNet论文中,相同的层次结构通过因果膨胀卷积(尚未涵盖)得到了更高效的实现。在此过程中,我们更好地理解了torch.nn是什么以及它在底层如何工作,同时也了解了典型的深度学习开发过程是什么样的(大量阅读文档、跟踪多维张量形状、在Jupyter笔记本和代码仓库之间切换等)。
第7讲:让我们从头开始构建GPT:代码详解
我们按照"Attention is All You Need"论文和OpenAI的GPT-2 / GPT-3构建了一个生成式预训练Transformer(GPT)。我们讨论了与风靡全球的ChatGPT的联系。我们观看GitHub Copilot(本身就是一个GPT)帮助我们编写GPT(很有趣!)。我建议观众先观看之前的makemore视频,以熟悉自回归语言建模框架以及张量和PyTorch nn的基础知识,这些在本视频中我们都默认观众已经掌握。
- YouTube视频讲座。其他所有链接请参见视频描述。
第8讲:让我们构建GPT分词器
分词器是大型语言模型(LLM)中必要且无处不在的组件,它在字符串和词元(文本块)之间进行转换。分词器是LLM流程中完全独立的阶段:它们有自己的训练集、训练算法(字节对编码),训练完成后实现两个基本功能:encode()(从字符串到词元)和decode()(从词元回到字符串)。在本讲中,我们从头开始构建OpenAI的GPT系列中使用的分词器。在此过程中,我们将发现LLM的许多奇怪行为和问题实际上可以追溯到分词。我们将讨论这些问题,解释为什么分词是罪魁祸首,以及为什么理想情况下应该有人找到完全删除这个阶段的方法。
持续更新中...
许可证
MIT