文献阅读:Mamba: Linear-Time Sequence Modeling with Selective State Spaces

  • 文献阅读:Mamba: Linear-Time Sequence Modeling with Selective State Spaces
    • 1. 文章简介
    • 2. 方法介绍
      • 1. State Space Models
      • 2. Selective State Space Models
    • 3. 实验考察 & 结论
      • 1. 简单问题上的验证
      • 2. 实际场景效果
        • 1. 语言模型
        • 2. DNA模型
        • 3. 语音模型
      • 3. 细节考察
        • 1. 速度和内存考察
        • 2. 消融实验
    • 4. 结论 & 思考
  • 文献链接:https://arxiv.org/pdf/2312.00752.pdf
  • GitHub链接:https://github.com/state-spaces/mamba

1. 文章简介

这篇文章23年12月普林斯顿的一篇文章,文中提出了一个Mamba的模型结构,尝试挑战了一下Transformer的霸权地位。

众所周知,自从BERT和GPT分别在NLP任务以及生成任务上展现出绝对的统治力之后,transformer框架的模型同时开始进军CV和ASR领域,不断在各个领域当中出圈,大有一统天下的趋势。

不过,针对Transformer框架的挑战也是一直存在,从简单的对于Transformer框架中self attention结构的计算量优化到尝试复兴RNN的RetNet等等,整体的思路前者基本就是希望减少self attention的计算量从而使得可以容纳的context窗口长度,而后者干脆就回到RNN的框架来完全舍弃掉窗口的设置,通过设置并行训练的方式来修改掉RNN只能串行训练的问题。

这里,Mamba走的也是后者这个路线,完全舍弃掉了self-attention的框架,使用文中提到的state space model的框架来进行实现。

文中宣称:

  • Mamba模型不但可以无视掉context长度限制进行任意长文本的生成,还可以并行高速地训练,甚至有着很好的可扩展性,可以容纳大量参数,和transformer一样,在大数据预训练的框架下依然没有看到效果的瓶颈。

更牛逼的是,这篇文章的作者几乎是一己之力推着这个模型框架往前走,最早是一个S4的模型框架,然后优化成了H3的结果,到现在的Mamba,都是同一个团队沿着同一条路子走下来的,也是牛逼的厉害。不过可惜的是S4和H3那两篇文章我还没看过,所以这里对于Mamba的结构理解多少还有一点难度,后面会找时间去把剩下那两篇文章也看一下,或许对这个文章会有更好的一个理解。

2. 方法介绍

下面,我们首先来看一下Mamba的具体模型结构。

在这里插入图片描述

整体来说,Mamba的模型结构是在这篇文章的前作中提出的State Space Model(SSM)的基础上进行优化得到的,加上了选择机制并使之适应GPU的并行加速机制。

因此,我们下面就会遵循稳重的思路首先来看一下State Space Model,然后来看一下文中优化得到的Selective State Space Model,也就是文中的Mamba模型框架。

1. State Space Models

我们首先来考察一下State Space Model(SSM)。

本质上来说,包含输入 x t x_t xt输出 y t y_t yt以及态函数 h t h_t ht,且训练过程可以并行,然后infer过程可以做到迭代串行的模型结构都可以称之为SSM。

下面就是一个SSM的典型case,它参数主要包括4个部分 ( Δ , A , B , C ) (\Delta, A, B, C) (Δ,A,B,C),而整体的操作则是包括两个部分:

  1. Discretization

    A ˉ = e x p ( Δ A ) B ˉ = ( Δ A ) − 1 ( e x p ( Δ A ) − I ) ( Δ B ) \begin{aligned} \bar{A} &= exp(\Delta A) \\ \bar{B} &= (\Delta A)^{-1} (exp(\Delta A) - I) (\Delta B) \end{aligned} AˉBˉ=exp(ΔA)=(ΔA)1(exp(ΔA)I)(ΔB)

  2. Computation

    Computation部分则可以有以下两种等价地表述:

    1. 线性recurrence实现

      h t = A ˉ h t − 1 + B ˉ x t y t = C h t \begin{aligned} h_t &= \bar{A}h_{t-1} + \bar{B} x_{t} \\ y_t &= C h_t \end{aligned} htyt=Aˉht1+Bˉxt=Cht

    2. 卷积实现

      K ˉ = ( C B ˉ , C A ˉ B ˉ , . . . C A ˉ k B ˉ , . . . ) y = x K ˉ \begin{aligned} \bar{K} &= (C\bar{B}, C\bar{A}\bar{B}, ... C\bar{A}^k \bar{B}, ...) \\ y &= x \bar{K} \end{aligned} Kˉy=(CBˉ,CAˉBˉ,...CAˉkBˉ,...)=xKˉ

    通常,我们训练时使用卷积方式进行并行运算,而在infer过程中使用recurrent方式进行实现。

其他主要的SSM的结构主要包括以下一些:

  1. Linear attention (Katharopoulos et al. 2020)
  2. H3 (Dao, Fu, Saab, et al. 2023)
  3. Hyena (Poli et al. 2023)
  4. RetNet (Y. Sun et al. 2023)
  5. RWKV (B. Peng et al. 2023)

2. Selective State Space Models

下面,我们来看一下文中主要的优化结构,即SSSM模型。

如前所述,虽然SSM可以通过recurrent的方式在模型中加入时间信息,但是却并没有content的信息被加入其中,导致对于以summary为代表的一些需要copy的任务当中就很难获得很好的效果,因此文中在SSM的基础上加入了内容的selection,有些类似于attention或者LSTM当中的遗忘门和输出门,负责对前文进行重点选择。

具体的selective部分的示意图和SSSM的为代码逻辑如下:

在这里插入图片描述

在这里插入图片描述

最后,文中给出了一个典型的SSSM的实现,也就是文中最终使用的Mamba的模块如下:

在这里插入图片描述

3. 实验考察 & 结论

有了上述Mamba模型的介绍,下面,我们来看一下文中给出的针对Mamba模型的具体实验效果。

1. 简单问题上的验证

首先,如前所述,Selective机制的加入是为了增加输出内容对于历史信息的选择性记忆,因此,文中首先在两个Syntactic问题考察了一下Selective机制是否成功实现:

  1. Selective Copying
  2. Induction Heads

得到结果如下:

在这里插入图片描述

可以看到,在两个任务上,S6较之没有selective的S4都有着显著的效果增强。

2. 实际场景效果

然后,既然我们发现selective机制确实已经按照预定的设计发挥了作用,下面我们就来看一下Mamba的整体设计是否能够真正在各类场景下发挥出好的效果,文中主要考查了三个Transformer的典型应用场景:

  1. 语言模型
  2. DNA模型
  3. 语音模型

下面,我们来逐一看一下文中在这三个场景下的效果。

1. 语言模型

首先,文中在当前Transformer效果最显著的LM下面考察了Mamba的效果,得到结果如下表所示:

在这里插入图片描述

可以看到,在各个参数量级下,Mamba模型都表现出了不输于GPT的效果,并且模型总的size越小,这种趋势就越明显。

此外,传统的RNN的一大缺点就是缺乏可扩展性,当参数规模增大时模型效果无法有效地同比例增强,因此文中也进一步考察了Mamba模型的可扩展性,考察不同size下模型的效果,得到结果如下:

在这里插入图片描述

可以看到,随着模型size地增加,Mamba模型的效果是持续变好的。

2. DNA模型

同样的,文中先考察了一下Mamba模型和其他模型的效果对比,得到结果如下:

在这里插入图片描述

可以看到,同样有Mamba模型在长序列DNA模型上的表现优于HyenaDNA模型,且参数量更大的7M模型效果优于1.4M的Mamba模型。

文中同样考察了DNA模型上面Mamba模型的可扩展性,得到结果如下:

在这里插入图片描述

可以看到,在DNA模型上同样Mamba莫i选哪个满足可扩展性,参数量越大,模型效果越好,并没有看到显著的瓶颈现象。

3. 语音模型

文中考察的第三个使用场景是语音的场景,得到实验结果如下所示:

在这里插入图片描述

可以看到,Mamba模型是全面超越其他当前的语音模型的,且在Mamba系列模型内部做消融饰演的结果也同样由Mamba模型的效果是最好的。

另外,文中也在语音场景考察了Mamba模型的可扩展性,得到结果如下:

在这里插入图片描述

可以看到,随着序列长度的增加,Mamba的模型效果可以得到持续地提升。

3. 细节考察

除了上述在实际场景中的效果考察和对比之外,文中还针对Mamba本身的细节特质进行了考察,主要包括两部分的内容:

  1. Mamba模型设计初衷的在速度和内存上是否优于Transformer
  2. Mamba模型在迭代中的细节设计的消融实验

下面,我们来逐一看一下文中针对这两方面的考察。

1. 速度和内存考察

首先,如开头所说明的,Mamba的设计初衷是为了替代transformer架构,在不损失性能的情况下更加节省时间和内存,因此要证明这个目的,文中首先在相同尺寸的模型下对Transformer以及Mamba模型所需的内存和infer数据进行了一下对比,得到结果如下:

在这里插入图片描述

可以看到,确实在执行速度和内存使用上,Mamba都显然是更加优秀的一方。

2. 消融实验

然后,文中对Mamba模型本身的各个结构设计进行了消融实验,证明各个组成部分都是对模型效果有正向作用的,具体包括:

  1. 模型结构
  2. SSM Layer设计
  3. Selective机制的引入部位
  4. 参数初始化
  5. Δ \Delta Δ的投影维度
  6. SSM的维度

在这里插入图片描述

可以看到:

  • S6的SSM结构设计是优于其他的SSM结构设计的
  • 模型结构方面的话Mamba模型好于H3架构
  • Selective机制的话最好在 Δ , A , B \Delta, A, B Δ,A,B上都加上
  • 参数初始化的话最好还是正态分布初始化
  • Δ \Delta Δ以及SSM的维度越大,模型效果越好。

4. 结论 & 思考

综上,在这篇文献当中,作者提出了一个名为Mamba的模型结构,它是在作者的前作S4以及H3模型的基础上持续优化得到的,效果上宣称可以匹敌Transformer,并且同样具有很好的可扩展性,且避开了Transformer的有限窗口长度的问题。

更牛逼的是,作者确实在LM,DNA以及语音领域展示了Mamba模型的有效性和可扩展性,真的是非常厉害。

不过可惜的是这个模型结构本身我并没有怎么完全看懂,后续可能还是得去看看作者的开源代码来好好理解一下Mamba的结构设计。

至于Mamba是否真的可以干掉Transformer,这个暂时还是让子弹再飞一会吧……

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

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

相关文章

CentOS 8 安装配置 Hadoop3.3.6 伪分布式安装方式(适用于开发和调试)

1.配置服务器ssh免密登录,否则后面启动会报错:尝试通过SSH连接到主机出现认证错误的提示 配置服务器ssh免密登录: 1.生成SSH密钥对(如果尚未生成): 执行下面的命令生成密钥对,一直回车即可 ssh…

jvm问题自查思路

本文聊一下最近处理了一些jvm的问题上,将这个排查和学习过程分享一下,看了很多资料,最终都会落地到几个工具的使用,本文主要是从文档学习、工具学习和第三方技术验证来打开认知和实践,希望有用。 一、文档 不仅知道了…

以用户为中心,酷开科技荣获“消费者服务之星”

在企业顺应消费升级的道路中,企业自身不仅要着力强化对于消费者服务意识的提升,并且要树立诚信自律的行业示范带头作用,助力消费环境稳中向好,不断满足人民群众对美好生活的期待。企业的发展需要消费者的认可,酷开科技…

创建你的第一个Vue项目(小白专享版本)

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

【EAI 016】VIMA: General Robot Manipulation with Multimodal Prompts

论文标题:VIMA: General Robot Manipulation with Multimodal Prompts 论文作者:Yunfan Jiang, Agrim Gupta, Zichen Zhang, Guanzhi Wang, Yongqiang Dou, Yanjun Chen, Li Fei-Fei, Anima Anandkumar, Yuke Zhu, Linxi Fan 作者单位:Stanfo…

【自定义序列化器】⭐️通过继承JsonSerializer和实现WebMvcConfigurer类完成自定义序列化

目录 前言 解决方案 具体实现 一、自定义序列化器 二、两种方式指定作用域 1、注解 JsonSerialize() 2、实现自定义全局配置 WebMvcConfigurer 三、拓展 WebMvcConfigurer接口 章末 前言 小伙伴们大家好,上次做了自定义对象属性拷贝&#x…

Javaweb之SpringBootWeb案例之事务进阶的详细解析

1.3 事务进阶 前面我们通过spring事务管理注解Transactional已经控制了业务层方法的事务。接下来我们要来详细的介绍一下Transactional事务管理注解的使用细节。我们这里主要介绍Transactional注解当中的两个常见的属性: 异常回滚的属性:rollbackFor 事…

华为第二批难题五:AI技术提升六面体网格生成自动化问题

有CAE开发商问及OCCT几何内核的网格方面的技术问题。其实,OCCT几何内核的现有网格生成能力比较弱。 HybridOctree_Hex的源代码,还没有仔细去学习。 “HybridOctree_Hex”的开发者说:六面体网格主要是用在数值模拟领域的,比如汽车…

依赖注入的艺术:编写可扩展 JavaScript 代码的秘密

1. 依赖注入 在 JavaScript 中,依赖注入(Dependency Injection,简称 DI)是一种软件设计模式,通过这种模式,可以减少代码模块之间的紧耦合。依赖注入允许开发者将模块的依赖关系从模块的内部转移到外部&…

VMWare虚拟机安装

VMWare虚拟机安装 0.Linux运行平台介绍1. VMWare 虚拟软件安装检查虚拟网卡是否安装 创建VMWare虚拟机对创建虚拟机的内容进行设置挂在要安装的CentOS的ISO文件 0.Linux运行平台介绍 Linux的运行平台一共有两种,其中包括物理机平台和虚拟机平台,在学习阶段当中建议使用虚拟机 …

S32 Design Studio PE工具配置GPIO

首先我们来讲最简单的GPIO配置 代码生成 按照下图步骤就能配置一个基本的GPIO口,在组件里面选择pin_mux,选中就能配置使能和方向,no pin routed就是没有配置的。GPIO口分ABCDE组,每组从0到最大的序号。 然后在functional prope…

Java 基于微信小程序的电子商城购物系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…

【AIGC风格prompt深度指南】掌握绘画风格关键词,实现艺术模仿的革新实践

[小提琴家]ASCII风格,点,爆炸,光,射线,计算机代码 由冰和水制成的和平标志]非常详细,寒冷,冰冻,大气,照片逼真,流动,16K 胡迪尼模拟火和水&#x…

websocket简易基操

一、概述 1.1 简介 WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议),它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的,Websocket是一个持久化的协议。…

《动手学深度学习(PyTorch版)》笔记7.3

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过&…

代码随想录 Leetcode55. 跳跃游戏

题目&#xff1a; 代码(首刷自解 2024年2月9日&#xff09;&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int noz 0;for (int i nums.size() - 2; i > 0; --i) {if (nums[i] 0) {noz;continue;} else {if (nums[i] > noz) noz …

fast.ai 机器学习笔记(三)

机器学习 1&#xff1a;第 8 课 原文&#xff1a;medium.com/hiromi_suenaga/machine-learning-1-lesson-8-fa1a87064a53 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 来自机器学习课程的个人笔记。随着我继续复习课程以“真正”理解它&#xff0c;这些笔记将继续更…

RUST入门:如何用vscode调试rust程序

RUST已经流行一阵子了&#xff0c;但是比较系统的IDE介绍还是比较少&#xff0c;这里我简单介绍 一下如何用vscode实现单步调试rust程序&#xff0c;就像我们平时调试c程序一样。 学习资料网站 首先&#xff0c;介绍几个学习rust的好网站&#xff0c; Rust程序设计语言Rust语…

###C语言程序设计-----C语言学习(12)#进制间转换,十进制,二进制,八进制,十六进制

前言&#xff1a;感谢您的关注哦&#xff0c;我会持续更新编程相关知识&#xff0c;愿您在这里有所收获。如果有任何问题&#xff0c;欢迎沟通交流&#xff01;期待与您在学习编程的道路上共同进步。 计算机处理的所有信息都以二进制形式表示&#xff0c;即数据的存储和计算都采…

vue2 eCharts实现自定义节点图标 graph关系图

先展示最后效果图 在查阅eCharts官网的配置项手册会发现提供了自定义节点图标的方法&#xff1a; 代码如下&#xff0c;可直接复制&#xff1a; &#xff08;注释已标记&#xff09; <div class"container"><div class"title"><span class…