激活函数在 Transformer 中的作用及各种变体简述

激活函数在 Transformer 中的作用

Transformer 的前馈网络(FFN)通常是两层线性变换,中间夹一个激活函数:

FFN(x)=W2⋅Activation(W1x+b1)+b2 FFN(x) = W_2 \cdot Activation(W_1x + b_1) + b_2 FFN(x)=W2⋅Activation(W1x+b1)+b2

如果没有激活函数,两层线性变换叠加仍然是线性变换,模型无法拟合复杂函数。

激活函数的作用就是引入非线性,让网络具备强大的表示能力。

原始 Transformer 使用 ReLU,后来出现了 GeLU、GLU、GeGLU、SwiGLU 等变体。

ReLU 函数

定义

ReLU(x)=max⁡(0,x) ReLU(x) = \max(0, x) ReLU(x)=max(0,x)

  • 正数不变,负数变 0。
  • 导数:x>0 时为 1,x<0 时为 0,x=0 处不可微(实践中用次梯度)。

数值例子

输入 x=1,−2,3,−4x = 1, -2, 3, -4x=1,−2,3,−4:

ReLU(x)=max⁡(0,1),max⁡(0,−2),max⁡(0,3),max⁡(0,−4)=1,0,3,0 ReLU(x) = \\max(0, 1), \\max(0, -2), \\max(0, 3), \\max(0, -4) = 1, 0, 3, 0 ReLU(x)=max(0,1),max(0,−2),max(0,3),max(0,−4)=1,0,3,0

优缺点

计算简单,梯度好,缓解梯度消失。

原点突变,不可微;负区间梯度为 0,可能导致神经元"死亡"。

GeLU 函数

定义

GeLU (Gaussian Error Linear Unit) :

GeLU(x)=x⋅Φ(x) GeLU(x) = x \cdot \Phi(x) GeLU(x)=x⋅Φ(x)

其中 Φ(x)\Phi(x)Φ(x) 是标准正态分布的累积分布函数:

Φ(x)=12(1+erf(x2)) \Phi(x) = \frac{1}{2} \left( 1 + \text{erf} \left( \frac{x}{\sqrt{2}} \right) \right) Φ(x)=21(1+erf(2 x))

近似公式:

GeLU(x)≈0.5x(1+tanh⁡(2π(x+0.044715x3))) GeLU(x) \approx 0.5x \left( 1 + \tanh \left( \sqrt{\frac{2}{\pi}} \left( x + 0.044715x^3 \right) \right) \right) GeLU(x)≈0.5x(1+tanh(π2 (x+0.044715x3)))

数值例子

取 x=1,−2,3x = 1, -2, 3x=1,−2,3。

标准正态 CDF 值:

  • Φ(1)≈0.8413\Phi(1) \approx 0.8413Φ(1)≈0.8413
  • Φ(−2)≈0.0228\Phi(-2) \approx 0.0228Φ(−2)≈0.0228
  • Φ(3)≈0.9987\Phi(3) \approx 0.9987Φ(3)≈0.9987

因此:

GeLU(1)=1×0.8413=0.8413 GeLU(1) = 1 \times 0.8413 = 0.8413 GeLU(1)=1×0.8413=0.8413

GeLU(−2)=−2×0.0228=−0.0456 GeLU(-2) = -2 \times 0.0228 = -0.0456 GeLU(−2)=−2×0.0228=−0.0456

GeLU(3)=3×0.9987=2.9961 GeLU(3) = 3 \times 0.9987 = 2.9961 GeLU(3)=3×0.9987=2.9961

结果:

GeLU(x)=0.8413,−0.0456,2.9961 GeLU(x) = 0.8413, -0.0456, 2.9961 GeLU(x)=0.8413,−0.0456,2.9961

对比 ReLU:

ReLU(x)=1,0,3 ReLU(x) = 1, 0, 3 ReLU(x)=1,0,3

GeLU 在负区间有微小负值,原点附近平滑,可微性更好。

GPT 系列使用 GeLU。

门控线性单元(GLU)

定义

GLU (Gated Linear Unit) :

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

其中:

  • W,VW, VW,V 是两个独立的线性变换矩阵;
  • σ\sigmaσ 是 Sigmoid 函数,输出 0 到 1;
  • ⊗\otimes⊗ 是逐元素相乘 (Hadamard 积)。

直观理解:一个通道提供"内容",另一个通道生成"门控开关",逐元素相乘决定信息通过多少。

数值例子

设输入 x=1,2x = 1, 2x=1,2,为简单取 W=V=IW = V = IW=V=I(单位阵),偏置为 0。

内容通道:

xW=1,2xW = 1, 2xW=1,2

门控通道:

xV=1,2 xV = 1, 2 xV=1,2

Sigmoid:

σ(1)≈0.7311,σ(2)≈0.8808 \sigma(1) \approx 0.7311, \quad \sigma(2) \approx 0.8808 σ(1)≈0.7311,σ(2)≈0.8808

逐元素相乘:

GLU(x)=1×0.7311,2×0.8808=0.7311,1.7616 GLU(x) = 1 \\times 0.7311, 2 \\times 0.8808 = 0.7311, 1.7616 GLU(x)=1×0.7311,2×0.8808=0.7311,1.7616

GeGLU(Gated GELU)

定义

GeGLU 用 GeLU 替代 Sigmoid 作为门控函数:

GeGLU(x)=GeLU(xW+b)⊗(xV+c) GeGLU(x) = GeLU(xW + b) \otimes (xV + c) GeGLU(x)=GeLU(xW+b)⊗(xV+c)

数值例子

仍取 x=1,2x = 1, 2x=1,2,W=V=IW = V = IW=V=I,偏置 0。

内容通道:

xV=1,2 xV = 1, 2 xV=1,2

门控通道:

xW=1,2 xW = 1, 2 xW=1,2

GeLU 值:

GeLU(1)≈0.8413,GeLU(2)≈1.9544 GeLU(1) \approx 0.8413, \quad GeLU(2) \approx 1.9544 GeLU(1)≈0.8413,GeLU(2)≈1.9544

逐元素相乘:

GeGLU(x)=0.8413×1,1.9544×2=0.8413,3.9088 GeGLU(x) = 0.8413 \\times 1, 1.9544 \\times 2 = 0.8413, 3.9088 GeGLU(x)=0.8413×1,1.9544×2=0.8413,3.9088

GeGLU 被 T5、Gemma 等模型采用。

SwiGLU(Swish GLU)

定义

SwiGLU 使用 Swish 函数作为门控:

Swish(x)=x⋅σ(x) Swish(x) = x \cdot \sigma(x) Swish(x)=x⋅σ(x)

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

数值例子

仍取 x=1,2x = 1, 2x=1,2,W=V=IW = V = IW=V=I。

内容通道:

xV=1,2 xV = 1, 2 xV=1,2

门控通道:

xW=1,2 xW = 1, 2 xW=1,2

Swish 值:

Swish(1)=1×0.7311=0.7311 Swish(1) = 1 \times 0.7311 = 0.7311 Swish(1)=1×0.7311=0.7311

Swish(2)=2×0.8808=1.7616 Swish(2) = 2 \times 0.8808 = 1.7616 Swish(2)=2×0.8808=1.7616

逐元素相乘:

SwiGLU(x)=0.7311×1,1.7616×2=0.7311,3.5232 SwiGLU(x) = 0.7311 \\times 1, 1.7616 \\times 2 = 0.7311, 3.5232 SwiGLU(x)=0.7311×1,1.7616×2=0.7311,3.5232

SwiGLU 是当前大多数模型(LLaMA、PaLM、OLMo 等)的首选。

门控单元有效吗?

Noam Shazeer 2020 年的论文评估了所有 GLU 变体,在 CoLA 和 SST-2 任务上:

模型 CoLA SST-2
GLU 84.20 84.12
GeGLU 84.36 84.67
SwiGLU 84.67 84.67

GLU 变体持续优于 ReLU/GeLU 基线,且统计显著。Narang 等人在 T5 类模型上也发现 GLU 变体损失更低。

但并非绝对必需:GPT-3 使用 GeLU,Nemotron 340B 使用平方 ReLU,Falcon 211B 使用 ReLU,都是高性能模型。

因此,SwiGLU/GeGLU 能带来持续提升,但不是唯一选择。

总结

激活函数 公式 数值例子 (x=1,2) 特点
ReLU max(0, x) 1, 2 简单,不可微
GeLU xΦ(x)x\Phi(x)xΦ(x) 0.8413, 1.9544 平滑,GPT 系列
GLU (xW)⊗σ(xV)(xW) \otimes \sigma(xV)(xW)⊗σ(xV) 0.7311, 1.7616 门控,动态稀疏
GeGLU GeLU(xW) ⊗ (xV) 0.8413, 3.9088 梯度稳定,T5/Gemma
SwiGLU Swish(xW) ⊗ (xV) 0.7311, 3.5232 性能最优,LLaMA/PaLM

一句话:激活函数为 FFN 引入非线性;ReLU 简单,GeLU 平滑,GLU 系列用门控动态调节信息流,GeGLU 和 SwiGLU 是当前主流,实验证明门控变体能持续提升性能,但并非绝对必需。

相关推荐
染指11102 小时前
134.Agent-多Agent框架-LangChain多智能体
人工智能·中间件·langchain·agents
fkyyly2 小时前
企业 Agent 落地的两场战争:内部经营闭环与 ToB 外部规模赋能
人工智能·codeagent
看浪的路人2 小时前
第9讲:AI 应用混沌工程与容灾演练
人工智能
沙漠之主3 小时前
C++编程教学设计资料:从入门到实战的完整课程方案
java·前端·c++
workflower3 小时前
AI system product quality model
大数据·人工智能·机器学习·云计算·无人机
众链网络3 小时前
从 GB/T 30225-2026 的「数据管理」章节,反推景区票务系统的数据层设计
人工智能
kaixin_啊啊3 小时前
【零基础学AI】第 1 章课后练习与答案
人工智能·ai
yl45303 小时前
硫酸泄露处理生产商怎么选才够专业
大数据·人工智能·python
FPGA小徐3 小时前
PA1 基础设施(2)深度解析:NEMU 中 ITRACE、MTRACE、FTRACE、IRINGBUF、ETRACE、DIFFTEST 全解析
java·服务器·网络