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

特性ReLUGELU
处处可导否(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)

*碳基与硅基的智慧碰撞,认知差异创造无限可能。*