用Python代码理解和实现简单的神经网络
不用那些高大上的黑话,就用大白话一步步用Python实现一个最简单的神经网络。
一、什么是神经网络的学习过程?
假设有一个超级简单的规则:
- 我们给电脑一个数字,比如
0.5。 - 电脑需要学会输出这个数字的 2倍,也就是
1.0。
对我们来说,这太简单了。但对电脑来说,它一开始就是个“婴儿”,啥也不懂。我们需要用“数据”来训练它,让它自己找到 输入 * 2 = 输出 这个规律。
这个“找规律”的过程,就是神经网络的学习过程。
二、神经网络的“灵魂”:一个数学公式
我们先不看复杂的网络,就看一个最基础的“脑细胞”——神经元。它做的事情核心就是这个公式:
y = w * x + b
别怕,我们拆开看:
x:输入(我们给的数字,比如0.5)w:权重(Weight,可以理解成“重要性”)b:偏置(Bias,可以理解成“基础分”)y:输出(电脑猜的数字)
电脑学习的目标就是:找到最正确的 w 和 b 的值,使得 y 尽可能接近正确答案。
一开始,电脑会随便蒙一个 w 和 b,比如 w=0.1, b=0。那么当输入 x=0.5 时,它的输出就是 y = 0.1 * 0.5 + 0 = 0.05,离正确答案 1.0 差得远。
三、学习的关键:知道自己错在哪
电脑怎么知道它猜错了呢?我们需要一个“裁判”来打分。这个裁判就是 损失函数。
我们用一个最简单的损失函数:(预测值 - 真实值)^2
- 预测值就是电脑算出来的
y(比如0.05) - 真实值就是我们知道的答案(1.0)
这个值越大,说明错得越离谱。电脑的目标就是让这个“损失”变得越来越小。
那怎么减小损失呢?—— 梯度下降
想象一下,电脑蒙的 w 和 b 把它放在了一个错误的山坡上,损失值就是它的“高度”。它的目标就是走到山谷最低点。
梯度下降 就是它下山的方法:它看看脚下,哪个方向是“下坡”最陡的,就朝那个方向走一小步。
在数学上,“哪个方向最陡”就是计算损失函数对 w 和 b 的 偏导数(可以理解为“坡度”)。
四、开始写代码!
理论说完了,我们动手实现。整个过程就像教小孩:
- 准备学习资料(数据)
- 让他猜答案(前向传播)
- 告诉他错在哪(计算损失)
- 让他记住教训(反向传播,更新参数)
- 反复练习(循环迭代)
import numpy as np
# 1. 准备学习资料(数据)
# 输入数据:一组数字
X = np.array([0.5, 1.0, 1.5, 2.0, 2.5, 3.0], dtype=float)
# 对应的正确答案(输入的2倍)
y_true = np.array([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], dtype=float)
# 2. 初始化电脑的“脑细胞”(随机初始化参数 w 和 b)
# 一开始电脑就是在瞎蒙
w = 0.1 # 随便猜的权重
b = 0.0 # 随便猜的偏置
# 3. 开始学习!学100次(100个epoch)
learning_rate = 0.01 # 学习率,相当于“下山时每一步迈多大”
epochs = 100 # 学习的轮数
for epoch in range(epochs):
# 4. 前向传播:让电脑根据当前的 w, b 猜一遍所有答案
y_pred = w * X + b # 这就是 y = w*x + b
# 5. 计算损失:看看它猜得有多差(用均方误差)
loss = np.mean((y_pred - y_true) ** 2)
# 6. 反向传播:计算“坡度”,知道 w 和 b 应该怎么调整
# 损失对 w 的偏导数(坡度)
dw = (2 / len(X)) * np.dot(X, (y_pred - y_true))
# 损失对 b 的偏导数(坡度)
db = (2 / len(X)) * np.sum(y_pred - y_true)
# 7. 更新参数:沿着“下坡”方向走一小步,更新 w 和 b
w = w - learning_rate * dw
b = b - learning_rate * db
# 每学20次,打印一下进度
if epoch % 20 == 0:
print(f"第{epoch}轮学习:损失值={loss:.4f}, w={w:.4f}, b={b:.4f}")
# 学习结束!看看最终成果
print("\n=== 学习结束! ===")
print(f"最终参数: w = {w:.4f}, b = {b:.4f}")
# 来,考试一下!用我们没教过的新数字
test_x = 4.0
predicted_y = w * test_x + b
print(f"输入 {test_x},预测输出是 {predicted_y:.4f},正确答案是 {2*test_x}")
运行一下,你会看到类似这样的结果:
第0轮学习:损失值=9.8125, w=0.3550, b=0.1050
第20轮学习:损失值=0.1093, w=1.7998, b=0.1995
第40轮学习:损失值=0.0012, w=1.9800, b=0.0200
第60轮学习:损失值=0.0000, w=1.9979, b=0.0020
...
=== 学习结束! ===
最终参数: w = 2.0000, b = 0.0000
输入 4.0,预测输出是 8.0000,正确答案是 8.0
太神奇了! 电脑自己学会了 w 非常接近 2,b 非常接近 0。也就是说,它自己找到了 y = 2 * x 这个规律!即使你输入一个它没见过的 4.0,它也能给出正确答案 8.0。
五、总结与联想
这就是一个最最基础的神经网络(单层感知机)的核心。
- 现实中的神经网络:无非是这个的“超级加倍”版。
- 更多层:一层接一层,
y = w2 * (w1 * x + b1) + b2,这样能学习更复杂的规律。 - 激活函数:在每一层输出后加个“开关”(比如ReLU,Sigmoid),让网络能学习非线性的复杂规律(比如识别猫狗)。
- 更多神经元:每一层不止一个
w和b,而是有成百上千个,大家一起协作。
- 更多层:一层接一层,
但无论多么复杂的AI模型,其最基本的学习原理都和你刚才看到的代码一样:前向传播算答案,反向传播算误差,梯度下降更新参数。
希望这篇文章能帮你打破对神经网络的神秘感!其实它就是一套通过数据自动寻找规律的精巧数学工具。

浙公网安备 33010602011771号