Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

PyFirst

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.com/topics/neural-networks最好的神经网络可视化教程,强烈推荐
Neural Networks from Scratchnnfs.io配套书籍+视频,和本章理念一致——从零搭建
fast.ai — Practical Deep Learningcourse.fast.ai面向编程者的免费深度学习课程
PyTorch 官方教程pytorch.org/tutorials掌握 NumPy 后,平滑过渡到 PyTorch 深度学习框架
Michael Nielsen — Neural Networks and Deep Learningneuralnetworksanddeeplearning.com经典在线书籍,深入浅出

本章内容基于 3Blue1Brown 神经网络系列Neural Networks from Scratch 改编。