常用的激活函数

简单记录学习~

激活函数(Activation Function)是神经网络中用于增加非线性的关键部分,它决定了神经网络是否能够学习和表示复杂的函数。激活函数帮助网络学习输入与输出之间的复杂关系,常用的激活函数包括 Sigmoid、Tanh、ReLU 及其变种(如 Leaky ReLU、ELU、SELU 等),每种激活函数都有其特点和适用场景。

1. Sigmoid 激活函数

Sigmoid 函数将输入映射到 [0, 1] 区间,公式如下: \sigma(x) = \frac{1}{1 + e^{-x}}

特点:
  • 输出范围:0 到 1,适用于二分类任务的输出层。
  • 它具有平滑的梯度,可以提供稳定的学习过程。
缺点:
  • 梯度消失问题:当输入值非常大或非常小的时候,Sigmoid 的梯度会变得非常小,导致梯度消失,从而影响模型的学习。
  • 输出非零中心:当输入接近 0 时,Sigmoid 输出接近 0.5,导致梯度更新不平衡。
适用场景:
  • 二分类问题的输出层。

2. Tanh 激活函数

Tanh(双曲正切)是 Sigmoid 的一个变种,输出范围为 [-1, 1]。公式如下:

\tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}

特点:
  • 输出范围:-1 到 1,比 Sigmoid 更适合神经网络训练,梯度更大。
  • 也有平滑的导数,使得反向传播时可以传递梯度。
缺点:
  • 梯度消失问题:虽然 Tanh 的输出范围是 [-1, 1],但是当输入过大或过小时,梯度也会变得非常小。
  • 非零中心:对于非常大的或非常小的输入值,Tanh 的输出会趋近于 1 或 -1,仍然存在梯度消失的风险。
适用场景:
  • 在一些神经网络中,尤其是 RNN(循环神经网络)中常用,尤其是对于需要输出范围在 [-1, 1] 的问题。

3. ReLU 激活函数

ReLU(Rectified Linear Unit,修正线性单元)是最常用的激活函数之一。公式如下:

\text{ReLU}(x) = \max(0, x)

特点:
  • 输出范围:[0, ∞),非常简单且计算效率高。
  • 非线性:可以有效地处理梯度消失问题,使得网络可以更深层次地训练。
缺点:
  • Dying ReLU 问题:如果 ReLU 函数的输入值总是负数,那么该神经元将始终输出零,无法更新权重,导致该神经元“死亡”。
  • 不具有输出的平滑性。
适用场景:
  • 在深度神经网络、卷积神经网络(CNN)中广泛使用,尤其是当网络深度较大时,ReLU 带来的优势非常明显。

4. Leaky ReLU 激活函数

Leaky ReLU 是 ReLU 的一种改进,旨在解决 Dying ReLU 问题。公式如下:

\text{LeakyReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases}

其中,$\alpha$  是一个很小的常数,通常设为 0.01。

特点:
  • 允许负数值通过,即使对于负值也有一定的梯度( $\alpha$ )。
  • 解决了 Dying ReLU 问题。
缺点:
  • 仍然存在 ReLU 的其他问题,如训练时可能会出现梯度消失。
适用场景:
  • 适用于深度神经网络,尤其是在使用 ReLU 时出现 Dying ReLU 问题时。

5. ELU 激活函数

ELU(Exponential Linear Unit)是另一种常见的 ReLU 改进版,公式如下:

\text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha (e^x - 1) & \text{if } x \leq 0 \end{cases}

其中  $\alpha$  是一个常数,通常设为 1。

特点:
  • 输出范围: $(-\alpha, \infty)$ ,对于负值区域,ELU 输出是指数形式的平滑函数。
  • 解决了 ReLU 中的“死神经元”问题(Dying ReLU),并且能够保持负值信息。
缺点:
  • 计算较复杂,可能影响运行速度。
适用场景:
  • 适用于深度神经网络,尤其是需要避免 ReLU 死神经元问题的场景。

6. SELU 激活函数

SELU(Scaled Exponential Linear Unit)是 ELU 的一个变种,通过自我归一化的方式进一步提高了模型的表现。公式如下:

\text{SELU}(x) = \lambda \times \begin{cases} x & \text{if } x > 0 \\ \alpha(e^x - 1) & \text{if } x \leq 0 \end{cases}

其中,$\lambda$$\alpha$ 是常数。通常,$\alpha = 1.6733$  和 $\lambda = 1.0507$ 。

特点:
  • 自我归一化:能够自动处理激活值的范围,使得神经网络能够保持均值和方差恒定。
  • 具有 ELU 的优点,并且在特定的初始化条件下表现更好。
缺点:
  • 依赖于网络的初始化方法,需要特定的条件才能实现最优效果。
适用场景:
  • 适用于深度神经网络,尤其是在使用特定初始化策略时(例如,使用 He 初始化)。

7. Softmax 激活函数

Softmax 激活函数常用于分类问题的输出层,尤其是多分类问题。公式如下:

\text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}

其中,$x_i$  是输入向量的第  $i$ 个元素,$j$  遍历所有输出。

特点:
  • 输出范围:所有类别的概率之和为 1,适合多分类问题。
  • 将输入映射到 [0, 1] 区间,表示每个类别的概率。
适用场景:
  • 多分类问题的输出层。

激活函数比较

激活函数输出范围计算复杂度优点缺点适用场景
Sigmoid(0, 1)平滑,适合概率预测梯度消失,输出非零中心二分类任务的输出层
Tanh(-1, 1)平滑,输出零中心,梯度较大梯度消失二分类任务,RNN等
ReLU[0, ∞)非线性,解决了梯度消失问题Dying ReLU问题深度神经网络,卷积神经网络
Leaky ReLU(-∞, ∞)解决了Dying ReLU问题梯度较小时训练速度变慢深度神经网络,解决ReLU死神经元问题
ELU(-α, ∞)解决死神经元问题,平滑计算复杂,运行慢深度神经网络,尤其是需要避免ReLU死神经元
SELU(-α, ∞)自我归一化,适应深度网络需要特定的初始化方法深度神经网络,特定初始化条件下
Softmax(0, 1)多分类输出,输出为概率计算复杂,需要处理数值溢出问题多分类问题的输出层
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值