激活函数-swiGLU

news2024/12/15 15:42:15

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 F

class 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.coloradmin.cn/o/2260002.html

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

相关文章

(3)spring security - 认识PasswordEncoder

目录 1.简介1.1.简单了解认证流程 2.密码验证3.PasswordEncoder的内置实现4.小结 目标: 简单了解认证的流程简单认识spring security中的Password Encoder 1.简介 还是以这幅图为基础,认识Password Encoder到底是什么? 1.1.简单了解认证流程…

29.在Vue 3中使用OpenLayers读取WKB数据并显示图形

在Web开发中,地理信息系统(GIS)应用越来越重要,尤其是在地图展示和空间数据分析的场景中。OpenLayers作为一个强大的开源JavaScript库,为开发者提供了丰富的地图展示和空间数据处理能力。在本篇文章中,我将…

LLM大语言模型私有化部署-OpenEuler22.03SP3上容器化部署Dify与Qwen2.5

背景 Dify 是一款开源的大语言模型(LLM) 应用开发平台。其直观的界面结合了 AI 工作流、 RAG 管道、 Agent 、模型管理、可观测性功能等,让您可以快速从原型到生产。相比 LangChain 这类有着锤子、钉子的工具箱开发库, Dify 提供了更接近生产需要的完整…

革新3D高保真数字人生成:无需深度摄像头,普通手机视频即可创建逼真面部动画

在数字化内容创作领域,特别是虚拟人物和增强现实(AR)应用中,高质量的3D数字人生成正变得越来越重要。然而,传统方法依赖于昂贵的深度摄像头和复杂的设备设置,这不仅增加了成本,也限制了其灵活性和易用性。为了解决这些问题,并降低进入门槛,一款基于MetaHuman的插件应运…

【前端 Uniapp】使用Vant打造Uniapp项目(避坑版)

一、基本介绍 Uniapp 是基于 Vue.js 的开发框架,通过一套代码可以同时发布到多个平台的应用框架。而 Vant 是针对移动端 Vue.js 的组件库。通过这样的组合,我们可以快速构建出一个跨平台的移动应用。Vant 已经支持多种小程序和 H5 平台,也对…

【记录】Django解决与VUE跨域问题

1 梗概 这里记录Django与VUE的跨域问题解决方法,主要修改内容是在 Django 中。当然其他的前端项目 Django 也可以这样处理。 2 安装辅助包 pip install django-cors-headers3 配置 settings.py INSTALLED_APPS [ # ... corsheaders, # ... ] 为了响应…

【AI知识】激活函数介绍(sigmoid Tanh Relu)+ 梯度爆炸 / 消失及解决办法

激活函数: 使用激活函数的原因: 神经网络中每一层的输入输出都是一个线性求和的过程,下一层的输出只是承接了上一层输入函数的线性变换,如果没有激活函数,无论构造的神经网络多么复杂,有多少层,…

驱动开发-入门【1】

1.内核下载地址 Linux内核源码的官方网站为https://www.kernel.org/,可以在该网站下载最新的Linux内核源码。进入该网站之后如下图所示: 从上图可以看到多个版本的内核分支,分别为主线版本(mainline)、稳定版本&#…

3D 生成重建038-DiffGS训练一个3DGS编码器来简化训练

3D 生成重建038-DiffGS训练一个3DGS编码器来简化训练 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 三维高斯溅射(3DGS)在渲染速度和保真度方面表现出了令人信服的性能,但由于其离散性和非结构性,高斯溅射的生成仍然是一…

【渗透测试一】信息收集

信息收集简介 定义 信息收集是渗透测试和网络安全评估等活动的初始关键阶段。它是指通过各种合法手段(如网络扫描、查询公开数据库、社会工程学等),收集与目标系统(包括网络、主机、应用程序、组织等)相关的信息&…

小迪笔记第五十一天-前后台功能点文件下载文件读取文件删除目录遍历目录穿越

前言 前后台功能点 就是因为权限的不同而造成的 功能的不同 一般这个文件的 下载 文件的读取 一般出现在前台 而人家的删除和遍历 目录的穿越出现在 后台 以这个海洋cms 为例进行 演示 (源码在后台) 后台管理地址:http://192.168…

「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门

本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念,并解决一个经典问题:斐波那契数列。学生将学习如何使用动态规划优化递归计算,并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …

phidata - 具有记忆、知识、工具和推理能力的多模态代理

Phidata 是一个用于构建多模态代理的框架,使用 phidata 可以:使用内存、知识、工具和推理构建多模式代理。建立可以协同工作解决问题的代理团队。使用漂亮的 Agent UI 与您的代理聊天。 16200 Stars 2200 Forks 28 Issues 82 贡献者 MPL-2.0 License Pyt…

第六届全球校园人工智能算法精英大赛-算法巅峰专项赛(系列文章)-- 开篇

前言 “全球校园人工智能算法精英大赛”是江苏省人工智能学会举办的面向全球具有正式学籍的全日制高等院校及以上在校学生举办的算法竞赛。其中的算法巅峰专项赛是新赛道,2024年是其第一届比赛。 翻阅过所有赛道的题目,题目出的真心可以,很具…

柚坛工具箱Uotan Toolbox适配鸿蒙,刷机体验再升级

想要探索智能设备的无限可能?Uotan Toolbox(柚坛工具箱)将是您的得力助手。这款采用C#语言打造的创新型开源工具箱,以其独特的设计理念和全面的功能支持,正在改变着用户与移动设备互动的方式。 作为一款面向专业用户的…

‘Close Project‘ is not available while IDEA is updating indexes的解决

XXX is not available while IDEA is updating indexes IDEA 1.Remove from Recent Projects 2.重新 Open工程即可

[笔记] 编译LetMeowIn(C++汇编联编程序)过程

文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目,c调用汇编的程序,需要配置一下,特此记录一下 过程 下载源码 首先下载源码…

Linux系统操作03|chmod、vim

上文: Linux系统操作02|基本命令-CSDN博客 目录 六、chmod:给文件设置权限 1、字母法 2、数字法(用的最多) 七、vim:代码编写和文本编辑 1、启动和退出 1️⃣启动 2️⃣退出 2、vim基本操作 六、chmod&#x…

SpringCloud微服务实战系列:01让SpringCloud项目在你机器上运行起来

目录 项目选型 项目安装-本地运行起来 软件安装: 项目启动: 总结&答疑 项目选型 软件开发,基本上都不会从0开始,一般都是在其他项目或者组件的基础上进行整合优化迭代,站在巨人肩膀上才能看得更远&#xff0c…

Python鼠标轨迹算法(游戏防检测)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…