最简单神经网络的完整训练计算过程
网络结构
w1 w5
x1 ─────────→ h1 ───────→ y(输出)
╲ ╱ ╱
w3╲ ╱ ╱
╲ ╱ ╱
╲ ╱ ╱
╳ ╱
w2╱ ╲ ╱
╱ ╲ ╱
╱ ╲ ╱
x2 ─────────→ h2
w4 w6
重新定义清晰的权重命名:
x1 → h1: w1 x2 → h1: w2
x1 → h2: w3 x2 → h2: w4
h1 → y : w5 h2 → y : w6
初始参数
| 参数 | 值 | 说明 |
|---|---|---|
| 1 | 输入1 | |
| 1 | 输入2 | |
| 0.2 | x1→h1 权重 | |
| 0.3 | x2→h1 权重 | |
| 0.4 | x1→h2 权重 | |
| 0.5 | x2→h2 权重 | |
| 0.1 | h1→y 权重 | |
| 0.6 | h2→y 权重 | |
| 1 | 真实值(目标) | |
| 0.5 | 学习率 | |
| 激活函数 | Sigmoid | 隐藏层 |
| 输出层 | 线性 | 无激活函数 |
| 损失函数 | MSE |
第一步:前向传播
1.1 计算隐藏层输入
1.2 Sigmoid 激活
1.3 计算输出
前向传播汇总
| 计算步骤 | 公式 | 代入 | 结果 |
|---|---|---|---|
| h1 输入 | 0.5 | ||
| h1 输出 | 0.6225 | ||
| h2 输入 | 0.9 | ||
| h2 输出 | 0.7109 | ||
| 预测值 | 0.4888 |
目标是 1,预测是 0.4888,差距很大——接下来算损失。
第二步:计算损失
使用 MSE(均方误差):
损失 0.1307,接下来通过反向传播算梯度来减小它。
第三步:反向传播
核心思路:从输出层往回,逐层用链式法则算每个权重的梯度。
3.1 输出层梯度
3.2 对 w5、w6 的梯度
3.3 对 h1、h2 的梯度(信号传回隐藏层)
3.4 穿过 Sigmoid 求导
Sigmoid 的导数为 :
传到隐藏层输入:
3.5 对 w1、w2、w3、w4 的梯度
反向传播汇总
| 权重 | 梯度计算链 | 梯度值 | 方向 |
|---|---|---|---|
| -0.0120 | 应增大 | ||
| -0.0120 | 应增大 | ||
| -0.0630 | 应增大 | ||
| -0.0630 | 应增大 | ||
| -0.3182 | 应增大 | ||
| -0.3634 | 应增大 |
所有梯度均为负,说明增大所有权重都能减小损失——因为预测值太小(0.49 < 目标 1),需要增大权重来提高预测值。
第四步:更新参数
梯度下降公式:
| 权重 | 旧值 | 梯度 |
|
新值 |
|---|---|---|---|---|
| 0.2 | -0.0120 | -0.006 | 0.2060 | |
| 0.3 | -0.0120 | -0.006 | 0.3060 | |
| 0.4 | -0.0630 | -0.0315 | 0.4315 | |
| 0.5 | -0.0630 | -0.0315 | 0.5315 | |
| 0.1 | -0.3182 | -0.1591 | 0.2591 | |
| 0.6 | -0.3634 | -0.1817 | 0.7817 |
所有权重都增大了——因为梯度为负,减去负数等于加上正数。
验证:用新权重再算一次前向传播
| 步骤 | 公式 | 结果 |
|---|---|---|
| h1 输入 | 0.5120 | |
| h1 输出 | 0.6252 | |
| h2 输入 | 0.9630 | |
| h2 输出 | 0.7236 | |
| 预测值 | 0.7276 | |
| 新损失 | 0.0374 |
| 对比 | 更新前 | 更新后 |
|---|---|---|
| 预测值 | 0.4888 | 0.7276 |
| 损失 | 0.1307 | 0.0374 |
一轮训练后:预测值从 0.49 → 0.73,靠近目标 1;损失从 0.13 → 0.04,下降 71%。模型在"学习"。
完整计算流程图
前向传播(正向计算):
x1=1, x2=1
↓
z_h1 = w1·x1 + w2·x2 = 0.5 → h1 = σ(0.5) = 0.6225
z_h2 = w3·x1 + w4·x2 = 0.9 → h2 = σ(0.9) = 0.7109
↓
ŷ = w5·h1 + w6·h2 = 0.4888
↓
L = ½(ŷ - y)² = ½(0.4888 - 1)² = 0.1307
反向传播(逆向求导):
∂L/∂ŷ = ŷ - y = -0.5112
↓
∂L/∂w5 = ∂L/∂ŷ · h1 = -0.3182
∂L/∂w6 = ∂L/∂ŷ · h2 = -0.3634
∂L/∂h1 = ∂L/∂ŷ · w5 = -0.0511
∂L/∂h2 = ∂L/∂ŷ · w6 = -0.3067
↓
∂L/∂z_h1 = ∂L/∂h1 · σ'(0.5) = -0.0120
∂L/∂z_h2 = ∂L/∂h2 · σ'(0.9) = -0.0630
↓
∂L/∂w1 = ∂L/∂z_h1 · x1 = -0.0120
∂L/∂w2 = ∂L/∂z_h1 · x2 = -0.0120
∂L/∂w3 = ∂L/∂z_h2 · x1 = -0.0630
∂L/∂w4 = ∂L/∂z_h2 · x2 = -0.0630
更新参数(η=0.5):
w_new = w_old - η · ∂L/∂w
w1: 0.2 → 0.206
w2: 0.3 → 0.306
w3: 0.4 → 0.432
w4: 0.5 → 0.532
w5: 0.1 → 0.259
w6: 0.6 → 0.782
↓
预测值: 0.49 → 0.73 (靠近目标 1)
损失: 0.13 → 0.04 (下降 71%)
↓
重复以上四步,直到损失足够小
一句话总结
前向传播算预测值(0.49),MSE 算损失(0.13),反向传播用链式法则从输出层往回算每个权重的梯度(全为负,说明应增大权重),梯度下降更新参数后预测值升至 0.73、损失降至 0.04——这四步循环就是神经网络训练的完整过程。