门控线性单元 GLU:为什么带门控的激活函数在 LLM 训练中全面胜出?

如果你最近扒过 LLaMA、Mistral 或 PaLM 的模型代码,大概率会留意到一个细节:它们的 MLP 层里用的激活函数不是熟悉的 ReLU 或 GELU,而是一个叫 SwiGLU 的玩意儿。Google 在训练 PaLM 时直接做过对比,同样的算力、同样的数据,SwiGLU 的训练损失就是比 ReLU 低。大模型领域这几年几乎集体倒向了门控线性单元 GLU 及其变体,这背后到底有什么不可抗拒的理由?

AI technology illustration

我的答案:因为在大模型训练里,"选择信息"比"激活信息"重要得多

ReLU 的问题:它只是个一刀切的过滤器

在 Transformer 出现之前,ReLU 是深度网络的事实标准。它简单到只有一句话:正数原样输出,负数归零。这个"砍掉一半"的做法解决了梯度消失,但也带来了神经元死亡。于是你有了 Leaky ReLU、ELU、GELU 和 Swish。GELU 是早期 Transformer 的最爱,它用高斯累积分布函数做软过滤,曲线平滑,梯度友好。但你可能没意识到,这些激活函数有一个共同点:它们对输入向量做的都是同一个、固定的、逐分量的变换。输入是 x,输出是 f(x),没有额外的条件,没有根据输入中的其他信息来实时调整。

这有什么问题?在大模型里,每一层都要处理海量信息。输入向量中的某些维度可能代表关键语义,另一些可能是噪声。ReLU 只会根据这个维度自身的正负号做截断,它不会问:"这个信号重要吗?"你可能会说,模型可以通过学习权重来区分重要性。但权重是静态的,一旦训练完就固定了。而语言是极度依赖上下文的,同一个信号在不同上下文中重要程度完全不同。

GLU:让模型自己决定放多少信号通过

门控线性单元的思路非常直接:与其用固定非线性,不如让模型自己学会"开多大闸门"。2016 年,Yann Dauphin 等人在 论文《Language Modeling with Gated Convolutional Networks》 中提出了 GLU:

GLU(x) = (xW + b) ⊗ σ(xV + c)

这里的 ⊗ 是逐元素相乘,σ 是 sigmoid。输入 x 同时经过两个线性变换:W 那一路产生主信号,V 那一路产生门控信号。门控信号经过 sigmoid 后变成 0 到 1 之间的数值,相当于一个阀门。主信号与阀门相乘,决定保留多少信息。你可以把它想象成一个守门员:守门员(sigmoid)根据对方球员(V 的线性变换)的动作,决定放多少球(主信号)进门。

这个设计最初用于卷积语言模型,效果不错。但真正让它进入主流视野的,是 Noam Shazeer 在 2020 年的论文 《GLU Variants Improve Transformer》。他把 GLU 搬进 Transformer 的前馈网络(FFN),并试了多种门控搭配:用 GELU 做门的 GeGLU,用 Swish 做门的 SwiGLU。结果显示,只要把 ReLU 或 GELU 换成这些变体,Transformer 在机器翻译等任务上的困惑度立刻下降。

SwiGLU:门控里的明星

现在大模型里最常见的,是 SwiGLU。公式长这样:

SwiGLU(x) = Swish(xW + b) ⊗ (xV + c)

其中 Swish(x) = x·σ(x)。为什么用 Swish 而不是 sigmoid?因为 Swish 有一个非单调的负区间,能给门控更细腻的调节。GeGLU 用 GELU 做门,效果也类似,但 SwiGLU 在实验中最常见。

激活函数 公式 是否有门控 代表作
ReLU max(x,0) GPT-2
GELU x·Φ(x) BERT、GPT-3
Swish x·σ(x) EfficientNet
SwiGLU Swish(xW)⊗(xV) LLaMA、PaLM

你可能会怀疑:SwiGLU 多了一个线性层,参数量和计算量都涨了,是不是只是"更大所以更强"?Shazeer 在论文里控制过参数总量:缩小中间维度使得总参数与基线一致,SwiGLU 依然胜出。所以这是结构性的优势,不是纯堆参数。

标准化实验:PaLM 和 LLaMA 的选择

结构性的优势在规模效应下会被放大。Google 的 PaLM 论文 里,他们系统比较了 ReLU 和 SwiGLU,发现在所有模型尺度上,SwiGLU 的训练损失都更低,最终的下游任务分数也更高。PaLM 使用了 SwiGLU。LLaMA 也在其 LLaMA 论文 中明确说:"与 GPT-3 不同,我们使用 SwiGLU 激活函数。"

为什么门控对 LLM 尤其重要?

门控本质上是一个输入依赖的动态权重。自注意力机制也是动态权重,它让 token 之间相互选择。GLU 把这种选择能力注入了前馈层。一个典型的 Transformer 块里,注意力负责在不同 token 间交换信息,然后 FFN 负责在每个 token 的位置做非线性变换。如果 FFN 是固定非线性的,它就失去了对"哪些特征重要"的感知。而门控让 FFN 变成了一组可调节的软开关,每个开关由输入向量中的其他元素来控制。

这种设计还有一个额外的好处:梯度流动。门控路径与主路径并行,类似于 LSTM 中的 cell state,让梯度在深层网络中更容易传播。这正好缓解了 LLM 训练的深层次梯度消失问题。

门控的代价

但门控不是免费的午餐。主要代价有三个:

  • 参数和算力:双线性变换意味着 FFN 层多了一个矩阵乘法。为了控制参数,LLaMA 把中间维度从标准的 4 倍降到了约 2.7 倍。即便如此,计算成本依然更高。
  • 训练稳定性:门控的梯度路径复杂,如果不用 Pre-Norm 或好的初始化,很容易爆炸。这也是为什么几乎所有采用 SwiGLU 的模型都搭配 Pre-Norm。
  • 实现复杂度:模型并行时,额外的线性层会带来更多通信开销。

这些代价在中小模型上可能不值当,但在几十亿参数以上的 LLM 中,门控带来的性能提升是实打实的。你可以用更多数据来补上 ReLU 的性能差距,但那样要烧更多的钱。训练成本上,门控的反而是更优解。

我曾经的误解

写这篇文章之前,我一直把 GLU 看成一种"高级激活函数",就像 ReLU 的 2.0 版。直到我读 Shazeer 论文的结论时,才意识到它根本不是激活函数,而是一个微型的注意力头。因为门控信号不是固定的,而是完全由输入决定的。这和注意力中的 "query 去查 key" 是同一个逻辑。想通这点后,LLM 为什么选它就不难理解了:Transformer 的成功在于注意力,门控让 MLP 也拥有了一部分注意力的能力。

它一定会一直赢下去吗?

SwiGLU 目前是 LLM 的默认选项,但它不是终点。门控思想本身是对的,但具体的实现形式可能还会演化。比如,是否有更高效的参数共享门控?是否能将门控与稀疏激活结合?这些都是活跃的研究方向。至少到现在,任何想训练新 LLM 的团队,GLU 家族都是经过大规模验证的最佳起点。

最后留一个问题给你:既然门控这么重要,为什么最早流行的 Transformer 没有用它?答案很简单——2017 年的 Transformer 论文用 ReLU,是因为当时没有经过大规模验证。如今,我们有了。这就是经验主义驱动架构演进的最好例子。

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

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

相关推荐