Mamba:7 VENI VIDI VICI

若在阅读过程中有些知识点存在盲区,可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。

序列模型的效率与有效性之间的权衡取决于状态编码(压缩)的程度:追求高效性一定要求具有较小的状态,追求有效性一定要求状态包含更多的上下文信息。而在Mamba中的指导思想是选择性:或者重点关注,或者过滤掉无关的输入从而具备较强的的上下文感知能力。

Mamba

若读者仔细的将前面的六个部分进行仔细的推敲和阅读,那么在这篇终章理解Mamba就轻松多。

先来看看这幅经典的图,从图中可以看到在常规的状态空间模型SSM中,矩阵A、B和C都是固定,而在Mamba中加入了选择机制,矩阵B和C不再是固定矩阵,随着输入x而变化(某种程度而言,BC跟随时间或者步长的变化而变化)。因此Mamba不再是时不变系统了,而是时变系统。

图中有个离散化的参数∆t,它其实是离散化的一个参数。大白话的理解就是要是想忽略掉某次的输入那么t会比较小,要是想要稍微记久一点,那么t会相对大。t也是根据输入x进行变化的。另外从图上可以看出来状态都存储在GPU的高速SRAM中,而矩阵参数都存放在HBM中。

先来看看它的算法,不用害怕里面横七竖八的数学符号,左侧为S4的算法,右侧为Mamba的算法,Mamba有个另外的别名S6。

B: Batch Size(训练的批次大小)

L: Sequence Length (每句序列长度)

D: Size of the input vector (每个Token的向量长度,类似d_model)

N: Size of the hidden state h.(隐含层的长度)

相对于S4而言,S6扩展了矩阵B/C/∆的维度,而且它们和输入x相关,同时这三者在运算过程中会作为参数离散化为\overline{A}\overline{B}\overline{A}\overline{B}的维度为(B,L,D,N)。

理解选择性

先来看看选择性机制的效果,传统SSM可以利用卷积核选择性将固定间隔的记忆内容输出(左图),而Mamba可以将不固定间隔的上下文内容输出,同时能够根据场景决定什么时候重置状态,这其实更加符合大语言模型的需求场景。

RNN的经典门控机制是Mamba选择机制的一个实例。RNN门控和连续时间系统离散化很早就有研究人员将他们建立联系。更广泛地说,在SSM的作用可以看成RNN门控机制。 换句话说,SSM的离散化是智能门控机制的原则基础。<是不是看到这里脑袋一片空白……>

不着急,看来那么先来看看下面的图片,Mamba块的输入x先经过两个线性变换,然后经过σ的激活函数在输送给SSM。还记得RNN中的激活函数没有,激活函数输出[0,1]之间。通过和输入x相乘决定让多少的信息通过,这就是门控

那么回过来看看下面的定理:

符号控制着“关注”或者“忽略”当前输入xt的平衡。它摇身一变,泛化为RNN的门例如上面定理的g_{t})。较大的∆值将重置状态h并关注当前输入x,而较小的∆值保持状态并忽略当前输入。 SSM在这里可以被理解为由时间步长离散化的连续系统(不清楚的见之前的ZOH)。

按照这种方式理解,直觉上是∆->∞ 代表系统更长时间地关注当前输入(因此“选择”它且忘记当前状态),而∆->0 表示被忽略的瞬态输入。

其他的特点

选择性机制:线性 RNN 在长距离竞技场基准测试中确实表现出色,但这并不意味着它们是很好的语言模型。对于语言建模,线性RNN的性能比 Transformer 差得多。正如Mamba论文中所指出的,其原因是线性 RNN 无法选择性地忘记输出向量中的信息。如果权重接近 0,则每次输入后输出向量将设置为 0,实际上模型将始终立即忘记当前输入之前的任何内容。 如果循环权重接近1,则输出向量在与权重相乘时不会改变。而大模型最重要的是根据看到的输入来决定何时存储信息以及何时忘记信息。

Mamba在此对每个输入向量应用线性函数,为该输入生成单独的权重向量,然后使用这些生成的权重执行循环扫描。这样,某些输入可以生成接近0的权重,从而从输出向量中删除信息。 至于如何使用稳定的配置避免Mamba的梯度消失和爆炸,Mamba原始论文没有提及。

并行扫描:已经在Mamba5解释了原理,大家可以对照图推理。由于 Mamba是时变系统,无法使用卷积进行评估(还记得之前SSM的卷积表达模式没有)。但是它可以采用并行扫描算法进行并行化。

内存分配:Mamba还使用另一种技巧,即增加输出向量的大小。在标准RNN 中,输出向量与输入向量大小相同。Mamba将输出向量的大小扩展了16 倍。这使得它能够存储来自先前输入的更多信息。当然输出向量在传递到下一层之前被投影回原始大小。

通常这会使计算时间增加16倍,但事实证明,在GPU上Mamba层的主要瓶颈是在高性能内存中读取和写入数据所需的时间。GPU有两种类型的内存,SRAM和HBM(不明白的话,请跳转至此)。

GPU包含两种主要类型的内存:HBM (High Bandwidth memory)和SRAM (Static Random-Access memory)。HBM虽然带宽很高,但与更快但更小的SRAM相比,它的访问时间相对较慢。Mamba则使用SRAM在矩阵乘法期间进行快速访问,这是其计算的关键。

对于Mamba的递归操作,事实证明传输数据所花费的时间实际上比计算本身所花费的时间要大得多。 因此Mamba将输入向量和模型参数传输到SRAM,然后在单个块中计算整个Mamba操作,包括将输出投影回较小的原始大小,然后将结果写回HBM。这样,只需在高性能内存之间传输原始大小的向量,实际计算时间即便慢了16倍,但计算时间与传输时间相比非常小,不会真正影响总时间。

所有的离散化和计算都在SRAM内完成

重新计算:Mamba不保存大小为(B,L,D,N)的中间状态以避免内存爆炸。 然而中间状态对于向后传递计算新的梯度是必要,所以采用的方式是重新计算这些中间状态。

这么设计的原因是从HBM读取到SRAM的、A、B、C 和输出梯度的大小为 O(BLN + DN),并且输入梯度的大小也为O(BLN + DN),重新计算避免了从HBM读取O (BLND)的时间成本,这也意味着相对于读取写入,重新计算中间状态可以加速SSM的梯队传播。

内核融合:GPU复制数据的速度比计算操作的速度相对慢。为了让操作更快,Mamba融合CUDA内核生成自定义的CUDA内核,该内核依次执行操作,无需将中间结果复制到HBM(左图)。

最后以Mamba的架构图进行收官,希望读者看到山顶的太阳,留下的更是难忘的路途风景。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【自然语言处理】形式语言和自动机

实验名称 形式语言和自动机 实验目的&#xff1a;熟悉形式语言和自动机&#xff0c;设计程序实现有限自动机&#xff0c;学习对字符串进行合法性检测&#xff0c;使用有限自动机判断字符串是否是可以被接受的。书写出能够成功运行的代码。 实验内容&#xff1a;状态集为{ q0,…

职业生涯第一课---“Redis分布式锁优化:确保唯一性与效率“

前言 最近因为刚入职公司开启自己的实习生涯&#xff0c;工作和毕设论文同步进行&#xff0c;导致有段时间没更新博客了&#xff0c;今天来分享一下最近学到的一些知识。 场景介绍 BOSS让我写一些接口&#xff0c;他提出这样一个需求&#xff0c;该接口的参数有多个&#xf…

linux系统查看CPU信息

1、查看cpu型号 [rootMaster ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 40。Intel(R) Xeon(R) CPU E5-2650 v3 2.30GHz 2、查看系统中实际物理CPU的颗数&#xff08;物理&#xff09; [rootMaster ~]# grep physical id /proc/cpuinfo | sort | uniq | w…

IT行业现状与探索未来发展趋势

​​​​​​​ 我眼中的IT行业现状与未来趋势 随着技术的不断进步&#xff0c;IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链&#xff0c;这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

Spring实现数据库读写分离(MySQL实现主从复制)

目录 1、背景 2、方案 2.1 应用层解决: 2.2 中间件解决 3、使用Spring基于应用层实现 3.1 原理 3.2 DynamicDataSource 3.3 DynamicDataSourceHolder 3.4 DataSourceAspect 3.5 配置2个数据源 3.5.1 jdbc.properties 3.5.2 定义连接池 3.5.2 定义DataSource 3.6…

【Linux】线程周边001之多线程

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.线程的理解 2.地址…

停车场车位引导管理系统工作原理是什么,由哪些软硬件设备组成?

在现代城市中&#xff0c;随着汽车保有量的持续增长&#xff0c;停车难成为了许多城市面临的共同问题。有效管理停车场资源&#xff0c;提高车位利用率&#xff0c;减少寻找停车位的时间&#xff0c;对于缓解交通拥堵、提高城市运行效率具有重要意义。车位引导管理系统正是为了…

YOLOv8改进 | 图像修复 | 适用多种复杂场景的全能图像修复网络AirNet助力YOLOv8检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是一种适用多种复杂场景的全能图像修复网络AirNet&#xff0c;其由对比基降解编码器&#xff08;CBDE&#xff09;和降解引导修复网络&#xff08;DGRN&#xff09;两个神经模块组成&#xff0c;能够在未知损坏类型和程度的情况下恢复受…

Java | Leetcode Java题解之第91题解码方法

题目&#xff1a; 题解&#xff1a; class Solution {public int numDecodings(String s) {int n s.length();// a f[i-2], b f[i-1], cf[i]int a 0, b 1, c 0;for (int i 1; i < n; i) {c 0;if (s.charAt(i - 1) ! 0) {c b;}if (i > 1 && s.charAt(i …

主流短视频评论采集python爬虫(含一二级评论内容)

声明 仅用于学习交流&#xff0c;不用于其他用途 正文 随着主流短视频评论采集更新需要登录&#xff0c;由于不懈的努力&#xff0c;攻破这一难点&#xff0c;不需要登录采集作品所有评论信息 话不多说上代码看效果&#xff1a; 输入作品id: 这样就拿到评论信息了&#xff…

小程序|锁定查询功能如何使用?

学生或家长想要实现自己查询完成后&#xff0c;任何人都无法再次查询&#xff0c;老师应该如何设置&#xff1f;易查分的【锁定查询功能】就可实现&#xff0c;下面教大家如何使用吧。 &#x1f4cc;使用教程 &#x1f512;锁定查询功能介绍 ✅学生或家长自主锁定&#xff1a;开…

webpack优化构建体积示例-并行压缩:

uglifyjs-webpack-plugin和terser-webpack-plugin都可以开启多进程并进行压缩来减小构件体积大小。 当在 Webpack 配置中启用 minimize: true 时&#xff0c;构建时间通常会增加&#xff0c;这是因为 Webpack 会在构建过程中添加一个额外的步骤&#xff1a;代码压缩。代码压缩是…

分布式搜索——ElasticSeach简介

一般都用数据库存储数据&#xff0c;然后对数据库进行查询获取数据&#xff0c;但是当数据量很大时&#xff0c;查询效率就会很慢&#xff08;具体下面会讲到&#xff09;&#xff0c;所以这种情况下就会使用到ElasticSeach ElasticSeach的基本介绍 ElasticSeach是一 款非常强…

202012青少年软件编程(Python)等级考试试卷(三级)

第 1 题 【单选题】 在Python正则表达式中&#xff0c;用来匹配任意空白字符的是&#xff08; &#xff09;。 A &#x1f612; B :S C :d D &#x1f604; 正确答案:A 试题解析: 第 2 题 【单选题】 在Python正则表达式中&#xff0c;用来匹配任意非数字字符的是&…

【神经网络与深度学习】Transformer原理

transformer ENCODER 输入部分 对拆分后的语句x [batch_size, seq_len]进行以下操作 Embedding 将离散的输入&#xff08;如单词索引或其他类别特征&#xff09;转换为稠密的实数向量&#xff0c;以便可以在神经网络中使用。位置编码 与RNN相比&#xff0c;RNN是一个字一个字…

代码随想录——二叉树的最小深度(Leetcode111)

题目链接 层序遍历 遍历整棵树&#xff0c;当找到一个叶子节点时&#xff0c;直接返回这个叶子节点的深度。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNod…

C语言 | Leetcode C语言题解之第86题分隔链表

题目&#xff1a; 题解&#xff1a; struct ListNode* partition(struct ListNode* head, int x) {struct ListNode* small malloc(sizeof(struct ListNode));struct ListNode* smallHead small;struct ListNode* large malloc(sizeof(struct ListNode));struct ListNode* …

ELF 1技术贴|如何在Ubuntu上配置Samba服务器

Samba是一个开源的软件套件&#xff0c;提供了一种实现SMB/CIFS协议的方式&#xff0c;可以无缝链接Linux与Windows系统&#xff0c;让开发者在局域网络框架下实现共享文件、打印资源等&#xff0c;确保了数据交流的高效与稳定。 相较于在Ubuntu环境下运用传统的Vim编辑器&…

Wiley数据库文献哪里比较全?去哪里下载比较高效

Wiley出版社1807年创建于美国&#xff0c;是一家具有超过200年历史的全球知名的出版机构&#xff0c;面向专业人士、科研人员、教育工作者、学生、终身学习者提供必需的知识和服务。 Wiley及旗下的子品牌出版了超过500位诺贝尔奖得主的作品。Wiley Online Library为全学科期刊全…