Skip to content

手写数字识别 — 从零实现两层神经网络

写给零基础新手的深度学习入门小册子


阅读指南

本书分为两大部分

  • 第一部分:理论篇 — 从最基础的概念出发,一步步建立完整的神经网络知识体系。每个公式都有完整的推导过程,不跳步骤。
  • 第二部分:项目篇 — 把理论"翻译"成代码,逐文件、逐行讲解项目实现,重点关注数据维度的变化。

建议阅读顺序: 按章节顺序阅读,不建议跳读。后面的章节会大量引用前面的推导结论。


目录

第一部分:理论篇

章节标题核心内容
第 1 章什么是神经网络神经元、层的概念、网络结构
第 2 章矩阵与维度矩阵乘法、批量处理、形状推导
第 3 章激活函数Sigmoid / ReLU / Softmax 及其完整求导
第 4 章前向传播带维度标注的完整前向传播推导
第 5 章损失函数交叉熵损失的直觉与推导
第 6 章反向传播链式法则、梯度逐层推导
第 7 章参数更新与优化器SGD / Momentum / Adam

第二部分:项目篇

章节标题对应文件
第 8 章项目结构总览所有文件
第 9 章数据加载与处理dataset.py
第 10 章激活与损失函数实现functions.py
第 11 章模型实现model.py
第 12 章优化器实现optimizer.py
第 13 章训练器trainer.py
第 14 章完整训练流程main.py + config.py

本书使用的符号约定

符号含义
n批量大小(batch size),即一次处理多少个样本
X输入数据矩阵,shape = (n, 784)
W1, b1第一层的权重和偏置
W2, b2第二层的权重和偏置
a1, z1第一层的线性输出和激活输出
a2, y第二层的线性输出和最终概率
t真实标签,shape = (n,)
L损失值(标量)
∂L/∂W损失对参数 W 的偏导数(梯度)
@矩阵乘法(Python / numpy 语法)
·逐元素乘法(element-wise)

本书基于 Kaggle MNIST 数字识别数据集,使用纯 numpy 从零实现,不依赖 PyTorch / TensorFlow 等深度学习框架。

基于 Kaggle MNIST 数据集,使用纯 numpy 从零实现