Mamba v2诞生:1 儒(Transformers)释(SSD)道(Mamba)本是一家?!

news2024/12/28 20:12:01

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提供了大模型领域最新技术跟踪。若对于具身智能感兴趣的请移步具身智能专栏。技术宅麻烦死磕AI架构设计。

近年来,Transformer 模型作为自然语言处理领域的重要里程碑,为语言建模等任务带来了显著的进展。然而,最近出现的诸如Mamba的状态空间模型SSM表现出了令人瞩目的潜力,尤其是在小到中等规模的情况下甚至在某些情况下表现出了超越 Transformer 的性能。

这些新型模型的出现为带来了全新的思路和可能性,通过对结构化半可分离矩阵的各种分解方法的理论研究,可以将状态空间模型SSM与注意力机制Attention的变种进行紧密关联,进而提出一种状态空间对偶SSD的理论框架。

状态空间对偶使得研究人员设计一种新的架构 (Mamba-2),其核心层是对 Mamba(选择性SSM)进行改进,速度提高了2-8倍,同时在语言建模方面能够保持对Transformers的压力。

概览

Mamba-2的关键点在于结构化状态空间对偶性,简称SSD。它主要涉及到如下的关键点:

  • SSD模型是一个特定的层,有点类似S4,、S5或者注意力层,它可以合并到深度神经网络中的某一层。

  • SSD框架是这个模型的通用推理框架 

  • SSD算法是一种比以前的SSM系列更高效计算的算法(层),相对于S4 Layer和S5 Layer

我想读者应该要学会接受层这个概念,每个层里面封装了一段数据处理的逻辑。很多的深度的神经网络都是将一个一个的块(或者层)叠加和组合,产生很多奇妙的化学反应。

SSD最大的作用在于将SSM和各种注意力变体联系了起来。

SSD模型的矩阵A与多头SSM

先来看看Mamba-1的算法:

其中xt为t时刻的输入,yt为t时刻的输出。定义的 𝑥∈𝑅𝑇→𝑦∈𝑅𝑇映射。将 𝑥𝑡和𝑦𝑡视为标量,将隐藏状态ℎ𝑡视为𝑁长的一维向量,其中𝑁是一个独立的超参数,称为状态大小、状态维数或状态扩展因子。

选择性状态空间模型SSM允许 (𝐴,𝐵,𝐶)矩阵参数随时间变化,这里张量 𝐶的形状为𝐶∈𝑅(𝑇,𝑁),张量A的形状为𝐴∈𝑅(𝑇,𝑁,𝑁),张量B的形状为B∈𝑅(𝑇,𝑁)。<可以理解为T*N的矩阵>

为了让计算更加的高效,一般而言结构化SSM通常采用对角矩阵来构造𝐴 。在这种情况下的矩阵𝐴,其实只要存储𝑁×𝑁矩阵的对角线元素就可以了。那么𝐴可以简化为𝐴∈𝑅(𝑇,𝑁)。

Mamba-2的SSD层只做了一个小的修改:它将对角线矩阵𝐴进一步限制为“矩阵I乘以标量”,也就说矩阵𝐴的对角线元素必须都是相同的值,其余的元素都为0。在这种情况况下,可以只用𝑇表示,也可以识别为𝐴t。因为它是一个标量,所以也可以表示为at。

SSM的基本方程仅针对单维输入x∈RT 定义。若 X∈R(T,P) ,有P个单独的通道,那么就可以对每个通道使用相同的动态参数矩阵(ABC),这就是SSM单头模型的定义。P一般称之为头部的维度。

下面的图展示了SSM和Transformer的head的概念。左边每个维度都对应一个独立的SSM(p=1),而右边则是Transformer的多头注意力<忘记了可以温习一下!>

多个头完全可以独立构建,在研究论文中,它采用了一个单头来研究。其实扩展到多头也是一样的原理,在 Mamba-2,P的取值和Transformer保持一致,为64或者128。一个单头有P通道,按照这个尺寸可以扩展到d_model维度。

所以选择性的SSM模型可以用如下的式子表示:

看过Mamba专栏的读者都会发现,矩阵A在不同的SSM有不同的构造方法, 从结构化、对角化到标量不断地进化着。

SSD模型

按照这个式子,再假设A为标量(I矩阵乘以一个标量),那么SSM怎么来表示呢。下来定义一个矩阵L,这里的ai为输入相关的标量

然后定义M为

最后, M通过基本矩阵乘法对将一维输入映射到一维输出的序列变换进行编码。x∈RT→y∈RT ,或者说y=Mx,和之前式1是一样的。

对于式子三, 重命名(C,B,X)↦(Q,K,V),可以得到:

是不是很眼熟,这个公式和注意力机制很相似,事实上,如果全部at=1 ,那么L就是下三角形的因果掩码,公式三等价于因果注意力。<不熟悉的回头去温习下。>

那么SSD的这种构造方法如何成为SSM和Attention的桥梁呢?

SSD拉手SSM

所谓的“对偶性”Duality是指在方程中定义的两个模型,式1在对标量恒等式结构画At的情况下,实际上是式3完全相同的模型。

与以前的 SSM 相比,SSD与Mamba 的核心层几乎相同,但在循环A矩阵上具有更多的结构。

1) Mamba-1 S6在A上使用对角线结构,而Mamba-2 SSD在A上使用标量次恒等式结构。

2) Mamba-1的head尺寸为P=1,即所有通道完全由单独的SSM独立控制(见上图),而Mamba-2的head尺寸为P>1 ,默认情况下P=64。

3) 通过A限制标量-时间-恒等式的对角线结构,递归中的动态参数(SSM(ABC))在状态空间的所有的输入N元素之间共享,也在给定head的所有P 通道中共享。

换言之,单个SSM  head具有总状态大小为P×N, 都由Mamba-1中的单独控制,而在Mamba-2中则由单个共享递归控制。

进行这些的主要动机还是在于效率。那么共享动态参数SSM(ABC)会不会对性能有所损伤。

在Mamba中引入选择性(例如A ,取决于输入X )的主要原因之一是让 SSM 能够控制是记住还是忽略特定信息。若这些信息应该被忽略,那么整个状态可以一起忽略它。因此,若动态参数SSM(ABC)在所有功能之间共享,应该也不是不可以,不过还需要观察。

SSD拉手注意力机制

与标准注意力机制相比,SSD也只有两个区别,其一,softmax 规范化被丢弃。其二,在乘法中使用了单独的元素掩码矩阵。第一个差异其实在线性RNN已经解释过了。<可以链接回去温习!>

第二个区别是 SSD 与标准线性注意力的区别:

刚才推导的式子中多出来一个掩码矩阵L,导致标准注意力分数〈Qi,Kj〉会因权重的问题而减弱。

毕竟:

不过通过不同的掩码矩阵L,利用Structured Masked Attention(SMA)。如下图所示,可以构造出很多经典的注意力。

在继续下篇之前,建议读者回去温习下Mamba,然后再继续攀登Mamba-2。

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

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

相关文章

基于MinGW64 GCC编译Windows平台上的 libuvc

安装cmake 打开cmake官网 https://cmake.org/download/&#xff0c;下载安装包&#xff1a; 安装时选择将cmake加到系统环境变量里。安装完成后在新的CMD命令窗口执行cmake --version可看到输出&#xff1a; D:\>cmake --version cmake version 3.29.3 CMake suite mainta…

Hotcoin精彩亮相Consensus 2024 Austin,探索行业风向标

5 月 31 日&#xff0c;由CoinDesk主办的“Consensus 2024”大会在德克萨斯州的奥斯汀市正式落下帷幕。作为全球规模最大、最具影响力的加密货币、区块链、Web3盛会&#xff0c;本次Consensus 2024 Austin吸引来自 100 多个国家/地区的 15,000 多名与会者、6,800 家公司、850 多…

LeetCode-2246. 相邻字符不同的最长路径【树 深度优先搜索 图 拓扑排序 数组 字符串】

LeetCode-2246. 相邻字符不同的最长路径【树 深度优先搜索 图 拓扑排序 数组 字符串】 题目描述&#xff1a;解题思路一&#xff1a;找路径背诵版&#xff1a;解题思路三&#xff1a; 题目描述&#xff1a; 给你一棵 树&#xff08;即一个连通、无向、无环图&#xff09;&…

python中实现队列功能

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 python中实现队列功能 选择题 以下代码最后一次输出的结果是&#xff1f; from collections import deque queue deque() queue.append(1) queue.append(2) queue.append(3) print(【显示】…

Nginx 配置:gzip动态压缩、静态压缩

动态压缩 动态压缩开启的现象 Nginx配置 http {# 启用 gzip 压缩gzip on;# 设置 gzip 压缩级别&#xff0c;范围是1-9&#xff0c;数字越大压缩率越高但CPU消耗也越大gzip_comp_level 5;# 设置最低压缩的文件大小&#xff08;大于1KB的文件才进行压缩&#xff09;gzip_min_le…

【Linux进程篇】Linux进程管理应用——虚假的shell脚本

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;我们已经了解了进程的工作原理&#xff0c;并且学习了进程创建、进程终止、进程等待以及进程程序替换。为了更好的巩固这些知识&#xff0c;我们可以创建一个简易的shell命令行。 目录 做一个简易的s…

【DevOps】网站安全案例分析:真实事件中的经验与教训

目录 一、常见的网站安全事故案例 1. Equifax 数据泄露事件&#xff08;2017年&#xff09; 2. WannaCry 勒索软件攻击事件&#xff08;2017年&#xff09; 3. GitHub DDoS 攻击事件&#xff08;2018年&#xff09; 二、网站安全事件的一般分析方法 1、事件背景调查 2、…

09-spring的bean创建流程(一)

文章目录 spring中bean的创建流程finishBeanFactoryInitialization(beanFactory)beanFactory.preInstantiateSingletons();getMergedLocalBeanDefinition(beanName);流程实现FactoryBean接口,里面的对象实例化过程 spring中bean的创建流程 finishBeanFactoryInitialization(be…

14-ShardingSphere的分布式主键实现

1 ShardingSphere自动生成键 MySQL自增键、Oracle自增序列等。分片场景下问题就复杂了&#xff0c;不能依靠单实例上的自增键来实现不同数据节点之间的全局唯一主键&#xff0c;分布式主键的需求应运而生。ShardingSphere 作为一款优秀分库分表开源软件&#xff0c;同样提供分…

Ubuntu18.04安装pwntools报错解决方案

报错1&#xff1a;ModuleNotFoundError: No module named ‘setuptools_rust’ 报错信息显示ModuleNotFoundError: No module named setuptools_rust&#xff0c;如下图所示 解决方案&#xff1a;pip install setuptools_rust 报错2&#xff1a;pip版本低 解决方案&#xff…

【Test 49 】OSI 七层模型初识、网络传输的流程、IP地址和MAC地址! 面试高频考点!

文章目录 1. OSI七层模型2. TCP/IP五层(或四层)模型3. 网络传输基本流程 &#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#x1f427;&#…

MyBatis中的接口代理机制及其使用

1. MyBatis中的接口代理机制及其使用 文章目录 1. MyBatis中的接口代理机制及其使用2. 实操2.1 准备工作2.2 insert 增加操作2.3 delete 删除操作2.4 update 修改操作2.5 select 查询一条记录操作2.6 select 查询多条记录操作 3. 总结&#xff1a;4. 最后&#xff1a; MyBatis …

五、数据源池化技术实现

学这一节的时候重新梳理了DataSource、DriverManager、Driver、DriverProxy、Connection之间的关系&#xff0c;如下图 在整体流程中&#xff0c;这一块就是通过配置文件配置&#xff0c;在解析配置文件的时候就创建对应的数据源封装到Environment中&#xff0c;在执行sql的时…

使用Qt对word文档进行读写

目录 开发环境原理使用的QT库搭建开发环境准备word模板测试用例结果Gitee地址 开发环境 vs2022 Qt 5.9.1 msvc2017_x64&#xff0c;在文章最后提供了源码。 原理 Qt对于word文档的操作都是在书签位置进行插入文本、图片或表格的操作。 使用的QT库 除了基本的gui、core、…

3072. 将元素分配到两个数组中 II

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…

【调试笔记-20240604-Linux-为 OpenWrt LuCI 界面添加多语言支持】

调试笔记-系列文章目录 调试笔记-20240604-Linux-为 OpenWrt LuCI 界面添加多语言支持 文章目录 调试笔记-系列文章目录调试笔记-20240604-Linux-为 OpenWrt LuCI 界面添加多语言支持 前言一、调试环境操作系统&#xff1a;Ubuntu 22.04.4 LTS编译环境调试目标 二、调试步骤预…

vue-pdf 部分中文显示错误,第二次打开是空白,解决方法

首先鸣谢 1. https://blog.csdn.net/m0_71537867/article/details/131614868?spm1001.2014.3001.5506 2. https://blog.csdn.net/weixin_43763952/article/details/133769647 3. https://github.com/FranckFreiburger/vue-pdf/issues/229 4. https://blog.csdn.net/weixin_449…

Java中常用的单目运算符及用法详解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

【Linux多线程】线程的终止、等待和分离

文章目录 线程终止正常退出return 退出pthread_exit函数终止线程 pthread_cancel强制终止线程进程终止 线程等待为什么需要等待线程&#xff1f;pthread_join函数 分离线程pthread_detach函数 线程终止 下面给出终止线程的三种方式&#xff1a; 正常退出&#xff1a; 线程执行…

【Flask-项目运行】解决用本机IP访问不到flask项目而用localhost可以访问到的问题

文章目录 一、问题描述二、解决办法 一、问题描述 使用 localhost 或 127.0.0.1 能访问到项目&#xff1a; 但是使用局域网 IP 访问不到&#xff1a; 二、解决办法 只需要在 app.py 中修改一行代码&#xff1a; run方法添加 host 参数指明全部 ip 可访问。