关于神经网络中的激活函数

发布于:2025-03-22 ⋅ 阅读:(22) ⋅ 点赞:(0)

激活函数(Activation Function)详解

理解

首先煮波解释一下这四个字,“函数”相信大家都不陌生,能点进来看这篇文章说明你一定经历至少长达十年的数学的摧残,关于这个概念煮波就不巴巴了,煮波主要说一下“激活”,大家可能或多或少的看过类似于古装,玄幻,修仙等类型的小说或者电视剧。剧中的主角往往是天赋异禀或则什么神啊仙啊的转世,但是这一世他却被当成了普通人,指导某一时刻才会迸发出全部的能量(主角:你触碰到了我的逆鳞!!!!龙有逆鳞,触之必死,哈哈哈哈哈哈,太中二了)。ok,其实这里的激活差不多的意思,本身我们的网络(爽文主角)很强,可以学习到很多的细节(主角是什么天生异瞳,身具异火啥的),但是确没法很好的get复杂的模式(主角被界面压制了自身的实力),这就需要一个激活其本身的潜力(打通任督二脉,开龙脊),然后我们的网络就很开门啦!(主角:这一世我要拿回属于我的全部!!!!!!)

1. 激活函数的作用

在神经网络中,激活函数的主要作用是:

  1. 引入非线性:若无激活函数,神经网络的多个层可以视作线性变换的叠加,本质上等效于单层线性变换,无法学习复杂的模式。
  2. 控制梯度流动:合适的激活函数可以缓解梯度消失或梯度爆炸问题。
  3. 影响网络的收敛速度:不同激活函数的计算复杂度不同,会影响训练速度和收敛效果。
  4. 增强表达能力:某些激活函数可以提供特定的特性,例如稀疏性、平移不变性等。

2. 常见激活函数解析

2.1. Sigmoid(S形激活函数)

数学表达式

f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+ex1

导数

f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x) = f(x)(1 - f(x)) f(x)=f(x)(1f(x))

特点
  • 值域 ( 0 , 1 ) (0,1) (0,1)
  • 单调递增,具有平滑性非线性
  • 当输入较大或较小时,梯度接近 0,易导致梯度消失问题
  • 对称性:以 0.5 0.5 0.5 为中心,但非零均值
  • 计算复杂度较高(涉及指数运算)
应用场景
  • 适用于二分类问题的输出层(如逻辑回归)
  • 早期神经网络(如 MLP)广泛使用,但因梯度消失问题,在深度网络中较少使用

2.2. Tanh(双曲正切函数)

数学表达式

f ( x ) = tanh ⁡ ( x ) = e x − e − x e x + e − x f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=tanh(x)=ex+exexex

导数

f ′ ( x ) = 1 − f ( x ) 2 f'(x) = 1 - f(x)^2 f(x)=1f(x)2

特点
  • 值域 ( − 1 , 1 ) (-1,1) (1,1)
  • 单调递增,具有平滑性非线性
  • 相较于 Sigmoid,其均值为 0,有助于梯度更快传播
  • 梯度仍可能在较大或较小输入值时趋于 0(梯度消失问题)
  • 计算复杂度高(涉及指数运算)
应用场景
  • 常用于循环神经网络(RNN),尤其是在 LSTM 结构中
  • 在某些情况下比 Sigmoid 更合适,尤其是隐藏层

2.3. ReLU(修正线性单元)

数学表达式

f ( x ) = max ⁡ ( 0 , x ) f(x) = \max(0, x) f(x)=max(0,x)

导数

f ′ ( x ) = { 1 , x > 0 0 , x ≤ 0 f'(x) = \begin{cases} 1, & x > 0 \\ 0, & x \leq 0 \end{cases} f(x)={1,0,x>0x0

特点
  • 值域 [ 0 , + ∞ ) [0, +\infty) [0,+)
  • 计算简单,梯度传播效果较好
  • 避免了 Sigmoid 和 Tanh 的梯度消失问题
  • 可能导致"神经元死亡"(Dead Neurons),即当输入小于 0 时,梯度始终为 0,导致该神经元永远无法被激活
应用场景
  • 目前最常用于深度神经网络(DNN)的隐藏层
  • CNN(卷积神经网络)广泛使用 ReLU

2.4. Leaky ReLU(带泄漏的 ReLU)

数学表达式

f ( x ) = { x , x > 0 α x , x ≤ 0 f(x) = \begin{cases} x, & x > 0 \\ \alpha x, & x \leq 0 \end{cases} f(x)={x,αx,x>0x0

其中, α \alpha α 是一个较小的正数(如 0.01)。

导数

f ′ ( x ) = { 1 , x > 0 α , x ≤ 0 f'(x) = \begin{cases} 1, & x > 0 \\ \alpha, & x \leq 0 \end{cases} f(x)={1,α,x>0x0

特点
  • 解决 ReLU 的“神经元死亡”问题,使得当 x < 0 x < 0 x<0 时,梯度仍然可传播
  • 仍然保持 ReLU 的计算效率
  • α \alpha α 需要人为设定,可能需要调参
应用场景
  • 深度神经网络(DNN),特别是在防止神经元死亡问题时使用
  • 适用于 CNN 和 DNN 的隐藏层

3. 结论

激活函数 计算复杂度 梯度消失 负值处理 适用场景
Sigmoid 二分类输出
Tanh RNN 隐藏层
ReLU CNN, DNN 隐藏层
Leaky ReLU 防止神经元死亡
ELU 中等 CNN, DNN
Swish 高端模型(如 EfficientNet)

不同场景需选择合适的激活函数,以提升模型性能和收敛速度。