为什么要提出mamba模型?
transformer特点:训练快,推理慢,计算成本O(n*n)
Rnn的特点:训练慢,推理快,容易遗忘
其实很容易理解,因为RNN的输入只包含前一个隐藏层和当前的输入,而transformer需要考虑之前所有(或者加窗)的TOKENS
transformer模型的优势在于,它能够回溯并利用序列中任何早期tokens的信息,以此来生成每个tokens的表征。Transformer模型由两部分核心结构组成:一是用于理解文本内容的编码器模块,二是用于生成文本输出的解码器模块。这两种结构通常联合使用,以应对包括机器翻译在内的多种语言处理任务。
我们可以利用这种结构,仅通过解码器来构建生成模型。
基于Transformer的这种模型,被称为Generative Pre-trained Transformer(GPT),它使用解码器模块来处理并续写给定的文本输入。例如给定一个句子前半部分,让模型预测下一个单词是什么。
状态空间模型(SSM)
状态空间模型(State Space Model,SSM) 与 Transformer 和 RNN 一样,用于处理信息序列,例如文本和信号
1. 什么是状态空间?
状态空间是一组能够完整捕捉系统行为的最少变量集合。它是一种数学建模方法,通过定义系统的所有可能状态来表述问题。
让我们用一个更简单的例子来理解这个概念。想象我们正在走过一个迷宫。这里的“状态空间”就像是迷宫中所有可能位置的集合,即一张地图。地图上的每个点都代表迷宫中的一个特定位置,并包含了该位置的详细信息,比如离出口有多远。
而“状态空间表示”则是对这张地图的抽象描述。它告诉我们当前所处的位置(当前状态)、我们可以移动到哪些位置(未来可能的状态),以及如何从当前位置转移到下一个状态(比如向左转或向右转)
虽然状态空间模型利用方程和矩阵来记录这种行为,但它们本质上是一种记录当前位置、可能的前进方向以及如何实现这些移动的方法。
描述状态的变量(在我们的迷宫例子中,这些变量可能是X和Y坐标以及与出口的相对距离)被称作“状态向量”。
这个概念听起来是不是有些耳熟?那是因为在语言模型中,我们经常使用嵌入或向量来描述输入序列的“状态”。例如,当前位置的向量(即状态向量)可能如下所示:
在神经网络的语境中,“状态”通常指的是网络的隐藏状态。在大型语言模型的背景下,隐藏状态是生成新tokens的一个关键要素。
2. 什么是状态空间模型?
状态空间模型(SSM)是用来描述这些状态表示,并根据给定的输入预测下一个可能状态的模型。
在传统意义上,SSM在时间 t 的工作方式如下:
将输入序列 x ( t ) 例如,迷宫中的左移和下移,可以理解为之前时刻的移动轨迹)映射到潜在的状态表示 h ( t )(例如,距离出口的远近以及X/Y坐标)。
然后从这个状态表示中推导出预测的输出序列 y ( t ) (例如,为了更快到达出口而再次左移,即下一个时刻的动作)。
核心方程
状态方程展示了输入如何影响状态(通过矩阵B),以及状态如何随时间变化(通过矩阵A)。
输出方程描述了状态如何转换为输出(通过矩阵 C) 以及 输入如何影响输出(通过矩阵 D )
状态空间模型具体流程
可视化这两个方程为我们提供了以下架构:
1、设想我们有一个输入信号 x ( t ) x(t)x(t),这个信号首先与矩阵B相乘,而矩阵B刻画了输入 对系统 的影响程度。
2.我们将这个状态与矩阵A相乘,矩阵A揭示了所有内部状态是如何相互连接的,因为它们代表了系统的基本动态。 矩阵A在创建状态表示之前被应用,并在状态表示更新之后进行更新。
接着,我们利用矩阵C来定义状态如何转换为输出。
3、 最后,我们可以利用矩阵D提供从输入到输出的直接信号。这通常也称为跳跃连接,类似于残差连接。
这两个方程共同作用,目的是根据观测数据来预测系统的状态。由于输入被假定为连续的,状态空间模型的主要表现形式是连续时间表示。
3. 从连续信号到离散信号
对于连续信号,直接找到状态表示 h ( t ) h(t)h(t) 在分析上可能颇具挑战。此外,由于我们通常处理的都是离散输入(比如文本序列),我们希望将模型转换为离散形式。
Zero-Order Hold Technoloty
为了实现这一点,我们采用了零阶保持(Zero-Order Hold, ZOH)技术。其工作原理如下:每当接收到一个离散信号时,我们就保持该信号值不变,直到下一个离散信号的到来。这个过程实际上创建了一个SSM可以处理的连续信号。
我们保持信号值的时间由一个新的可学习参数表示,这个参数称为 步长 Δ。它代表了输入信号的分辨率。
现在,由于我们有了连续的输入信号,我们能够生成连续的输出信号,并且只需根据输入信号的时间步长来对输出值进行采样。这些采样值构成了我们的离散输出。
数学表示
从数学角度来看,我们可以按照以下方式应用零阶保持技术:
关于运用ZOH零阶保持法把连续SSM转换为离散SSM的详细推导这里不再赘述,感兴趣的读者可以自行查阅资料。
因此,可以将连续状态空间模型(SSM)转换为离散形式,其公式不再是连续函数到函数的映射
x ( t ) → y ( t ),而是离散序列到序列的映射
这里,矩阵A和B现在表示模型的离散参数。使用 k kk 而不是 t tt 来表示离散时间步长,并在提到连续 SSM 与离散 SSM 时使其更加清晰。
在训练期间仍然保存矩阵 A的连续形式,而不是离散化版本。在训练过程中,连续表示被离散化。
现在我们已经有了离散表示的公式,让我们探索如何实际计算模型。
4. 循环表示
离散 SSM 允许我们以特定的时间步长而不是连续信号来表述问题。正如我们之前在 RNN 中看到的那样,循环方法在这里非常有用。如果我们考虑离散时间步长而不是连续信号,我们可以用时间步长重新表述问题:
5. 卷积表示
另一种可用于状态空间模型(SSM)的表示形式是卷积。
在传统的图像识别任务中,使用 滤波器(或称卷积核) 提取图像的聚合特征:
我们用来表示这种“滤波器”的内核是从SSM模型推导而来的:
这可以被转换为一个具有明确的核公式的单个卷积操作:
6. 三种表示
这三种表示法,连续的,循环的,和卷积的都有不同的优点和缺点:
有趣的是,我们现在可以在推理时利用循环SSM的高效性,并在训练时利用卷积SSM的并行处理能力。
借助这些不同的表示形式,我们可以采用一种巧妙的方法,即根据不同的任务需求选择合适的表示。在训练阶段,我们采用可以并行计算的卷积表示,以便加快训练速度;而在推理阶段,我们则切换到高效的循环表示,以优化推理性能:(给我的启示,既然可以把连续的做成离散的,并且在不同的阶段利用TRANSFORMER训练快的优势,而RNN推理快的优势,量子版本也是如此)
该模型称为线性状态空间层(Linear State-Space Layer,LSSL)。
这些表示形式都共有一个关键特性,即线性时间不变性(Linear Time Invariance,LTI)。LTI属性指出,在状态空间模型(SSM)中,参数A、B和C对于所有时间步来说是恒定的。这意味着无论SSM生成哪个token,矩阵A、B和C都是一模一样的。
换句话说,无论你向SSM提供何种顺序的输入,A、B和C的值都不会改变。我们拥有的是一个不区分内容的静态表示。
7. 矩阵A的重要性
矩阵A可以说是状态空间模型(SSM)公式中最为关键的组成部分之一。正如我们之前在循环表示中所讨论的,矩阵A负责捕捉先前状态的信息,并利用这些信息来构建新的状态。
本质上,矩阵A产生隐藏状态:
因此,构建矩阵A的关键可能在于仅保留之前几个token的记忆,并捕捉我们所见每个token之间的差异。特别是在循环表示的背景下,由于它仅考虑前一个状态,这一点尤为重要。
那么,我们如何创建一个能够保持大容量记忆(即上下文大小)的矩阵A呢?
这时,我们就用到了**HiPPO(Hungering Hungry Hippo)**,这是一个高阶多项式投影运算器。HiPPO的目标 是将迄今为止观察到的 所有输入信号压缩成一个系数向量。
HiPPO利用矩阵A构建一个状态表示,这个表示能够有效地捕捉最近token的信息,并同时让旧token的影响逐渐减弱。其公式可以表示为:
实践证明,使用HiPPO构建矩阵A的方法明显优于随机初始化。因此,它能够更精确地重建最新的信号(即最近的tokens),而不仅仅是初始状态。
HiPPO矩阵的核心在于其能够生成一个隐藏状态,用以存储历史信息。 在数学上,这是通过追踪勒让德多项式的系数来实现的,这使得它能够近似所有历史数据。
8. S4模型的诞生
HiPPO随后被应用到循环和卷积表示中,以处理远程依赖关系。这导致了序列的结构化状态空间 Structured State Space for Sequences(S4)的产生,这是一种能够有效处理长序列的SSM。
S4由三部分组成:
状态空间模型SSM
HiPPO用于处理远程依赖关系
用于创建循环和卷积表示的离散化处理
参考
图文并茂【Mamba模型】详解-CSDN博客
A Visual Guide to Mamba and State Space Models - Maarten Grootendorst