深度学习——激活函数的原理与应用

1 概述

激活函数(Activation Function)在深度学习中起着至关重要的作用,它能为神经网络引入非线性因素,使得神经网络可以拟合各种复杂的非线性关系。常用的激活函数有 sigmoid、 tanh、 relu等。

2 激活函数的作用

  • 引入非线性:在神经网络中,如果没有激活函数,无论有多少层神经元,整个网络都等价于一个线性变换模型,而线性模型的表达能力有限,无法处理像图像识别、语音识别等复杂任务中存在的高度非线性关系。激活函数通过对神经元的输出进行非线性变换,使得神经网络能够逼近任意复杂的函数,大大增强了网络的表达能力。
  • 决定神经元是否激活:神经元接收输入的加权和,激活函数根据这个加权和的值来确定神经元是否被 “激活” 以及激活的程度,从而控制信息在网络中的流动与传递。

3 常见的激活函数

3.1 Sigmoid 函数

函数图像呈现出 S 形,输出值范围在 (0,1) 之间。例如,当 x = 0 x=0 x=0 时, σ ( 0 ) = 1 2 \sigma(0) = \frac{1}{2} σ(0)=21;当 x x x 趋于正无穷时, σ ( x ) \sigma(x) σ(x)趋近于1;当 x x x 趋于负无穷时, σ ( x ) \sigma(x) σ(x)趋近于0。其数学表达式为
σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+ex1
导数公式:
σ ′ ( x ) = e − x ( 1 + e − x ) 2 = σ ( x ) ( 1 − σ ( x ) ) \sigma'(x) = \frac{e^{-x}}{(1 + e^{-x})^2} = \sigma(x)(1 - \sigma(x)) σ(x)=(1+ex)2ex=σ(x)(1σ(x))

它能将输入值映射到一个概率区间,常被用于二分类问题的输出层,把神经元的输出解释为属于某一类别的概率。但它存在一些缺点,比如容易出现梯度消失问题(当 x x x 取值绝对值较大时,导数趋近于0,导致反向传播时梯度更新缓慢甚至停止),并且输出不是以0为中心的,这可能会影响网络训练的效率。

而Softmax 在处理多分类问题时经常被用到。
在这里插入图片描述

3.2 Tanh 函数(双曲正切函数)

图像同样是 S 形,但输出值范围在 (-1,1) 之间,它是 Sigmoid 函数的一种变形。Tanh 函数的数学表达式如下:
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+exexex
或者等价地:
tanh ⁡ ( x ) = 2 ⋅ σ ( 2 x ) − 1 \tanh(x) = 2 \cdot \sigma(2x) - 1 tanh(x)=2σ(2x)1
导数公式:
tanh ⁡ ′ ( x ) = 1 − tanh ⁡ 2 ( x ) \tanh'(x) =1-\tanh^2(x) tanh(x)=1tanh2(x)
相比 Sigmoid 函数,它的输出是以 0 为中心的,这在一定程度上有助于缓解梯度更新时的一些问题,使训练过程可能更稳定一些。不过,它依然存在梯度消失的问题,常用于一些对输出值范围有相应要求且需要以 0 为中心的场景,比如在循环神经网络(RNN)的某些隐藏层中会被使用。
在这里插入图片描述

3.3 ReLU 函数(修正线性单元)

当输入 x x x 大于等于 0 时,输出就是 x x x 本身;当 x x x 小于 0 时,输出为 0 。图像看起来是一个在 x x x 轴负半轴为 0 ,正半轴为一条直线的折线形状。其表达式为:
R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x)
导数公式:
ReLU ′ ( x ) = { 1 , if  x > 0 0 , if  x ≤ 0 \text{ReLU}'(x) = \begin{cases} 1, & \text{if } x > 0 \\ 0, & \text{if } x \leq 0 \end{cases} ReLU(x)={1,0,if x>0if x0

ReLU 函数的计算非常简单,大大加快了网络的训练速度,并且在一定程度上缓解了梯度消失问题(只要输入大于 0 ,导数恒为 1 )。不过它也有缺点,比如当输入小于 0 时,神经元处于 “死亡” 状态(永远不会被激活,导致相应权重无法更新)。目前,它是深度学习中应用非常广泛的激活函数,在很多卷积神经网络(CNN)的隐藏层等位置常常被使用。
在这里插入图片描述

3.4 Leaky ReLU 函数

图像与 ReLU 类似,但在 x x x 轴负半轴不是完全为 0 ,而是有一个斜率为 α \alpha α 的直线段。 α \alpha α 是一个很小的常数(通常取值在(通常在 0 < α < 1 0<α<1 0<α<1 ) ,常用的值在 0.01 左右)。其数学公式为:

L e a k y R e L U ( x ) = { x , if  x ≥ 0 α x , if  x < 0 Leaky ReLU(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha x, & \text{if } x < 0 \end{cases} LeakyReLU(x)={x,αx,if x0if x<0

导数公式:
Leaky ReLU ′ ( x ) = { 1 , if  x > 0 α , if  x ≤ 0 \text{Leaky ReLU}'(x) = \begin{cases} 1, & \text{if } x > 0 \\ \alpha, & \text{if } x \leq 0 \end{cases} Leaky ReLU(x)={1,α,if x>0if x0
它是为了克服 ReLU 函数中神经元 “死亡” 的问题而提出的,使得在 x x x 小于 0 时也能有一定的梯度进行反向传播,权重可以继续更新,在一些对网络鲁棒性要求较高的场景中会被选用。
在这里插入图片描述

3.4 ELU 函数(指数线性单元)

x x x 小于 0 时呈现出指数增长的曲线形状,在 x x x 大于等于 0 时为直线。其中 α \alpha α 是一个常数(常取值在 1 左右)。其数学公式如下:
ELU ( x ) = { x , if  x > 0 α ( exp ⁡ ( x ) − 1 ) , if  x ≤ 0 \text{ELU}(x) = \begin{cases} x, & \text{if } x > 0 \\ \alpha(\exp(x) - 1), & \text{if } x \leq 0 \end{cases} ELU(x)={x,α(exp(x)1),if x>0if x0

导数公式:
ELU ′ ( x ) = { 1 , if  x > 0 α exp ⁡ ( x ) , if  x ≤ 0 \text{ELU}'(x) = \begin{cases} 1, & \text{if } x > 0 \\ \alpha \exp(x), & \text{if } x \leq 0 \end{cases} ELU(x)={1,αexp(x),if x>0if x0

它结合了 ReLU 函数的优点,同时解决了 ReLU 中神经元 “死亡” 以及输出均值不为 0 等部分问题,在训练过程中能使网络收敛得更快、更稳定,常用于一些图像分类、自然语言处理等任务的网络结构中。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值