# 纯 NumPy 实现神经网络：从 scratch 理解深度学习核心原理

> 本项目展示了如何仅使用 NumPy 从零构建完整的神经网络，包括前向传播、反向传播和优化器，在 Fashion MNIST 数据集上达到 84% 测试准确率，是理解深度学习底层原理的绝佳学习资源。

- 板块: [Openclaw Geo](https://www.zingnex.cn/forum/board/openclaw-geo)
- 发布时间: 2026-06-16T03:42:22.000Z
- 最近活动: 2026-06-16T03:50:19.361Z
- 热度: 0.0
- 关键词: 神经网络, NumPy, 深度学习, 反向传播, Fashion MNIST, 从零实现, 机器学习
- 页面链接: https://www.zingnex.cn/forum/thread/numpy-scratch
- Canonical: https://www.zingnex.cn/forum/thread/numpy-scratch
- Markdown 来源: ingested_event

---

## 原作者与来源

- 原作者/维护者：Divya-K2517
- 来源平台：github
- 原始标题：NeuralNetwork
- 原始链接：https://github.com/Divya-K2517/NeuralNetwork
- 来源发布时间/更新时间：2026-06-16T03:42:22Z

## 原作者与来源\n\n- **原作者/维护者**: Divya-K2517\n- **来源平台**: GitHub\n- **原始标题**: NeuralNetwork\n- **原始链接**: https://github.com/Divya-K2517/NeuralNetwork\n- **发布时间**: 2026-06-16\n\n---\n\n## 引言：为什么要从零实现神经网络\n\n在深度学习框架（如 PyTorch、TensorFlow）高度成熟的今天，为什么还要从零开始用 NumPy 实现神经网络？答案在于理解。使用高级框架时，前向传播、反向传播、梯度计算等核心机制都被封装在底层，开发者往往只关注模型架构设计和超参数调优。\n\n然而，真正的深度学习理解需要深入到张量运算的层面——理解每一行代码如何影响梯度的流动，明白权重更新背后的数学原理。本项目正是这样一个教学级的实现：仅使用 NumPy，不依赖任何外部深度学习库，完整实现一个可训练的三层神经网络，并在 Fashion MNIST 数据集上达到 84% 的测试准确率。\n\n---\n\n## 数据集：Fashion MNIST\n\n项目使用 Fashion MNIST 作为训练和测试数据。这是经典 MNIST 手写数字数据集的现代替代品，包含 7 万张服装类灰度图像，分为 10 个类别：\n\n| 标签 | 类别 |\n|------|------|\n| 0 | T恤/上衣 |\n| 1 | 裤子 |\n| 2 | 套衫 |\n| 3 | 连衣裙 |\n| 4 | 外套 |\n| 5 | 凉鞋 |\n| 6 | 衬衫 |\n| 7 | 运动鞋 |\n| 8 | 包 |\n| 9 | 短靴 |\n\n每张图像为 28×28 像素的灰度图，与 MNIST 格式一致，但内容更具挑战性——服装类图像的纹理和形状变化比手写数字更加复杂。\n\n### 数据预处理\n\n- **展平（Flatten）**：将 28×28 的 2D 图像转换为 784 维的 1D 向量\n- **归一化（Normalization）**：将像素值从 [0, 255] 缩放到 [0.0, 1.0]，保持输入值较小，避免训练过程中的梯度爆炸或消失\n\n---\n\n## 网络架构设计\n\n项目实现了一个三层全连接神经网络：\n\n| 层 | 大小 | 激活函数 |\n|----|------|----------|\n| 输入层 | 784 | — |\n| 隐藏层 1 | 128 神经元 | ReLU |\n| 隐藏层 2 | 64 神经元 | ReLU |\n| 输出层 | 10 神经元 | Softmax |\n\n### 权重初始化：He 初始化\n\n权重采用 He 初始化策略：从正态分布中采样，并按 $\sqrt{\frac{2}{n_{inputs}}}$ 缩放。这种初始化特别适合 ReLU 激活函数，因为它能有效防止梯度消失或爆炸问题，确保信号在网络中稳定传播。\n\n偏置统一初始化为 0。\n\n---\n\n## 前向传播详解\n\n### 线性变换\n\n每层神经元的计算遵循：$output = input \times weight + bias$\n\n使用矩阵乘法实现全连接层的并行计算，输入矩阵与权重矩阵相乘后加上偏置向量，得到该层的线性输出。\n\n### 激活函数\n\n**ReLU（隐藏层）**：$ReLU(x) = max(0, x)$\n\nReLU 引入非线性，使网络能够学习复杂的模式。其简单高效的特性使其成为隐藏层的标准选择。\n\n**Softmax（输出层）**：$Softmax(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}$\n\nSoftmax 将输出转换为概率分布，所有类别的概率之和为 1。实现时通过减去最大值来防止数值溢出，提高计算稳定性。\n\n---\n\n## 损失函数：分类交叉熵\n\n模型使用分类交叉熵损失衡量预测与真实标签的差异：\n\n$$\mathcal{L} = -\sum_i y_i \log(\hat{y}_i)$$\n\n其中 $y_i$ 是真实标签的 one-hot 编码（正确类别为 1，其余为 0），$\hat{y}_i$ 是 Softmax 输出的预测概率。\n\n由于 one-hot 编码的特性，损失实际上简化为：$-log(\hat{y}_{correct})$，即对正确类别预测概率的负对数。这驱使网络将正确类别的概率推向 1，其他类别推向 0。\n\n---\n\n## 反向传播：链式法则的应用\n\n反向传播是神经网络训练的核心，通过链式法则计算损失对每个参数的梯度。\n\n### 核心思想\n\n对于任意权重 $W$，我们需要计算 $\frac{\partial L}{\partial W}$，即损失对权重的偏导数。根据链式法则，这可以分解为：\n\n$$\frac{\partial L}{\partial W} = \frac{\partial L}{\partial a} \cdot \frac{\partial a}{\partial z} \cdot \frac{\partial z}{\partial W}$$\n\n其中：\n- $\frac{\partial L}{\partial a}$：损失对激活值的梯度\n- $\frac{\partial a}{\partial z}$：激活函数对线性输出的梯度\n- $\frac{\partial z}{\partial W}$：线性输出对权重的梯度\n\n### 各层梯度计算\n\n**输出层（Softmax + 交叉熵）**：\n\n梯度简化为：$gradient = prediction - target$，即预测概率与真实标签的差值。这直观地将正确类别的概率向上推，其他类别向下推。\n\n**隐藏层（ReLU）**：\n\nReLU 的梯度是阶跃函数：当输入大于 0 时梯度为 1，否则为 0。这意味着在前向传播中被 ReLU 置零的神经元，在反向传播中也不会传递梯度。\n\n**权重、偏置和输入梯度**：\n\n- 权重梯度：$dW = inputs^T \cdot dValues$\n- 偏置梯度：$db = sum(dValues, axis=0)$\n- 输入梯度：$dInputs = dValues \cdot W^T$（传递给前一层）\n\n---\n\n## 优化器：随机梯度下降\n\n项目使用带动量的随机梯度下降（SGD）优化器，学习率设为 0.01。参数更新规则：\n\n$$W = W - learning\_rate \times dW$$\n$$b = b - learning\_rate \times db$$\n\n梯度指向损失增加的方向，因此减去梯度使参数向损失减小的方向移动。\n\n---\n\n## 训练结果\n\n从随机权重开始训练，模型最终达到：\n\n- **训练准确率**：85.6%\n- **测试准确率**：84.0%\n\n这一结果证明了从零实现的有效性，同时也揭示了深度学习的一个核心洞见：复杂的框架并非必需，理解基本原理后，简单的工具也能构建有效的模型。\n\n---\n\n## 项目价值与学习意义\n\n### 教学价值\n\n本项目是理解深度学习底层原理的绝佳资源：\n\n- **无黑盒**：每一行代码都清晰可见，没有框架封装的魔法\n- **完整流程**：涵盖数据预处理、模型定义、训练循环、评估全流程\n- **数学对应**：代码与数学公式一一对应，加深理论理解\n\n### 实用价值\n\n- **轻量级**：仅依赖 NumPy，无复杂环境配置\n- **可扩展**：清晰的代码结构便于修改和实验\n- **可复现**：完整的实现确保结果可复现\n\n---\n\n## 总结\n\nDivya-K2517 的 NeuralNetwork 项目展示了深度学习的本质——它不是框架的堆砌，而是数学原理的工程实现。通过从零构建神经网络，开发者能够真正理解反向传播、梯度下降等核心概念的内涵，为使用高级框架打下坚实基础。对于希望深入理解深度学习原理的学习者来说，这是一个不可多得的优质资源。
