激活函数-swiGLU

swiGLU(Switch Gated Linear Unit)简介

swiGLU 是一种改进的激活函数模块,主要用于深度学习中的 Transformer 模型和其他神经网络架构。它在 GLU(Gated Linear Unit) 的基础上进行了修改,以提升模型的表现和训练效率。

1. 背景知识

在深度学习中,激活函数对模型的性能和训练效率有着显著的影响。最初的 GLU(Gated Linear Unit) 提出了通过将输入分成两部分来提高网络的表现:

  • 公式 GLU ( x ) = Linear ( x ) ⊗ σ ( Linear ( x ) ) \text{GLU}(x) = \text{Linear}(x) \otimes \sigma(\text{Linear}(x)) GLU(x)=Linear(x)σ(Linear(x))

其中:

  • Linear ( x ) \text{Linear}(x) Linear(x) 表示线性变换。
  • σ \sigma σ 是 Sigmoid 激活函数。
  • ⊗ \otimes 表示逐元素乘法(element-wise multiplication)。
2. swiGLU 结构

swiGLU 是对 GLU 的变体,结合了 Swish 激活函数(也称为 SiLU,Sigmoid Linear Unit)。Swish 函数表现出色,因为它具有非单调性和自门控的特性。

swiGLU 公式如下:

swiGLU ( x ) = Linear ( x ) ⊗ Swish ( Linear ( x ) ) \text{swiGLU}(x) = \text{Linear}(x) \otimes \text{Swish}(\text{Linear}(x)) swiGLU(x)=Linear(x)Swish(Linear(x))

其中 Swish 激活函数 定义为:

Swish ( x ) = x ⋅ σ ( x ) = x ⋅ 1 1 + e − x \text{Swish}(x) = x \cdot \sigma(x) = x \cdot \frac{1}{1 + e^{-x}} Swish(x)=xσ(x)=x1+ex1

3. 工作原理
  1. 输入 (x) 经过两个并行的线性变换层:

    • x 1 = Linear 1 ( x ) x_1 = \text{Linear}_1(x) x1=Linear1(x)
    • x 2 = Linear 2 ( x ) x_2 = \text{Linear}_2(x) x2=Linear2(x)
  2. 将第一个线性变换 x 1 x_1 x1 与 Swish 激活函数 Swish ( x 2 ) \text{Swish}(x_2) Swish(x2) 进行逐元素乘法:

    swiGLU ( x ) = x 1 ⊗ Swish ( x 2 ) \text{swiGLU}(x) = x_1 \otimes \text{Swish}(x_2) swiGLU(x)=x1Swish(x2)

4. 与 GLU 的区别
  • 激活函数不同

    • GLU 使用 Sigmoid 作为门控激活函数。
    • swiGLU 使用 Swish 作为激活函数。
  • 性能提升

    • Swish 激活函数相比 Sigmoid 更具有优势,特别是在深层网络中。
    • swiGLU 通过 Swish 提供更平滑的梯度,有助于更高效地训练深度神经网络。
5. 优点
  1. 提高性能

    • 在许多基准测试中,swiGLU 已被证明比 GLU、ReLU 及其他激活函数提供更好的表现。
  2. 平滑梯度

    • Swish 函数的平滑性使得反向传播的梯度更新更稳定,减轻梯度消失的问题。
  3. 计算效率

    • 尽管引入了额外的非线性激活函数,swiGLU 的计算开销相对较小,适合大型模型。
6. 应用场景
  • Transformer 模型

    • 在语言建模和自然语言处理任务中,如 GPT 系列和 BERT 的变体。
  • 计算机视觉

    • 适用于视觉 Transformer(ViT)等结构。
  • 任意深度网络

    • 适用于需要门控线性单元的任意网络。

示例代码

以下是一个使用 PyTorch 实现 swiGLU 的示例:

import torch
import torch.nn as nn
import torch.nn.functional as Fclass SwiGLU(nn.Module):def __init__(self, input_dim, hidden_dim):super(SwiGLU, self).__init__()self.linear1 = nn.Linear(input_dim, hidden_dim)self.linear2 = nn.Linear(input_dim, hidden_dim)def forward(self, x):return self.linear1(x) * F.silu(self.linear2(x))# 示例输入
x = torch.randn(4, 128)  # Batch size 4, input dimension 128
model = SwiGLU(input_dim=128, hidden_dim=256)
output = model(x)
print(output.shape)  # 输出维度为 (4, 256)

总结

swiGLU 是对 GLU 的改进,通过引入 Swish 激活函数来提供更平滑的非线性映射,有助于提升深度学习模型的表现,尤其是在 Transformer 架构中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64137.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unix 传奇 | 谁写了 Linux | Unix birthmark

注:本文为 “左耳听风”陈皓的 unix 相关文章合辑。 皓侠已走远,文章有点“年头”,但值得一阅。 文中部分超链已沉寂。 Unix 传奇 (上篇) 2010 年 04 月 09 日 陈皓 了解过去,我们才能知其然,更知所以然。总结过去…

记一个framebuffer显示混乱的低级错误

记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实,这个任务上我多卡了两天,差点把我搞死,于此记录为后鉴。 打算用awtk做一个多进程项目,计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …

常用的前端框架介绍

在前端开发中,有许多流行的框架能够帮助开发者更高效地构建用户界面和交互 1. React: • React是一个由Facebook开发的JavaScript库,用于构建用户界面。 • 它使用组件化的思想,将UI拆分成可复用的组件,每个组件都有自…

Kaggler日志-Day4

进度24/12/14 昨日复盘: Pandas课程完成 Intermediate Mechine Learning2/7 今日记录: Intermediate Mechine Learning之类型变量 读两篇讲解如何提问的文章,在提问区里发起一次提问 实战:自己从头到尾首先Housing Prices Compe…

【21天学习AI底层概念】day5 机器学习的三大类型不能解决哪些问题?

机器学习的三大类型——监督学习、无监督学习和强化学习,虽然可以应用于许多问题,但并非所有问题都能通过这些方法有效解决。每种类型的机器学习都有其局限性,具体如下: 1. 监督学习 (Supervised Learning) 监督学习是通过训练数…

【常考前端面试题总结】---2025

React fiber架构 1.为什么会出现 React fiber 架构? React 15 Stack Reconciler 是通过递归更新子组件 。由于递归执行,所以更新一旦开始,中途就无法中断。当层级很深时,递归更新时间超过了 16ms,用户交互就会卡顿。对于特别庞…

二三(Node2)、Node.js 模块化、package.json、npm 软件包管理器、nodemon、Express、同源、跨域、CORS

1. Node.js 模块化 1.1 CommonJS 标准 utils.js /*** 目标:基于 CommonJS 标准语法,封装属性和方法并导出*/ const baseURL "http://hmajax.itheima.net"; const getArraySum (arr) > arr.reduce((sum, item) > (sum item), 0);mo…

Java爬虫设计:淘宝商品详情接口数据获取

1. 概述 淘宝商品详情接口(如Taobao.item_get)允许开发者通过编程方式,以JSON格式实时获取淘宝商品的详细信息,包括商品标题、价格、销量等。本文档将介绍如何设计一个Java爬虫来获取这些数据。 2. 准备工作 在开始之前&#x…

LeetCode-hot100-73

https://leetcode.cn/problems/largest-rectangle-in-histogram/description/?envTypestudy-plan-v2&envIdtop-100-liked 84. 柱状图中最大的矩形 已解答 困难 相关标签 相关企业 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#x…

深度学习中损失函数(loss function)介绍

深度学习中损失函数(loss function)介绍 ​ 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…

【docker】springboot 服务提交至docker

准备docker (不是docker hub或者harbor,就是可以运行docker run的服务),首先确保docker已经安装。 本文以linux下举例说明: systemctl stats docker ● docker.service - Docker Application Container EngineLoaded…

【新版】阿里云ACP云计算题库及答案解析

阿里云ACO云计算考试提醒都是选择题,70道单选题30道单选题,聪明的小伙伴都知道刷题备考加深记忆,给大家分享一波阿里云ACP云计算题库及答案,希望对大家顺利拿到阿里云ACP云计算高级工程师证书有所帮助! 1、设计云上架…

通过ajax的jsonp方式实现跨域访问,并处理响应

一、场景描述 现有一个项目A,需要请求项目B的某个接口,并根据B接口响应结果A处理后续逻辑。 二、具体实现 1、前端 前端项目A发送请求,这里通过jsonp的方式实现跨域访问。 $.ajax({ url:http://10.10.2.256:8280/ssoCheck, //请求的u…

Unity 沿圆周创建Sphere

思路 取圆上任意一点连接圆心即为半径,以此半径为斜边作直角三角形。当已知圆心位置与半径长度时,即可得该点与圆心在直角三角形两直角边方向上的位置偏移,从而得出该点的位置。 实现 核心代码 offsetX radius * Mathf.Cos(angle * Mathf…

【CUDA】CUBLAS

【CUDA】CUBLAS 在深入了解之前,提前运行预热(warmup)和基准测试(benchmark runs) 是获得准确执行时间的关键。如果不进行预热运行,cuBLAS 的首次运行会有较大的开销(大约 45 毫秒)…

9. 高效利用Excel设置归档Tag

高效利用Excel设置归档Tag 1. Excle批量新建/修改归档Tag2. 趋势记录模型批量导入归档Tag(Method1)2. 趋势记录模型批量导入归档Tag(Method2)3. 趋势记录控件1. Excle批量新建/修改归档Tag Fcatory Talk常常需要归档模拟量,对于比较大的项目工程会有成千上万个重要数据需…

网页端web内容批注插件:

感觉平时每天基本上90%左右的时间都在浏览器端度过,按理说很多资料都应该在web端输入并且输出,但是却有很多时间浪费到了各种桌面app中,比如说什么notion、语雀以及各种笔记软件中,以及导入到ipad的gn中,这些其实都是浪…

Jackson @JsonIgnore 注解

1. 概述 Jackson 是一个广泛使用的Java库,它允许轻松地将Java对象序列化为JSON以及从JSON反序列化回Java对象。Jackson库提供的其中一个注解是JsonIgnore。这个注解用于在序列化和反序列化过程中忽略特定的属性。这在转换JSON与Java对象之间时隐藏或省略敏感或不必…

数据结构——栈的模拟实现

大家好,今天我要介绍一下数据结构中的一个经典结构——栈。 一:栈的介绍 与顺序表和单链表不同的是: 顺序表和单链表都可以在头部和尾部插入和删除数据,但是栈的结构就锁死了(栈的底部是堵死的)栈只能从…

基于springboot+vue的高校校园交友交流平台设计和实现

文章目录 系统功能部分实现截图 前台模块实现管理员模块实现 项目相关文件架构设计 MVC的设计模式基于B/S的架构技术栈 具体功能模块设计系统需求分析 可行性分析 系统测试为什么我? 关于我项目开发案例我自己的网站 源码获取: 系统功能 校园交友平台…