Sigmoid → Tanh → ReLU → SiLU/GeLU → SwiGLU | 一条完整的技术迭代路线
一、演进时间线
激活函数的迭代不是随机替换,而是被一个核心矛盾驱动:梯度消失。每一次换代,都在试图让梯度在深层网络中更好地传播。
图 0:激活函数演进时间线
图 1:五大激活函数曲线对比(GeLU 用虚线表示,与 SiLU 高度重合)
二、Sigmoid — 开山鼻祖
沿着时间线,先从最早的 Sigmoid 说起。
取值范围:(0, 1)
Sigmoid 最早由比利时数学家 Pierre-François Verhulst 于 1838 年提出(最初用于人口增长模型),1986 年被广泛用于神经网络反向传播中作为激活函数。
优点
二分类友好 输出值域 (0, 1),天然适合概率输出。
易于求导 导数 = σ(x) × (1 − σ(x)),可以用自身表示,实现简洁。
最大值仅为 0.25
致命缺陷:梯度消失
导数最大值仅 0.25。在浅层网络时代问题不大,但随着网络加深,反向传播时每层都乘以一个 ≤ 0.25 的系数,梯度经过多层连乘后指数级衰减,导致深层网络几乎无法训练。
图 2:各激活函数导数对比 — 红色虚线标出了 Sigmoid 导数的上限 0.25
三、Tanh — 零中心化改良
取值范围:(−1, 1)
Tanh 可以理解为以零为中心的 Sigmoid。取值范围从 (0, 1) 变为 (−1, 1),中心点正好在 0。
相比 Sigmoid 的改进
零中心化 输出有正有负,避免了 Sigmoid 输出恒为正导致的梯度更新”zigzag”问题,训练更稳定。
导数更大 导数最大值达到 1.0(Sigmoid 仅 0.25),大幅减缓了浅层网络的梯度消失。
最大值 = 1.0
仍然存在的问题
虽然导数最大值提升到了 1,但仅在 x=0 附近达到峰值,两侧迅速衰减。当网络层数超过几十层时,多层梯度连乘后数值依然指数级衰减,梯度消失问题并未根除。Tanh 曾是早期 CNN、RNN、LSTM 的首选,但终被 ReLU 取代。
四、ReLU — 简单粗暴的颠覆者
x > 0 原样输出,x ≤ 0 置零
ReLU 的雏形在 1969 年就已出现,但早期并未受到重视。直到 2012 年 AlexNet 将 ReLU 用作卷积网络激活函数,几乎彻底解决了激活函数导致的深层网络梯度消失问题,训练速度远超 Sigmoid 和 Tanh,从此成为深度学习的标配。
三大优势
梯度不衰减 当输入为正时,导数恒为 1,反向传播中梯度永远不会衰减,基本解决了梯度消失。
计算极快 只需一个 max 运算,远比 Sigmoid/Tanh 的指数运算快,大幅降低算力消耗。
网络稀疏性 负输入直接置零,使网络自然产生稀疏激活,有正则化效果。
致命缺陷:神经元死亡
五、SiLU (Swish) — 门控初现
ReLU 的硬截断问题,引出了下一代思路:给激活加上”门控”。
即 x × Sigmoid(x)
SiLU 是 Swish 函数的一个特例(β=1 时),可以看作 Sigmoid 和 ReLU 的结合体:用 Sigmoid 作为门控函数,既保留了 ReLU 的正向线性特性,又在负数区间用平滑曲线替代了硬截断。
门控机制详解
所谓”门控”,就是输入 x 在激活时会先乘以 Sigmoid(x),Sigmoid 充当一个开关,控制信息通过的比例:
图 3:SiLU 门控机制 — 灰色虚线为输入 x,粉色为门控信号 σ(x),绿色为最终输出 x·σ(x)
x = 3 时
σ(3) ≈ 0.95 输出 = 3 × 0.95 = 2.85 相比输入 3,信息丢失极少
x = −3 时
σ(−3) ≈ 0.05 输出 = −3 × 0.05 = −0.15 保留了少量负值信息,而非直接置零
相比 ReLU 的改进
解决神经元死亡 负区间不再是硬截断,而是保留少量梯度信息,神经元不会永久失活。
全程可导 不像 ReLU 在 x=0 处不可导,优化更平滑。
YOLO 全系列 YOLO 模型在很多代中均使用 SiLU 作为激活函数。
六、GeLU — 高斯门控
其中 Φ(x) 为标准正态分布的累积分布函数(CDF)
GeLU 与 SiLU 思路类似,但门控函数从 Sigmoid 换成了标准正态分布的累积分布函数 Φ(x)。
什么是 Φ(x)?
Φ(x) 就是标准正态分布曲线从负无穷到 x 点下方的面积。比如 x=0 时,Φ(0) = 0.5(左半边面积占 50%)。Φ(x) 取值范围 (0, 1),同样起到门控作用:输入越大,Φ(x) 越接近 1(全量通过);输入越小,Φ(x) 越接近 0(几乎截止)。
GeLU 的图像与 SiLU 非常相似(见图 1 中的紫色虚线),但在负区间内保留的信息略少一些。GeLU 被早期 BERT 和 GPT 广泛采用。
七、SwiGLU — 大模型时代的标配
无论是 LLaMA、Qwen 还是 DeepSeek,当今主流大模型全面选择了 SwiGLU。它与前面的激活函数有本质区别:不是简单的输入一个数、输出一个数,而是对 Transformer FFN 层的结构性改造。
传统 FFN vs SwiGLU FFN
图 4:传统 FFN(左)vs SwiGLU FFN(右)架构对比
传统 FFN 的工作方式:输入 → 线性层 W₁ 升维 → ReLU/GeLU 激活 → 线性层 W₂ 降维 → 输出。每个特征自己决定要不要保留,特征之间没有交互。
SwiGLU 的双分支门控:SwiGLU 将升维层拆成两条并行分支,分别乘以不同的参数矩阵:
门控分支 Wg
先经过 SiLU 激活,充当”门控开关”,决定特征的重要性权重。
内容分支 Wv
直接线性变换,生成内容特征。两条分支逐元素相乘后再降维。
举个例子:如果内容分支某位置输出了 10(强特征),但门控分支只给 0.1,相乘后只剩 1——模型发现了这个特征,但门控认为它不重要,主动抑制了它。
参数量:传统 FFN 用 2 个权重矩阵,SwiGLU 用 3 个。为保持参数量持平,LLaMA 等模型将中间维度从 4d 压缩到约 8d/3 ≈ 2.67d。
八、总结对比
最后把六代激活函数放进一张表里对比:
| 激活函数 | 公式 | 导数最大值 | 核心优点 | 核心缺陷 | 代表应用 |
|---|---|---|---|---|---|
| Sigmoid | 0.25 | 输出概率、易求导 | 梯度消失严重、非零中心 | 早期 BP 网络 | |
| Tanh | 1.0 | 零中心化、导数更大 | 深层仍梯度消失 | RNN / LSTM | |
| ReLU | 1.0(正区间) | 梯度不衰减、计算极快 | 神经元死亡、负信息丢失 | AlexNet / CNN | |
| SiLU | ≈1.1 | 平滑负区间、全程可导 | 计算略复杂于 ReLU | YOLO 系列 | |
| GeLU | ≈1.1 | 高斯门控、理论优雅 | 需计算 erf,成本略高 | BERT / GPT | |
| SwiGLU | — | 双分支门控、乘法交互 | 多一个权重矩阵 | LLaMA / Qwen / DeepSeek |
演进逻辑一句话总结
(注:部分内容可能由 AI 生成)