ML ML Learning Lab
05 / 14
第 5 步 · 隐藏层的力量

多层感知机 + 反向传播Multilayer Perceptron + Backprop

XOR — 为什么一层不够,两层就能解决?

10 分钟
阅读 + 实操
1 个
交互演示
中级
难度

多层感知机 · 交互演示

损失 BCE--
准确率--
步数0
学习率 0.1
速度 13步/秒

为什么学这步?

单层网络只能解决线性可分问题。但现实中很多问题(如 XOR 异或)用一条直线根本切不开——这就是为什么需要隐藏层。隐藏层的作用是"空间变换":把原本无法用直线分开的数据,扭转到新的空间里,让它们变得可分。反向传播则是训练多层网络的算法——本质是链式法则:从输出层的误差开始,逐层往回算每个参数该往哪个方向调整。

📌 发生了什么

  • 单层网络对 XOR 无解——一条直线切不开对角的两个"是"。
  • 隐藏层把数据投影到新空间,让原本不可分的问题变可分。
  • 反向传播用链式法则从输出往回传梯度,逐层更新权重。

⚠️ 常见陷阱

  • 隐藏层越多越好?不一定,层数过多会导致梯度消失/爆炸。
  • "学习"= 记住数据?不是,网络学习的是规律而非逐条记忆。
  • 隐藏层在"看"什么?每层学习不同特征表示,浅层简单、深层复杂。

本章小结

  • XOR 问题:单层无解,两层搞定——证明隐藏层的必要性。
  • 空间变换:隐藏层把数据投影到新空间,让不可分变可分。
  • 反向传播:链式法则从输出往回传梯度,逐层更新权重。

📐 反向传播链式法则推导

反向传播本质是链式法则在多层网络上的应用——从输出层往回逐层传播误差梯度。

定义误差信号 δ⁽ˡ⁾ = ∂L/∂z⁽ˡ⁾,对输出层(假设交叉熵 + softmax):

隐藏层的误差信号由下一层回传(链式法则),⊙ 表示逐元素乘积:

权重梯度 = 误差信号 × 上一层激活值,偏置梯度 = 误差信号:

🎛 隐藏层宽度与深度

宽度(每层神经元数)和深度(层数)共同决定网络容量。宽而浅 vs 窄而深各有取舍。

结构 表现 结果
1 层 × 4 神经元 容量不足,无法拟合 XOR 等非线性问题 欠拟合
2 层 × 16 神经元 容量适中,训练快,泛化好 推荐
3 层 × 64 神经元 容量大但训练慢,易过拟合 需正则化
10 层 × 128 神经元 梯度消失/爆炸,训练极不稳定 需特殊初始化

💡 深度比宽度更高效:每多一层相当于组合上一层特征,指数级提升表达力。

💻 前向传播 + 反向传播

两层 MLP 的前向 + 反向传播核心代码(Python):

import numpy as np

# 前向传播
def forward(x, W1, b1, W2, b2):
    z1 = W1 @ x + b1                       # z1 = W1·x + b1
    a1 = np.maximum(0, z1)                 # a1 = relu(z1)
    z2 = W2 @ a1 + b2                      # z2 = W2·a1 + b2
    a2 = softmax(z2)                       # a2 = softmax(z2)
    return z1, a1, z2, a2

# 反向传播
def backward(x, y, cache, W2):
    z1, a1, z2, a2 = cache
    dz2 = a2 - y                           # δ² = ŷ - y
    dW2 = np.outer(dz2, a1)                # ∂L/∂W2 = δ²·a1ᵀ
    db2 = dz2
    da1 = W2.T @ dz2                       # 回传到 a1
    dz1 = da1 * relu_prime(z1)             # δ¹ = (W2ᵀ·δ²) ⊙ f'(z1)
    dW1 = np.outer(dz1, x)                 # ∂L/∂W1 = δ¹·xᵀ
    db1 = dz1
    return dW1, db1, dW2, db2

📚 参考文献与延伸阅读

  • Rumelhart, Hinton & Williams (1986). Learning representations by back-propagating errors. Nature — 反向传播算法的奠基论文
  • Goodfellow, Bengio & Courville, Deep Learning (2016), §6.5 Back-Propagation — 完整的反向传播推导与计算图
  • Nielsen, M. Neural Networks and Deep Learning — 在线教材,用直观图解讲解反向传播
  • Calcol: Calculus on Computational Graphs — 计算图视角下的反向传播

📝 课后练习

检验你的理解——答对为止