1. 常用激活函数
1.1 Sigmoid(S形函数)
公式:
f(x)=11+e−x f(x) = \frac{1}{1 + e^{-x}} f(x)=1+e−x1
- 输出范围:(0,1)(0, 1)(0,1)
- 应用场景:
- 二分类问题(通常用于输出层)。
- 概率值预测。
- 优点:
- 将值压缩到 (0,1)(0, 1)(0,1),适合概率输出。
- 缺点:
- 梯度消失问题:对于极大或极小的输入,梯度几乎为0,网络难以更新权重。
- 不适合深层网络。
1.2 Tanh(双曲正切函数)
公式:
f(x)=tanh(x)=ex−e−xex+e−x f(x) = \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} f(x)=tanh(x)=ex+e−xex−e−x
- 输出范围:(−1,1)(-1, 1)(−1,1)
- 应用场景:
- 中间隐藏层。
- 优点:
- 相较于 Sigmoid,输出值范围中心化在 0 附近,更适合深度网络。
- 缺点:
- 同样存在梯度消失问题。
1.3 ReLU(Rectified Linear Unit,线性修正单元)
公式:
f(x)=max(0,x) f(x) = \max(0, x) f(x)=max(0,x)
- 输出范围:[0,∞)[0, \infty)[0,∞)
- 应用场景:
- 隐藏层的默认选择,尤其在卷积神经网络(CNN)中。
- 优点:
- 计算简单,收敛速度快。
- 避免了梯度消失问题。
- 缺点:
- 死亡神经元问题:如果某些神经元的输入长期为负值,其梯度始终为0,可能导致这些神经元永远不再更新。
1.4 Leaky ReLU(带泄漏的ReLU)
公式:
f(x)={xif x>0αxif x≤0 f(x) = \begin{cases}
x & \text{if } x > 0 \\
\alpha x & \text{if } x \leq 0
\end{cases} f(x)={xαxif x>0if x≤0
- 输出范围:(−∞,∞)(-\infty, \infty)(−∞,∞)
- 应用场景:
- 隐藏层。
- 优点:
- 缓解了 ReLU 的“死亡神经元”问题。
- 缺点:
- 可能导致过拟合,需要小心调整参数 α\alphaα。
1.5 Softmax
公式:
f(xi)=exi∑jexj f(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} f(xi)=∑jexjexi
- 输出范围:(0,1)(0, 1)(0,1),且所有输出加和为1。
- 应用场景:
- 多分类问题的输出层。
- 优点:
- 将输入值转化为概率分布,适合分类问题。
- 缺点:
- 对大输入值可能不稳定,需要归一化。
2. 其他激活函数
2.1 ELU(Exponential Linear Unit)
公式:
f(x)={xif x>0α(ex−1)if x≤0 f(x) = \begin{cases}
x & \text{if } x > 0 \\
\alpha (e^x - 1) & \text{if } x \leq 0
\end{cases} f(x)={xα(ex−1)if x>0if x≤0
- 输出范围:(−α,∞)(-\alpha, \infty)(−α,∞)
- 应用场景:
- 隐藏层(特别是 ReLU 不适用的地方)。
- 优点:
- 保持负值的梯度,不会导致死亡神经元。
- 缺点:
- 计算量略大。
2.2 Swish
公式:
f(x)=x⋅σ(x) f(x) = x \cdot \sigma(x) f(x)=x⋅σ(x)
其中 σ(x)\sigma(x)σ(x) 是 Sigmoid 函数。
- 输出范围:(−∞,∞)(-\infty, \infty)(−∞,∞)
- 应用场景:
- 深层网络(由 Google 提出,表现优于 ReLU 和 Sigmoid)。
- 优点:
- 平滑性较好,收敛速度快。
- 在许多任务中优于 ReLU。
- 缺点:
- 计算稍复杂。
2.3 GELU(Gaussian Error Linear Unit,高斯误差线性单元)
公式:
f(x)=x⋅Φ(x) f(x) = x \cdot \Phi(x) f(x)=x⋅Φ(x)
其中 Φ(x)\Phi(x)Φ(x) 是标准正态分布的累积分布函数。
- 输出范围:(−∞,∞)(-\infty, \infty)(−∞,∞)
- 应用场景:
- Transformer 和 NLP 模型。
- 优点:
- 表现平滑,计算效率高。
- 对小值保留小梯度,大值快速激活。
2.4 Maxout
公式:
f(x)=maxi=1kzi f(x) = \max_{i=1}^{k} z_i f(x)=i=1maxkzi
- 输出范围:(−∞,∞)(-\infty, \infty)(−∞,∞)
- 应用场景:
- 高级模型的隐藏层。
- 优点:
- 增加了模型的表达能力。
- 缺点:
- 参数较多,容易过拟合。
3. 如何选择激活函数?
- 输出层:
- 二分类问题:
Sigmoid
- 多分类问题:
Softmax
- 回归问题:无激活函数(或线性激活)。
- 二分类问题:
- 隐藏层:
- 首选:
ReLU
或其变种(Leaky ReLU
、ELU
、GELU
)。 - 深层网络:尝试
Swish
或GELU
。 - 特定场景:使用
Tanh
或Sigmoid
(不推荐深度网络中使用)。
- 首选: