当前位置: 首页 > news >正文

GLU 变种:ReGLU 、 GEGLU 、 SwiGLU

文章目录

    • GLU 变种:ReGLU 、 GEGLU 、 SwiGLU
      • 1. ReGLU(ReLU-GLU)
        • 函数表达式
        • 代码
      • 2. GEGLU(Gaussian Error GLU)
        • 函数表达式
        • 代码
      • 3. SwiGLU(Swish-GLU)
        • 函数表达式
        • 代码
      • 合并代码

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)=(xW+b)⊗ReLU(xV+c)\text{ReGLU}(x) = (xW+b)\,\otimes\,\text{ReLU}(xV+c) ReGLU(x)=(xW+b)ReLU(xV+c)

代码
  • 代码

    import torch 
    from torch import nnclass 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)=(xW+b)⊗GELU(xV+c)\text{GEGLU}(x) = (xW+b)\,\otimes\,\text{GELU}(xV+c) GEGLU(x)=(xW+b)GELU(xV+c)

代码
  • 代码

    import torch 
    from torch import nnclass 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)=(xW+b)⊗Swishβ(xV+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)

    import troch
    from torch import nnclass SwiGLU(nn.Module):def __init__(self, d_in, d_out, beta=1.0):super().__init__()self.beta   = betaself.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)   # Swishup   = self.w_up(x)return self.w_down(gate * up)
    

合并代码

  • torch封装

    import torch
    from torch import nnclass 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)   # β=1else:gate = torch.sigmoid(gate)          # fallback to GLUreturn self.w_down(gate * up)
    

    输出

    torch.Size([8, 64, 512])
    
  • 对比

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

http://www.dtcms.com/a/285727.html

相关文章:

  • android 信息验证动画效果
  • 精通 triton 使用 MLIR 的源码逻辑 - 第002节:再掌握一些 triton 语法 — 通过 02 softmax
  • 续签人员李权
  • 掌上医院微信小程序平台如何对接医保在线支付?
  • vue自定义指令bug
  • poi-excel-添加水印
  • Vue3 学习教程,从入门到精通,Vue3 项目打包语法知识点及案例代码(9)
  • Windows Server 版本之间有什么区别?
  • 私有服务器AI智能体搭建配置选择记录
  • NGFW服务器安全防护
  • 浏览器信息隔离全指南:从多账号管理到隐私防护
  • VirtualBox + CentOS:启用 DHCP 获取 IPv4 地址
  • 数据结构:顺序表和链表
  • 【PTA数据结构 | C语言版】斜堆的合并操作
  • Expression.Block详解
  • 微信小程序商品结算功能
  • gitlab-ce本地化部署
  • 一文讲清楚React的render优化,包括shouldComponentUpdate、PureComponent和memo
  • 在 React 中根据数值动态设置 SVG 线条粗细
  • Linux | Bash 子字符串提取
  • Java 8 Stream 流操作大全:从入门到实战全覆盖(附案例)
  • 【软件系统架构】系列七:系统性能——计算机性能深入解析
  • 【机器人】HOV-SG 开放词汇 | 分层3D场景图 | 语言引导机器人导航
  • DNN平台因恶意交互导致NTLM哈希泄露漏洞(CVE-2025-52488)
  • ​​Docker 速通教程
  • 用Python实现神经网络(四)
  • 【大模型:知识图谱】--6.Neo4j DeskTop安装+使用
  • 数字化转型:概念性名词浅谈(第三十讲)
  • JAVA面试宝典 -《Elasticsearch 深度调优实战》
  • OpenAI发布通用智能体ChatGPT Agent:实现自主思考、联网与工具调用,智能体赛道大变天!