常用激活函数
激活函数的作用:提供非线性
1.Sigmoid
输出范围在 (0, 1),适合二分类问题。公式为:
σ(x)=11+e−x \sigma(x) = \frac{1}{1 + e^{-x}} σ(x)=1+e−x1
缺点:易导致梯度消失,输出非零中心化。
2.Tanh
输出范围在 (-1, 1),零中心化。公式为:
tanh(x)=ex−e−xex+e−x \tanh(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}} tanh(x)=ex+e−xex−e−x
梯度消失问题仍存在,但优于Sigmoid。
3.ReLU
计算高效,缓解梯度消失。公式为:
ReLU(x)=max(0,x) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x)
缺点:神经元可能“死亡”(输出恒为0)。
4.Leaky ReLU
解决ReLU的死亡问题,引入微小负斜率(如0.01)。公式为:
LeakyReLU(x)={xif x≥0αxif x<0 \text{LeakyReLU}(x) = \begin{cases}
x & \text{if } x \geq 0 \\
\alpha x & \text{if } x < 0
\end{cases} LeakyReLU(x)={xαxif x≥0if x<0
5.Parametric ReLU (PReLU)
将Leaky ReLU的斜率 α\alphaα 作为可学习参数。
6.ELU(Exponential Linear Unit)
负值区域平滑,缓解死亡问题。公式为:
ELU(x)={xif x≥0α(ex−1)if x<0 \text{ELU}(x) = \begin{cases}
x & \text{if } x \geq 0 \\
\alpha(e^x - 1) & \text{if } x < 0
\end{cases} ELU(x)={xα(ex−1)if x≥0if x<0
7.Swish
谷歌提出的自门控激活函数。公式为:
Swish(x)=x⋅σ(βx) \text{Swish}(x) = x \cdot \sigma(\beta x) Swish(x)=x⋅σ(βx)
其中 σ\sigmaσ 为Sigmoid,β\betaβ 可学习或固定。
8.GELU(Gaussian Error Linear Unit)
常用于Transformer模型。公式为:
GELU(x)=x⋅Φ(x) \text{GELU}(x) = x \cdot \Phi(x) GELU(x)=x⋅Φ(x)
Φ(x)\Phi(x)Φ(x) 是标准正态分布的累积分布函数。
9.Softmax
多分类任务中输出概率分布。公式为:
Softmax(xi)=exi∑jexj \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}} Softmax(xi)=∑jexjexi
选择建议
- 隐藏层:优先使用ReLU或其变体(Leaky ReLU、Swish)。
- 二分类输出层:Sigmoid。
- 多分类输出层:Softmax。
- 梯度消失敏感场景:尝试GELU或Swish。