SiMBA:基于FFT变换和Mamba的图像分类模型算法解析

目录

  • 1 算法原理
    • 1 EinFFT:
      • 1.1 频谱变换
      • 1.2 频域通道混频 & 频谱门控网络
      • 1.3 逆频谱变换
    • 2 整体计算公式
    • 3 SiMBA:
    • 4 小结
  • 2 代码大致逻辑
    • EinFFT模块
    • MambaBlock模块
    • MambaLayer模块
    • PVT2FFN和FFN模块
    • ClassBlock和Block_mamba模块
    • DownSamples模块
    • Stem模块
    • 定义SiMBA模型
    • 3 一些环境配置问题

《SiMBA: Simplified Mamba-based Architecture for Vision and Multivariate Time series》

github: https://github.com/badripatro/Simba

这是一种引入EinFFT进行通道建模的新架构。SiMBA体系结构将Mamba用于序列建模,并引入EinFFT作为一种新的通道建模技术。有效地解决了在扩展到大型网络时在Mamba中观察到的不稳定性问题。该方法突出了基于卷积模型、transformers模型、mlp混频器、频谱混频器模型和状态空间方法的各种模型。

1 算法原理

1 EinFFT:

提出了一种新的信道建模技术,称为 EinFFT,它解决了 Mamba 中的稳定性问题。该方法使用具有非线性的傅里叶变换将特征值建模为负实数,从而解决了不稳定性。

SiMBA 的通道混频组件 (EinFFT) 包含三个主要组件:频谱变换、使用 Einstein 矩阵乘法的频谱门控网络、逆谱变换

1.1 频谱变换

F ( k ) = ∫ D f ( x ) e − j 2 π k x d x = ∫ D f ( x ) cos ⁡ ( 2 π k x ) d x + j ∫ D f ( x ) sin ⁡ ( 2 π k x ) d x \mathcal{F}(k)=\int_Df(x)e^{-j2\pi kx}\mathrm{d}x=\int_Df(x)\cos(2\pi kx)\mathrm{d}x+j\int_Df(x)\sin(2\pi kx)\mathrm{d}x F(k)=Df(x)ej2πkxdx=Df(x)cos(2πkx)dx+jDf(x)sin(2πkx)dx
傅里叶变换用于将输入信号分解为其组成频率。
空间域中两个函数的卷积的傅里叶变换等于它们的傅里叶变换的逐点乘积。

1.2 频域通道混频 & 频谱门控网络

对于给定的输入 X ∈ R N × D \mathbf{X}\in\mathbb{R}^{N\times D} XRN×D及其相应的频域转换 X ∈ R N × D \mathcal{X}\in\mathbb{R}^{N\times D} XRN×D,使用傅里叶变换。卷积定理指出, X \mathbf{X} X 上卷积的傅里叶变换及其内核位于空间域中,可以等效地表示为其频域表示的乘积运算。这种等价表示如下:
F ( X ∗ W + B ) = F ( X ) ⋅ F ( W ) + F ( B ) = X W + B \mathcal{F}(\mathbf{X}*W+B)=\mathcal{F}(\mathbf{X})\cdot\mathcal{F}(W)+\mathcal{F}(B)=\mathcal{X}\mathcal{W}+\mathcal{B} F(XW+B)=F(X)F(W)+F(B)=XW+B
其中 ∗ 表示圆形卷积, W \mathcal{W} W B \mathcal{B} B表示频域中的复数权重和偏置,W和B表示空间域中的权重和偏置, F \mathcal{F} F表示离散傅里叶变换 (DFT)。输出 DFT 运算是复数值 X ∈ R N × D \mathcal{X}\in\mathbb{R}^{N\times D} XRN×D,乘以复数权重矩阵 W ∈ R D × D \mathcal{W}\in\mathbb{R}^{D\times D} WRD×D,并使用频谱门控网络(SGN)加上复数偏置 B ∈ R D \mathcal{B}\in\mathbb{R}^D BRD 。为了降低复杂性,我们执行 Einstein 矩阵乘法 (EMM)以获得高效的块对角矩阵。SGN 由以下公式表示:
h ℓ = σ ( h ℓ − 1 W ℓ + B ℓ ) , h 0 = X h^\ell=\sigma(h^{\ell-1}\mathcal{W}^\ell+\mathcal{B}^\ell),h^0=\mathcal{X} h=σ(h1W+B),h0=X
拓展后的公式为:
R e ( h ) ℓ = E M M ( R e ( h ℓ − 1 ) W r ℓ ) − E M M ( I m ( h ℓ − 1 ) W i ℓ ) + B r ℓ I m ( h ) ℓ = E M M ( R e ( h ℓ − 1 ) W i ℓ ) + E M M ( I m ( h ℓ − 1 ) W r ℓ ) + B i ℓ h ℓ = σ ( R e ( h ) ℓ ) + j σ ( I m ( h ) ℓ ) \begin{aligned} Re(h)^{\ell}& =EMM(Re(h^{\ell-1})\mathcal W_{r}^{\ell})-EMM(Im(h^{\ell-1})\mathcal W_{i}^{\ell})+\mathcal B_{r}^{\ell} \\ Im(h)^{\ell}& =EMM(Re(h^{\ell-1})W_i^\ell)+EMM(Im(h^{\ell-1})W_r^\ell)+B_i^\ell \\ h^{\ell}& =\sigma(Re(h)^\ell)+j\sigma(Im(h)^\ell) \end{aligned} Re(h)Im(h)h=EMM(Re(h1)Wr)EMM(Im(h1)Wi)+Br=EMM(Re(h1)Wi)+EMM(Im(h1)Wr)+Bi=σ(Re(h))+(Im(h))
EMM(爱因斯坦矩阵乘法,又叫爱因斯坦求和约定)(结果和普通矩阵乘法一样,只是表达形式不同):
Y N × C b × C d = I N × C b × C d ∗ W C b × C d × C d \mathbf{Y}^{N\times C_b\times C_d}=\mathbf{I}^{N\times C_b\times C_d}\boxed{*}\mathbf{W}^{C_b\times C_d\times C_d} YN×Cb×Cd=IN×Cb×CdWCb×Cd×Cd
这里 ∗ \boxed{*} 表示 Einstein 矩阵乘法频域中的信道混频,表示为 EinFFT,是通过分别计算频率分量的实部和虚部来执行的。随后,这些部分被堆叠成一个复数,最终结果是通过将实部和虚部连接起来得到的。这种方法增强了模式的提取,同时确保了计算资源的有效利用。

1.3 逆频谱变换

f ( x ) = ∫ D F ( k ) e j 2 π k x d f = ∫ D ( R e ( F ( k ) ) + j I m ( F ( k ) ) e j 2 π k x d f f(x)=\int_{D}\mathcal{F}(k)e^{j2\pi kx}\mathrm{d}f=\int_{D}(Re(\mathcal{F}(k))+jIm(\mathcal{F}(k))e^{j2\pi kx}\mathrm{d}f f(x)=DF(k)ej2πkxdf=D(Re(F(k))+jIm(F(k))ej2πkxdf

2 整体计算公式

X : , ( l ) = X R : , ( l ) + j X I : , ( l ) = F F T ( X c : , ( l ) ) R e ( h ) ℓ + j I m ( h ) ℓ = E M M ( X ∴ , ( l ) , W c , B c ) as in eq-4 Y : , ( l ) = Y R : , ( l ) + j Y I : , ( l ) = σ ( R e ( h ) ℓ ) + j σ ( I m ( h ) ℓ ) Z : , ( l ) = Z R : , ( l ) + j Z I : , ( l ) = E M M ( Y : , ( l ) , W c , B c ) as in eq-4 Z c : , ( l ) = I F F T ( Z R : , ( l ) + j Z I : , ( l ) ) \begin{aligned} \mathcal{X}^{:,(l)}=\mathcal{X}_{R}^{:,(l)}+j\mathcal{X}_{I}^{:,(l)}& =\mathrm{FFT}(\mathbf{X}_{c}^{:,(l)}) \\ Re(h)^\ell+jIm(h)^\ell & =\mathrm{EMM}(\mathcal{X}^{\therefore,(l)},\mathcal{W}^c,\mathcal{B}^c)\text{ as in eq-4} \\ \mathcal{Y}^{:,(l)}=\mathcal{Y}_{R}^{:,(l)}+j\mathcal{Y}_{I}^{:,(l)}& =\sigma(Re(h)^\ell)+j\sigma(Im(h)^\ell) \\ \mathcal{Z}^{:,(l)}=\mathcal{Z}_{R}^{:,(l)}+j\mathcal{Z}_{I}^{:,(l)}& =\mathrm{EMM}(\mathcal{Y}^{:,(l)},\mathcal{W}^c,\mathcal{B}^c)\text{ as in eq-4} \\ \mathbf{Z}_{c}^{:,(l)}& =\mathrm{IFFT}(\mathcal{Z}_{R}^{:,(l)}+j\mathcal{Z}_{I}^{:,(l)}) \end{aligned} X:,(l)=XR:,(l)+jXI:,(l)Re(h)+jIm(h)Y:,(l)=YR:,(l)+jYI:,(l)Z:,(l)=ZR:,(l)+jZI:,(l)Zc:,(l)=FFT(Xc:,(l))=EMM(X,(l),Wc,Bc) as in eq-4=σ(Re(h))+(Im(h))=EMM(Y:,(l),Wc,Bc) as in eq-4=IFFT(ZR:,(l)+jZI:,(l))
在这里插入图片描述

3 SiMBA:

虽然我们将 Mamba 块应用于视觉任务,但与 S4 或 Hippo 等其他模型相比,我们面临着稳定性问题(损失收敛问题)。我们为不稳定性问题提供了一种类型的解决方案,即仅保留负特征值。为了实现这一点,我们需要一个额外的模块,我们称之为 channel mixing,这在 mamba 块中是缺失的。我们将通道混合模块与 Sequence 混合模块相结合,制作了一个简化的基于 Mamba 的架构 (SiMBA)。
SiMBA 使用 Mamba 块进行序列建模,L 表示层数,Norm 代表归一化层,EinFFT 用于通道建模。该过程包括将 Mamba 块应用于前一个时间步 X l − 1 X_{l−1} Xl1,然后是残差连接和dropout(DP)。然后对生成的张量进行归一化(Norm) 以获得最终的序列向量。随后的操作涉及应用 EinFFT,这是论文中提出的频域通道混频操作。最后,张量经历另一次 dropout 并被添加到之前的状态 X l X_{l} Xl

在这里插入图片描述

在这里插入图片描述

4 小结

SiMBA 说明了性能和可扩展性之间的重要权衡。Mamba 本身对于大型网络可能存在稳定性问题。Mamba 与 MLP 相结合进行通道混合,弥合了小型网络的性能差距,但对于大型网络来说,可能存在相同的稳定性问题。Mamba 与 EinFFT 相结合,解决了小型和大型网络的稳定性问题。对于大型网络,最先进的变压器可能仍然存在性能差距,我们将在未来的工作中解决这一问题。

2 代码大致逻辑

simba.py

EinFFT模块

EinFFT类是一个自定义的模块,使用快速傅里叶变换(FFT)和自定义的权重和偏置进行特征转换。它实现了一个特殊的频域操作,用于处理输入数据。

MambaBlock模块

MambaBlock类定义了一个Mamba块,这是模型的核心部分。它包括多个子层,如1D卷积层、线性层和状态空间模型(SSM)。这个模块利用了Mamba架构的特性,通过选择性地调整状态空间模型的参数来处理输入数据。

MambaLayer模块

MambaLayer类是一个简化的Mamba块,使用Mamba类(从mamba_ssm库导入)来实现。这个类提供了一个更高效的实现,用于处理大规模数据。

PVT2FFN和FFN模块

这些类定义了两种不同类型的前馈网络(FFN),用于在模型的不同阶段处理特征。PVT2FFN使用深度卷积来处理特征,而FFN使用标准的全连接层。

ClassBlock和Block_mamba模块

这些类定义了模型中的分类块和基本块。它们结合了注意力机制、前馈网络和其他标准化技术来处理输入数据,并生成输出特征。

DownSamples模块

DownSamples类定义了一个下采样模块,用于减少特征图的空间维度,同时保持特征通道的数量。

Stem模块

Stem类用于处理输入图像,并将其转换为适合模型处理的特征表示。

定义SiMBA模型

SiMBA类定义了整个模型的结构,包括多个阶段的处理、分类头和可选的辅助头。模型使用不同的块和层来处理输入数据,并生成最终的分类结果。

3 一些环境配置问题

causal-conv1d\mamba-ssm安装错误问题
AttributeError: module ‘mmcv‘ has no attribute ‘Config‘

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

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

相关文章

统信服务器操作系统【targetcli部署】

targetcli部署方案 文章目录 功能概述功能介绍1.安装targetcli2.targetcli语法及参数说明3.示例1. 配置2.访问功能概述 SCSI 即小型计算机系统接口(Small Computer System Interface;简写:SCSI) iSCSI,internet SCSI 网络磁盘 ,提供一对一的网络存储, 主机A 提供xx存储设…

gitlab 的CI/CD (二)

前言 上文完成了gitlab-runner的基础配置及将gitlab的制品上传至软件包库(产品库)的脚本编写; 本文实现gitlab的ci/cd对远程服务器的操作; 介绍 要让Gitlab Runner部署到远程机器,远程机器必须信任gitlab runner账…

当大语言模型应用到教育领域时会有什么火花出现?

当大语言模型应用到教育领域时会有什么火花出现? LLM Education会出现哪些机遇与挑战? 今天笔者分享一篇来自New York University大学的研究论文,另外一篇则是来自Michigan State University与浙江师范大学的研究论文,希望对这个话题感兴趣…

构建高效企业客户管理系统:SpringBoot应用

1 绪论 1.1研究背景 随着网络不断的普及发展,企业客户管理系统依靠网络技术的支持得到了快速的发展,首先要从员工的实际需求出发,通过了解员工的需求开发出具有针对性的首页、个人中心、员工管理、客户信息管理、行业类型管理、项目信息管理、…

读取t x t文件生成exce

读取t x t文件生成excel package com.moka.api.custom.core.controller; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermode…

JetBrains系列产品无限重置免费试用方法

JetBrains系列产品无限重置免费试用方法 写在前面安装插件市场安装插件 写在前面 支持的产品: IntelliJ IDEA AppCode CLion DataGrip GoLand PhpStorm PyCharm Rider RubyMine WebStorm为了保证无限重置免费试用方法的稳定性,推荐下载安装2021.2.2及其…

基于milvus数据库的RAG-Demo

1.上传文本并将文本向量化 import os from django.conf import settings from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter, CharacterTextSplitter from langchain.vectorstores import Chroma from l…

Linux系统容器化部署中,构建Docker 镜像中包含关键指令和参数的文件dockerfile的详细介绍

目录 一、Dockerfile的用处 1、自动化构建 2、可重复性 3、可移植性 4、版本控制 5、优化镜像大小 6、便于分享和分发 二、Dockerfile 的基本结构 1、基础镜像(FROM) 2、维护者信息(MAINTAINER/LABEL maintainer) 3、设置工作目…

Leetcode 543. 124. 二叉树的直径 树形dp C++实现

问题:Leetcode 543. 二叉树的直径(边权型) 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。两节点之间路径的 长度 由它们之…

说一说Zookeeper的应用场景及其原理

一 ZooKeeper简介 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名…

vue3/Element-Plus/路由的使用

我们来实现一个简单的二级路由 1.准备主页和要配置的组件 主页面 <template><!-- 加载配置路由 --><RouterView></RouterView> </template><style scoped></style>组件1 <template><div>考试组件</div> </t…

关于区块链的安全和隐私

背景 区块链技术在近年来发展迅速&#xff0c;被认为是安全计算的突破&#xff0c;但其安全和隐私问题在不同应用中的部署仍处于争论焦点。 目的 对区块链的安全和隐私进行全面综述&#xff0c;帮助读者深入了解区块链的相关概念、属性、技术和系统。 结构 首先介绍区块链…

吉林省自闭症寄宿学校:提供个性化培养方案

在吉林省的怀抱中&#xff0c;隐藏着一片温馨而特殊的天地——星贝育园自闭症儿童寄宿制学校。这里&#xff0c;不是简单的教育场所&#xff0c;而是无数自闭症儿童梦想启航的港湾&#xff0c;是他们感受爱、学习成长、绽放自我光芒的温馨家园。 自闭症&#xff0c;一个逐渐被…

【Python常用模块】_cx_Oracle模块详解

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈…

idea插件开发的第四天-完善JSON工具

介绍 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在Tools插件之上进行开发本次demo将使用idea的一些组件优化 Tools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了idea插件的开发难度,并提供开发者模块,可以极大的为开发者开…

Q必达任务脚本

文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效&#xff0c;可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…

鸿蒙OpenHarmony【小型系统基础内核(进程管理任务)】子系统开发

任务 基本概念 从系统的角度看&#xff0c;任务Task是竞争系统资源的最小运行单元。任务可以使用或等待CPU、使用内存空间等系统资源&#xff0c;并独立于其它任务运行。 OpenHarmony 内核中使用一个任务表示一个线程。 OpenHarmony 内核中同优先级进程内的任务统一调度、运…

群晖使用Docker部署WPS Office并实现异地使用浏览器制作办公文档

文章目录 前言1. 本地环境配置2. 制作本地分享链接3. 制作公网访问链接4. 公网ip地址访问您的分享相册5. 制作固定公网访问链接 前言 想象一下这个场景&#xff1a;如果遇到周末紧急需要改方案&#xff0c;但团队成员都在各自家中&#xff0c;这个时候如果大家能够轻松访问这个…

Unity图形用户界面!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。(万字解析)

Unity 3D GUI 简介 游戏开发过程中&#xff0c;开发人员往往会通过制作大量的图形用户界面&#xff08; Graphical User Interface&#xff0c;GUI &#xff09;来增强游戏与玩家的交互性。 Unity 3D 中的图形系统分为 OnGUI、NGUI、UGUI等&#xff0c;这些类型的图形系统内容…

仓颉编程入门2,启动HTTP服务

上一篇配置了仓颉sdk编译和运行环境&#xff0c;读取一个配置文件&#xff0c;并把配置文件简单解析了一下。 前面读取配置文件&#xff0c;使用File.readFrom()&#xff0c;这个直接把文件全部读取出来&#xff0c;返回一个字节数组。然后又创建一个字节流&#xff0c;给文件…