第十一章:动手AI——搭建迷你神经网络
你已经学会了 NumPy 和机器学习的基本概念。现在,是时候把这些知识组合起来,做一件真正"AI"的事情:用神经网络识别手写数字。这篇文章里的每一个数字,都是你自己搭建的网络"看"懂的,没有调用任何深度学习框架——只有 NumPy。
11.1 神经网络是什么?
神经网络模仿了人脑的工作方式:大量简单的"神经元"连接在一起,通过调整连接强度来学习。
`` 输入层 隐藏层 输出层 (784) (128) (10) ○ ○ ○ ○ ──── ○ ──── ○ ○ \ / ○ \ / ○ ○ \ ○ \ ○ → 预测结果:"7" ○ / \ ○ / \ ○ ○ / \ ○ / \ ○ ○ \ ○ \ ○ ... × ... × ... ``
💡 信息从左到右流动。每个连接都有一个"权重"(importance),训练的过程就是不断调整这些权重,让输出越来越接近正确答案。
11.2 准备数据——手写数字
我们先创建一个简单的数据集来演示。在实际的 MNIST 数据集中,每张图片是 28×28=784 个像素。
11.3 激活函数——给网络注入非线性
如果没有激活函数,多层神经网络只是矩阵连乘,本质上还是一层。激活函数打破了这个局面。
11.4 构建神经网络——两层模型
11.5 前向传播——让数据流过网络
⚠️ 训练前输出几乎是随机的——网络还没学会任何东西。接下来用反向传播教它。
11.6 反向传播——让网络从错误中学习
这是神经网络最核心的机制。
11.7 可视化训练过程——损失下降
11.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 系统的核心工作原理。 它们只是把"网络变大""数据增多""技巧加花"——但数学本质,就是这几步。
本章小结
| 你学到了什么 | 具体内容 |
|---|---|
| ✅ 神经网络结构 | 输入层→隐藏层→输出层,权重矩阵连接 |
| ✅ 激活函数 | Sigmoid 引入非线性,让多层网络有意义 |
| ✅ 前向传播 | 矩阵乘法 + 激活函数,数据从左到右流过 |
| ✅ 损失函数 | MSE 衡量预测与真实的差距 |
| ✅ 反向传播 | 链式法则计算梯度,从右到左传播误差 |
| ✅ 梯度下降 | 沿梯度反方向更新权重,逐步降低损失 |
| ✅ 完整训练流程 | 前向→损失→反向→更新,循环迭代 |
🚀 下一步:你已经完成了 PyFirst 的人工智能入门教程。建议回头看一遍代码,试着修改网络结构(比如增加隐藏层神经元),观察训练效果有何变化。学无止境!
本章内容基于 [3Blue1Brown 神经网络系列](https://www.3blue1brown.com/topics/neural-networks) 和 [Neural Networks from Scratch](https://nnfs.io/) 改编。