想象你家小区门口换过三代门卫。第一代门卫是“老好人”,不管谁来都要先把信号压缩成温和的态度,可一旦人潮太汹涌,他就彻底“摆烂”,什么信息都传不动——这是 Sigmoid、Tanh 的梯度消失困境。第二代门卫是个暴脾气,凡是负数信号一律没收,连“委屈但有用”的信息也一并扔掉,日子久了,不少神经元直接罢工——这是 ReLU 的“神经元死亡”问题。第三代门卫升级成了“概率闸机”:他先目测估算“这个信号有百分之几值得放行”,再按比例放行,连负信号也悄悄留一条小缝——这就是 GELU。而 SwiGLU 更精妙,它把通道拆成两个岗位:一个岗位负责把信息改造成新形态,另一个岗位用智能闸门决定放行多少,最后把“改好的信息”乘以“放行的比例”。本文就用这道“信息安检门”的进化故事,带你吃透 GELU 与 SwiGLU 的原理、梯度优势、性能对比,以及 LLaMA 为什么最终选择了 SwiGLU。

岗位关联

对 AI 从业者而言,理解 GELU 与 SwiGLU 的差异,是复现前沿大模型、做架构优化和推理部署的基本功——它直接决定你的模型表达力、训练稳定性与算力账单。

目录
  1. 可视化演示
  2. 激活函数进化史
  3. GELU 原理详解
  4. GELU梯度优势
  5. SwiGLU门控机制
  6. 性能对比分析
  7. LLaMA采用原因
  8. 工程实践选型
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

动态演示GELU与SwiGLU的核心机制,通过全局/局部/动态/静态四种模式展示关键概念与交互流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

GELU与SwiGLU:Tran Transformer中的FF GELU高斯误差线性单元 核心机制可视化 GELU与SwiGLU整体架构与关键组件

激活函数进化史

小区门口的第一代门卫是个“和事佬”。不管多猛的信息冲过来,他都先温柔地压成 0 到 1 之间的音量,可一旦音量太大,他就会陷入“不知所措”的饱和状态,后面再多的信息都像被棉花堵住,完全传不动。神经网络里的 Sigmoid 和 Tanh 正是如此:输入绝对值一大,梯度就趋近于零,这叫“梯度消失”,深层网络几乎学不到东西。

于是第二代门卫登场——ReLU,一个只认正数的暴脾气。正数信号直接放行,负数信号一律没收成零。他的好处是干脆利落、计算飞快,但问题也很致命:一旦某个神经元老是收到负数输入,它的“放行记录”就永远是零,梯度也随之归零,这个神经元从此彻底罢工——这就是“神经元死亡”(Dead ReLU)。ReLU 的本质是硬截断,那个“咔嚓”一下的拐点,就是它最暴力的地方。

门卫们慢慢意识到:信息世界不是非黑即白,负信号里也可能藏着有用的线索。于是第三代思路诞生——不搞“过或不过”的二元判决,而是给每个信号一个“放行概率”。门控思想开始萌芽,GELU 和 SwiGLU 正是顺着这条思路长出来的两棵大树。

ReLU(x)=max⁡(0,x)\displaystyle \text{ReLU}(x) = \max(0, x)
公式只做一件事:正数原样通过,负数全部清零。这个“一刀切”的暴力闸门,就是后续所有智能闸机想改良的起点。
  1. 接收任意输入 x神经元输出的信号可正可负,闸机要先看一眼它。
    xx
  2. 取最大值过滤在 0 和 x 之间取较大者,负数信号被硬生生拦下。
    max⁡(0,x)\max(0, x)

GELU 原理详解

第三代门卫最特别的地方,是他口袋里揣着一张“正态分布表”。一个信号 x 送过来,他不直接放行,而是先查表:在标准正态分布里,比 x 还小的信号占多大比例?这个比例就是“你值得被放行的概率”。比如 x 是正数,说明它大概率有用,放行概率超过一半;x 是负数,也有小概率放行,只是比例低一些。

这个“查表打分再放行”的机制,就是 GELU(Gaussian Error Linear Unit,高斯误差线性单元),由 Hendrycks 与 Gimpel 在 2016 年提出。它的数学形式异常简洁:先算出信号 x 对应的正态累积概率 Φ(x),再把这个概率乘回原始信号本身。概率高,信息保留得多;概率低,信息被压缩但不会完全清零。

这里的 Φ(x) 是个积分形式的函数,数学家给它起了个名字叫“误差函数”erf。由于 erf 没法写出简单的初等表达式,工程实现时常用一个 tanh 多项式近似,BERT 里用的就是这种近似版本——效果几乎一致,但计算快得多。

回到小区门口:概率闸机最讨喜的地方在于,它从不说“绝对不行”。即使信号是负的,只要概率不为零,闸机就留一条缝。正是这条缝,让 GELU 比 ReLU 温柔得多——下一节我们看看这条缝在训练中带来多大的好处。

GELU(x)=x⋅Φ(x)=x⋅12[1+erf⁡(x2)]\displaystyle \text{GELU}(x) = x \cdot \Phi(x) = x \cdot \frac{1}{2}\left[1 + \operatorname{erf}\left(\frac{x}{\sqrt{2}}\right)\right]
GELU 的核心不是“平滑”,而是“概率加权”:它用正态分布给每个信号打分,再拿分数乘原值,越值得放行的信号保留越多。
  1. 概率打分Φ(x)把 x 对照标准正态分布,求出“这个信号值得放行的概率”。
    Φ(x)=12[1+erf⁡(x2)]\Phi(x) = \frac{1}{2}\left[1 + \operatorname{erf}\left(\frac{x}{\sqrt{2}}\right)\right]
  2. 原值加权x用查表得到的概率去缩放原始信号,概率越大保留越多。
    x⋅Φ(x)x \cdot \Phi(x)
  3. 误差函数erf正态分布积分没有初等公式,erf 就是它的专用积分工具。
    erf⁡(z)=2π∫0ze−t2 dt\operatorname{erf}(z) = \frac{2}{\sqrt{\pi}}\int_{0}^{z} e^{-t^{2}}\,dt
  4. tanh工程近似避开昂贵的 erf 计算,用 tanh 多项式模拟出几乎一样的曲线。
    GELU(x)≈0.5x(1+tanh⁡(2π(x+0.044715x3)))\text{GELU}(x) \approx 0.5x\left(1 + \tanh\left(\sqrt{\frac{2}{\pi}}\left(x + 0.044715x^{3}\right)\right)\right)

GELU梯度优势

为什么“留一条缝”这么重要?想象一个神经元长期只能收到负信号:在 ReLU 门卫面前,它永远被拦下,梯度永远是零,门卫干脆躺平,神经元再也不会更新——这就是死亡。而 GELU 门卫即使在负数区域也愿意放行一点点信息,梯度虽然小,但始终存在,反向传播的信号就能“涓涓细流”地流回去,神经元保住了一条命。

从数学上看,GELU 的导数由乘积法则得出:它等于“放行概率 Φ(x)”加上“修正项 x 乘以概率密度函数 φ(x)”。注意 φ(x) 是标准正态分布的概率密度曲线,它永远大于零,所以当 x 是一个很大的负数时,修正项虽然趋近于零,但永远不会完全归零。与此同时,GELU 函数处处光滑可导,不存在 ReLU 那种“咔嚓”的尖角,梯度在优化器眼中非常友好。

有了这条永不枯竭的“小缝”,深层 Transformer 在反向传播时能保留更完整的梯度信息,训练曲线也更稳定。不过门卫再智能,一次也只能处理一个信号。很快有人想到:能不能在通道里安排两个岗位,一个负责改造内容,一个负责控制放行?SwiGLU 就是这个思路的集大成者。

GELU′(x)=Φ(x)+x⋅ϕ(x)\displaystyle \text{GELU}'(x) = \Phi(x) + x \cdot \phi(x)
导数由两项组成:第一项保证梯度主体平滑,第二项让负半轴也持续有微小梯度,避免神经元彻底死亡。
  1. 直通项Φ(x)导数中保留概率项,保证梯度整体非负、平滑,正半轴梯度接近 1,像绿灯常亮。
    Φ(x)\Phi(x)
  2. 修正项x·φ(x)概率密度函数给原值加权,深负区修正项趋近 0 但不等于 0,像黄灯微闪。
    x⋅ϕ(x)x \cdot \phi(x)

SwiGLU门控机制

如果说 GELU 是一位聪明的单岗门卫,那 SwiGLU 就是一套“双岗位安检通道”。第一个岗位是“内容改造员”,他拿到原始信息后,会通过线性投影把它重新包装成新形态;第二个岗位是“智能闸机”,它用 Swish 激活函数判断“这次放行多少比例”;最后,负责人把“改好的内容”和“放行的比例”逐元素相乘,才放行到下一位。

Swish 本身就很特别:它不是拿 sigmoid 直接输出,而是让输入 x 乘以自己的 sigmoid 值,即 x·σ(x)。因为“门控信号”来自输入自身,所以它叫“自门控”。当 x 为正时,门控接近 1,信息放行;当 x 为负时,门控输出一个小的负值而不是零,保留了梯度。把 Swish 和线性投影组合起来,就得到 SwiGLU(Swish-Gated Linear Unit,Swish 门控线性单元)。

双岗位安检门听起来更复杂,但正是这种“改造 + 截流”的分工,让模型获得了选择信息的主动权。Transformer 的前馈网络(FFN)每天要处理海量 token,谁能更好地决定“哪些信息值得被放大”,谁就能在语言建模中表现得更出色——SwiGLU 的改进逻辑就在于此。

Swish(x)=x⋅σ(x)=x1+e−x\displaystyle \text{Swish}(x) = x \cdot \sigma(x) = \frac{x}{1 + e^{-x}}
SwiGLU(x,W,V)=Swish(xW)⊗(xV)\displaystyle \text{SwiGLU}(x, W, V) = \text{Swish}(xW) \otimes (xV)
SwiGLU 不再“单打独斗”:一路用 Swish 输出放行比例,一路用线性变换改造内容,两者逐元素相乘——门控思想从“一个闸机”升级为“两条流水线协作”。
  1. 门控分支Swish(xW)权重矩阵 W 先把输入投影成一个“判决分数”,再过 Swish 变成放行比例。
    Swish(xW)=(xW)⋅σ(xW)\text{Swish}(xW) = (xW) \cdot \sigma(xW)
  2. 内容分支xV另一组权重矩阵 V 把输入改造成新的信息形态,相当于安检传送带上的“物品重组”。
    xVxV
  3. 逐元素相乘⊗用门控比例去逐点缩放改造后的内容,放行多少完全由模型自己学出来。
    Swish(xW)⊗(xV)\text{Swish}(xW) \otimes (xV)

性能对比分析

单岗门卫 GELU 和双岗通道 SwiGLU 站在同一条起跑线上,谁能把信息把得更准?答案是 SwiGLU。在标准 Transformer 的 FFN 里,GELU 的路线是“先激活再投影”:输入先过一层线性映射,激活一下,再投影输出。SwiGLU 则多了一条支路:输入同时走两条路,一条做门控,一条做线性改造,相乘后再投影。

实验反复证明,这种门控结构对语言建模特别有效:在同等参数量下,用 SwiGLU 的模型困惑度(perplexity,衡量模型对文本预测能力的指标,越低越好)通常比用 GELU 的低 0.1~0.5 个点。困惑度每降一点点,生成文本的流畅度都能观察到明显提升,这也是为什么大型语言模型纷纷倒向 SwiGLU。

当然,代价也很实在:SwiGLU 多了一个权重矩阵 W3,前馈网络从“两个矩阵乘”变成“三个矩阵乘”,参数和计算量都上升。这就像安检通道多雇了一名内容改造员,人力成本自然变高。

回到小区门口:多雇一位改造员确实让安检更精准,但预算有限怎么办?真正的高手不是无脑加人,而是重新排班——把原本四人的编制压缩成三人的高效配合。LLaMA 正是这么干的。

FFNGELU(x)=W2 GELU(W1x)FFNSwiGLU(x)=W2(Swish(W1x)⊗(W3x))\displaystyle \begin{aligned} \text{FFN}_{\text{GELU}}(x) &= W_{2}\,\text{GELU}(W_{1}x) \\ \text{FFN}_{\text{SwiGLU}}(x) &= W_{2}\left(\text{Swish}(W_{1}x) \otimes (W_{3}x)\right) \end{aligned}
两行公式的差别一目了然:GELU 是“一条直线走到黑”,SwiGLU 是“分叉、把关、再合并”,用多一次矩阵乘的代价换更强的信息选择能力。
  1. GELU路线输入 x 先被 W1 投影到高维空间,激活后再用 W2 投影回输出维度。
    FFNGELU(x)=W2 GELU(W1x)\text{FFN}_{\text{GELU}}(x) = W_{2}\,\text{GELU}(W_{1}x)
  2. SwiGLU路线输入同时经 W1 走向门控、W3 走向内容改造,相乘后统一由 W2 输出。
    FFNSwiGLU(x)=W2(Swish(W1x)⊗(W3x))\text{FFN}_{\text{SwiGLU}}(x) = W_{2}\left(\text{Swish}(W_{1}x) \otimes (W_{3}x)\right)
  3. 多出的W3新增权重矩阵是“能力税”,它带来更强的表达力,也带来更高的算力账单。
    W3xW_{3}x

LLaMA采用原因

LLaMA 系列模型在发布时做了一个关键决定:FFN 里用 SwiGLU,而不是当时更流行的 GELU。原因很现实——语言建模任务里,困惑度每下降一点点都弥足珍贵,SwiGLU 的“信息选择能力”让它稳赢。但 LLaMA 团队也清楚 SwiGLU 多了一张算力账单,于是他们耍了个小聪明:把 FFN 中间维度从标准的 4d 压缩到 8d/3。

为什么是 8d/3?因为标准 FFN 是“两个矩阵乘”,算力约 8d²;SwiGLU 是三组矩阵相乘,如果保持 4d 中间维,算力会飙到约 12d²。把中间维压成 8d/3 后,三组矩阵的算力恰好回到 8d² 左右——能力变强了,账单却没涨。以 LLaMA-7B 为例,模型维度 d=4096,FFN 中间维恰好取 11008,非常接近 8d/3。

此后,Mistral、Mixtral 等开源模型纷纷复制这套设计,SwiGLU 几乎成了大模型 FFN 的“标准配置”。一个组件能被开源生态反复验证和采用,本身就是最强的口碑。

LLaMA 的故事告诉我们一个道理:SwiGLU 不是“免费的午餐”,而是一道“把菜量缩小、把味道做浓”的精致料理。掌握了这道平衡术,在实际工程里该怎么点菜?下一节聊聊选型。

dffSwiGLU=23×4d=8d3\displaystyle d_{\text{ff}}^{\text{SwiGLU}} = \frac{2}{3} \times 4d = \frac{8d}{3}
这个公式是 LLaMA 的“平衡术”:用降维对冲新增矩阵的开销,让 SwiGLU 的能力提升近乎“白嫖”。
  1. 标准中间维4d传统 FFN 把输入升维 4 倍,两矩阵算力合计约 8d²。
    4d4d
  2. 压缩到三分之二SwiGLU 中间维取 4d 的 2/3,即 8d/3。
    23×4d\frac{2}{3} \times 4d
  3. 算力回到原点三组矩阵乘算力约 3×(8d/3)²/n 级别,与两矩阵方案总量相当。
    8d3\frac{8d}{3}

工程实践选型

双岗位通道确实高效,但并不是所有小区都需要它。如果你是做简单二分类或小规模视觉任务,GELU 这条“单岗闸机”已经足够,强行上 SwiGLU 反而多花显存和训练时间。工程选型的第一条原则:先看清任务难度,再决定投入多少算力。

第二条原则是评估硬件账本。SwiGLU 多了矩阵 W3,参数量大约增加三分之一,显存峰值和推理延迟都会上升。如果你在边缘设备或单卡上部署,GELU 的轻量优势就很明显;如果你在训练千亿级语言模型,SwiGLU 带来的困惑度下降则值得这笔买卖。第三条原则是渐进式替换:不要一次把整个模型全换掉,而是先在某个子层或小规模基线模型上做对比实验,观察困惑度曲线和训练稳定性,再决定是否全面铺开。

回到小区门口:门卫系统没有绝对的最优解,只有“当下预算与目标”之间的权衡。理解了 GELU 的概率放行与 SwiGLU 的双岗协作,你就能像资深物业经理一样,给每个任务派出最合适的那套安检方案。

选型决策:PPLSwiGLU<PPLGELU但FLOPsSwiGLU≥FLOPsGELU\displaystyle \text{选型决策}:\quad \text{PPL}_{\text{SwiGLU}} < \text{PPL}_{\text{GELU}} \quad \text{但} \quad \text{FLOPs}_{\text{SwiGLU}} \geq \text{FLOPs}_{\text{GELU}}
选型的本质是拿“困惑度收益”换“算力成本”,收益跑赢成本就上 SwiGLU,否则 GELU 依然是稳妥之选。
  1. 收益项SwiGLU 困惑度更低,表示语言建模能力更强。
    PPLSwiGLU<PPLGELU\text{PPL}_{\text{SwiGLU}} < \text{PPL}_{\text{GELU}}
  2. 成本项SwiGLU 的浮点运算量不低于 GELU,训练与推理更贵。
    FLOPsSwiGLU≥FLOPsGELU\text{FLOPs}_{\text{SwiGLU}} \geq \text{FLOPs}_{\text{GELU}}

AI 应用场景

大语言模型 FFN 层设计

阶段:模型架构设计

解决的问题:传统 FFN 用 ReLU/GELU 对信息“无差别放行”,缺乏选择重点的能力,导致语言建模困惑度偏高;SwiGLU 用门控与线性分支相乘,让模型自己学会“该放大哪些信息”,困惑度通常降低 0.1~0.5 个点。

具体案例:Meta 在 LLaMA 系列中为 FFN 层配置 SwiGLU,并将中间维度设为 8d/3(7B 模型取 11008),在 C4 等语料上取得同期同规模模型中领先的困惑度,Mistral 等后续模型沿用同一设计。

视觉 Transformer 的激活选型

阶段:模型训练与调优

解决的问题:视觉任务标注成本高、数据量不如文本海量,SwiGLU 的额外矩阵乘容易带来过拟合与训练变慢;GELU 平滑的概率加权在大图数据上性价比更高。

具体案例:ViT-Base 采用 GELU 在 ImageNet 上达到 88.1% 的 top-1 准确率;若在同规模模型上强行换 SwiGLU 且不调整正则策略,训练时间增加约 20%,精度反而波动。

推理部署的显存与延迟优化

阶段:模型部署与推理优化

解决的问题:SwiGLU 新增的 W3 矩阵让参数量上涨约三分之一,直接推高显存峰值与首 token 延迟;在资源受限的设备上需要评估是否回退到 GELU。

具体案例:某团队将 7B 模型的 FFN 从 SwiGLU 回退到 GELU,参数量减少约 7%,在单卡 A10 上首 token 延迟降低约 8%,代价是困惑度上升约 0.2——延迟敏感型产品可以接受这个交换。

Python 演示

python39 行
import numpy as np  def gelu_tanh(x):    """GELU 的 tanh 近似,与 BERT/Transformer 实现一致"""    return 0.5 * x * (1 + np.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * x ** 3)))  def swish(x, beta=1.0):    """Swish 自门控激活:输入乘以自己的 sigmoid"""    return x / (1 + np.exp(-beta * x))  class FFN:    """两层前馈网络,支持 GELU 与 SwiGLU 两种激活方案"""     def __init__(self, d, d_ff, gate_mode=False):        self.W1 = np.random.randn(d, d_ff) * 0.02        self.W2 = np.random.randn(d_ff, d) * 0.02        self.W3 = np.random.randn(d, d_ff) * 0.02  # SwiGLU 独有的线性分支        self.gate_mode = gate_mode     def forward(self, x):        if not self.gate_mode:            return gelu_tanh(x @ self.W1) @ self.W2        gate = swish(x @ self.W1)      # 门控分支:决定放行比例        value = x @ self.W3            # 内容分支:改造信息形态        return (gate * value) @ self.W2  if __name__ == "__main__":    np.random.seed(42)    x = np.random.randn(4, 16)    ffn_gelu = FFN(16, 64, gate_mode=False)    ffn_swiglu = FFN(16, 64, gate_mode=True)    print("GELU  FFN 输出形状:", ffn_gelu.forward(x).shape)    print("SwiGLU FFN 输出形状:", ffn_swiglu.forward(x).shape)    print("GELU(1.5) =", gelu_tanh(1.5))    print("Swish(1.5) =", swish(1.5))
目的:用 30 行代码实现 GELU 与 SwiGLU 两种 FFN,直观对比“单岗闸机”与“双岗门控”在结构上的差异,以及它们各自接受的输入输出形状。
  1. return 0.5 * x * (1 + np.tanh(np.sqrt(2 / np.pi) * (x + 0.044715 * x ** 3)))这就是 GELU 的 tanh 工程近似,避免直接计算昂贵的 erf。
  2. return x / (1 + np.exp(-beta * x))Swish 自门控:让输入自己决定放行比例,而不是像 sigmoid 那样直接输出概率。
  3. self.W3 = np.random.randn(d, d_ff) * 0.02SwiGLU 独有的第三个权重矩阵,相当于多雇了一位“内容改造员”。
  4. gate = swish(x @ self.W1)门控分支:先投影成判决分数,再变成放行比例。
  5. value = x @ self.W3内容分支:把输入改造成新形态。
  6. return (gate * value) @ self.W2门控与内容逐元素相乘后再投影输出,这正是 SwiGLU 的核心算式。
  7. print("SwiGLU FFN 输出形状:", ffn_swiglu.forward(x).shape)验证批量为 4、维度为 16 的输入在两种 FFN 中都能正常流通。

常见误区

误区我看到 GELU 的曲线和 ReLU 很像,只是拐角变光滑了,负半轴压成接近零的小值。所以它本质就是 ReLU 的“平滑美化版”,叫 Softplus 还是 GELU 都差不多。

正解平滑只是表象,不是本质。GELU 的核心是“概率加权”:它用标准正态分布给每个信号打分,再拿概率乘原始信号。这个“乘法”赋予闸机“该放行多少”的语义,模型可以学习对信号进行软性筛选;而 Softplus 只是把折角磨圆,不具备概率选通能力。两者数学结构完全不同,千万别混为一谈。

为何常见:人眼最容易被曲线形状吸引,GELU 与 ReLU 的软化版图形相似,初学者自然以为差别只在“圆不圆”。

误区LLaMA 都在用 SwiGLU,说明它肯定比 GELU 好,我把自己模型的所有激活全部替换成 SwiGLU 就行,反正效果只会变好。

正解SwiGLU 多一个矩阵乘,参数量和 FLOPs 都显著上升。LLaMA 是把中间维度从 4d 压到 8d/3 才勉强保住算力预算。在视觉任务、小模型或推理延迟敏感的场合,GELU 往往更划算。任何不做评估的“无脑替换”都会让训练变慢、显存爆掉,收益却不一定明显。

为何常见:基准测试只报道困惑度下降,算力与显存这类隐性成本容易被忽略,造成“白嫖升级”的错觉。

误区Swish 的公式里明明有 sigmoid,那它就是 sigmoid 的一个变体,无非多个可调参数让曲线更灵活。

正解Swish 的定义是 x·σ(x),它是“输入本身”与“sigmoid 门控”的乘积,所以叫“自门控”。当 x 为负时,Swish 输出一个小的负值,梯度不为零;而 sigmoid 输出恒正且两端饱和。两者在梯度行为和输出范围上截然不同,不能混为一谈。

为何常见:公式里同时出现 σ(x) 就容易被归为“sigmoid 家族”,忽略了整体是乘法结构这一关键。

误区激活函数就是一次逐元素运算,GPU 上跑起来基本免费,所以 GELU 和 ReLU 的成本差异可以忽略不计。

正解GELU 需要计算 tanh 近似,逐元素计算量远大于 ReLU 的 max 操作;SwiGLU 更是多了整个矩阵乘 W3,参数量上涨约三分之一。在深层 Transformer 里,这些开销会随层数成倍放大。虽然现代 GPU 上逐元素运算占比不大,但新增的矩阵乘绝对会反映在显存和延迟账单上。

为何常见:人们在 CPU 上习惯用“操作次数”粗略估算复杂度,忽略了 GPU 上矩阵乘与逐元素操作的成本差异。

面试题

Q1. GELU 的核心思想是用什么给神经元的输出加权?

单选题 · easy

  • A.均匀分布概率
  • B.标准正态概率← 正确答案
  • C.伯努利采样
  • D.泊松分布概率

答案:B。GELU 用标准正态分布的累积分布函数 Φ(x) 对信号打分,再乘回原值。均匀分布没有“中心高、尾部低”的特性,伯努利是离散采样,泊松用于计数场景,都与 GELU 的连续概率打分不符。

Q2. 相比 ReLU,GELU 在负半轴最重要的改进是什么?

单选题 · easy

  • A.输出恒等于负一
  • B.梯度永远为零
  • C.保留微小梯度← 正确答案
  • D.直接丢弃负值

答案:C。ReLU 在负半轴输出恒为零、梯度为零,导致死亡神经元;GELU 的负半轴输出是小的负值且导数始终略大于零,让梯度能“涓涓回流”,神经元不会彻底罢工。

Q3. GELU 工程实现中常用 tanh 近似的目的是什么?

单选题 · mid

  • A.让公式更有美感
  • B.避免直接算 erf← 正确答案
  • C.减少网络参数
  • D.代替矩阵乘法

答案:B。GELU 的精确形式包含误差函数 erf,它是积分形式、计算昂贵。tanh 多项式近似用初等函数模拟出几乎一样的曲线,大幅降低逐元素计算成本,而不会改变网络参数数量。

Q4. Swish 自门控激活的数学表达式是?

单选题 · mid

  • A.x 乘以 sigmoid← 正确答案
  • B.sigmoid 加 tanh
  • C.max 取正后的 x
  • D.tanh 输出原值 x

答案:A。Swish 定义为 x·σ(x),即输入乘自己的 sigmoid,这就是“自门控”名字的由来。加和、取正、直接输出 tanh 都不是 Swish 的结构。

Q5. SwiGLU 相比 GELU 在 FFN 中新增了什么结构?

单选题 · mid

  • A.残差连接结构
  • B.层归一化结构
  • C.第二个线性分支← 正确答案
  • D.全连接网络层

答案:C。SwiGLU 引入额外的权重矩阵 W3 作为“内容分支”,与 W1 的门控分支逐元素相乘。残差连接、层归一化是 Transformer 的通用模块,不是 SwiGLU 特有的新增物。

Q6. LLaMA 使用 SwiGLU 时把 FFN 中间维度设置为什么?

单选题 · hard

  • A.中间维保持 4d
  • B.中间维缩小为 2d
  • C.中间维扩到 8d
  • D.中间维设为 8d/3← 正确答案

答案:D。LLaMA 把中间维设为 8d/3,即标准 4d 的三分之二。这样三组矩阵乘的算力与标准两矩阵的 8d² 相当,用降维对冲 SwiGLU 新增矩阵的开销,实现“能力提升、账单不涨”。

Q7. SwiGLU 激活后的输出等于哪两个信号的逐元素乘积?

单选题 · hard

  • A.门控与线性投影← 正确答案
  • B.GELU 与 ReLU
  • C.tanh 加 sigmoid
  • D.残差加归一化

答案:A。SwiGLU 的公式是 Swish(xW) ⊗ (xV),左边是 Swish 门控信号,右边是线性投影后的内容信号,两者逐元素相乘。GELU、ReLU、残差、归一化都不构成这个门控乘积结构。

Q8. 以下哪些属于 GELU 相对 ReLU 的优势?

多选题 · mid

  • A.负半轴梯度不为零← 正确答案
  • B.函数处处光滑可导← 正确答案
  • C.计算量大幅降低
  • D.概率加权更灵活← 正确答案

答案:ABD。GELU 的负半轴梯度始终略大于零,函数光滑可导,并且用概率乘以原值实现软性选通。但 GELU 需要算 tanh 近似,计算量比 ReLU 的 max 操作更大,C 恰好说反了。

Q9. 采用 SwiGLU 的典型代价有哪些?

多选题 · hard

  • A.多一个大矩阵乘← 正确答案
  • B.参数数量上升← 正确答案
  • C.训练必然变慢
  • D.显存占用增加← 正确答案

答案:ABD。SwiGLU 新增 W3 矩阵,参数数量约涨三分之一,带来额外矩阵乘与更高的显存峰值。但“训练必然变慢”不绝对——LLaMA 通过把中间维压到 8d/3,使算力总量与标准 FFN 相当,训练速度未必变慢。

Q10. 门控机制的本质是什么?

单选题 · easy

  • A.用概率控制信息放行← 正确答案
  • B.把信息全部丢弃
  • C.让输出恒为常数
  • D.只保留正数部分

答案:A。门控机制的核心是“按比例放行”:用门控信号缩放信息,既不全部丢弃也不全盘通过。全部丢弃、输出常数、只留正数都是对门控的片面或错误理解。