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

发布于:2025-03-22 ⋅ 阅读:(76) ⋅ 点赞:(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)

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


网站公告

今日签到

点亮在社区的每一天
去签到