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

第十一章:动手AI——搭建迷你神经网络

你已经学会了 NumPy 和机器学习的基本概念。现在,是时候把这些知识组合起来,做一件真正"AI"的事情:用神经网络识别手写数字。这篇文章里的每一个数字,都是你自己搭建的网络"看"懂的,没有调用任何深度学习框架——只有 NumPy。


11.1 神经网络是什么?

神经网络模仿了人脑的工作方式:大量简单的"神经元"连接在一起,通过调整连接强度来学习。

`` 输入层 隐藏层 输出层 (784) (128) (10) ○ ○ ○ ○ ──── ○ ──── ○ ○ \ / ○ \ / ○ ○ \ ○ \ ○ → 预测结果:"7" ○ / \ ○ / \ ○ ○ / \ ○ / \ ○ ○ \ ○ \ ○ ... × ... × ... ``

💡 信息从左到右流动。每个连接都有一个"权重"(importance),训练的过程就是不断调整这些权重,让输出越来越接近正确答案。


11.2 准备数据——手写数字

我们先创建一个简单的数据集来演示。在实际的 MNIST 数据集中,每张图片是 28×28=784 个像素。

Python
Loading editor...

11.3 激活函数——给网络注入非线性

如果没有激活函数,多层神经网络只是矩阵连乘,本质上还是一层。激活函数打破了这个局面。

Python
Loading editor...

11.4 构建神经网络——两层模型

Python
Loading editor...

11.5 前向传播——让数据流过网络

Python
Loading editor...

⚠️ 训练前输出几乎是随机的——网络还没学会任何东西。接下来用反向传播教它。


11.6 反向传播——让网络从错误中学习

这是神经网络最核心的机制。

Python
Loading editor...

11.7 可视化训练过程——损失下降

Python
Loading editor...

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/) 改编。