1. 激活函数的作用
神经网络中的激活函数用于将输入信号映射到输出信号,赋予网络非线性变换能力。具体来说,激活函数有以下作用:
- 引入非线性:如果网络中仅包含线性运算,其输出仍是输入的线性组合,无法逼近复杂函数。
- 数据归一化:某些激活函数(如 sigmoid)会将输出限制在特定区间内,方便后续处理。
- 梯度传播:激活函数的选择影响反向传播中的梯度计算,从而影响网络的训练效率。
2. 常见的激活函数
2.1 Sigmoid 函数
Sigmoid 函数是最早期使用的激活函数之一,其定义为:
特点:
缺点:
2.2 Tanh 函数
Tanh 函数是 Sigmoid 的变种,其定义为:
特点:
2.3 ReLU 函数
ReLU(Rectified Linear Unit)是目前最常用的激活函数之一,定义为:
特点:
缺点:
- 存在 "死亡 ReLU" 问题,即某些神经元可能永远输出 0,无法恢复。
2.4 Leaky ReLU 函数
为了解决 ReLU 的 "死亡问题",提出了 Leaky ReLU,定义为:
其中, 是一个较小的正数(如 0.01)。
特点:
2.5 Exponential Linear Unit (ELU)
ELU(指数线性单元)通过在输入为负时使用指数函数改善了 ReLU 的性能,其定义为:
其中, 是一个超参数(通常为 1)。
特点:
缺点:
2.6 Noisy ReLU
Noisy ReLU 是一种在标准 ReLU 的基础上加入随机噪声的变体,其定义为:
其中, 是从某个分布中抽样的随机噪声(如高斯分布)。
特点:
缺点:
2.7 Softmax 函数
Softmax 函数通常用于分类问题的输出层,其定义为:
特点:
2.8 Swish 函数
Swish 函数由 Google 提出,定义为:
特点:
平滑可导,自适应学习。
在深层网络中性能优于 ReLU。
3. 激活函数的比较