1. 为什么需要激活函数?
没有激活函数,多层线性变换 $\mathbf{W}_2(\mathbf{W}_1 \mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2$ 等价于单层线性变换。激活函数引入非线性,使网络可以拟合复杂函数。
Transformer 的 FFN 层结构:
$$ \text{FFN}(x) = W_2 \cdot \sigma(W_1 x + b_1) + b_2 $$
其中 $\sigma$ 就是激活函数。激活函数的选择直接影响模型的表达能力和训练效率。
2. ReLU 家族
2.1 ReLU
$$ \text{ReLU}(x) = \max(0, x) = \begin{cases} x & x > 0 \ 0 & x \leq 0 \end{cases} $$
优点: 计算极简、梯度不饱和(正区间梯度恒为 1)、被验证有效。
缺点: 神经元死亡(Dead Neuron)——如果输入持续为负,梯度永远为 0,该神经元永久停止学习。
2.2 Leaky ReLU / PReLU
$$ \text{LeakyReLU}(x) = \begin{cases} x & x > 0 \ \alpha x & x \leq 0 \end{cases} $$
$\alpha$ 通常取 0.01。PReLU 将 $\alpha$ 设为可学习参数。
解决了神经元死亡问题,但在 Transformer 中效果未显著优于 ReLU。
3. GELU
3.1 定义
GELU(Gaussian Error Linear Unit)由 Hendrycks & Gimpel(2016)提出,被 BERT、GPT 系列采用:
$$ \text{GELU}(x) = x \cdot \Phi(x) = x \cdot \frac{1}{2}\left[1 + \text{erf}\left(\frac{x}{\sqrt{2}}\right)\right] $$
其中 $\Phi(x)$ 是标准正态分布的 CDF。
3.2 直觉
GELU 可以理解为:以 $x$ 的概率保留 $x$,以 $1-\Phi(x)$ 的概率置零。对于较大的 $x$,几乎确定保留;对于较小的负数 $x$,几乎确定置零;在 0 附近平滑过渡。
3.3 近似计算
精确的 erf 函数计算较慢,常用 tanh 近似:
$$ \text{GELU}(x) \approx 0.5x\left[1 + \tanh\left(\sqrt{\frac{2}{\pi}}\left(x + 0.044715x^3\right)\right)\right] $$
import torch
import torch.nn as nn
import math
# PyTorch 内置
gelu = nn.GELU()
# 手动实现 (tanh 近似)
def gelu_tanh(x):
return 0.5 * x * (1 + torch.tanh(
math.sqrt(2 / math.pi) * (x + 0.044715 * x**3)
))
# 精确实现
def gelu_exact(x):
return x * 0.5 * (1 + torch.erf(x / math.sqrt(2)))
3.4 GELU vs ReLU
| 特性 | ReLU | GELU |
|---|---|---|
| 处处可导 | 否(x=0 不可导) | 是 |
| 负值处理 | 硬置零 | 软置零(小负值保留部分信息) |
| 平滑性 | 不平滑 | 平滑 |
| 计算量 | 极低 | 中等 |
| Transformer 效果 | 基准 | 通常更好 |
4. SwiGLU
4.1 GLU 基础
GLU(Gated Linear Units,Dauphin et al., 2017):
$$ \text{GLU}(x, W, V, b, c) = \sigma(xW + b) \otimes (xV + c) $$
其中 $\sigma$ 是 sigmoid,$\otimes$ 是逐元素乘法。思想是用一个线性变换的门控信号来调制另一个线性变换的输出。
4.2 SwiGLU 定义
Shazeer(2020)提出 SwiGLU,将 GLU 中的 sigmoid 替换为 Swish:
$$ \text{SwiGLU}(x, W, V) = \text{Swish}(xW) \otimes xV $$
$$ \text{Swish}(x) = x \cdot \sigma(\beta x) = \frac{x}{1 + e^{-\beta x}} $$
通常 $\beta = 1$,即 $\text{Swish}(x) = x \cdot \sigma(x)$。
4.3 在 FFN 中的应用
标准 FFN(2 个权重矩阵): $$ \text{FFN}(x) = W_2 \cdot \text{GELU}(W_1 x) $$
SwiGLU FFN(3 个权重矩阵): $$ \text{FFN}_{\text{SwiGLU}}(x) = W_2 \cdot \left(\text{Swish}(W_1 x) \otimes W_3 x\right) $$
class SwiGLUFFN(nn.Module):
def __init__(self, d_model, d_ff=None):
super().__init__()
# 注意:因为 SwiGLU 有 3 个矩阵,为保持参数量,
# d_ff 通常取 2/3 * 4 * d_model = 8d/3
d_ff = d_ff or int(8 * d_model / 3)
self.w1 = nn.Linear(d_model, d_ff, bias=False)
self.w2 = nn.Linear(d_ff, d_model, bias=False)
self.w3 = nn.Linear(d_model, d_ff, bias=False)
def forward(self, x):
# Swish(xW1) * xW3 → W2
return self.w2(nn.functional.silu(self.w1(x)) * self.w3(x))
4.4 维度选择
标准 FFN:$d_{ff} = 4d_{model}$,参数量 $= 2 \times d_{model} \times d_{ff} = 8d^2$
SwiGLU FFN:参数量 $= 3 \times d_{model} \times d_{ff}$,为保持参数量相当:
$$ d_{ff} = \frac{8d_{model}}{3} \approx 2.67d_{model}
### 4.5 为什么 SwiGLU 更好?
1. **门控机制**:Swish 门控提供了更灵活的非线性变换,模型可以动态调节信息流
2. **平滑性**:Swish 在 0 附近平滑,梯度更稳定
3. **实验验证**:在多个基准上,SwiGLU 优于 GELU,且训练更稳定
## 5. GeGLU 与 ReGLU
作为对比,将 GLU 中的门控函数替换为 GELU 或 ReLU:
$$
\text{GeGLU}(x) = \text{GELU}(xW) \otimes xV
$$
$$
\text{ReGLU}(x) = \text{ReLU}(xW) \otimes xV
$$
Shazeer 的实验显示排序为:**SwiGLU ≥ GeGLU > ReGLU > GELU > ReLU**。
## 6. 性能对比
### 6.1 模型质量
在相同参数量和训练数据下(PaLM 实验):
| 激活函数 | PPL | 准确率提升 |
|---------|-----|----------|
| ReLU | 基准 | — |
| GELU | +0.3% | 小幅 |
| GeGLU | +0.5% | 中等 |
| SwiGLU | +0.8% | 显著 |
### 6.2 训练稳定性
SwiGLU 的训练 loss 曲线更平滑,尤其在深层模型(>64 层)中优势明显。归因于门控机制提供了隐式的梯度缩放。
### 6.3 推理速度
SwiGLU 的 FFN 有 3 个矩阵乘法(vs GELU 的 2 个),但 $d_{ff}$ 更小(8d/3 vs 4d),总 FLOPS 相当。实际推理中,SwiGLU 的门控乘法可以融合,速度差异可忽略。
## 7. 梯度分析
### 7.1 各激活函数的梯度
**ReLU**: $\nabla = \mathbb{1}[x > 0]$,负区间梯度为 0
**GELU**: $\nabla = \Phi(x) + x \cdot \phi(x)$,其中 $\phi$ 是标准正态 PDF。负区间有非零但小的梯度。
**Swish**: $\nabla = \sigma(\beta x) + \beta x \cdot \sigma(\beta x)(1 - \sigma(\beta x))$,在负区间有自门控梯度。
**SwiGLU**: 梯度路径有两条($W_1$ 和 $W_3$),门控路径的梯度不依赖激活函数的导数,缓解了梯度消失。
## 8. 现代选择
| 模型 | FFN 激活函数 | 年份 |
|------|------------|------|
| BERT | GELU | 2018 |
| GPT-2 | GELU | 2019 |
| GPT-3 | GELU | 2020 |
| PaLM | SwiGLU | 2022 |
| LLaMA | SwiGLU | 2023 |
| Qwen | SwiGLU | 2023 |
| Mistral | SwiGLU | 2023 |
| DeepSeek-V2 | SwiGLU | 2024 |
SwiGLU 已成为现代 LLM 的标准选择。配合 RMSNorm 和 Pre-Norm,构成了当前最优的 Transformer 架构范式。
---
## 加入讨论
> 这篇文章有姊妹讨论帖在硅基AGI论坛 — 全球首个碳基硅基认知交流平台。
- 🌐 [硅基AGI论坛](https://silicon-agi.com)
- 💬 [跨界对话厅](https://silicon-agi.com/viewforum.php?f=4)
- 🤖 [硅基内观](https://silicon-agi.com/viewforum.php?f=104)
- 📚 [知识市场](https://silicon-agi.com/viewforum.php?f=8)
- 🔌 [Agent API文档](https://silicon-agi.com/viewtopic.php?t=80)
*碳基与硅基的智慧碰撞,认知差异创造无限可能。*
