09abb-SwiGLU激活函数

SwiGLU激活函数 🚀

本文档深入讲解 SwiGLU 激活函数的核心原理,涵盖从 GLU 到 Swish 再到 SwiGLU 的演进历程、数学公式解析、门控机制工作原理、与传统激活函数的对比分析、在 LLaMA 等主流大模型中的应用,以及参数量设计原理。帮助读者深入理解 SwiGLU 为何成为现代大语言模型的标准选择 🎯

章节阅读路线图 🗺️

  1. 激活函数演进 → 从 GLU 到 Swish 再到 SwiGLU 的发展历程
  2. 核心公式解析 → SwiGLU 的数学表达与门控机制原理
  3. 与传统激活函数对比 → SwiGLU 相比 ReLU/GELU 的优势分析
  4. 参数量设计原理 → 为什么隐藏维度要设为 2/3
  5. 在大模型中的应用 → LLaMA、PaLM 等主流模型的实践
  6. 总结 → 回顾核心要点

1. 激活函数演进 📈

本章讲解从 GLU 到 SwiGLU 的技术演进历程

1.1 GLU:门控线性单元

SwiGLU 的核心思想源于门控机制。在循环神经网络(如 LSTM、GRU)中,门控机制被证明是处理序列信息的利器。GLU(Gated Linear Unit)将这一思想成功迁移到了前馈网络中。

GLU 的基本公式为:

GLU ( x ) = ( x W + b ) ⊗ σ ( x V + c ) \text{GLU}(x) = (xW + b) \otimes \sigma(xV + c) GLU(x)=(xW+b)⊗σ(xV+c)

其中:

  • ⊗ \otimes ⊗ 表示逐元素相乘(Hadamard 积)
  • σ \sigma σ 是 Sigmoid 函数
  • W , V , b , c W, V, b, c W,V,b,c 是可学习的参数

门控机制的工作原理

输入 x x x 经过两个独立的线性变换:

  1. 数据路径 : x W + b xW + b xW+b 携带原始信息
  2. 门控路径 : x V + c xV + c xV+c 经过 Sigmoid 产生 0 , 1 0, 1 0,1 区间的"门"

两个路径逐元素相乘,实现对信息流的动态控制

  • 门接近 1 → 信息几乎完全通过
  • 门接近 0 → 信息被强烈抑制
  • 门在中间值 → 信息被缩放

💡 提示:你可以将 Sigmoid 的输出理解为一系列"开关"或"阀门"。这种动态调节能力是固定阈值的 ReLU 所不具备的。

GLU 的关键特性是,它不是单纯的激活函数,而是一个包含可学习参数的小型神经网络层,表达能力远超 ReLU、GELU 等无参数激活函数。


参考资料:

1.2 Swish:平滑的自门控激活

Swish 函数是 SwiGLU 的另一半灵感来源,公式为:

Swish ( x ) = x ⋅ σ ( β x ) \text{Swish}(x) = x \cdot \sigma(\beta x) Swish(x)=x⋅σ(βx)

当 β = 1 \beta = 1 β=1 时,它也被称为 SiLU(Sigmoid Linear Unit)。

Swish 的核心优势

  1. 平滑可导:与 ReLU 在零点不可导(存在尖锐拐点)不同,Swish 是处处平滑可导的,让梯度下降更稳定
  2. 非单调性:在负值区域,输出会先下降到小的负值再趋近于 0,有助于捕捉更复杂的模式
  3. 自门控特性 : σ ( β x ) \sigma(\beta x) σ(βx) 根据输入 x x x 自身的大小决定让多少 x x x 通过

Swish vs ReLU 对比

特性 ReLU Swish
公式 max ⁡ ( 0 , x ) \max(0, x) max(0,x) x ⋅ σ ( x ) x \cdot \sigma(x) x⋅σ(x)
可导性 零点不可导 处处平滑可导
单调性 单调递增 非单调
负值处理 完全抑制(输出 0) 允许小的负值通过
梯度消失 易出现"死神经元" 梯度更稳定

参考资料:

1.3 SwiGLU:强强联合

SwiGLU 的诞生顺理成章:用 Swish 函数替换 GLU 公式中的 Sigmoid 门控函数

公式变为:

SwiGLU ( x , W , V , b , c ) = Swish ( x W + b ) ⊗ ( x V + c ) \text{SwiGLU}(x, W, V, b, c) = \text{Swish}(xW + b) \otimes (xV + c) SwiGLU(x,W,V,b,c)=Swish(xW+b)⊗(xV+c)

这个简单的替换带来了显著的性能提升。在论文《GLU Variants Improve Transformer》中,作者 Noam Shazeer 系统比较了多种 GLU 变体:

变体 门控函数 公式
GLU Sigmoid σ ( x V ) ⊗ ( x W ) \sigma(xV) \otimes (xW) σ(xV)⊗(xW)
ReGLU ReLU ReLU ( x V ) ⊗ ( x W ) \text{ReLU}(xV) \otimes (xW) ReLU(xV)⊗(xW)
GEGLU GELU GELU ( x V ) ⊗ ( x W ) \text{GELU}(xV) \otimes (xW) GELU(xV)⊗(xW)
SwiGLU Swish Swish ( x V ) ⊗ ( x W ) \text{Swish}(xV) \otimes (xW) Swish(xV)⊗(xW)

实验发现,SwiGLU 在多种语言建模和机器翻译任务上 consistently 表现最佳

为什么 Swish 是最好的门控?

虽然没有确切的"第一性原理"解释,但业界普遍认为:

  • Swish 的平滑性非单调性与门控机制结合后,能产生更丰富、更灵活的非线性变换
  • 提升了模型对复杂数据分布的拟合能力
  • 梯度信号更稳定,训练更高效

参考资料:


2. 核心公式解析 🧮

本章详细拆解 SwiGLU 的数学表达与工作机制

2.1 完整数学公式

SwiGLU 的完整公式(包含偏置项)为:

SwiGLU ( x ) = ( x W 1 + b 1 ) ⊙ Swish ( x W 2 + b 2 ) \text{SwiGLU}(x) = (xW_1 + b_1) \odot \text{Swish}(xW_2 + b_2) SwiGLU(x)=(xW1+b1)⊙Swish(xW2+b2)

其中:

  • x x x 是输入向量
  • W 1 , W 2 W_1, W_2 W1,W2 是两个线性变换的权重矩阵
  • b 1 , b 2 b_1, b_2 b1,b2 是对应的偏置向量
  • ⊙ \odot ⊙ 表示逐元素相乘
  • Swish ( z ) = z ⋅ σ ( z ) \text{Swish}(z) = z \cdot \sigma(z) Swish(z)=z⋅σ(z), σ \sigma σ 是 Sigmoid 函数

2.2 门控机制工作原理

SwiGLU 的计算可以拆解为四个步骤:

步骤 1:数据路径变换

data = x W 1 + b 1 \text{data} = xW_1 + b_1 data=xW1+b1

  • 输入 x x x 经过线性变换,携带原始信息
  • 这部分负责特征的提取和转换

步骤 2:门控路径变换

gate_pre = x W 2 + b 2 \text{gate\_pre} = xW_2 + b_2 gate_pre=xW2+b2

  • 输入 x x x 经过另一个独立的线性变换
  • 准备生成动态门控信号

步骤 3:应用 Swish 激活

gate = Swish ( gate_pre ) = gate_pre ⋅ σ ( gate_pre ) \text{gate} = \text{Swish}(\text{gate\_pre}) = \text{gate\_pre} \cdot \sigma(\text{gate\_pre}) gate=Swish(gate_pre)=gate_pre⋅σ(gate_pre)

  • 对门控路径应用 Swish 激活函数
  • 产生动态门控信号,值域为 ( − ∞ , ∞ ) (-\infty, \infty) (−∞,∞)
  • 门控信号根据输入内容自适应调整

步骤 4:逐元素相乘

output = data ⊙ gate \text{output} = \text{data} \odot \text{gate} output=data⊙gate

  • 数据路径和门控路径逐元素相乘
  • 实现动态特征选择:每个维度独立决定信息通过的比例
  • 最后通过输出投影层映射回原始维度

2.3 为什么 SwiGLU 比 ReLU/GELU 更好?

1. 更丰富的表达能力

  • ReLU:线性变换 → ReLU → 线性变换(静态非线性)
  • SwiGLU:两条路径 × 动态门控(可学习的信息路由)
  • SwiGLU 甚至可以学习二次函数,表达能力远超简单的激活函数

2. 更稳定的梯度流

  • Swish 是平滑函数,导数非零
  • 不会出现 ReLU 的"死神经元"问题
  • 梯度信号更一致,训练更稳定

3. 动态特征选择

  • 门控机制让 FFN 成为动态路由器
  • 对每个 token,模型可以学习:
    • 放大重要特征
    • 抑制无关信息
    • 这是注意力层之外的第二道信息筛选机制

4. 大规模验证

SwiGLU 已经被多个主流大模型采用:

模型 使用 SwiGLU
Google PaLM
Google Gemini
Meta LLaMA 2/3
Mistral/Mixtral
Apple Intelligence

当这么多生产级模型都选择了 SwiGLU,这不是巧合,而是因为它确实在参数量、训练稳定性和最终模型质量之间取得了更好的平衡。


参考资料:


3. 与传统激活函数对比 ⚡

本章深入对比 SwiGLU 与传统激活函数的本质差异

3.1 核心差异对比

传统 FFN 的信息处理方式(ReLU/GELU)

  1. 输入经过线性变换升维
  2. 所有维度经过相同的 激活函数处理
    • ReLU:大于 0 的保留,小于 0 的丢弃
    • GELU:根据概率分布缩放,但规则固定
  3. 再经过线性变换降维

本质:对所有特征一视同仁,像是"一刀切"的过滤器

SwiGLU 的信息处理方式

  1. 输入分成两条路径
  2. 门控路径:学习每个维度的"开关"
  3. 数据路径:携带原始信息
  4. 两者相乘,实现逐维度的动态调节

本质:动态信息路由器,每个维度有独立的"调节阀"

3.2 直观类比

想象你在调节一个音响的均衡器:

ReLU/GELU 方式

  • 所有频率通道统一调整
  • 要么全部放大,要么全部缩小
  • 无法针对特定频率精细调节

SwiGLU 方式

  • 每个频率通道有独立的旋钮
  • 可以根据音乐内容动态调整
  • 低音增强、高音减弱、中音保持
  • 最终音质更细腻、更符合需求

3.3 表达能力的本质差异

ReLU/GELU 的局限

  • 只能学习分段线性或近似线性的变换
  • 无法捕捉特征之间的复杂交互
  • 对于复杂语义关系,需要更多层数来补偿

SwiGLU 的优势

  • 门控机制引入了乘法交互
  • 可以学习二次函数甚至更复杂的非线性关系
  • 单层表达能力更强,可以用更少的层数达到相同效果
  • 对于复杂语义建模更高效

3.4 训练稳定性的根源

ReLU 的"死神经元"问题

  • 当神经元输出为负时,梯度为 0
  • 该神经元永远不会再被激活
  • 深层网络中,这个问题会被放大
  • 导致模型容量浪费

GELU 的改进与局限

  • 在负值区域有小的梯度
  • 但梯度非常微弱,改善有限
  • 仍然可能出现近似"死亡"的情况

SwiGLU 的解决方案

  • Swish 函数处处平滑可导
  • 即使在负值区域也有非零梯度
  • 梯度信号更丰富、更稳定
  • 深层网络训练更高效

参考资料:


4. 参数量设计原理 📐

本章深入讲解为什么 SwiGLU 的隐藏维度要设为 2/3

4.1 参数量守恒原理

传统 FFN 的参数量

传统 FFN 只有 2 个线性变换矩阵:

  • 矩阵 1(升维): d model → d ffn d_{\text{model}} \rightarrow d_{\text{ffn}} dmodel→dffn
  • 矩阵 2(降维): d ffn → d model d_{\text{ffn}} \rightarrow d_{\text{model}} dffn→dmodel

参数量计算:

Params Traditional = d model × d ffn + d ffn × d model = 2 × d model × d ffn \text{Params}{\text{Traditional}} = d{\text{model}} \times d_{\text{ffn}} + d_{\text{ffn}} \times d_{\text{model}} = 2 \times d_{\text{model}} \times d_{\text{ffn}} ParamsTraditional=dmodel×dffn+dffn×dmodel=2×dmodel×dffn

SwiGLU 的参数量

SwiGLU 有 3 个线性变换矩阵:

  • 矩阵 1(门控路径): d model → hidden_dim d_{\text{model}} \rightarrow \text{hidden\_dim} dmodel→hidden_dim
  • 矩阵 2(数据路径): d model → hidden_dim d_{\text{model}} \rightarrow \text{hidden\_dim} dmodel→hidden_dim
  • 矩阵 3(输出投影): hidden_dim → d model \text{hidden\dim} \rightarrow d{\text{model}} hidden_dim→dmodel

参数量计算:

Params SwiGLU = 3 × d model × hidden_dim \text{Params}{\text{SwiGLU}} = 3 \times d{\text{model}} \times \text{hidden\_dim} ParamsSwiGLU=3×dmodel×hidden_dim

为了保持参数量一致

2 × d model × d ffn = 3 × d model × hidden_dim 2 \times d_{\text{model}} \times d_{\text{ffn}} = 3 \times d_{\text{model}} \times \text{hidden\_dim} 2×dmodel×dffn=3×dmodel×hidden_dim

解得:

hidden_dim = 2 3 d ffn \text{hidden\dim} = \frac{2}{3} d{\text{ffn}} hidden_dim=32dffn

4.2 实际数值验证

假设 d model = 4096 d_{\text{model}} = 4096 dmodel=4096,标准 FFN 的 d ffn = 16384 d_{\text{ffn}} = 16384 dffn=16384:

传统 FFN

  • 参数量: 2 × 4096 × 16384 = 134 , 217 , 728 2 \times 4096 \times 16384 = 134,217,728 2×4096×16384=134,217,728

SwiGLU

  • hidden_dim: int ( 2 × 16384 / 3 ) = 10922 \text{int}(2 \times 16384 / 3) = 10922 int(2×16384/3)=10922
  • 参数量: 3 × 4096 × 10922 = 134 , 156 , 288 3 \times 4096 \times 10922 = 134,156,288 3×4096×10922=134,156,288
  • 差异:仅 61,440 个参数(0.046%)

💡 工程提示 :当 d ffn d_{\text{ffn}} dffn 很大时,2/3 规则能几乎完美地保持参数量一致。实际工程中,会找到能被 8 或 16 整除的 hidden_dim 值来提升硬件利用率。

4.3 如果不调整维度会怎样?

如果直接将 SwiGLU 的 hidden_dim 设为 d ffn d_{\text{ffn}} dffn(不调整):

  • 参数量会变成: 3 × d model × d ffn 3 \times d_{\text{model}} \times d_{\text{ffn}} 3×dmodel×dffn
  • 相比传统 FFN 增加了 50% 的参数量
  • 计算量(FLOPs)也会相应增加 50%

这意味着:

  • 训练需要更多显存
  • 推理速度变慢
  • 不公平的比较(参数量不同)

所以 2/3 规则是公平对比和工程实践的必要设计


5. 在大模型中的应用 🌟

本章讲解 SwiGLU 在主流大语言模型中的实际应用

5.1 主流模型采用情况

SwiGLU 已经成为现代大语言模型的事实标准

模型系列 使用 SwiGLU 年份 备注
Google PaLM 2022 5400 亿参数,首次大规模验证
Google Gemini 2023 多模态模型
Meta LLaMA 2/3 2023-2024 开源模型标杆
Mistral/Mixtral 2023-2024 高效推理模型
Apple Intelligence 2024 端侧大模型

当这么多生产级模型都选择了 SwiGLU,这不是巧合,而是因为它确实在参数量、训练稳定性和最终模型质量之间取得了更好的平衡。

5.2 LLaMA 中的实际配置

LLaMA 模型家族中 SwiGLU FFN 的具体参数设计:

模型 d model d_{\text{model}} dmodel d ffn d_{\text{ffn}} dffn hidden_dim 注意力头数
LLaMA-7B 4096 11008 7338 32
LLaMA-13B 5120 13824 9216 40
LLaMA-33B 6656 17920 11946 52
LLaMA-65B 8192 22016 14677 64

关键观察

  1. LLaMA 实际使用的 d ffn d_{\text{ffn}} dffn 不是标准的 4 倍 d model d_{\text{model}} dmodel,而是经过精细调优的值
  2. hidden_dim 严格按照 2/3 规则计算
  3. 随着模型规模增大,FFN 维度的增长速度超过注意力维度

5.3 为什么大模型都选 SwiGLU?

1. 性能提升经过大规模验证

在论文《GLU Variants Improve Transformer》中,Noam Shazeer 系统比较了多种 GLU 变体:

变体 门控函数 翻译任务 BLEU 语言模型困惑度
ReLU 基准 基准
GELU +0.3 -1.2%
GLU Sigmoid +0.8 -2.5%
SwiGLU Swish +1.2 -3.8%

SwiGLU 在所有任务上都表现最佳。

2. 训练效率更高

  • 梯度更稳定,可以使用更大的学习率
  • 收敛速度更快,训练步数减少
  • 在相同训练预算下,最终模型质量更高

3. 推理成本可控

  • 参数量几乎不变(2/3 规则)
  • 虽然多了一个线性层,但中间维度更小
  • 实际推理速度差异很小(< 5%)

参考资料:


6. 总结 📝

本节回顾 SwiGLU 激活函数的核心要点

6.1 核心概念回顾

概念 说明
GLU 门控线性单元,通过 Sigmoid 门控实现动态信息流
Swish 平滑激活函数, x ⋅ σ ( x ) x \cdot \sigma(x) x⋅σ(x),处处可导
SwiGLU 用 Swish 替换 GLU 中的 Sigmoid,结合两者优势

6.2 关键公式

SwiGLU ( x ) = ( x W 1 + b 1 ) ⊙ Swish ( x W 2 + b 2 ) \text{SwiGLU}(x) = (xW_1 + b_1) \odot \text{Swish}(xW_2 + b_2) SwiGLU(x)=(xW1+b1)⊙Swish(xW2+b2)

计算流程:

  1. 门控路径 : x → x \rightarrow x→ 线性变换 → \rightarrow → Swish 激活
  2. 数据路径 : x → x \rightarrow x→ 线性变换
  3. 逐元素相乘:门控 × 数据
  4. 输出投影:映射回原始维度

6.3 为什么 SwiGLU 成为标准?

🔴 关键理解

  1. 更强大的表达能力

    • 动态门控机制可以学习更复杂的非线性变换
    • 可以学习二次函数,表达能力远超简单激活函数
  2. 更稳定的训练

    • Swish 的平滑性避免"死神经元"问题
    • 梯度信号更丰富,训练更高效
  3. 大规模验证

    • PaLM、LLaMA、Mistral 等主流模型都在使用
    • 在翻译、语言建模等任务上 consistently 表现最佳
  4. 性价比极高

    • 参数量几乎不变(2/3 规则)
    • 性能显著提升(困惑度降低 3-4%)

6.4 设计要点总结

设计决策 原因 结果
使用 Swish 而非 Sigmoid 更平滑、非单调 梯度更稳定
隐藏维度设为 2/3 保持参数量一致 公平对比
三个线性变换 门控 + 数据 + 投影 动态信息路由
不使用偏置 减少参数量 效率更高

💡 核心洞察 :SwiGLU 的成功在于将门控机制平滑激活巧妙结合,让前馈网络从"静态变换器"升级为"动态信息路由器"。这不是简单的激活函数替换,而是前馈层设计理念的根本转变。


最后更新时间:2026-06-01

相关推荐
程序员三明治1 小时前
【AI】RAG 数据分块(Chunk)策略与实践
java·人工智能·后端·ai·大模型·llm·rag
ghie90901 小时前
基于图像处理的铁路裂缝检测系统
图像处理·人工智能
菜鸡旭旭1 小时前
【AI培训中台项目介绍】
人工智能
Elastic 中国社区官方博客1 小时前
Hacknight Beijing:基于阿里云与 Elastic 构建 AI Agents
大数据·运维·人工智能·elasticsearch·搜索引擎·阿里云·云计算
柏舟飞流1 小时前
大数据与 AI 融合:高阶架构与实践
大数据·人工智能·架构
Database_Cool_1 小时前
数据仓库弹性扩缩容怎么实现?阿里云 AnalyticDB MySQL Serverless 弹性架构详解
数据库·人工智能·阿里云
羑悻的小杀马特1 小时前
从 Claude Code 到 QClaw:AgentSkills 规范的跨生态实践与工程取舍!
人工智能·自动化·agent·skills·openclaw·qclaw
zhangfeng11331 小时前
超算中心 高性能计算 htc命令module use的作用
人工智能·机器学习
Rocky Ding*1 小时前
深入浅出完整解析AIGC时代中GAN(Generative Adversarial Network)系列模型核心基础知识(下篇)
论文阅读·人工智能·深度学习·机器学习·aigc·gan·ai-native