Mamba模型底层技术详解,与Transformer到底有何不同?

news2024/11/24 5:57:45

导读: 基于状态空间模型(State Space Model)的Mamba模型最近在深度学习领域有赶超Transformer的势头。其最主要的优势就在于其在长序列任务上的优异性能与较低的计算复杂度。本文就Mamba模型的原理进行解析,分析Mamba模型在结构上与Transformer的不同之处,以及其具有的应用潜力。©️【深蓝AI】

1. 状态空间模型

1.1 状态空间及其离散化

相信SLAM领域的小伙伴们对状态空间模型都并不陌生。在SLAM中,状态空间通常被用来描述所估计的状态参量,其通常具有观测以及预测模型。实际上Mamba中的状态空间模型的灵感恰恰来源于传统的状态空间模型,公式描述如下:

h ′ ( t ) = A h ( t ) + B x ( t ) y ( t ) = C h ( t ) + D x ( t ) \begin{aligned} & h^{\prime}(t)=A h(t)+B x(t) \\ & y(t)=C h(t)+D x(t)\end{aligned} h(t)=Ah(t)+Bx(t)y(t)=Ch(t)+Dx(t)

其中, h ( t ) h(t) h(t)是当前的状态量, A A A是状态转移矩阵; x ( t ) x(t) x(t)为输入的控制量, B B B表示控制量对状态量的影响。 y ( t ) y(t) y(t)表示系统的输出, C C C表示当前状态量对输出影响, D D D表示当前控制量对输出影响。

在SLAM领域,我们关心的是怎样使得状态量 h ( t ) h(t) h(t)估计的最优,而在深度学习领域,我们更加关心系统的输出 y ( t ) y(t) y(t)是否准确。通过不断优化 A A A B B B C C C D D D使得系统输出的 y ( t ) y(t) y(t)接近理想的真实值。

为了方便运算,下一步需要将上述状态空间模型离散化,离散方法使用的是零阶保持法。实际上就是在状态空间常微分方程的解上做0阶近似,即假设解在采样周期内为常数。

微分方程的解如下:

h ( t ) = e A ( t k + 1 − t k ) h ( t ) + ∫ t k t k + 1 e A ( t − τ ) B x ( τ ) d τ h(t)=e^{\mathbf{A}\left(t_{k+1}-t_k\right)} h\left(t\right)+\int_{t_k}^{t_{k+1}} e^{\mathbf{A}(t-\tau)} \mathbf{B} x(\tau) d \tau h(t)=eA(tk+1tk)h(t)+tktk+1eA(tτ)Bx(τ)dτ

零阶保持即假设 h ( t ) h(t) h(t)在采样间隔时间段 [ t k , t k + 1 ] [t_k,t_{k+1}] [tk,tk+1]为常数,设 Δ = t k + 1 − t k \Delta=t_{k+1}-t_k Δ=tk+1tk,得到离散近似的结果为:

h k = A ˉ h k − 1 + B ˉ x k , y k = C ˉ h k , A ˉ = e Δ A , B ˉ = ( e Δ A − I ) A − 1 B , C ˉ = C \begin{aligned} h_k & =\bar{A} h_{k-1}+\bar{B} x_k, \\ y_k & =\bar{C} h_k, \\ \bar{A} & =e^{\Delta A}, \\ \bar{B} & =\left(e^{\Delta A}-I\right) A^{-1} B, \\ \bar{C} & =C\end{aligned} hkykAˉBˉCˉ=Aˉhk1+Bˉxk,=Cˉhk,=eΔA,=(eΔAI)A1B,=C

注意这里将当前控制量对输出的影响 D D D忽略不计。

由此,我们得到了Mamba模型的序列化表示结构。实际上这个结构与RNN类似,RNN的结构如下图1所示。与RNN不同的是,Mamba在计算输出 y ( t ) y(t) y(t)时,直接采用了线性变换,而没有使用激活函数进行非线性化。而这一改变对Mamba模型的计算效率有着很重要的影响。

在这里插入图片描述
图1|传统RNN结构©️【深蓝AI】

1.2 卷积形式的状态预测

Mamba中的状态空间模型计算效率最大的提升就在于其序列运算可以卷积化,下面将对状态空间模型的序列卷积化进行详细介绍。从0时刻开始向后推导状态空间模型几个时刻后的输出,我们即可得到如下的形式:

h 0 = B ˉ x 0 y 0 = C h 0 = C B ˉ x 0 h 1 = A ˉ h 0 + B ˉ x 1 = A ˉ B ˉ x 0 + B ˉ x 1 y 1 = C h 1 = C ( A ˉ B ˉ x 0 + B ˉ x 1 ) = C A ˉ B ˉ x 0 + C B ˉ x 1 h 2 = A ˉ h 1 + B ˉ x 2 = A ˉ ( A ˉ B ˉ x 0 + B ˉ x 1 ) + B ˉ x 2 = A ˉ 2 B ˉ x 0 + A ˉ B ˉ x 1 + B ˉ x 2 y 2 = C h 2 = C ( A ˉ 2 B ˉ x 0 + A ˉ B ˉ x 1 + B ˉ x 2 ) = C A ˉ 2 B ˉ x 0 + C A ˉ B ˉ x 1 + C B ˉ x 2 y k = C A ˉ k B ˉ x 0 + C A ˉ k − 1 B ˉ x 1 + ⋯ + C A ˉ B ˉ x k − 1 + C B ˉ x k \begin{aligned} &\begin{aligned} & h_0=\bar{B} x_0 \\ & y_0=C h_0=C \bar{B} x_0 \\ & h_1=\bar{A} h_0+\bar{B} x_1=\bar{A} \bar{B} x_0+\bar{B} x_1 \\ & y_1=C h_1=C\left(\bar{A} \bar{B} x_0+\bar{B} x_1\right)=C \bar{A} \bar{B} x_0+C \bar{B} x_1 \end{aligned}\\ &\begin{aligned} & h_2=\bar{A} h_1+\bar{B} x_2=\bar{A}\left(\bar{A} \bar{B} x_0+\bar{B} x_1\right)+\bar{B} x_2=\bar{A}^2 \bar{B} x_0+\bar{A} \bar{B} x_1+\bar{B} x_2 \\ & y_2=C h_2=C\left(\bar{A}^2 \bar{B} x_0+\bar{A} \bar{B} x_1+\bar{B} x_2\right)=C \bar{A}^2 \bar{B} x_0+C \bar{A} \bar{B} x_1+C \bar{B} x_2 \end{aligned}\\ &y_k=C \bar{A}^k \bar{B} x_0+C \bar{A}^{k-1} \bar{B} x_1+\cdots+C \bar{A} \bar{B} x_{k-1}+C \bar{B} x_k \end{aligned} h0=Bˉx0y0=Ch0=CBˉx0h1=Aˉh0+Bˉx1=AˉBˉx0+Bˉx1y1=Ch1=C(AˉBˉx0+Bˉx1)=CAˉBˉx0+CBˉx1h2=Aˉh1+Bˉx2=Aˉ(AˉBˉx0+Bˉx1)+Bˉx2=Aˉ2Bˉx0+AˉBˉx1+Bˉx2y2=Ch2=C(Aˉ2Bˉx0+AˉBˉx1+Bˉx2)=CAˉ2Bˉx0+CAˉBˉx1+CBˉx2yk=CAˉkBˉx0+CAˉk1Bˉx1++CAˉBˉxk1+CBˉxk左右滑动查看完整公式

此形式可以由卷积运算得到,设计适当的卷积核即可将序列运算转化为卷积运算,形式如下所示:

K ‾ = ( C B ˉ , C A B ‾ , … , C A ˉ k B ˉ , … ) y = x ∗ K ‾ \begin{aligned} \overline{{\mathbf{K}}} & =\left(C \bar{B}, C \overline{A B}, \ldots, C \bar{A}^k \bar{B}, \ldots\right) \\ y & = x * \overline{\mathbf{K}} \end{aligned} Ky=(CBˉ,CAB,,CAˉkBˉ,)=xK

如此一来,卷积运算在计算机中便可进行并行计算,这大大加速了状态空间模型的计算速度。而RNN由于在输出时使用了激活函数,因此无法进行卷积化,这也是状态空间模型对比RNN的一大优势所在。

在这里插入图片描述
图2|状态空间模型序列运算卷积化©️【深蓝AI】

2. 选择性扫描

传统状态空间模型的时序结构导致了其输出状态完全依赖有序的输入数据。一旦输入数据增减,或者顺序有所变化,那么状态空间模型就无法进行处理,如下图3所示,这种情况传统的状态空间模型完全可以处理,这是由于输出直接复制了输入的Token数据,非常符合状态空间模型的推理。

在这里插入图片描述
图3|传统状态空间模型可处理的情况©️【深蓝AI】

然而,如图4所示:对于增减过、顺序打乱过的输入,在一些不相关数据混杂在序列中出现时,状态空间模型就无法对其进行有效处理。

在这里插入图片描述
图4|传统状态空间模型难以处理的情况©️【深蓝AI】

Mamba针对这一情况进行了改进,在对 B B B C C C矩阵进行计算时,加入了选择性机制,即在计算是引入一个额外的线性层,对输入的输入的控制量和状态量进行选择,加强模型对不同输入形式的适应能力,算法流程如下图5所示。

在这里插入图片描述
图5|选择性机制对状态空间模型的改进©️【深蓝AI】

可以观察到,在引入选择性机制前,状态空间模型被认为是一个时不变系统,即以及不随时间变化;然而,在引入选择性机制后, A ˉ \bar A Aˉ以及 B ˉ \bar B Bˉ随着筛选信号的改变而随时间变化,这是由于筛选机制使得窗口发生了变化,先前所成立的卷积化序列运算似乎又不再成立。为了加快运算,Mamba采用了多线程进行并行计算,对于每个序列利用结合律进行乱序计算,最后通过累加求取结果,流程如下图6所示。

在这里插入图片描述
图6|并行累加计算流程©️【深蓝AI】

3. Mamba块结构

与Transformer结构类似,Mamba结构也是由若干Mamba块堆叠而成。一个基本的Mamba块结构如图7所示:Mamba块由H3块以及门控MLP组合而成。H3为Hungry Hungry Hippos,是一种状态空间模型的执行方式。Mamba块简化了H3的结构,并与门控MLP结合,添加了残差项防止梯度消失。

在这里插入图片描述
图7|Mamba块结构©️【深蓝AI】

4. 应用潜力

Mamba的主要优势还是其优于Transformer的计算效率。

Mamba的网络结构对于GPU的计算来说十分友好,特别是在数据存取交互上,Mamba结构的数据交互主要集中在GPU何SRAM间,而这部分的数据交互是快速的。计算机内数据交互速度形式如下图8所示。

在这里插入图片描述
图8|计算机数据交互结构与速度©️【深蓝AI】

5. 总结

Mamba模型实际可以理解为改进版本的RNN,但是在计算上可以卷积化,进行并行训练,效率高,同时也处理了输入增改、顺序随机及梯度消失等问题。相较于Transformer,Mamba的计算复杂度低,同时也能够很好的保持长序列的关联能力。Mamba模型在CV等领域的扩展应用,在未来可能会井喷式出现。

参考资料:

https://github.com/hkproj/mamba-notes

笔者|Frank

审核|Los

移步公众号【深蓝AI】,第一时间获取自动驾驶、人工智能与机器人行业最新最前沿论文和科技动态。

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

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

相关文章

Dynamo初学常识梳理(四)——Revit图元

希望想学 Dynamo 的小伙伴坚持住,每天积累一点点知识,Dynamo 你很快就能上手的!Dynamo 并不是你想的那样难学哦! 今天要讲的是如何从 Dynamo 中获取 Revit 的图元,这些节点很常用,不需要全背下来&#xff0…

田宏斌:以人为本的听力健康管理实践经验 | 演讲嘉宾公布

一、助辅听器材Ⅲ分论坛 助辅听器材Ⅲ分论坛将于3月28日同期举办! 听力贯穿人的一生,听觉在生命的各个阶段都是至关重要的功能,听力问题一旦出现,会严重影响生活质量。助辅听器材能有效提高生活品质。在这里,我们将分享…

【MybatisPlus】QueryWrapper、UpdateWrappe、LambdaQueryWrapper、LambdaUpdateWrapper

一、Wrapper简介 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都是 MyBatis-Plus 框架中用于构建条件的工具类,它们之间的关系是继承关系。其中 QueryWrapper 和 UpdateWrapper 是基于普通的对象属性名来构建条件的,而 La…

2024最新Android大厂面试真题大全,推荐学习

历时半年,我们终于整理出了这份市面上最全面的最新Android面试题解析大全! 章节目录 第一章:Android 基础 面试题 第二章:Android 高级 面试题 第三章:开源框架实战面试解析 第四章:Java 面试题 第五章&a…

SpringBoot源码解读与原理分析(三)条件装配

文章目录 2.3 Spring Framework的条件装配2.3.1 基于Profile的装配1.Profile源码解读2.使用Profile注解(3)命令行参数配置Profile3.Profile运用于实际开发4.Profile的不足 2.3.2 基于Conditional的装配1.Conditional源码解读2.Conditional使用3.Conditio…

Kosmos-1: 通用接口架构下的多模态大语言模型

Kosmos-1: 通用接口架构下的多模态大语言模型 FesianXu 20230513 at Baidu Search Team 前言 在大规模语言模型(Large Language Model, LLM)看似要带来新一番人工智能变革浪潮之际,越来越多尝试以LLM作为通用接口去融入各种任务的工作&#…

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?

小皮面板phpstudy支持的PHP版本有很多,包括5.2.17、5.3.29、5.4.45、5.5.9、5.6.9、7.0.9、7.1.9、7.2.9、7.3.4、7.3.9、7.4.3、8.0.2、8.2.9。那么我们如何安装其他的php版本和切换网站的php版本呢?只需要简单几步即可,具体如下&#xff1a…

JavaWeb - 2 - HTML、CSS

什么是HTML、CSS? HTML(HyperText Markup Language):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大,除了文字信息,还可以定义图片、音频、视频等内容 标记语言&…

不用下载的工具却能保存西瓜视频的原画视频,支持无水印!

近年来,西瓜视频可谓是炙手可热,得益于其强大的后盾——抖音,以及推出的"中视频计划"。这个计划慷慨地斥资20亿用于支持视频制作者,因此在西瓜视频平台上,我们目睹了大量优质的长视频如雨后春笋般涌现。 对于…

SpringCloud 各自组件的停更/升级/替换

一、停更不停用 现在 SpringCloud 不再修复 bug,也不再接收合并请求,也不再发布新版本,但是目前还是可以继续使用的。 二、以前的组件 以前 SpringCloud 常用的组件如下图,服务的注册和发现使用 Eureka,服务的负载和调…

工业镜头的重要参数之视场、放大倍率、芯片尺寸--51camera

今天来简单介绍下工业镜头中常用的参数中的三个: 1、视场 视场(FOV)也称视野,是指能被视觉系统观察到的物方可视范围。 对于镜头而言,可观察到的视场跟镜头放大倍率及相机芯片选择有关。因此需要根据被观察物体的尺寸&#xff…

threejs展示glb模型

原模型为rvt模型 <template><div ref"threeJsContainer"class"three-js-container"></div> </template> <script> import { defineComponent } from "vue"; import * as THREE from "three"; import…

如何选择阿里云服务器配置,过来人说说

阿里云服务器配置怎么选择&#xff1f;CPU内存、公网带宽和系统盘怎么选择&#xff1f;个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例&#xff0c;企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器&#xff0c;阿里云服务器网aliyunfuwuqi.com整…

C++核心编程之内存分区模型,引用,函数提高

1&#xff0c;类型分区模型 c程序在执行中&#xff0c;将内存大方向划分为4个区域 1&#xff0c;代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理的 2&#xff0c;全局区&#xff1a;存放全局变量和静态变量以及常量 3&#xff0c;栈区&#xff1…

【学习笔记】java项目:黑马头条(day01)

文章目录 环境搭建、SpringCloud微服务(注册发现、服务调用、网关)1)课程对比2)项目概述2.1)能让你收获什么2.2)项目课程大纲2.3)项目概述2.4)项目术语2.5)业务说明 3)技术栈4)nacos环境搭建4.1)虚拟机镜像准备4.2)nacos安装 5)初始工程搭建5.1)环境准备5.2)主体结构 6)登录6.1…

Openfeign+Ribbon+Hystrix断路器(服务降级)

热部署对于Hystrix的热不是不是很明显 所以最好修改代码之后重启服务 简介 在微服务架构中存在多个可直接调用的服务,这些服务若在调用时出现故障会导致连锁效应,也就是可能让整个系统变得不可用,这种情况我们称之为服务雪崩效应. 服务雪崩效应通常发生在微服务架构中&…

应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控

作者&#xff1a;古琦 在现代软件架构中&#xff0c;微服务已成为构建可扩展和灵活应用程序的流行方式。每个微服务负责应用程序的一部分功能&#xff0c;它们共同工作以提供完整的服务。由于微服务架构的分散特性&#xff0c;监控变得至关重要&#xff0c;有效的微服务监控是…

缺陷检测:使用PatchCore训练自己的数据集

文章目录 前期准备两种方法 演示运行结果 代码详解见缺陷检测–PatchCore的代码解读 前期准备 必须包含有训练图片&#xff08;无缺陷图片&#xff09;、测试图片&#xff08;缺陷图片&#xff09;和ground_truth&#xff0c;并且ground_truth必须与对应图片的名称相同。 本文…

python_读取txt文件绘制多条曲线II

从给定的列表中来匹配txt文件对应列的数据&#xff1b; import matplotlib.pyplot as plt import re from datetime import datetime from pylab import mplmpl.rcParams["font.sans-serif"] ["SimHei"] # 设置显示中文字体 mpl.rcParams["axes.un…

STM32用标准库做定时器定时1秒更新OLED的计数值(Proteus仿真)

首先新建proteus工程&#xff0c;绘制电路图&#xff1a; 然后赋值我之前文章中提到的文件夹OLED屏幕显示&#xff1a;&#xff08;没有的自己去那篇文章下载去&#xff09; 然后进入文件夹&#xff1a; 新建两个文件在Mycode文件夹中&#xff1a; 文件关系如下&#xff1a; 新…