共计 1642 个字符,预计需要花费 5 分钟才能阅读完成。
1. 反向传播的数学本质
通过 3D 可视化可以清晰看到,误差(Error)像水流一样从输出层向输入层反向流动。这个过程的核心是链式法则(Chain Rule):

$$\frac{\partial E}{\partial w_{ij}^{(l)}} = \frac{\partial E}{\partial z_j^{(l+1)}} \cdot \frac{\partial z_j^{(l+1)}}{\partial a_i^{(l)}} \cdot \frac{\partial a_i^{(l)}}{\partial z_i^{(l)}} \cdot \frac{\partial z_i^{(l)}}{\partial w_{ij}^{(l)}}$$
其中 $z$ 表示加权输入,$a$ 表示激活输出。这个公式的工程意义在于:
- 梯度计算被分解为可复用的局部计算
- 中间结果可以缓存用于下一层计算
- 计算复杂度从 $O(n^2)$ 降到 $O(n)$
2. 激活函数梯度特性对比
| 激活函数 | 梯度表达式 | 饱和区表现 | 死亡神经元风险 |
|---|---|---|---|
| Sigmoid | $\sigma'(z)=\sigma(z)(1-\sigma(z))$ | 快速衰减 | 低 |
| Tanh | $1-\tanh^2(z)$ | 缓慢衰减 | 中等 |
| ReLU | $\begin{cases}1 & z>0\0 & z\leq0\end{cases}$ | 无衰减 | 高 |
选型建议:
- 浅层网络:优先尝试 Tanh
- 深层网络:ReLU+LeakyReLU 组合
- 二分类输出层:Sigmoid
3. PyTorch 核心实现
# 带 L2 正则化的交叉熵损失
class CrossEntropyL2(nn.Module):
def __init__(self, weight_decay=0.01):
super().__init__()
self.weight_decay = weight_decay
def forward(self, y_pred, y_true, model):
ce_loss = F.cross_entropy(y_pred, y_true)
l2_loss = 0
for param in model.parameters():
l2_loss += torch.norm(param, 2)
return ce_loss + self.weight_decay * l2_loss
# 动态学习率衰减
scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(
optimizer,
mode='min',
factor=0.5,
patience=3,
verbose=True
)
# 梯度裁剪
torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=2.0)
4. 性能优化实验
批量归一化效果
在 MNIST 数据集上测试:
| 配置 | 测试准确率 | 训练时间 |
|---|---|---|
| 无 BN | 98.2% | 23min |
| BN before ReLU | 99.1% | 18min |
| BN after ReLU | 98.7% | 19min |
优化器对比(CIFAR-10)
| 优化器 | 稀疏特征准确率 | 稠密特征准确率 |
|---|---|---|
| SGD | 72.3% | 85.1% |
| Adam | 68.5% | 88.7% |
5. 工程避坑指南
- 权重初始化 :
- Xavier 初始化:适合 Sigmoid/Tanh
-
Kaiming 初始化:适合 ReLU 族
-
梯度监控 :
grad_norms = [param.grad.norm().item() for param in model.parameters()] plt.plot(grad_norms) -
学习率与批量大小 :
$$lr_{new} = lr_{base} \times \frac{batch_{new}}{batch_{base}}$$
6. 开放性问题思考
- 局部最优验证 :
- 设计多组不同初始化实验
- 记录损失曲面轨迹
-
分析 Hessian 矩阵特征值
-
Transformer 新挑战 :
- 长距离依赖导致梯度消失
- 多头注意力机制的分块梯度
- LayerNorm 带来的梯度计算复杂度
测试环境:PyTorch 1.8 + CUDA 11.1,实验超参数:batch_size=128, epoch=50, 初始 lr=0.01
正文完
