1. Sigmoid 函数
- 公式:
Sigmoid ( x ) = 1 1 + e − x \text{Sigmoid}(x) = \frac{1}{1 + e^{-x}} Sigmoid(x)=1+e−x1 - 特点:输出范围在 (0, 1) 之间。适用于输出为概率的任务(如二分类)。缺点是当输入的绝对值很大时,梯度会变得非常小(梯度消失),影响模型的训练。
2. Tanh(双曲正切)函数
- 公式:
Tanh ( x ) = e x − e − x e x + e − x \text{Tanh}(x) = \frac{e^{x} - e^{-x}}{e^{x} + e^{-x}} Tanh(x)=ex+e−xex−e−x - 特点:输出范围在 (-1, 1) 之间。与 Sigmoid 函数相比,Tanh 在输入接近 0 时梯度较大,因此收敛速度更快。也会遇到梯度消失问题。
3. ReLU(Rectified Linear Unit)函数
- 公式:
ReLU ( x ) = max ( 0 , x ) \text{ReLU}(x) = \max(0, x) ReLU(x)=max(0,x) - 特点:简单高效,计算速度快。输出范围在 [0, ∞) 之间。解决了梯度消失问题,但可能会遇到“死亡 ReLU”问题(某些神经元永远不会激活)。
4. Leaky ReLU 函数
- 公式:
Leaky ReLU ( x ) = { x if x g t ; 0 α x if x ≤ 0 \text{Leaky ReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases} Leaky ReLU(x)={xαxif xif x≤0gt;0
其中, α \alpha α 是一个小的正数,通常取 0.01。 - 特点:解决了“死亡 ReLU”问题,因为它允许负输入有一个小的负斜率。
5. Parametric ReLU (PReLU) 函数
- 公式:
PReLU ( x ) = { x if x g t ; 0 α x if x ≤ 0 \text{PReLU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha x & \text{if } x \leq 0 \end{cases} PReLU(x)={xαxif xif x≤0gt;0
其中, α \alpha α 是一个可以学习的参数。 - 特点:是 Leaky ReLU 的推广,允许模型学习负斜率的值。
6. Exponential Linear Unit (ELU) 函数
- 公式:
ELU ( x ) = { x if x g t ; 0 α ( e x − 1 ) if x ≤ 0 \text{ELU}(x) = \begin{cases} x & \text{if } x > 0 \\ \alpha(e^{x} - 1) & \text{if } x \leq 0 \end{cases} ELU(x)={xα(ex−1)if xif x≤0gt;0
其中, α \alpha α 通常取 1。 - 特点:在 ReLU 基础上进行改进,使得负输入能够有较大的负输出,从而有助于中心化数据以更好地加速学习。
7. Swish 函数
- 公式:
Swish ( x ) = x ⋅ Sigmoid ( x ) \text{Swish}(x) = x \cdot \text{Sigmoid}(x) Swish(x)=x⋅Sigmoid(x) - 特点:是一种自门控激活函数,由 Google 提出。具有平滑的非线性,有助于缓解梯度消失问题,并且在某些任务上表现优于 ReLU。
8. Softmax 函数
- 公式:
Softmax ( x i ) = e x i ∑ j e x j \text{Softmax}(x_i) = \frac{e^{x_i}}{\sum_{j} e^{x_j}} Softmax(xi)=∑jexjexi - 特点:通常用于多分类任务的输出层。将输入向量转化为概率分布。
9. GELU(Gaussian Error Linear Unit)函数
- 公式:
GELU ( x ) = x ⋅ Φ ( x ) \text{GELU}(x) = x \cdot \Phi(x) GELU(x)=x⋅Φ(x)
其中, Φ ( x ) \Phi(x) Φ(x) 是标准正态分布的累积分布函数。 - 特点:是一种平滑的激活函数,近年来在 Transformer 等模型中得到广泛应用。
这些激活函数各有优劣,选择适合的激活函数对于不同的任务和网络结构至关重要。ReLU 及其变种是当前最为常用的激活函数,但根据任务的需求,也可以考虑使用其他激活函数。
可视化