深度学习——激活函数
深度学习——激活函数
激活函数是人工是人工神经网络中一个关键的组成部分,它被设计用来引入非线性特性到神经网络模型中,使神经网络能够学习和逼近复杂的非线性映射关系。
1.引入非线性能力
- 没有激活函数的神经网络本质上只是线性变换的叠加,无论多少层也只能表示线性函数,能力有限。
- 激活函数使网络可以逼近任意复杂函数(依据万能逼近定理)
2.控制信息流动
- 某些激活函数可以抑制部分神经元的输出(如 ReLU),是模型更稀疏,有助于泛化。
3.提高训练效率
- 选择合适的激活函数可以加快梯度下降的收敛速度,避免梯度消失或爆炸。
1.Sigmoid

Sigmoid函数是最早被广泛使用的激活函数之一,它的公式为:
σ ( x ) = 1 1 + e − x (1) \sigma (x) = \frac{1}{1+e^{-x}} \tag{1} σ(x)=1+e−x1(1)
Sigmoid 函数的输出范围在0到1之间,是标准的 S 形函数。由于输出值在0和1之间,它相当于将每个神经元的输出归一化。常用于输出概率,比如二分类问题的输出层。
当输入值非常大或非常小时(即远离零)时,sigmoid 函数的梯度接近于零。这意味着在反向传播时,梯度更新会变得非常小,导致神经网络的学习速度变慢,甚至停止学习。
2.Softmax

Softmax函数,也称为归一化指数函数,是一个将向量映射到另一个向量的函数,其中输出向量的元素值代表了一个概率分布。在机器学习中,特别是在处理多类分类问题时,Softmax函数扮演着至关重要的角色。它可以将未归一化的数值转换成一个概率分布,使得每个类别都有一个对应的概率值,且所有类别的概率之和为1.
Softmax函数的广泛应用包括但不限于神经网络的输出层,在深度学习模型中,尤其是分类任务中,Softmax函数经常被用作最后一个激活函数,用于输出预测概率。
y k = e a k ∑ i = 1 n e a i (2) y_k = \frac{e^{a_k}}{\sum _{i=1}^n e^{a_i}} \tag{2} yk=∑i=1neaieak(2)
上式假设输出层共有 n 个神经元,计算第 k 个神经元的输出 y k y_k yk。
如果直接将上式代码实现,会在计算机的运算上存在一定的缺陷,这个缺陷就是溢出问题。 softmax 函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如, e 10 e^{10} e10 的值会超过20000, e 100 e^{100} e100 会变成一个后面有40多个0的超大值, e 1000 e^{1000} e1000 的结果会返回一个表示无穷大的 inf 。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况。
所以,为了防止溢出,一般会减去输入信号中的最大值,如下图所示:

3.ReLU

ReLU ,全称为 Rectified Linear Unit,修正线性单元,是目前深度神经网络中越来越受欢迎的一种激活函数,其数学表达式为:
y ( x ) = { x , x > 0 0 , x ≤ 0 \operatorname{y}(x)= \begin{cases} x, & x > 0 \\ 0, & x\leq0 & \end{cases} y(x)={x,0,x>0x≤0
Sigmoid 和 Tanh 存在梯度消失和计算效率较低的问题。ReLU函数解决了这些问题,具有计算简单、不易出现梯度消失等特点。
但是存在神经元死亡的缺点,即当 x ≤ 0 x \leq 0 x≤0 时,导数为0,可能导致神经元死亡。
ReLU的变种:
Leaky ReLU:允许负数部分有微弱斜率,如下式所示
y ( x ) = { x , x > 0 α x , x ≤ 0 \operatorname{y}(x)= \begin{cases} x, & x > 0 \\ \alpha x, & x\leq0 & \end{cases} y(x)={x,αx,x>0x≤0
α \alpha α 是一个小常数,通常取0.01。在反向传播过程中,对于 LeakyReLU 激活函数输入小于0的部分,也可以计算得到梯度(ReLU的值为0),这样就避免了梯度锯齿问题。
如上图所示,负区间有微小斜率,使得神经元即使在负值输入时仍可参与训练,解决了标准 ReLU 在 x < 0 x < 0 x<0 区域“神经元死亡”的问题。
4.ELU
ELU,即指数线性单元(Exponential Linear Unit),解决神经网络训练中的一些问题,如梯度消失、非连续性以及输出均值偏离零值等问题。
elu ( x ) = { x , x ≥ 0 α ( e x − 1 ) , x < 0 \operatorname{elu}(x)= \begin{cases} x, & x\geq0 \\ \alpha(e^x-1), & x<0 & \end{cases} elu(x)={x,α(ex−1),x≥0x<0
对于 x ≥ 0 x\geq0 x≥0 ,与ReLU一样;对于 x < 0 x < 0 x<0 ,避免 ReLU 的“死亡神经元”问题。 α \alpha α 控制负值区间的下限,常用值为 α = 1.0 \alpha=1.0 α=1.0 。
理想的激活函数应满足两个条件:
1.输出的分布是零均值的,加快训练速度。
2.激活函数是单侧饱和的,更好的收敛。
LeakyReLU 满足1不满足2;而ReLU满足2不满足1,ELU都满足。
5.Tanh
Tanh (双曲正切函数,全称 Hyperbolic Tangent)是一种经典的激活函数,广泛用于早期神经网络和递归神经网络。
t a n h ( x ) = e x − e − x e x + e − x tanh(x) = \frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=ex+e−xex−e−x
它与 Sigmoid 类似,但输出范围为[-1, 1],具备中心对称性,为 S 形曲线,使得它在一些应用场景中更具优势。但也同样存在梯度消失问题。
学习的时候常常将 tanh 函数与 sigmoid 函数放在一起,两者都是 S 形曲线,在输入值较大或较小时,都会出现梯度消失问题。在输入值较大或较小时, tanh 的梯度趋近于 0 ,导致反向传播时梯度不断缩小,层层传播之后,梯度可能接近 0 ,即梯度消失。