04. 动手AI——搭建迷你神经网络
你已经学会了 NumPy 和机器学习的基本概念。现在,是时候把这些知识组合起来,做一件真正"AI"的事情:用神经网络识别手写数字。这篇文章里的每一个数字,都是你自己搭建的网络"看"懂的,没有调用任何深度学习框架——只有 NumPy。
21.1 神经网络是什么?¶
神经网络模仿了人脑的工作方式:大量简单的"神经元"连接在一起,通过调整连接强度来学习。
输入层 隐藏层 输出层
(784) (128) (10)
○ ○ ○
○ ──── ○ ──── ○
○ \ / ○ \ / ○
○ \ ○ \ ○ → 预测结果:"7"
○ / \ ○ / \ ○
○ / \ ○ / \ ○
○ \ ○ \ ○
... × ... × ...💡 信息从左到右流动。每个连接都有一个"权重"(importance),训练的过程就是不断调整这些权重,让输出越来越接近正确答案。
21.2 准备数据——手写数字¶
我们先创建一个简单的数据集来演示。在实际的 MNIST 数据集中,每张图片是 28×28=784 个像素。
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
21.3 激活函数——给网络注入非线性¶
如果没有激活函数,多层神经网络只是矩阵连乘,本质上还是一层。激活函数打破了这个局面。
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
21.4 构建神经网络——两层模型¶
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
21.5 前向传播——让数据流过网络¶
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
⚠️ 训练前输出几乎是随机的——网络还没学会任何东西。接下来用反向传播教它。
21.6 反向传播——让网络从错误中学习¶
这是神经网络最核心的机制。
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
21.7 可视化训练过程——损失下降¶
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
21.8 回顾——你刚刚做了什么?¶
你用不到 50 行核心代码,从零实现了一个完整的神经网络:
1. 准备数据 → 5x5 像素模式的数字 0、1、7
2. 设计网络 → 25 → 16 → 3 两层全连接
3. 前向传播 → 矩阵乘法 + sigmoid
4. 计算损失 → MSE(均方误差)
5. 反向传播 → 链式法则计算梯度
6. 更新权重 → 梯度下降 W = W - lr × dW
7. 重复 5000 次 → 损失从大变小,准确率从 33% 到 100%🎉 恭喜!你刚刚体验了 ChatGPT、Stable Diffusion、AlphaFold 等所有现代 AI 系统的核心工作原理。 它们只是把"网络变大"“数据增多”“技巧加花”——但数学本质,就是这几步。
21.9 动手练习¶
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
📋 参考答案(点击展开)
Python
14
准备加载编辑器...
🔧 正在准备编程环境...0%
●等待编辑器...
○等待 Python 环境...
21.10 本章小结¶
| 你学到了什么 | 具体内容 |
|---|---|
| ✅ 神经网络结构 | 输入层→隐藏层→输出层,权重矩阵连接 |
| ✅ 激活函数 | Sigmoid 引入非线性,让多层网络有意义 |
| ✅ 前向传播 | 矩阵乘法 + 激活函数,数据从左到右流过 |
| ✅ 损失函数 | MSE 衡量预测与真实的差距 |
| ✅ 反向传播 | 链式法则计算梯度,从右到左传播误差 |
| ✅ 梯度下降 | 沿梯度反方向更新权重,逐步降低损失 |
| ✅ 完整训练流程 | 前向→损失→反向→更新,循环迭代 |
🚀 下一步:你已经完成了 PyFirst 的人工智能入门教程。建议回头看一遍代码,试着修改网络结构(比如增加隐藏层神经元),观察训练效果有何变化。学无止境!
21.11 📚 参考资料¶
| 资源 | 链接 | 说明 |
|---|---|---|
| 3Blue1Brown — 神经网络 | 3blue1brown | 最好的神经网络可视化教程,强烈推荐 |
| Neural Networks from Scratch | nnfs.io | 配套书籍+视频,和本章理念一致——从零搭建 |
| fast.ai — Practical Deep Learning | course.fast.ai | 面向编程者的免费深度学习课程 |
| PyTorch 官方教程 | pytorch | 掌握 NumPy 后,平滑过渡到 PyTorch 深度学习框架 |
| Michael Nielsen — Neural Networks and Deep Learning | neuralnetworksanddeeplearning | 经典在线书籍,深入浅出 |
本章内容基于 3Blue1Brown 神经网络系列 和 Neural Networks from Scratch 改编。