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

mamba学习1

1. Mamba

优点:

  1. 计算效率高:Mamba的计算复杂度与序列长度呈线性或近线性关系,相比Transformer的二次方计算复杂度,在处理长序列数据时具有显著优势。例如在A100 GPU上,Mamba的计算速度可提升3倍;
  2. 选择性处理信息:引入选择机制,可根据输入参数化SSM参数,过滤无关信息,保留必要数据,使模型能够专注于对当前任务更重要的部分;
  3. 硬件感知算法:采用递归扫描而非卷积计算,优化硬件性能,减少GPU中SRAM和DRAM之间的数据传输次数,进一步提升计算效率;
  4. 高效的训练和推理:平行训练时,使用卷积;推理时,使用递归。
1.1 State Space Model(SSM)

在这里插入图片描述

SSM的简化模型如上图,其中输入是x,输出是y,隐藏状态是h。B乘x得到h,之后A乘h更新h,C乘h得到y,D乘x跳跃连接得到y。公式如下:
h ′ ( t ) = A h ( t ) + B x ( t ) . . . ( 1 a ) h'(t)=\mathbf{A}h(t)+\mathbf{B}x(t) ...(1a) h(t)=Ah(t)+Bx(t)...(1a)
y ( t ) = C h ( t ) . . . ( 1 b ) y(t)=\mathbf{C}h(t)...(1b) y(t)=Ch(t)...(1b)

1.2 S4

S4是SSM的进一步优化,SSM到S4的三个步骤:离散化、卷积表示、使用HIPPO算法处理长序列。

1.2.1 离散化

由于SSM使用的都是连续的数据,而我们计算机处理的是数字信号,所以要进行离散化。mamba论文中使用零阶保持算法(zero-order hold)进行离散化。离散之后的公式如下:
h t = A ˉ h t − 1 + B ˉ x t . . . ( 2 a ) h_t=\mathbf{\bar{A}}h_{t-1}+\mathbf{\bar{B}}x_t ...(2a) ht=Aˉht1+Bˉxt...(2a)
y t = C h t . . . ( 2 b ) y_t=\mathbf{C}h_t ...(2b) yt=Cht...(2b)
其中 h 0 = B x 0 h_0=\mathbf{B}x_0 h0=Bx0

1.2.2 卷积表示

利用上述(2a)和(2b)的公式,可以得到下列公式,务必手动推演:
K ˉ = ( C B ˉ , C A ˉ B ˉ , . . . , C A ˉ k B ˉ , . . . ) . . . ( 3 a ) \mathbf{\bar{K}}=(\mathbf{C\bar{B}, C\bar{A}\bar{B}, ..., C\bar{A}^{k}\bar{B}, ...})...(3a) Kˉ=(CBˉ,CAˉBˉ,...,CAˉkBˉ,...)...(3a)
y = x ∗ K ˉ . . . ( 3 b ) y=x*\mathbf{\bar{K}}...(3b) y=xKˉ...(3b)
这就相当于一个卷积公式。所以,它可以像卷积一样并行训练,但是推理时论文中使用递归的方式,可以使得模型更快。

1.2.3 使用HIPPO算法处理长序列

在公式(3a)中我们可以发现一旦token很长,k次方就很大,会导致矩阵相乘的计算量也很大。因此我们可以使用HIPPO算法将矩阵分解成对角阵的形式相乘,计算会方便许多。

1.3 S6

在这里插入图片描述
如上图,S6是S4的进一步升级。 x x x通过Linear得到 B , C B, C B,C Δ \Delta Δ,再通过 A , B A, B A,B Δ \Delta Δ得到 A ˉ \bar{A} Aˉ B ˉ \bar{B} Bˉ,再通过SSM得到输出 y y y

1.4 Mamba Block

在这里插入图片描述

2. 代码使用

2.1 环境

在这里插入图片描述

2.2 安装

在这里插入图片描述

2.3 使用
import torch
from mamba_ssm import Mamba

batch, length, dim = 2, 64, 16
x = torch.randn(batch, length, dim).to("cuda")
model = Mamba(
    # This module uses roughly 3 * expand * d_model^2 parameters
    d_model=dim, # Model dimension d_model
    d_state=16,  # SSM state expansion factor
    d_conv=4,    # Local convolution width
    expand=2,    # Block expansion factor
).to("cuda")
y = model(x)
assert y.shape == x.shape
http://www.dtcms.com/a/122526.html

相关文章:

  • 蓝桥杯填空题攻克
  • 【C++】二叉搜索树(二叉查找树、二叉排序树)详解
  • Go 微服务框架 | 路由实现
  • 【BFT帝国】20250409更新PBFT总结
  • idea手动创建resources文件夹
  • checkra1n越狱出现的USB error -10问题解决
  • 面向数据库场景的大模型交互微调数据集
  • Flutter命令行打包打不出ipa报错
  • IDEA 2024 Maven 设置为全局本地仓库,避免新建项目重新配置maven
  • MySQL MVCC 机制详解
  • 大数据 - 1. 概述
  • 第一章初识爬虫
  • 【力扣hot100题】(079)划分字母区间
  • vue3.2 +vxetable4.6 渲染大数据列,出现错乱问题处理方案
  • BabelDOC ,开源的 AI PDF 翻译工具
  • 20250409-大数据-python数据处理平台/接口平台(DFF)
  • 基于cartographer 1.0.0 不使用ros 使用激光雷达数据和IMU数据融合实现的建图
  • Redis的Spring客户端的使用
  • Android系统深度定制:源码级拦截adb install的完整解决方案
  • Windows 11 家庭中文版 安装docker desktop 无法开启自启动问题处理
  • matlab内置的git软件版本管理功能
  • CSS AI 通义灵码 VSCode插件安装与功能详解
  • MySQL学习笔记十四
  • 安徽京准:NTP网络时钟服务器功能及同步模式的介绍
  • oracle将varchar2 转为clob类型存储。 oracle不支持直接使用sql,将 varchar2 到clob的类型转换,需要下面操作
  • Java + WebAssembly 2025:如何用Rust优化高性能Web应用?
  • proteus OLED12864仿真
  • centos 安装python3.9.9
  • Jupyter Lab 无法启动 Kernel 问题排查与解决总结
  • 山东大学软件学院项目创新实训开发日志(8)之数据库建表