Mamba 模型学习笔记
笔记来源:bilibili
Transformer 的死穴
Transformer 结构的核心是自注意力机制层,无论是 encoder 还是 decoder,序列数据都先经过位置编码后喂给这个模块。
但是自注意力机制的计算范围仅限于窗口内,而无法直接处理窗口外的元素。因此,这种机制无法建模超出有限窗口的任何内容,看不到长序列的世界。
解决有办法:增加窗口的长度。但是,这样会导致计算复杂度随着窗口长度的增加而呈现平方增加 ,因为每个位置的计算都需要与窗口内的所有其他位置进行比较。
Transformer 的本质:通过位置编码,把序列数据空间化,然后通过计算空间相关度反向建模时序相关度。可以看到,这个过程忽视了内存结构的细腻关联关系,而是采取了一种一视同仁的暴力关联模式。比如,一个句子中存在一定的语法,同时,一个句子中也可能存在冗余的信息。所以,Transformer 存在不易训练的问题。
时序数据,却使用空间化的注意力机制,在当时是为了充分利用 GPU 的并行能力,但这不是万能的。让长序列数据建模回归传统,某种程序上说,这是整个 SSM 类模型思考问题的初衷和视角,而 Mamba 是其中的佼佼者。
时序状态空间模型 SSM
连续空间的时序建模

有很多实际 的问题都可以用左图所示的连续空间模型来建模,比如控制理论或线性系统领域。一般将其称为 LTI(linear time-invariant,线性时不变)系统,用公式表示就是:
输入为 ,隐藏层的变量为 , 为输出。上面的叫状态方程,下面的叫观测方程。ABCD 为参数矩阵。
之所以叫时不变,是因为,ABCD 是固定的,这是一个强假设(transformer 没有这样的假设)。D 在上面的式子中没写主要是因为在许多实际系统中,它可以是零。通过牺牲通用性,换来特定场景下的更高的性能,是所有 SSM 模型的最底层逻辑。
时序离散化与 RNN
连续系统不方便计算机的处理,所以要对它进行离散化展开,就是沿时间拉长,模型和 RNN 长相上几乎一样。公式也类似,只是导数改为不同时刻角标,形成递归过程。
原文给出了一种从连续系统转换为系统的 ABC 参数对应关系。它其实只是一种方法的举例,叫” 零阶保持(Zero-Order Hold, ZOH)”。只用知道使用了一个 delta 函数,经过一组运算,可以提到新的 A 和 B。

从效果上看,就是从上面的连续的输入,变成了下面离散的输入, 输出也是。

以上是零阶保持的效果图,变成阶跃式的了。
并行化处理与 CNN
SSM 的最大特点是可以通过卷积实现了计算上的并行化(上图中,右图所示)。
其核心的思想是使用 CNN 对时序数据建模,借助不同尺度的卷积核,从不同时间尺度上捕获时序特征。其公式表示为:
其图示为:

第二个式子与前面的图完全对应,就是一个 CNN 实现。时序递归状态方程改用卷积操作实现了,ABC 参数矩阵变成了 K ,就是图中的卷积核。体现在效果上,借助不同卷积核捕捉局部时间序列特征,可以同时对短期和长期依赖关系学习,并行计算提高了训练和推理的效率,使得 SSMs 在处理复杂的时序数据时表现出色。
在实际的问题中,往往会对 ABC 矩阵进一步简化,假设成更简单的对角阵来计算,这就是结构化 SSM,也叫 S4 模型。
在某种程序上,可以将 SSM 看成是 CNN 化的 RNN。
由于 SSM 有两个强假设:线性 + 时不变。所以极大的限制了其使用范围,因为大部分的系统是非线性,时变系统。而 Mamba 本质上是一个 SSM 模型的改进版,放开了这两个约束。
Mamba:选择性 SSM
Mamba 主要体现在设计了一种机制,让状态空间具备选择性,达到了 Transformer 的建模能力,同时在序列长度上实现了线性扩展(克服了 Transformer 的缺陷),可处理最长达百万长度的序列,而且效率很高,准确率很好。

在时间序列模型中设计了一个类似于 LSTM 的门结构,实现了选择性。BC 都带了 t,变成了时变参数,A 虽然没有直接含 t,但是通过 也变成了时变的, 就是前面的离散函数。下面的蓝色部分就是所谓的选择机制。
最简单的理解就是:一个总开关()+ 若干个旋钮( )= 非线性时变系统。