第 1 步 · 深层训练的第一道坎
梯度消失与激活权衡Vanishing Gradient & Activation Trade-offs
网络越深,反向传播的梯度越容易衰减到零——看清原因,以及 ReLU 如何破解。
11 分钟
阅读 + 实操
2 个
交互演示
中级
难度
梯度消失 · 交互演示
梯度比—
层数6
网络结构(每格一层,颜色 = 激活均值大小)
各层梯度量级 ‖dW‖(对数刻度 — 从左到右 = 从输入层到输出层,梯度反向传播方向 ←)
各层激活值分布(每层一条折线 — 健康时各层形状相近)
为什么学这步?
深度网络之所以难训练,第一只拦路虎就是梯度消失。理解它,才懂为什么 ReLU、残差连接、归一化会成为标配。
📌 发生了什么
- 反向传播逐层回传误差梯度
- 饱和激活让梯度逐层缩小
- 浅层参数几乎不更新
⚠️ 常见陷阱
- Sigmoid/Tanh 深层必现梯度消失
- 层数越深越明显
- 初始化不当雪上加霜
✅ 本章小结
- 梯度消失源于饱和激活连乘
- ReLU 缓解(正区梯度为 1)
- 是残差 / 归一化的动机
📐 梯度消失的数学根源
反向传播中,梯度为何会随深度衰减?关键在于链式法则的连乘与激活函数导数的上界。
Sigmoid 的导数 σ'(z)=σ(z)(1−σ(z)) 在 z=0 时取到最大值 0.25——每经过一层 Sigmoid,梯度最多只剩 1/4,连乘 10 层即衰减到 0.25¹⁰ ≈ 10⁻⁶。
链式法则下,第 1 层权重的梯度是各层"权重 × 激活导数"的连乘;当因子均值小于 1,连乘指数衰减到 0(消失);大于 1 则指数增长(爆炸)。
Xavier(配 tanh/sigmoid)与 He(配 ReLU)初始化按输入维度缩放权重方差,让信号强度逐层保持一致;He 多一个 2 倍以补偿 ReLU 负半轴置零造成的方差减半。
🎛 权重初始化对比
同一网络、同一激活,仅改初始化方式,梯度健康度天差地别。
| 初始化 | 表现 | 结果 |
|---|---|---|
| zeros | 所有神经元对称,梯度恒为 0 | 对称死锁 |
| normal N(0,1) | 方差随深度累积,激活饱和 | 梯度爆炸 |
| Xavier | 方差稳定,适合 tanh/sigmoid | 适中 |
| He | 方差稳定,补偿 ReLU 零半轴 | 最佳(配 ReLU) |
💡 配 ReLU 选 He,配 tanh/sigmoid 选 Xavier;上方演示器可切换初始化实时观察梯度柱状图。
💻 权重初始化实现
四种初始化的 Python 实现对比(与上方演示器逻辑一致):
# 四种权重初始化对比(n_in = 输入维度)
def init_weights(n_in, n_out, method):
if method == 'zeros':
return np.zeros((n_in, n_out)) # 死锁:梯度恒为 0
elif method == 'normal':
return np.random.randn(n_in, n_out) # N(0,1):深层易爆炸
elif method == 'xavier':
s = np.sqrt(1.0 / n_in) # 适合 tanh / sigmoid
return np.random.randn(n_in, n_out) * s
elif method == 'he':
s = np.sqrt(2.0 / n_in) # 适合 ReLU
return np.random.randn(n_in, n_out) * s
# 经验:配 ReLU 用 He,配 tanh / sigmoid 用 Xavier
📚 参考文献与延伸阅读
- Glorot & Bengio (2010), Understanding the difficulty of training deep feedforward neural networks, AISTATS — Xavier 初始化的出处
- He et al. (2015), Delving Deep into Rectifiers, ICCV — He 初始化(针对 ReLU)
- Goodfellow, Bengio & Courville, Deep Learning (2016), §8.4 Parameter Initialization Strategies
- Wikipedia: Vanishing gradient problem — 梯度消失问题综述
📝 课后练习
检验你的理解——答对为止