共计 1666 个字符,预计需要花费 5 分钟才能阅读完成。
背景:反向传播算法的历史地位
1986 年 Rumelhart 等人发表的《Learning representations by back-propagating errors》是深度学习发展史上的里程碑。当时神经网络面临两大困境:

- 无法有效训练多层网络
- 缺乏系统性的权重调整方法
这篇论文首次完整提出了误差反向传播算法(Backpropagation),解决了多层感知机的训练难题。其核心思想是:
- 通过前向传播计算输出
- 比较输出与真实值的误差
- 将误差反向传播到各层
- 利用梯度下降更新权重
文献精读:原始算法解析
网络结构设计
论文中的经典三层结构(输入层 - 隐藏层 - 输出层)成为后续模型的基础模板:
graph LR
A[输入层] --> B[隐藏层]
B --> C[输出层]
数学推导(关键步骤)
-
前向传播:
$$h_j = \sigma(\sum_i w_{ji}x_i)$$
$$y_k = \sigma(\sum_j w_{kj}h_j)$$ -
误差计算:
$$E = \frac{1}{2}\sum_k(t_k – y_k)^2$$ -
权重更新(输出层→隐藏层):
$$\Delta w_{kj} = -\eta \frac{\partial E}{\partial w_{kj}} = \eta(t_k – y_k)y_k(1-y_k)h_j$$ -
权重更新(隐藏层→输入层):
$$\Delta w_{ji} = -\eta \frac{\partial E}{\partial w_{ji}} = \eta[\sum_k(t_k – y_k)y_k(1-y_k)w_{kj}]h_j(1-h_j)x_i$$
算法对比
| 特性 | 反向传播 | Hebbian 学习 |
|---|---|---|
| 监督信号 | 需要 | 不需要 |
| 多层训练 | 支持 | 仅单层 |
| 收敛速度 | 较慢 | 不稳定 |
Python 实现(NumPy 版)
import numpy as np
def sigmoid(x):
return 1/(1+np.exp(-x))
def bp_train(X, y, hidden_units=3, lr=0.1, epochs=1000):
# 权重初始化(小随机值)W1 = np.random.randn(X.shape[1], hidden_units) * 0.01
W2 = np.random.randn(hidden_units, 1) * 0.01
for epoch in range(epochs):
# 前向传播
h = sigmoid(X.dot(W1))
y_pred = sigmoid(h.dot(W2))
# 误差计算
loss = np.mean(0.5*(y - y_pred)**2)
# 反向传播
d_out = (y_pred - y) * y_pred * (1 - y_pred)
d_hidden = d_out.dot(W2.T) * h * (1 - h)
# 权重更新
W2 -= lr * h.T.dot(d_out)
W1 -= lr * X.T.dot(d_hidden)
return W1, W2
关键注释:
sigmoid梯度计算:y*(1-y)来自导数特性- 学习率
lr:典型值 0.1-0.01 - 权重初始化:避免全零或过大值
现代深度学习中的演进
框架优化
- TensorFlow:自动微分(autograd)
- PyTorch:动态计算图
梯度消失解决方案
- 使用 ReLU 代替 sigmoid:
$$f(x) = max(0,x)$$ - 残差连接(ResNet)
- 批量归一化(BatchNorm)
实践避坑指南
- 学习率选择:
- 简单任务:0.1
- 复杂任务:0.001-0.01
-
配合学习率衰减
-
权重初始化:
- Xavier 初始化:
w = np.random.randn(fan_in, fan_out) / sqrt(fan_in) -
He 初始化:适用于 ReLU
-
收敛判断:
- 连续 5 个 epoch 验证集损失无改善
- 早停(early stopping)机制
思考题
- 如何将 BP 算法扩展到 CNN?
- 卷积核作为可训练权重
-
通过 im2col 实现高效计算
-
Adam 优化器 vs 原始 SGD:
- 自适应学习率
- 动量加速
- 梯度二阶矩估计
结语
精读原始文献有助于理解算法本质。虽然现代框架已封装了反向传播,但掌握底层原理仍是调试模型、解决疑难问题的关键。建议读者尝试用纯 Python 实现一次完整 BP 流程,这比直接调用 model.fit() 收获更大。
