GELU
GELUTransformer 常用激活函数
亦作、亦称:Gaussian Error Linear Unit
GELU(Gaussian Error Linear Unit,高斯误差线性单元)是一种平滑非线性激活函数,以高斯累积分布概率对输入做软门控,而非像 ReLU 那样硬性截断负值。它是 BERT、GPT 等主流 Transformer 前馈子层的默认激活函数,对模型训练稳定性与表达能力有实质影响。
概述
GELU 由 Dan Hendrycks 和 Kevin Gimpel 于 2016 年提出,核心思路是用概率门控替代硬性截断。
- 核心公式:GELU(x) = x · Φ(x),其中 Φ 是标准正态分布的累积分布函数(CDF)。
- 直觉:输入越大,「通过概率」越接近 1;输入越负,越接近静默,过渡平滑而非阶跃。
- 地位:BERT(2018)和 GPT-2(2019)将其确立为 Transformer FFN 的主流激活函数,后续大量模型沿用。
- 理论出发点:可被解读为对 Dropout + ReLU 随机组合取期望后的确定性近似。
工作原理
精确计算需调用误差函数(erf),实践中通常使用 tanh 近似以提升效率。
- 精确版:GELU(x) = x · ½ · [1 + erf(x / √2)],计算代价较高。
- tanh 近似版:GELU(x) ≈ 0.5x · [1 + tanh(√(2/π) · (x + 0.044715x³))],绝大多数训练场景下与精确版误差可忽略。
- 平滑导数:整个实数域上导数连续存在,不像 ReLU 在零点不可微,梯度流更稳定。
- 轻微非单调:在 x ≈ −0.17 附近导数出现小幅负值区域,被认为是其表达能力优于 ReLU 的来源之一。
类型与变体
GELU 催生了一系列门控变体,部分在大型模型中已取代原始形式。
- GeGLU:GELU 与门控线性单元(GLU)的结合,出自 Noam Shazeer 2020 年论文《GLU Variants Improve Transformers》,在部分基准上超过原始 GELU。
- SwiGLU:将 Swish 与 GLU 结合,同出自该论文,被 LLaMA、PaLM 等模型采用,是目前最流行的 GELU 替代。
- Swish / SiLU:x · sigmoid(βx),当 β ≈ 1.702 时行为与 GELU 极为接近,同属「自门控」激活函数家族。
- 快速近似:部分推理框架使用分段线性近似进一步降低计算开销,精度损失极小。
应用场景
GELU 在 Transformer 架构的前馈子层(FFN)中使用最为广泛。
- 大型语言模型:BERT(Google,2018)和 GPT-2/GPT-3(OpenAI)明确将 GELU 列为 FFN 激活函数。
- 视觉 Transformer:ViT(Vision Transformer,Google,2020)及多模态模型(CLIP 等)同样采用 GELU。
- 非 Transformer 场景:可用于卷积网络或全连接网络,但相对于 ReLU 的增益因任务和网络规模而异,并不总是显著。
- 推理框架:HuggingFace Transformers、PyTorch、JAX 等均内置精确版与近似版 GELU,开箱即用。
与相邻概念的区别
GELU 常与 ReLU、Sigmoid、Swish 放在一起比较,理解差异有助于选型。
- GELU vs ReLU:ReLU 在 x < 0 时输出恒为 0(硬截断),容易产生「dying ReLU」;GELU 负区输出趋近零但平滑过渡,梯度不会完全消失。
- GELU vs Sigmoid:Sigmoid 输出压缩至 (0,1),深层网络易饱和;GELU 输出量级与输入相近,不存在饱和梯度问题。
- GELU vs Swish(SiLU):两者形态极为相似,现代模型中几乎可互换,性能差异通常在噪声范围内;GELU 基于高斯 CDF 理论推导,Swish 更偏经验设计。
- GELU vs SwiGLU:SwiGLU 是门控版本,FFN 参数量在参数守恒下略有调整,在当前超大规模模型中表现更优,已逐渐成为新标准。
局限与误区
GELU 并非万能,存在几个常被忽视的局限。
- 计算开销:精确版需调用 erf,近似版需 tanh,均比 ReLU 的简单 max(0,x) 代价高,在端侧推理或对延迟极敏感场景中需评估取舍。
- 非小网络万能药:在浅层 CNN、小数据集任务上,切换到 GELU 不一定有收益,盲目替换反而可能因超参数未重调而导致性能下降。
- 常见误区:将 GELU 视为「Transformer 成功的关键」——事实上注意力机制、残差连接、LayerNorm 和数据规模的贡献更为根本,GELU 只是配合这些组件的合理选择之一。
- 版本混淆:代码库中
gelu与gelu_new(tanh 近似版)行为有细微差别,复现论文结果时需确认使用的是哪个版本。
发展脉络
从 ReLU 到 GELU 再到 SwiGLU,激活函数的演进与 Transformer 规模扩展紧密相连。
- 2012:ReLU 在 AlexNet 中大规模验证,成为深度学习激活函数主流。
- 2016:Hendrycks & Gimpel 提出 GELU,从随机正则化视角重新定义激活函数设计。
- 2018:BERT 采用 GELU,使其随 Transformer 预训练范式一同普及。
- 2019:GPT-2 沿用 GELU,进一步巩固其在自回归语言模型中的地位。
- 2020:Shazeer 提出 SwiGLU / GeGLU 等门控变体,指出门控机制可进一步提升 FFN 表达力。
- 2023 至今:LLaMA、Mistral 等开源大模型广泛采用 SwiGLU,GELU 的「门控进化版」成为新一代标准。
常见误解
日常交流中容易听到的简化说法,未必准确,但能帮助理解误解从何而来。
- 「Transformer 常用激活函数」
- 「比 ReLU 更平滑」
- 「BERT/GPT 里常见」
相关术语
和本术语关联紧密的其他词条,便于串联理解。
🎯 考点练习
含该术语的高频面试题,含标准答案与追问。
- 中级概念高频查看详解 →
Sigmoid、Tanh、ReLU、GELU 有什么区别?如何选择?
激活函数引入非线性;对比饱和性、零中心、梯度行为,按网络类型选型。
- 中级概念查看详解 →
TensorFlow 中的计算图是什么?
TensorFlow 计算图将运算表示为有向无环图中的节点,边表示张量依赖;1.x 需先建图再用 Session 执行,2.x 默认即时执行但可用 tf.function 编译为图。
- 中级概念查看详解 →
TensorFlow Lite 是什么?适用于哪些场景?
TensorFlow Lite 是 TensorFlow 的移动端与嵌入式推理引擎,通过转换与量化压缩模型,在 Android、iOS、树莓派等边缘设备上低延迟运行深度学习模型。
- 中级概念查看详解 →
TensorFlow 中的 Variable 是什么?有何重要性?
TensorFlow 的 tf.Variable 是可训练的可变张量,用于存储模型权重和偏置;优化器通过 apply_gradients 更新 Variable,是训练中被学习的参数载体。
延伸阅读
从知识库精选 3 篇文章,帮助深入理解该术语。
