micrograd
micrograd 是训练神经网络所需的唯一代码。其他一切都只是为了提高效率。
在本模块中,我们构建了一个微型"自动微分"引擎(自动梯度的简称),它实现了反向传播算法。这个算法在1986年由Rumelhart、Hinton和Williams发表的论文《通过误差传播学习内部表示》中被广泛推广用于训练神经网络。本仓库基于早期的 karpathy/micrograd 仓库,但将其修改成了LLM101n模块。
我们在这里构建的代码是神经网络训练的核心 - 它让我们能够计算如何更新神经网络的参数,以使其在某些任务上表现更好,比如自回归语言模型中的下一个标记预测任务。所有现代深度学习库,如PyTorch、TensorFlow、JAX等,都使用这个完全相同的算法,只不过这些库在优化和功能方面更加丰富。
!施工中!
非常早期的草稿,正在上传我心中可能的第一个版本。简单来说,这是针对二维训练数据的三分类问题。非常直观,易于理解,有助于培养直觉。
涵盖内容:
- 自动微分引擎(micrograd)
- 基于此构建的带有1个隐藏层的神经网络(MLP)
- 训练循环:损失函数、反向传播、参数更新
我真的希望这个模块能够包含我很久以前构建的这个JavaScript网页演示。在那里,学生可以交互式地添加/修改数据点,播放/暂停优化过程,看到神经网络如何对此做出响应。然而,与其用JavaScript构建,现在可能会是一个不错的streamlit应用,使用这段代码。更好的是,可以在旁边显示计算图,并在所有节点中显示完整的数据/梯度详情。
待办事项:
- 用C语言实现并行版本,打印相同的内容
- 一个非常优秀的交互式网页演示版本。顶部显示计算图,动态更新数据/梯度值,你可以用按钮"逐步"执行,或点击"播放"进行优化。下面以JavaScript网页演示风格显示数据点和当前的决策边界。用户可以添加/修改数据点,看到神经网络如何响应。用户还可以暂停优化并检查网络的当前状态,包括计算图和所有节点中的数据/梯度值。
许可证
MIT