📚推荐阅读
面试官:Transformer如何优化到线性级?
面试官:模型的量化了解吗?解释一下非对称量化与对称量化
面试官:模型剪枝了解吗?解释一下结构化剪枝与非结构化剪枝
面试官:为什么 Adam 在部分任务上会比 SGD 收敛更快,但泛化性更差?如何改进?
面试官:BatchNorm、LayerNorm、GroupNorm、InstanceNorm 有什么本质区别?
面试官:深层网络梯度消失的根本原因是什么?除了 ResNet,还有哪些架构能有效缓解?
这题是典中典。很多人听到“梯度消失”就背一句——“因为深度太深”,但要真能把原因讲透、机制解释清、改进方案说全,那就不只是“知道问题”,而是理解问题的结构本质了。
今天这篇,我们就彻底搞清楚:
- 梯度为什么会消失(根本原因)?
- ResNet 是怎么解决的?
- 还有哪些架构能有效缓解?
有相关源码示例、流程图、模型配置与知识库构建技巧,我也将持续更新在Github:LLMHub,欢迎关注收藏!
一、什么是梯度消失?
“梯度消失”(Vanishing Gradient)指的是在反向传播过程中,梯度在层与层之间不断相乘,到达前面层时已经接近 0,导致这些层几乎学不到东西。
这个问题的根本,在于链式法则的累乘效应。
对于一个深度网络:y = f L ( f L − 1 ( . . . f 1 ( x ) . . . ) ) y = f_L(f_{L-1}( ... f_1(x) ... ))y=fL(fL−1(...f1(x)...))
反向传播时梯度为:∂ L ∂ x = ∂ L ∂ y ∏ i = 1 L ∂ f i ∂ f i − 1 \frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} \prod_{i=1}^{L} \frac{\partial f_i}{\partial f_{i-1}}∂x∂L=∂y∂L∏i=1L∂fi−1∂fi
当每个∂ f i ∂ f i − 1 \frac{\partial f_i}{\partial f_{i-1}}∂fi−1∂fi的范数 < 1 时,随着层数增加,梯度会呈指数级衰减。
假设每层的权重矩阵为W i W_iWi,激活函数为 σ:∂ L ∂ x = ∂ L ∂ y ( W L σ ′ ( z L ) ) ( W L − 1 σ ′ ( z L − 1 ) ) . . . ( W 1 σ ′ ( z 1 ) ) \frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} (W_L σ'(z_L)) (W_{L-1} σ'(z_{L-1})) ... (W_1 σ'(z_1))∂x∂L=∂y∂L(WLσ′(zL))(WL−1σ′(zL−1))...(W1σ′(z1))
如果激活函数的导数平均小于 1(如 sigmoid, tanh),或者权重初始化不当(如方差太小),那么梯度会被不断缩小,最终趋近于 0。这就是梯度消失的本质:链式相乘中的指数衰减。
二、激活函数与初始化的双重作用
激活函数问题
像 sigmoid 或 tanh,这类函数的导数在饱和区间非常小:
| 函数 | 导数区间 | 问题 |
|---|---|---|
| Sigmoid | (0, 0.25) | 饱和后梯度极小 |
| Tanh | (0, 1) | 仍会衰减 |
| ReLU | 0 或 1 | 解决了一部分问题 |
ReLU 的出现让梯度能在正区间传播不衰减,这就是为什么 ReLU 成为深度学习的标配。
权重初始化问题
如果初始化方差太小,梯度被压缩;如果太大,梯度爆炸。
He Initialization(ReLU)和 Xavier Initialization(tanh)就是为了解决“梯度稳定传播”的问题,让方差在层间保持恒定。
三、ResNet 是怎么缓解的?
ResNet 的关键思想:恒等映射(Identity Mapping) + 残差连接(Skip Connection)
残差块:y=F(x)+x
反向传播时:∂ L ∂ x = ∂ L ∂ y ( 1 + ∂ F ∂ x ) \frac{\partial L}{\partial x} = \frac{\partial L}{\partial y} (1 + \frac{\partial F}{\partial x})∂x∂L=∂y∂L(1+∂x∂F)
即使∂ F ∂ x \frac{\partial F}{\partial x}∂x∂F很小,梯度仍可通过恒等路径“直接传回前层”。这让梯度流不再完全依赖非线性层的累乘。
四、缓解梯度消失的其他架构?
ResNet 是经典,但并不是唯一的解。我们来看几类常见的缓解梯度消失的其他架构
1. DenseNet — “全连接式残差”
DenseNet 在每一层都把前面所有层的特征拼接起来:x l = [ x 0 , x 1 , . . . , x l − 1 ] x_l = [x_0, x_1, ..., x_{l-1}]xl=[x0,x1,...,xl−1]
这样每一层都能直接访问前面层的输出,梯度可以多路径回流,并且可以实现信息复用,缓解梯度消失。
2. Highway Network — “门控残差”
Highway Network 在 ResNet 的基础上加了门控机制:y = T(x) * F(x) + (1 - T(x)) * x
其中 T(x) 是一个可学习的门函数,控制信息通过多少。
这种结构让网络能动态控制梯度通道的流量,在 RNN、语音建模中也常用。
3. LSTM / GRU — 时间维度的残差思想
在序列模型中,梯度消失更严重(因为时间展开更深)。
LSTM 通过“门控 + 线性通道”让梯度能长期传播:c t = f t ∗ c t − 1 + i t ∗ c ~ t c_t = f_t * c_{t-1} + i_t * \tilde{c}_tct=ft∗ct−1+it∗c~t
这其实就是在时间维度上做了“残差连接”,让梯度在时间上传递更稳定。
4. Transformer — LayerNorm + 残差 + 注意力机制
Transformer 的每一层都有:
x’ = x + MultiHeadAttention(x)
y = x’ + FeedForward(x’)
同时配合 LayerNorm 稳定分布,使得残差通道保持梯度流,LayerNorm 保证数值不发散,整体训练稳定,能堆叠上百层。
总结一下,梯度消失的根本原因是链式相乘中的指数衰减,ResNet 只是第一个成功的缓解梯度消失设计,后来 DenseNet、LSTM、Transformer 都在不同维度上继续拓宽了这条路。
关于深度学习和大模型相关的知识和前沿技术更新,请关注公众号coting!