大模型的激活函数
本文结合chatgpt生成
现在主流大模型的 FFN 已经从早期的 ReLU/GELU,逐渐演化到 GLU 系列门控激活,尤其是 SwiGLU。
1. 激活函数在大模型里主要出现在哪里?
一个标准 Transformer block 大致是:
其中 FFN 通常长这样:
这里的 \(\sigma\) 就是激活函数。
早期 Transformer 使用的是 ReLU:
后来 BERT、GPT 系列早期模型大量使用 GELU:
其中 \(\Phi(x)\) 是标准正态分布的 CDF(CDF是累积分布函数),\(\Phi(x)=P(Z<x)\)。
而现代 LLaMA、PaLM、Gemma、Mistral 等模型更常用的是 门控 MLP,例如 SwiGLU。
2. ReLU:简单但粗糙
ReLU:
优点是简单、稀疏、梯度稳定:
它的问题也明显:
- 负半轴直接截断,信息损失较硬;
- x<0时梯度为 0,可能出现 dead neuron(神经网络中某个神经元几乎永远输出 0);
- 对大模型这种高维表示来说,ReLU 的表达调制能力不够细腻。
ReLU 在早期深度学习里很重要,但现在大模型里已经不是主流选择。
3. GELU:GPT/BERT 时代的经典选择
GELU 是 Gaussian Error Linear Unit:
直觉上,它不是像 ReLU 那样硬切断负值,而是根据 (x) 在高斯分布下的概率做软门控。
常用近似形式是:
GELU 和 ReLU 的区别可以这样理解:
而
也就是说,ReLU 用一个硬门控 \(\mathbf{1}_{x>0}\),GELU 用一个连续概率门控 \(\Phi(x)\)。
所以 GELU 的过渡更平滑:
- 大正数基本保留;
- 小负数不会完全杀死;
- 大负数逐渐压制;
- 梯度更平滑。
这也是为什么 BERT、GPT-2、GPT-3 这类模型广泛使用 GELU。
4. SiLU / Swish:SwiGLU 的基础
SiLU,也叫 Swish 的一种形式:
其中
所以:
它和 GELU 很像,都是“输入乘以一个软门控因子”:
区别是门控函数不同:
- GELU 用高斯 CDF;
- SiLU 用 sigmoid。
SiLU 的特点是平滑、非单调,在负半轴不会立刻归零,而是保留少量负值信息。
5. GLU:现代大模型的关键转向
GLU,全称 Gated Linear Unit。它的核心思想是:不要只对一个线性变换做激活,而是让一个分支去控制另一个分支。
普通 FFN 是:
GLU 形式是:
其中:
- \(W_a x\) 是 value 分支;
- \(\sigma(W_b x)\) 是 gate 分支;
- \(\odot\) 表示逐元素乘法。
这就变成了:
这个结构比单纯激活函数更强,因为它允许模型动态决定哪些维度被放大、抑制或通过。
6. GEGLU:GELU + GLU
GEGLU 是把 GLU 里的 sigmoid 换成 GELU:
也可以写成:
它比普通 GELU FFN 更强,因为它不是:
而是:
即一个分支负责生成特征,另一个分支负责调制特征。
T5、PaLM 等模型相关工作中大量讨论过 GEGLU、SwiGLU 等门控 FFN 的效果。
7. SwiGLU:现代开源大模型的主流选择
SwiGLU 是现在很多 LLM 使用的激活结构。它结合了 Swish/SiLU 和 GLU:
展开就是:
很多 LLaMA 系模型的 MLP 就是这种结构:
其中:
- \(W_{\text{gate}}\):gate projection;
- \(W_{\text{up}}\):up projection;
- \(W_{\text{down}}\):down projection;
- \(\odot\):逐元素乘法。
这也是现代大模型里最值得重点掌握的激活形式。
8. 为什么 SwiGLU 这么常用?
从表达能力上看,普通 MLP 是:
而 SwiGLU 是:
后者多了一个乘性交互项。乘法结构本身就更强,因为它可以表示类似“条件选择”的关系。
可以把它理解为:
其中 gate 不是固定参数,而是由输入 x 动态生成的。
这使得 FFN 层不仅能做非线性变换,还能做输入相关的特征筛选。
从训练角度看,SwiGLU 也有几个优势:
- 比 ReLU 更平滑;
- 比普通 GELU FFN 表达能力更强;
- 门控结构改善了特征选择能力;
- 在相近参数量/计算量下,通常效果更好;
- 适合大规模 Transformer 的稳定训练。
9. 维度设计:SwiGLU 为什么不是简单扩大两倍?
普通 FFN 常见维度是:
也就是:
先升维到:
再降维回:
普通 FFN 参数量约为:
SwiGLU 有三个矩阵:
参数量约为:
为了和普通 FFN 的参数量相近,令:
得到:
所以很多使用 SwiGLU 的模型不会把 FFN hidden size 设成 4d,而是设成大约:
例如 LLaMA 类模型中经常看到中间维度接近 2.67d,再做一些对齐,比如向 256 的倍数取整。
10. 从函数形状看几种激活
ReLU
特点:硬截断。
GELU
特点:概率式软门控。
SiLU
特点:sigmoid 软门控,平滑非单调。
GLU
特点:显式门控。
GEGLU
特点:GELU 门控。
SwiGLU
特点:SiLU 门控,现代 LLM 常用。
11. 一个更统一的理解
其实这些激活函数可以统一理解为:
其中 g(x) 是某种门控函数。
例如:
而 GLU 系列则进一步变成:
也就是:
这正是现代 LLM MLP 层的核心趋势:从单输入非线性变成输入相关的门控调制。
现代大模型更偏好 SwiGLU 这类门控 FFN:
它的优势在于:平滑非线性 + 动态门控 + 乘性交互 + 更强的特征选择能力。对于现代 LLM 来说,激活函数已经不只是“给线性层加一点非线性”,而是 FFN 层进行条件计算和特征调制的重要机制。
Sigmoid和Tanh为什么不是大模型主流激活函数?
Sigmoid 和 Tanh 不是现代大模型主流激活函数,核心原因是:饱和、梯度小、计算和表达效率不如 GELU/SwiGLU 系列。
Sigmoid:
Tanh:
它们的问题主要有三个。
第一,容易饱和。
当 |x| 很大时,Sigmoid 输出接近 0 或 1,Tanh 输出接近 -1 或 1,此时梯度非常小:
在饱和区间里梯度接近 0,深层网络训练时容易出现梯度传播效率低的问题。
第二,输出会被压缩。
Sigmoid 把值压到:
Tanh 把值压到:
但大模型的 MLP 层通常希望中间表示保留更丰富的幅值信息。ReLU/GELU/SiLU/SwiGLU 这类函数不会把正半轴强行压到固定范围,更利于表示能力和梯度流动。
第三,现代大模型更需要门控调制。
现在主流不是单独用 Sigmoid/Tanh 做激活,而是用类似 SwiGLU 的结构:
它保留了“软门控”的思想,但不像单独 Sigmoid/Tanh 那样强压缩表示。也就是说,Sigmoid 的门控思想还在,但通常以 GLU/SwiGLU 的形式出现,而不是直接作为 FFN 激活函数。
同时Sigmoid 的非零中心的,它的输出均值通常大于 0,这样会导致下一层接收到的激活大多同号,从而使梯度更新方向更容易出现偏置。
一句话总结:Sigmoid/Tanh 太容易饱和、压缩信息、梯度传播不够好;现代大模型更偏好 GELU、SiLU、SwiGLU 这类平滑但不强行限幅的激活结构。


浙公网安备 33010602011771号