GeGLU vs SwiGLU vs ReGLU:GLU 家族激活函数的横向对比与选型指南

第一次在 LLaMA 源码里看到 SwiGLU 时,我盯着这个名字看了十秒。Swi…GLU?这不就是 Swish 加了个门吗?紧接着又拆到 Falcon 的 GeGLU,再翻资料又撞见 ReGLU。三个名字长得像三胞胎,性能却不完全一样。这篇文章把它们的来历、门控机制、参数代价和选型逻辑一次讲清楚。

AI technology illustration

门控不是新概念,它比 Transformer 更早

GLU 全称 Gated Linear Unit(门控线性单元),2017 年由 Dauphin 等人在卷积语言模型里提出,论文是 Language Modeling with Gated Convolutional Networks。核心公式:

GLU(x) = (xW1 + b1) ⊗ σ(xW2 + b2)

x 被投影成两个向量,一个作为实际内容,一个作为门。σ 是 sigmoid,把门的每个分量压到 0 和 1 之间,再和内容逐元素相乘。门接近 0 就挡住内容,接近 1 就放行。

为什么这个设计有效?普通 FFN 中,同一个权重矩阵既决定哪些特征被激活,又决定这些特征以多大权重往后传;GLU 刻意把"生成内容"和"是否放行"拆开,一个向量负责输出什么,另一个向量负责放多少。相当于调音台的两路信号:一路是声音,一路是推子。

Shazeer 把门换掉,三个变体集体诞生

2020 年,Noam Shazeer 发了一篇很短的文章 GLU Variants Improve Transformer。实验思路极简单:GLU 里的 sigmoid 门能不能换成别的激活函数?他试了 GELU、Swish、ReLU、softmax,得到一批新名字。

论文里写作 GEGLU,社区里更常写成 GeGLU。三种常见变体:

GeGLU(x)  = GELU(xWg) ⊗ (xWv)
SwiGLU(x) = Swish(xWg) ⊗ (xWv)
ReGLU(x)  = ReLU(xWg) ⊗ (xWv)

Wg 是门投影,Wv 是值投影,门控之后还要接一次输出投影 Wd,形成 gate / up / down 三个权重矩阵。其中 GELU 来自 Hendrycks & Gimpel,Swish 来自 Ramachandran 等人

名称 门激活函数 门输出范围 关键特征
GLU σ(x) (0, 1) 像软开关,但输入绝对值一大梯度就趋近 0
ReGLU ReLU(x) [0, +∞) 硬开关,特征会精确为 0,也更容易死门
GeGLU GELU(x) = x·Φ(x) 可为负 平滑,允许负值抑制,近似 Swish
SwiGLU Swish(x) = x·σ(x) 可为负 与 GELU 图像几乎重合,实现更简单

为什么 Sigmoid 当门,反而被 Swish 和 GELU 超过?

我最早以为门控门的输出必须在 0 到 1 之间,sigmoid 是唯一合理的选择。后来看 Shazeer 的实验才发现,这个直觉是错的。论文报告的设置里,GeGLU 和 SwiGLU 的验证困惑度比原版 GLU 更好,后来 PaLM、LLaMA 等大模型也直接采用 SwiGLU。

问题出在 sigmoid 的两个性质。第一,饱和:输入绝对值很大时梯度趋近 0,门的更新会卡住。第二,输出被限制在 (0,1),只能"放大或缩小"内容,没法反向抑制。GELU 和 Swish 在负区间也有输出,表达力更强。

再看 ReGLU 就有意思了。ReLU 门会让很多分量精确等于 0,这是一种稀疏性。但代价是梯度也为 0,对应维度可能长期不更新。所以 ReGLU 不是不能用,只是训练时往往比平滑门更难调。

真正决定选型的不是效果,而是 3 个矩阵

三个变体公式就差一个函数,但工程代价相同:标准 FFN 只有 2 个权重矩阵,GLU 家族有 3 个。如果中间维度沿用 4d,参数量会多 50%。

标准 FFN: 8d² = d · 4d + 4d · d
GLU 家族: 3dn = d · n + d · n + n · d

让两者相等,得到 n = 8d/3 ≈ 2.67d。这就是 Shazeer 在论文里采用的比较方式:GLU 变体用约 2.67 倍的中间维度,换回和标准 FFN 几乎相同的参数量。

结构 投影矩阵数 中间维度 参数量
标准 FFN 2 4d 8d²
GLU 家族 3 8d/3 ≈ 2.67d 8d²

所以你在 LLaMA-2 7B 的 config 里看到 intermediate_size: 11008,而不是常见的 16384,正是因为它把中间维度设在了 8d/3 附近。看 LLaMA-2 7B 配置

谁在用:SwiGLU 怎么变成默认答案

名单很好记:LLaMA 系列用 SwiGLU,PaLM 用 SwiGLU,Mistral、Qwen 以及大量 LLaMA 系衍生模型沿用 SwiGLU。Falcon 标称 GeGLU。ReGLU 在工业模型里非常少见,多出现在激活函数的对比论文里。

注意,这不是说 SwiGLU 数学上碾压 GeGLU。在正常规模的实验中,两者差距通常很小。SwiGLU 的真正优势是生态:因为 LLaMA 选了它,训练框架和推理引擎里现成的融合 kernel 更多。你真正训练模型时,"有没有高效实现"往往比激活函数那零点几个点的困惑度更现实。

三个常被问混的问题

GeGLU 就是把 MLP 里的 GELU 换成门控吗?
不是。普通 FFN 是 xW1 → GELU → xW2。GeGLU 先得到 xWg 和 xWv 两个投影,只让 gate 过 GELU,再和 value 相乘,最后再过 Wd。多了一个独立权重矩阵,这是结构变化,不是激活函数替换。
已经训好的 GELU 模型,能把激活函数改成 SwiGLU 吗?
不能直接改。两者中间维度不一样,SwiGLU 还需要多初始化一个权重矩阵,原来的权重完全对不上。想换只能重新训练。
ReGLU 的死门问题是不是很严重?
看训练规模。ReLU 门会产生大量精确 0,带来稀疏性,但也可能让某些维度学到 0 后不再更新。小模型短训练不一定明显,大模型长时间训练时更棘手。

如果现在要训练模型,怎么选?

  1. 没有历史包袱,直接选 SwiGLU。生态最成熟,坑最少。
  2. 要和某篇论文对齐,就沿用论文的配置,别在这里标新立异。
  3. 做激活函数研究,ReGLU 更有意思:简单、稀疏、又难调。
  4. 无论选哪个,记得把中间维度设成 8d/3 而不是 4d,否则参数量直接多 50%。

原创文章,作者:guanweilu,如若转载,请注明出处:https://guanweilu.cn/article/447.html

(0)
上一篇 4天前
下一篇 4天前

相关推荐