字节面试题:激活函数选择对模型梯度传播的影响
题目
激活函数是如何影响模型梯度的反向传播的?详细说明。
解答
核心原理:链式法则与激活函数的导数
在反向传播算法中,误差信号(梯度)从输出层向输入层传递的过程依赖于链式法则。每一层的梯度计算都可以大致表示为:
其中:
是损失函数。
是第 l 层的线性计算结果(即
W*x + b
)。是第 l 层的激活输出(即
a = g(z)
)。
最关键的一项就是 ,也就是激活函数
的导数
。
在反向传播过程中,梯度需要连续乘以每一层激活函数的导数。如果我们有一个 L 层的深度网络,传递到第一层的梯度将包含一个连乘项:
这个连乘项决定了梯度是能有效地传播回来,还是在途中就消失或爆炸了。而每一项 的大小,完全取决于激活函数本身的特性及其输入值 z。
不同激活函数的影响
1. Sigmoid 和 Tanh:导致梯度消失的元凶
这两者是传统的激活函数,但它们在深度网络中非常容易导致梯度消失。
Sigmoid函数:
导数:
分析:
从函数图像和导数图像可以看出,当输入 z 的绝对值很大时(|z| > 5),函数会进入“饱和区”,变得非常平坦。
此时,其导数
会趋近于 0。
在反向传播时,只要大部分神经元进入饱和状态,梯度中就会包含多个接近0的
相乘。多个小于1的数连续相乘,结果会指数级地趋近于0,导致传回底层网络的梯度变得极小甚至为0。
这意味着底层网络的权重几乎得不到更新(梯度≈0),无法有效学习。这就是梯度消失。
Tanh函数:
导数:
分析:
Tanh是零中心化的,收敛速度通常比Sigmoid快。
但它同样存在饱和区,当 |z| 很大时,其导数同样会趋近于 0。
因此,在深度网络中,Tanh同样会遇到梯度消失问题,虽然其表现通常优于Sigmoid。
结论:Sigmoid和Tanh的饱和特性使得它们的导数在极端值时变为0,在深度网络的链式求导中极易引发梯度消失问题。
2. ReLU及其变体:缓解梯度消失,但引入新问题
为了克服饱和激活函数的问题,ReLU被引入并成为深度学习的里程碑。
ReLU函数:
导数:
积极影响:
缓解梯度消失:在正区间(z > 0),导数恒为 1。这意味着梯度在反向传播通过ReLU单元时,不会被缩小。梯度可以几乎无损地传回更深的层,极大地缓解了梯度消失问题,使得训练极深的网络成为可能。
计算高效:只需判断是否大于0,没有指数运算,速度极快。
消极影响(Dying ReLU):
在负区间(z < 0),导数恒为 0。一旦一个神经元激活值小于0(例如,由于一次过大的梯度更新),它在后续的训练中可能永远无法被再次激活,因为流经它的梯度将为0。这个神经元就“死亡”了,不再对模型产生任何贡献。
如果学习率设置过高,可能导致大量神经元“死亡”,整个网络的表现会大幅下降。
为了解决Dying ReLU问题,提出了几种改进变体:
Leaky ReLU:
,其中
是一个很小的斜率(如0.01)。
导数:
分析:在负区间提供了一个很小的斜率
,确保了梯度永远不会完全为0。即使神经元处于负区间,也有一个微小的梯度可以流回,使得它仍有“复活”的可能。这基本解决了Dying ReLU问题。
Parametric ReLU (PReLU): 形式与Leaky ReLU相同,但斜率参数
不是固定的超参数,而是作为模型参数之一,通过反向传播学习得到。这比Leaky ReLU更灵活。
Exponential Linear Unit (ELU):
分析:ELU在处理负值时是平滑渐变的,而不是像ReLU那样突然硬截止到0。这使得它具有ReLU的所有优点(正区间的线性、缓解梯度消失),同时避免了Dying ReLU问题,并且使激活值的平均值更接近0,可能加快收敛。但计算涉及指数,稍慢一些。
3. Swish / Mish:平滑且自门控的现代激活函数
这些是更新的研究,在一些场景下(如Transformer、NAS发现的架构)表现优于ReLU。
Swish函数:
,其中
是sigmoid函数。
分析:
平滑:Swish是处处光滑可导的,没有ReLU那样的硬转折点,这可能使优化过程更稳定。
“自门控”特性:它不是简单地将负值截断为0,而是通过一个sigmoid门(值在0~1之间)来平滑地缩放输入 z。对于较大的正值,门控值≈1,类似于ReLU。对于负值,门控值≈0,但不是完全关闭,而是平滑地衰减。
这种平滑的非单调特性被证明在许多深度模型中非常有效,它有助于在信息的保留和过滤之间取得更好的平衡。
Mish函数:
分析:与Swish类似,Mish也是平滑且非单调的。它在许多计算机视觉任务中显示出比Swish和ReLU更好的性能,但其计算成本更高。
总结与对比
激活函数 | 公式 | 对梯度反向传播的影响 | 主要问题 |
---|---|---|---|
Sigmoid/Tanh | 极易导致梯度消失(导数在饱和区趋近于0) | 梯度消失,计算慢 | |
ReLU | 有效缓解梯度消失(正区间导数为1),加速收敛 | Dying ReLU(负区间导数为0) | |
Leaky ReLU/PReLU | 缓解梯度消失,同时避免了Dying ReLU(负区间有微小梯度) | 需要选择或学习 | |
Swish/Mish | 平滑地门控信息流,梯度传播特性优异,在许多前沿模型中表现最佳 | 计算成本稍高 |
最终结论:
激活函数通过其导数 直接参与反向传播的链式求导过程,是控制梯度流动的关键阀门。
饱和型激活函数(如Sigmoid, Tanh):是导致梯度消失的主要原因,不适用于深度网络。
非饱和型激活函数(如ReLU及其变体):通过在其主要区间保持导数恒定为1或一个非零值,使得梯度可以无损或较少损耗地传播,从而极大缓解了梯度消失问题,是现代深度学习的基石。
平滑且自门控的激活函数(如Swish, Mish):提供了更精细的梯度控制,通过平滑的过渡来决定让多少梯度通过,在复杂和深度的模型中往往能实现更稳定、更高效的梯度传播。