GLU 变种:ReGLU 、 GEGLU 、 SwiGLU

文章目录

GLU 变种:ReGLU 、 GEGLU 、 SwiGLU

  1. 在 GLU 的基础上,陆续提出了若干"激活 + GLU "的混合门控单元。它们共享同一套"双线形投影 + 逐元素门控"范式,差别仅在于把 GLU 中的 Sigmoid 门控替换为其他非线性函数,从而在参数量几乎不变的前提下带来不同的归纳偏差与性能收益。

  2. 参考论文:GLU Variants Improve Transformer

    https://arxiv.org/pdf/2002.05202


1. ReGLU(ReLU-GLU)

  • 核心思想:把 Sigmoid 换成 ReLU,让门控也具备稀疏性,计算更便宜,且保留 GLU 的残差特性。
函数表达式

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

代码
  • 代码

    python 复制代码
    import torch 
    from torch import nn
    
    
    class ReGLU(nn.Module):
        def __init__(self, d_in, d_out):
            super().__init__()
            self.w_gate = nn.Linear(d_in, d_out, bias=False)
            self.w_up   = nn.Linear(d_in, d_out, bias=False)
            self.w_down = nn.Linear(d_out, d_in, bias=False)
    
        def forward(self, x):
            gate = F.relu(self.w_gate(x))
            up   = self.w_up(x)
            return self.w_down(gate * up)

2. GEGLU(Gaussian Error GLU)

  • 核心思想:用 GELU 取代 Sigmoid,兼顾稀疏与平滑,兼顾 ReLU 的低计算与 Swish 的高表达。
函数表达式

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

代码
  • 代码

    python 复制代码
    import torch 
    from torch import nn
    
    class GEGLU(nn.Module):
        def __init__(self, d_in, d_out):
            super().__init__()
            self.w_gate = nn.Linear(d_in, d_out, bias=False)
            self.w_up   = nn.Linear(d_in, d_out, bias=False)
            self.w_down = nn.Linear(d_out, d_in, bias=False)
    
        def forward(self, x):
            gate = F.gelu(self.w_gate(x))
            up   = self.w_up(x)
            return self.w_down(gate * up)

3. SwiGLU(Swish-GLU)

  • 核心思想:将 Swish 引入门控;Swish 本身具备 可学习/常数 β,在深层网络中表现优于 ReLU/GELU。
函数表达式

SwiGLU ( x ) = ( x W + b )   ⊗   Swish β ( x V + c ) Swish β ( z ) = z ⋅ σ ( β z ) \text{SwiGLU}(x) = (xW+b)\,\otimes\,\text{Swish}\beta(xV+c) \\ \text{Swish}\beta(z)=z\cdot\sigma(\beta z) SwiGLU(x)=(xW+b)⊗Swishβ(xV+c)Swishβ(z)=z⋅σ(βz)

代码
  • 固定swish函数中的参数 β = 1 \beta = 1 β=1 (SiLU)

    python 复制代码
    import troch
    from torch import nn
    
    class SwiGLU(nn.Module):
        def __init__(self, d_in, d_out, beta=1.0):
            super().__init__()
            self.beta   = beta
            self.w_gate = nn.Linear(d_in, d_out, bias=False)
            self.w_up   = nn.Linear(d_in, d_out, bias=False)
            self.w_down = nn.Linear(d_out, d_in, bias=False)
    
        def forward(self, x):
            gate = self.w_gate(x)
            gate = gate * torch.sigmoid(self.beta * gate)   # Swish
            up   = self.w_up(x)
            return self.w_down(gate * up)

合并代码

  • torch封装

    python 复制代码
    import torch
    from torch import nn
    
    class GLUVariants(nn.Module):
        def __init__(self, d_in, d_out, variant="geglu"):
            super().__init__()
            self.variant = variant.lower()
            self.w_gate = nn.Linear(d_in, d_out, bias=False)
            self.w_up   = nn.Linear(d_in, d_out, bias=False)
            self.w_down = nn.Linear(d_out, d_in, bias=False)
    
        def forward(self, x):
            gate = self.w_gate(x)
            up   = self.w_up(x)
            if self.variant == "reglu":
                gate = F.relu(gate)
            elif self.variant == "geglu":
                gate = F.gelu(gate)
            elif self.variant == "swiglu":
                gate = gate * torch.sigmoid(gate)   # β=1
            else:
                gate = torch.sigmoid(gate)          # fallback to GLU
            return self.w_down(gate * up)

    输出

    python 复制代码
    torch.Size([8, 64, 512])
  • 对比

    特性 GLU ReGLU GEGLU SwiGLU
    门控激活 Sigmoid ReLU GELU Swish
    稀疏门控 部分 平滑稀疏
    计算量
    梯度平滑性 最好
    实际效果(大模型) 基线 接近 GLU 略优于 GLU 最佳
    是否需额外参数 可选 β

相关推荐
陈天伟教授8 小时前
人工智能训练师认证教程(4)OpenCV 快速实践
人工智能·python·神经网络·opencv·机器学习·计算机视觉
数式Oinone8 小时前
数式Oinone7早鸟体验版发布,全面适配JDK17,AI Native加速产品智能化转型
人工智能·低代码·低代码平台·数式oinone
啊阿狸不会拉杆8 小时前
《数字图像处理》第 5 章-图像复原与重建
图像处理·人工智能·算法·matlab·数字图像处理
千殇华来8 小时前
音频定义/声道/音频格式-Ambisonics声音
人工智能·语音识别
百***78758 小时前
【技术教程】3步极速接入GPT-5.1:零门槛体验多模态AI能力
android·java·人工智能·gpt·opencv
音视频牛哥9 小时前
【深度扫盲】音视频开发:拆解黑盒,从入门到精通的成长之路
人工智能·机器学习·计算机视觉·音视频·大牛直播sdk·超低延迟rtsp播放器·超低延迟rtmp播放器
默 语9 小时前
IPIDEA 代理技术在海外品牌社媒数据采集中的实操落地(Instagram 营销分析案例版)
java·人工智能·ai·ai编程
rockingdingo9 小时前
0-1教程 ChatGPT Apps Store应用提交教程——和MCP开发部署
人工智能·chatgpt·chatgpt-app
福客AI智能客服9 小时前
智能客服机器人:家居建材电商的场景化服务核心
大数据·人工智能·机器人
badfl9 小时前
OpenAI官方发布gpt-image-1.5有哪些亮点?
人工智能·ai·ai作画