深度解析激活函数:从Sigmoid到Leaky ReLU
一.什么是激活函数
激活函数(Activation Function)是神经网络中每个神经元的输出变换函数,负责将输入信号的加权和(可能包含偏置项)通过非线性映射转换为输出信号。其核心作用包括:
- 引入非线性:使神经网络能够拟合任意复杂函数(否则多层网络等价于单层线性变换)。
- 决定神经元激活状态:通过阈值或概率控制信息传递(如ReLU的稀疏激活、Sigmoid的概率输出)。
- 梯度传播:影响反向传播中梯度的计算方式,进而影响训练稳定性。
二.为什么要用激活函数
激活函数在深度学习中起到引入非线性的关键作用。没有激活函数,多层神经网络将退化为线性变换的叠加,无法表达复杂的非线性关系。
在没有激活函数的情况下,单个神经元的计算是输入特征的线性加权和加上偏置项,如下图所示:

其中x是深度学习模型中的输入,y是深度学习模型中的输出,w是全局的权重矩阵,b是偏置.
多个线性层的组合本质上等价于单个线性变换,因为线性变换的复合仍然是线性的.如将
y1 = W1 * x + b1
y2 = W2 * y1 + b2
进行合并,,就会得到
y2 = W2 * (W1 * x + b1) + b2 = (W2 * W1) * x + (W2 * b1 + b2)
依然还是线性结构,如下图所示:


就算叠加多层线性网络,w1,w2...,b1,b2...本质上都是常数,不管是w1*w2*...还是w1+w2...结果还是一个常数,b1,b2...同理.也就是说无论使用多次层神经网络,或者将它们叠加成线性变换,最终得到的依然是y=wx+b,还是线性结构,也只能解决线性问题.

要想解决这个问题,此时就引入了我们的激活函数,在线性单元后面添加一个非线性函数,也就是我们的激活函数,因此神经网络层的算法也就变成了f(x)=
*
(
*
(
*x+
)+
)+
.
三.满足激活函数的基本要求
(1)非线性性:
激活函数必须是非线性的,因为非线性性是激活函数区别于简单线性变换的核心特征,它使神经网络能够拟合任意复杂函数,否则多层神经网络将退化成单层线性模型.而且只能学习到缩放和平移.
非线性函数对每个神经元的输出进行非线性映射,通过弯曲的变化改变输入输出的比例关系,使其能够叠加成复杂的决策边界,使神经网络能够学习复杂的模式.
线性函数和非线性函数的关键区别在于非线性的导数不是常数.
(2)可微性:
可微性是指函数在某一点或某一区间内存在导数(梯度),在神经网络中,激活函数的可微性直接关系到模型能否通过反向传播有效学习.它的核心作用是告诉每个参数,应该往哪个方向调整,以及调整多少.
神经网络的参数通过梯度下降法更新,梯度是损失函数对参数的偏导数。激活函数的导数是计算梯度的关键部分。
激活函数的导数的大小直接影响参数更新的幅度:导数较大时,梯度增大,参数更新幅度大,学习速度快;导数较小时,梯度减小,参数更新幅度小,学习速度慢。
梯度下降的依赖:神经网络通过计算损失函数(损失函数L(y,)是一个标量函数,用来衡量模型预测值
与真实标签y之间的误差)的梯度(导数)来更新权重,如果激活函数不可微,就无法计算梯度.
反向传播时,损失函数的梯度需要通过激活函数的导数传递到参数W和b:
=
*
*
其中是激活函数的导数,
是损失函数的导数,
是线性函数(y=wx+b)的导数.
可以将神经网络的学习过程比作水流从山顶流下。激活函数的导数就像水流的阀门,控制水流的大小和方向。如果某个阀门关闭(不可微),水流就无法继续向下传递,整个系统就会停滞。因此,可微性是神经网络能够有效学习的关键。
(3)单调性:
单调性是指函数的值是否始终朝一个方向变化(要么一直增大,要么一直减小)。在神经网络中,激活函数的单调性直接影响梯度传播的稳定性和模型的可解释性.其中包括以下特点:
1.梯度方向的一致性
梯度始终为正(或非负),保证参数更新方向与损失减少方向一致.如果梯度可正可负数,可能导致参数更新方向混乱.
2.模型的稳定性
单调激活函数通常更容易收敛,因为参数更新路径更可预测,非单调激活函数可能在某些区间引入"震荡".
3.可解释性
单调函数中,输入和输出的关系更加直观(如输入越大,激活越强)
总结:单调激活函数:稳定,易解释,适合大多数任务,非单调激活函数:更加灵活,可能提升性能,但需实验验证.
(4)输出范围可控:
在神经网络中,输出范围可控的激活函数可以确保神经元的输出值落在特定区间(如[0,1],[-1,1]或自定义范围),这对模型稳定性(避免数值爆炸.如输出无限增大),梯度传播和任务需求(如概率输出,归一化)至关重要.
(5)计算高效性:
在深度学习中,激活函数的计算效率直接影响模型的训练速度和实时推理性能.以下是计算高效激活函数的设计原理,常见选择以及优化技巧,涵盖数学形式,计算复杂度对比和实际应用场景:
1.低算术运算量:避免指数,除法等复杂运算
2.硬件友好:适配GPU/TPU的并行计算
3.内存占用小:无需存储中间变量
4.梯度计算简单:导数无需额外的复杂计算
四.常用的激活函数
1.Sigmoid
数学表达式: S=
其中x 是输入值, e 是自然常数,约等于 2.71828.
函数图像:

该函数的输出范围是 (0,1),无论输入的 x 是多大或者多小的实数,经过Sigmoid函数处理后,其结果都会被压缩到 0 到 1 这个区间内.
图像特征:
Sigmoid函数的图像呈现出“S”形曲线。当 x=0 时,S(0)=。当 x趋向于正无穷大时,
趋向于 0,此时 S(x) 趋向于 1;当 x 趋向于负无穷大时,
趋向于正无穷大,S(x) 趋向于 0。
单调性:Sigmoid函数是单调递增的,即随着输入 x的增大,输出值也会不断增大。
可导性:
它是可导的,其导数为 S′(x)=S(x)(1−S(x)).导数在 x=0处取得最大值 0.25,当 x 趋向于正负无穷大时,导数趋向于 0。
导数图像:

在早期的神经网络中,Sigmoid函数常被用作激活函数。激活函数的作用是给神经网络引入非线性因素,使得神经网络可以拟合任意复杂的函数。例如在多层感知机(MLP)中,神经元的输出经过Sigmoid函数处理后,能够将输入信号映射到一个合适的范围,模拟生物神经元的兴奋和抑制状态。
在二分类任务中,Sigmoid函数可以将模型的输出转换为概率值。例如,在一个简单的二分类神经网络模型中,最后一层神经元的输出经过Sigmoid函数处理后,得到的结果可以看作是样本属于正类的概率。如果输出值大于 0.5,则可以将样本分类为正类;反之,则分类为负类。
局限性:
梯度消失问题
由于Sigmoid函数的导数在 x 趋向于正负无穷大时趋向于 0,在深度神经网络的反向传播过程中,经过多层的链式求导,梯度会变得非常小,导致权重更新非常缓慢甚至停止更新,这就是梯度消失问题。
输出不是零中心
Sigmoid函数的输出总是大于 0,这会导致在神经网络中,权重的更新方向只能朝着一个方向进行,使得收敛速度变慢。
2.Tanh
数学表达式:tanh(x)==
其中,sinh(x)sinh(x) 是双曲正弦函数,cosh(x)cosh(x) 是双曲余弦函数。Tanh 函数将输入值映射到 (−1,1)(−1,1) 的区间内
函数图像:

图像特征:
Tanh 函数的值域为 (−1,1)(−1,1),这意味着无论输入值是多少,函数的输出都会被限制在这个范围内。这种特性使得 Tanh 函数在处理一些需要将数据归一化到特定区间的任务中非常有用,例如在神经网络中,它可以帮助控制神经元的输出范围,避免输出值过大或过小。
单调性:
Tanh 函数是单调递增的,其导数始终为正。这一性质使得它在优化过程中具有一定的稳定性,因为单调递增的函数在梯度下降等优化算法中更容易收敛。
对称性:
Tanh 函数是奇函数,即 tanh(−x)=−tanh(x)tanh(−x)=−tanh(x)。这意味着函数关于原点对称,这种对称性在神经网络中有助于模型学习数据的正负特征。
导数图像:

在神经网络中,Tanh 函数常被用作激活函数,用于引入非线性因素。相比于 Sigmoid 函数,Tanh 函数的输出以 0 为中心,这使得它在训练过程中能够更快地收敛,因为在梯度下降过程中,输入数据的正负信息能够更好地被保留和传递。例如,在一些循环神经网络(RNN)及其变体(如 LSTM、GRU)中,Tanh 函数常被用于控制细胞状态和输出的非线性变换。
局限性:
梯度消失问题:尽管 Tanh 函数在一定程度上缓解了 Sigmoid 函数的梯度消失问题,但当输入值非常大或非常小时,Tanh 函数的导数仍然会趋近于 0,从而导致梯度消失
3.ReLU
数学表达式:y=max(0,x)
这意味着当输入 x 大于 0 时,输出就等于输入值 x;而当输入 x 小于或等于 0 时,输出为 0。
函数图像:

图像特征:
ReLU 函数的图像是一条折线,在 x 轴负半轴上,函数值恒为 0;在 xx 轴正半轴上,函数值等于输入值 x,呈现出线性增长的趋势。
导数图像:

-
非线性:尽管 ReLU 在正半轴上表现为线性,但整个函数是非线性的。这种非线性特性使得神经网络能够学习到复杂的模式和特征,因为只有非线性激活函数才能让神经网络逼近任意复杂的函数。
-
稀疏性:当输入小于等于 0 时,ReLU 函数的输出为 0。这会导致网络中一部分神经元的输出为 0,使得网络具有稀疏性。稀疏的网络可以减少参数之间的相互依赖,降低过拟合的风险。
-
计算简单:ReLU 函数的计算只涉及到取最大值的操作,相比于其他复杂的激活函数(如 Sigmoid 或 Tanh),计算速度更快,能够显著提高神经网络的训练效率。
-
缓解梯度消失问题:在传统的激活函数(如 Sigmoid 和 Tanh)中,当输入值非常大或非常小时,函数的导数趋近于 0,这会导致在反向传播过程中梯度变得非常小,使得网络难以学习。而 ReLU 函数在正半轴上的导数恒为 1,不会出现梯度消失的问题,能够让网络更有效地进行训练。
-
引入非线性
如前文所述,ReLU 的非线性特性使得神经网络能够学习到复杂的非线性关系。在多层神经网络中,每一层的 ReLU 激活函数都为网络引入了新的非线性变换,从而增强了网络的表达能力。
局限性:
-
死亡 ReLU 问题:如果输入的梯度在反向传播过程中一直为负,那么神经元的权重将不会得到更新,该神经元将永远不会被激活,即“死亡”。这种情况通常发生在学习率设置过大时。
4.Leaky ReLU
数学表达式:
其中,x 是输入值,α 是一个小于 1 的正常数,通常取值为 0.01 。这个常数 α 被称为“泄漏”系数,它允许在输入为负数时,神经元仍有一个非零的输出,从而避免了“神经元死亡”的问题。
函数图像:

图像特征:
与传统的 Sigmoid 和 Tanh 激活函数相比,Leaky ReLU 在正半轴上的导数恒为 1,在负半轴上的导数为 α,因此在整个定义域内都有非零的导数,能够有效缓解梯度消失问题,使得网络在深层训练时能够更稳定地收敛。
导数图像:

由于在输入为负数时,Leaky ReLU 会有一个非零的输出,因此可以避免 ReLU 中出现的“神经元死亡”问题,保证神经元在整个训练过程中都能参与更新。
Leaky ReLU 的计算非常简单,只需要进行一次比较和一次乘法运算,因此计算效率高,能够加快网络的训练速度。
局限性:
Leaky ReLU 中的 α 是一个超参数,需要手动设置。不同的数据集和任务可能需要不同的 α值,因此选择合适的 α 比较困难,需要进行大量的实验和调优。
虽然 Leaky ReLU 在实践中表现良好,但它的理论基础相对不足,缺乏严格的数学证明来解释其在各种情况下的有效性。
更多推荐
所有评论(0)