当前位置: 首页 > 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.lryc.cn/news/592962.html

相关文章:

  • 商汤将发布日日新6.5大模型及具身智能平台该咋看?
  • Java大厂面试实录:从Spring Boot到AI微服务架构的深度解析
  • 数据查找 二叉查找树
  • 深入解析Linux文件描述符:原理、机制与应用实践
  • 语音大模型速览(三)- cosyvoice2
  • 简单使用MCP
  • 4644电源管理芯片在微波射频组件中的技术优势与国产化实践
  • 比亚迪古德伍德亮相:从技术突破到文化对话
  • JavaSE -- 数组详细讲解(数组介绍,Arrays常用方法,二维数组创建)
  • CMake指令:常见内置命令行工具( CMake -E )
  • MyBatis-Flex代码生成
  • Google Gemini CLI 配置简要指南
  • 数字化转型:概念性名词浅谈(第三十一讲)
  • 前端-CSS盒模型、浮动、定位、布局
  • 张力场中的领航者:驾驭二元对立的“情境智慧”模型
  • Vue3 从 0 到 ∞:Composition API 的底层哲学、渲染管线与生态演进全景
  • C++---cout、cerr、clog
  • 上网行为管理-web认证服务
  • JavaScript 的垃圾回收机制
  • 20250718-5-Kubernetes 调度-Pod对象:重启策略+健康检查_笔记
  • Go-Redis 入门与实践从连接到可观测,一站式掌握 go-redis v9**
  • C++ :vector的介绍和使用
  • 快速安装GitLab指南
  • Selenium 攻略:从元素操作到 WebDriver 实战
  • 最小生成树算法详解
  • FastAdmin框架超级管理员密码重置与常规admin安全机制解析-卓伊凡|大东家
  • Android性能优化之包体积优化
  • 【DataWhale】快乐学习大模型 | 202507,Task03笔记
  • Spring全面讲解(无比详细)
  • MySQL中的锁有哪些