Mamba模型初步解析 — Mamba : Linear-Time Sequence Modeling with Selective State Spaces

news2024/9/29 1:24:24

Mamba模型初步接触 — Mamba : Linear-Time Sequence Modeling with Selective State Spaces

"Mamba"是一种序列建模架构,它采用了称为选择性状态空间模型(SSMs)的结构来优化处理长序列数据的效率和性能,这在语言处理、基因组学和音频处理等领域特别有用。

Selective State Space Model with Hard ware-aware State Expansion(S6
在这里插入图片描述

Transform的问题

Transformer 结构的核心是自注意力机制层,不管是encoder,还是decoder,序列数据都先经过位置编码后喂给这个模块。

我们在说明Transform的问题之前也对Transform的一些核心的概念来进行进一步的回顾与学习。

它创建了一个矩阵,将每个token与之前的每个token进行比较,矩阵中的权重由token对彼此的相关性决定。

在这里插入图片描述

这里就说明了他的计算过程是一个未进行压缩的形式。矩阵可以一次的进行创建从而可以支持并行化的方法。

推理的curse

在推理的时候存在的问题就是,即使我们前面已经计算了token但是在计算新的token的过程中依然需要计算整个序列的注意力。

在这里插入图片描述

Transformer的核心结构Core Attention对序列长度的内存和计算是成二次关系的,也就是说序列长度扩大为两倍,对于内存和计算量的要求会增大4倍。

在这里插入图片描述

作者将Transformers对时间序列的建模的这种特性概括为,有效但不高效,即可以有效的对长序列建模,但计算效率和内存占用上不高效 。

快速推理的RNN结构

对于之前我们提到的RNN推理速度过慢的问题,我们很容易就可以联想到之前学过的RNN网络。

在生成输出时,RNN 只需要考虑前一个隐藏状态和当前输入。这样可以避免重新计算所有先前的隐藏状态,这是 Transformer 会做的事情。

在这里插入图片描述
换句话说,RNN 可以快速进行推理,因为它与序列长度成线性比例增长!理论上,它甚至可以具有无限的上下文长度

在RNN中每个隐藏状态是所有先前隐藏状态的聚合,通常是一个压缩视图。

在这里插入图片描述

注意,在生成名称"Maarten"时,最后一个隐藏状态不再包含有关单词"Hello"的信息。RNNs 随着时间的推移往往会忘记信息,因为它们只考虑一个先前状态。

RNN这种模型的性质,就决定了RNN无法进行并行的计算只能按照顺序来进行推理。也就有了无法建模长序列关系。

总结:结合之前提到过的这些问题,其实就有了Mamba这种模型产生的想法,既可以进行并行化的计算又可以满足线性的序列关系。

时序状态空间模型SSM

状态空间模型(SSM:StateSpaceModel)20世纪60年代由卡尔曼和其他研究者提出。

在这里插入图片描述

  • 它是一种用于描述动态系统的数学模型,广泛应用于系统控制、信号处理等多个领域。

  • 它利用状态变量描述系统的状态,并通过状态方程和输出方程,描述系统的演化和输出。

连续的SSM

首先连续的SSM的一般形式如下:

  • state Equation:状态方程 描述系统的动态行为,表示系统状态随时间的变化

x ′ ( t ) = A x ( t ) + B u ( t ) x^{\prime}(t)=A x(t)+B u(t) x(t)=Ax(t)+Bu(t)

在这里插入图片描述

其中:

  1. X(t)是状态向量,表示系统在时间t的状态
  2. X’(t)是状态向量的一阶导数,表示状态随时间的变化率
  3. A是状态转移矩阵
  4. B是输入矩阵,描述外部输入对系统状态的影响
  5. u(t)是控制输入向量
  • Output Equation:输出方程(或者叫观测方程)描述系统的输出与状态之间的关系

y ( t ) = C x ( t ) + D u ( t )  或  y ( t ) = C x ( t ) \begin{aligned} y(t) & =C x(t)+D u(t) \text { 或 } \quad y(t)=C x(t) \end{aligned} y(t)=Cx(t)+Du(t)  y(t)=Cx(t)

在这里插入图片描述

其中:

  1. y(t)是输出向量,表示系统在时间t的输出值。
  2. C是输出矩阵,用于控制状态对输出的影响。
  3. D是直接传输矩阵,用于控制输入对输出值的直接影响。

同时参考一下其他的资料我们同时也给出经典的状态空间方程,SSM:

h ′ = A h ( t ) + B x ( t ) ( 1 a ) y ( t ) = C h ( t ) ( 1   b ) \begin{array}{l} h^{\prime}=A h(t)+B x(t)(1 \mathrm{a}) \\ y(t)=C h(t)(1 \mathrm{~b}) \end{array} h=Ah(t)+Bx(t)(1a)y(t)=Ch(t)(1 b)

上式给出了-个一维函数或序列 X(t)∈ R 基于隐藏状态 h(t)∈ RN×1y(t)∈ R 映射的过
程,这里的A∈RN×NB∈RN×1C ∈R1×N

在这里插入图片描述

注意:矩阵A、B、C和D通常被称为参数,因为它们是可学习的。回到我们的简化视角,我们现在可以将矩阵 A、B 和 C视为 SSM 的核心。

在这里插入图片描述

但是我们对于常用的文本数据来说,大多数的文本序列都是离散化的数据,因此需要引入离散化的SSM的相关概念。

离散的SSM

  • state Equation:状态方程 描述系统的动态行为,表示系统状态随时间的变化

x k + 1 = A x k + B u k x_{k+1}=A x_{k}+B u_{k} xk+1=Axk+Buk

其中:

  1. Xk:表示系统在K时刻的状态向量。
  2. Xk+1:是系统在K+1时刻的状态向量。
  3. A是状态转移矩阵,描述系统从k时刻到k+1时刻的状态转移
  4. B是输入矩阵,描述外部输入对系统状态的影响
  5. uk:k时刻的输入向量。
  • Output Equation:输出方程(或者叫观测方程)描述系统的输出与状态之间的关系

y k = C x k + D u k  或  y k = C x k y_{k}=C x_{k}+D u_{k} \text { 或 } y_{k}=C x_{k} yk=Cxk+Duk  yk=Cxk

其中:

  1. yk:是K时刻的输出向量。
  2. C是输出矩阵,用于控制状态对输出的影响。
  3. D是直接传输矩阵,用于控制输入对输出值的直接影响。

离散化的原因:

  1. 对于连续的系统,计算机没办法处理,计算机处理数据和执行算法时通常使用离散的时间步长。离散化将连续时间系统转换为离散时间系统,使其能够在计算机上进行数值模拟和计算。

  2. 通过 连续SSM 的状态方程,我们可以知道任意时刻:输入、状态、状态微分(状态对时间的导数)的关系,但没办法根据上一时刻的状态推测下一时刻的状态。离散化后,可以将系统表示为状态的递推公式,可逐步递推系统状态。

离散化方法

离散化方法主要包括:

  • 前向欧拉方法(Eulermethod):使用简单的前向欧拉公式将连续时间系统离散化。

  • 后向欧拉方法(Backward Euler method):使用后向欧拉公式,将系统的状态更新方程以隐式方法表示。

  • 双线性变换(Bilinear transform,Tustin’s method):将连续时间系统的拉普拉斯变换映射到离散时间系统的z变换,从而保持系统的稳定性特性。

  • 零阶保持(Zero-order hold, ZOH):假设在每个采样周期内输入信号保持不变,从而将连续系统离散化。

离散化的推导过程

连续的SSM的状态方程为:

x ′ ( t ) = A x ( t ) + B u ( t ) x^{\prime}(t)=A x(t)+B u(t) x(t)=Ax(t)+Bu(t)

两边同时在区间 [t(k-1),tk) 内求积分 :(公式1)

x ( t k ) − x ( t ( k − 1 ) ) = ∫ t k − 1 t k A x ( s ) d s + ∫ t k − 1 t k B u ( s ) d s x\left(t_{k}\right)-x\left(t_{(k-1)}\right)=\int_{t_{k-1}}^{t_{k}} A x(s) d s+\int_{t_{k-1}}^{t_{k}} B u(s) d s x(tk)x(t(k1))=tk1tkAx(s)ds+tk1tkBu(s)ds

用uk表示每个离散时间区间的平均值:(公式2)

u k = 1 Δ k ∫ t k − 1 t k u ( s ) d s u_{k}=\frac{1}{\Delta_{k}} \int_{t_{k-1}}^{t_{k}} u(s) d s uk=Δk1tk1tku(s)ds

将公式2带入到公式1中就可以得到推导后的形式。(公式3)

x ( t k ) − x ( t ( k − 1 ) ) = ∫ t k − 1 t k A x ( s ) d s + Δ k B u k x\left(t_{k}\right)-x\left(t_{(k-1)}\right)=\int_{t_{k-1}}^{t_{k}} A x(s) d s+\Delta_{k} B u_{k} x(tk)x(t(k1))=tk1tkAx(s)ds+ΔkBuk

在得到上面的形式之后就可以发现其中的Buk的部分已经得到了一个近似的解。之后就需要用到之前提到的离散化的方法来对

∫ t k − 1 t k A x ( s ) d s \int_{t_{k-1}}^{t_{k}} A x(s) d s tk1tkAx(s)ds

求一个近似的解。(前向欧拉法、后向欧拉法、梯形法,零阶保持法)

前向欧拉法

在这里插入图片描述

前向欧拉法:计算橙色部分的面积来进行近似的操作。

∫ t k − 1 t k A x ( s ) d s ≈ Δ A x ( t k − 1 ) \int_{t_{k-1}}^{t_{k}} A x(s) d s \approx \Delta A x\left(t_{k-1}\right) tk1tkAx(s)dsΔAx(tk1)

我们将其带入公式3并写为离散形式可以得到:

x k − x k − 1 ≈ Δ k A x k − 1 + Δ k B u k x_{k}-x_{k-1} \approx \Delta_{k} A x_{k-1}+\Delta_{k} B u_{k} xkxk1ΔkAxk1+ΔkBuk

进一步进行整理可以得到:

x k = ( I + Δ k A ) x k − 1 + Δ k B u k x_{k}=\left(I+\Delta_{k} A\right) x_{k-1}+\Delta_{k} B u_{k} xk=(I+ΔkA)xk1+ΔkBuk

我们根据状态空间模型:可以写出离散化之后的状态方程为:

x k = A ˉ x k − 1 + B u k , 其中:  A ˉ = I + Δ k A , B = Δ k B x_{k}=\bar{A} x_{k-1}+B u_{k} \text {, 其中: } \bar{A}=I+\Delta_{k} A, \quad B=\Delta_{k} B xk=Aˉxk1+Buk其中Aˉ=I+ΔkA,B=ΔkB

后向欧拉法

在这里插入图片描述
计算对应的橙色矩形面积,近似阴影部分的面积:

∫ t k − 1 ∼ A x ( s ) d s ≈ Δ k A x ( t k ) \int_{t_{k-1}}^{\sim} A x(s) d s \approx \Delta_{k} A x\left(t_{k}\right) tk1Ax(s)dsΔkAx(tk)

我们将其带入公式3并写为离散形式可以得到:

x k − x k − 1 ≈ Δ k A x k + Δ k B u k x_{k}-x_{k-1} \approx \Delta_{k} A x_{k}+\Delta_{k} B u_{k} xkxk1ΔkAxk+ΔkBuk

进一步整理可以得到:

x k = ( I − Δ k A ) − 1 x k − 1 + ( I − Δ k A ) − 1 Δ k B u k x_{k}=\left(I-\Delta_{k} A\right)^{-1} x_{k-1}+\left(I-\Delta_{k} A\right)^{-1} \Delta_{k} B u_{k} xk=(IΔkA)1xk1+(IΔkA)1ΔkBuk

我们根据状态空间模型:可以写出离散化之后的状态方程为:

x k = A ˉ x k − 1 + B u k , 其中:  A ˉ = ( I − Δ k A ) − 1 , B = ( I − Δ k A ) − 1 Δ k B x_{k}=\bar{A} x_{k-1}+B u_{k} \text {, 其中: } \bar{A}=\left(I-\Delta_{k} A\right)^{-1}, \quad B=\left(I-\Delta_{k} A\right)^{-1} \Delta_{k} B xk=Aˉxk1+Buk其中Aˉ=(IΔkA)1,B=(IΔkA)1ΔkB

梯形法

梯形法简单的理解就是结合之前的两种方法取中间值的部分来进行求解。

∫ t k − 1 t k A x ( s ) d s ≈ Δ k ( 1 2 A x k − 1 + 1 2 A x k ) \int_{t_{k-1}}^{t_{k}} A x(s) d s \approx \Delta_{k}\left(\frac{1}{2} A x_{k-1}+\frac{1}{2} A x_{k}\right) tk1tkAx(s)dsΔk(21Axk1+21Axk)

带入公式写为离散的形式可以得到:

x k − x k − 1 ≈ Δ k ( 1 2 A x k − 1 + 1 2 A x k ) + Δ k B u k x_{k}-x_{k-1} \approx \Delta_{k}\left(\frac{1}{2} A x_{k-1}+\frac{1}{2} A x_{k}\right)+\Delta_{k} B u_{k} xkxk1Δk(21Axk1+21Axk)+ΔkBuk

进一步整理可以得到:

x k = ( I − Δ k 2 A ) − 1 ( I + Δ k 2 A ) x k − 1 + ( I − Δ k 2 A ) − 1 Δ k B u k x_{k}=\left(I-\frac{\Delta_{k}}{2} A\right)^{-1}\left(I+\frac{\Delta_{k}}{2} A\right) x_{k-1}+\left(I-\frac{\Delta_{k}}{2} A\right)^{-1} \Delta_{k} B u_{k} xk=(I2ΔkA)1(I+2ΔkA)xk1+(I2ΔkA)1ΔkBuk

最后可以得到状态空间的表达形式为:

x k = A ˉ x k − 1 + B ˉ u k , 其中:  A ˉ = ( I − Δ k 2 A ) − 1 ( I + Δ k 2 A ) , B ˉ = ( I − Δ k 2 A ) − 1 Δ k B 1 Δ k B x_{k}=\bar{A} x_{k-1}+\bar{B} u_{k} \text {, 其中: } \bar{A}=\left(I-\frac{\Delta_{k}}{2} A\right)^{-1}\left(I+\frac{\Delta_{k}}{2} A\right), \quad \bar{B}=\left(I-\frac{\Delta_{k}}{2} A\right)^{-1} \Delta_{k} B \quad{ }^{1} \Delta_{k} B xk=Aˉxk1+Bˉuk其中Aˉ=(I2ΔkA)1(I+2ΔkA),Bˉ=(I2ΔkA)1ΔkB1ΔkB

零阶保持法

零阶保持(Zero-OrderHold,ZOH)用于将离散时间信号转换为连续时间信号。这种方法假设输入信号在每个采样周期内保持恒定不变,即在每个采样点之后,直到下一个采样点到来之前,信号的值不再变化。

我们保持数值的时间由一个新的可学习参数表示,称为步长△。它代表了输入的分辨率。

在这里插入图片描述

首先先写出通过该方法所得到的结论:

连续状态下的状态方程可以写为:

x ′ ( t ) = A x ( t ) + B u ( t ) x^{\prime}(t)=A x(t)+B u(t) x(t)=Ax(t)+Bu(t)

离散空间状态下的方程可以写为:

x k = e A Δ k x k − 1 + A − 1 ( e A Δ k − I ) B u k x_{k}=e^{A \Delta_{k}} x_{k-1}+A^{-1}\left(e^{A \Delta_{k}}-I\right) B u_{k} xk=eAΔkxk1+A1(eAΔkI)Buk

进一步可以写为:

x k = A ˉ x k − 1 + B ˉ u k , 其中 : − A ˉ = e A Δ k − B ˉ = A − 1 ( e A Δ k − I ) B x_{k}=\bar{A} x_{k-1}+\bar{B} u_{k} , 其中:- \bar{A}=e^{A \Delta_{k}} -\bar{B}=A^{-1}\left(e^{A \Delta_{k}}-I\right) B xk=Aˉxk1+Bˉuk,其中:Aˉ=eAΔkBˉ=A1(eAΔkI)B

其卷积形式的表示为:

K ˉ = ( C B ˉ , C A B ‾ , … , C A ˉ k B ˉ , … ) y = x ∗ K ˉ ( 4   b ) \begin{array}{l} \bar{K}=\left(C \bar{B}, C \overline{A B}, \ldots, C \bar{A}^{k} \bar{B}, \ldots\right)\\ y=x * \bar{K}(4 \mathrm{~b}) \end{array} Kˉ=(CBˉ,CAB,,CAˉkBˉ,)y=xKˉ(4 b)

循环与卷积表示形式

注意我们如何可以使用RNN的基础方法来使用这个离散化版本。这种技术给我们带来了RNN的优点和缺点,即快速推理和缓慢的训练。
在这里插入图片描述

卷积表达形式的举例:以y2输出方程来进行推导

y 2 = C h 2 = C ( A ˉ h 1 + B ˉ x 2 ) = C ( A ˉ ( A ˉ h 0 + B ˉ x 1 ) + B ˉ x 2 ) = C ( A ˉ ( A ˉ ⋅ B ˉ x 0 + B ˉ x 1 ) + B ˉ x 2 ) = C ( A ˉ ⋅ A ˉ ⋅ B ˉ x 0 + A ˉ ⋅ B ˉ x 1 + B ˉ x 2 ) = C ⋅ A ˉ 2 ⋅ B ˉ x 0 + C ⋅ A ˉ ⋅ B ˉ ⋅ x 1 + C ⋅ B ˉ x 2 \begin{aligned} y_{2} & =C h_{2} \\ & =C\left(\bar{A} h_{1}+\bar{B} x_{2}\right) \\ & =C\left(\bar{A}\left(\bar{A} h_{0}+\bar{B} x_{1}\right)+\bar{B} x_{2}\right) \\ & =C\left(\bar{A}\left(\bar{A} \cdot \bar{B} x_{0}+\bar{B} x_{1}\right)+\bar{B} x_{2}\right) \\ & =C\left(\bar{A} \cdot \bar{A} \cdot \bar{B} x_{0}+\bar{A} \cdot \bar{B} x_{1}+\bar{B} x_{2}\right) \\ & =C \cdot \bar{A}^{2} \cdot \bar{B} x_{0}+C \cdot \bar{A} \cdot \bar{B} \cdot x_{1}+C \cdot \bar{B} x_{2} \end{aligned} y2=Ch2=C(Aˉh1+Bˉx2)=C(Aˉ(Aˉh0+Bˉx1)+Bˉx2)=C(Aˉ(AˉBˉx0+Bˉx1)+Bˉx2)=C(AˉAˉBˉx0+AˉBˉx1+Bˉx2)=CAˉ2Bˉx0+CAˉBˉx1+CBˉx2

 以此内推,可得  y 3 = C A A A B ‾ x 0 + C A A B ‾ x 1 + C A B ‾ x 2 + C B ‾ x 3 \begin{array}{l} \text { 以此内推,可得 }\\ y_{3}=\mathbf{C} \overline{\mathbf{A A A B}} x_{0}+\mathbf{C} \overline{\mathbf{A A B}} x_{1}+\mathbf{C} \overline{\mathbf{A B}} x_{2}+\mathbf{C} \overline{\mathbf{B}} x_{3} \end{array}  以此内推,可得 y3=CAAABx0+CAABx1+CABx2+CBx3

我们换一种形式来看将y3改写为点积的形式可以写为下的结构,可以进一步的对之前的卷积表达形式来进行说明。

y 3 = ( C A A A B ‾ C A A B ‾ C A B ˉ ‾ C B ‾ ) ( x 0 x 1 x 2 x 3 ) {y_{3}=\left(\begin{array}{llll} \mathbf{C} \overline{\mathrm{AAAB}} & \mathbf{C} \overline{\mathrm{AAB}} & \mathbf{C} \overline{\mathbf{A} \bar{B}} & \mathbf{C} \overline{\mathbf{B}} \end{array}\right)\left(\begin{array}{l} x_{0} \\ x_{1} \\ x_{2} \\ x_{3} \end{array}\right)} y3=(CAAABCAABCABˉCB) x0x1x2x3

对于处理的一维的线性序列,我们的卷积表示图可以如下所示。
在这里插入图片描述
在这里插入图片描述

K ˉ = ( C B ˉ , C A B ‾ , … , C A ˉ k B ˉ , … ) y = x ∗ K ˉ ( 4   b ) \begin{array}{l} \bar{K}=\left(C \bar{B}, C \overline{A B}, \ldots, C \bar{A}^{k} \bar{B}, \ldots\right)\\ y=x * \bar{K}(4 \mathrm{~b}) \end{array} Kˉ=(CBˉ,CAB,,CAˉkBˉ,)y=xKˉ(4 b)

总结:按照规律我们就可以得到之前的卷积的形式。

在进行0填充之后我们的卷积核依次的向后进行移动。就类似于CNN的卷积操作了,这种就可以实现了CNN的卷积的并行计算,但推理的速度相比较于循环的表示形式会有所下降。

在这里插入图片描述

SSM的三种表示

对之前的推理过程和得到的结果来进行表示,其实就可以看出这三种表示,连续的、循环的和卷积的,都有不同的优缺点:

  • 连续表示
  • 循环表示
  • 卷积表示

我们现在具有循环SSM的高效推断和卷积SSM的可并行训练。

在这里插入图片描述

有了这些表示,我们可以使用一个巧妙的技巧,即根据任务选择表示。在训练期间,我们使用可以并行化的卷积表示,在推断期间,我们使用高效的循环表示。

这个模型被称为线性状态空间层(LSSL)这些表示共享一个重要属性, 即线性时不变性 (LTI)LTI 表示 SSM 的参数 A、B 和 C 对于所有时间步长都是固定的。 这意味着矩阵 A、B 和 C对于SSM生成的每个token都是相同的无论向 SSM 提供什么序列,A、B 和 C 的值都保持不变。我们有一个静态表示,它不具备内容感知能力

线性状态空间层(LSSL)训练和推理使用不同的结构,个人感觉有点类似于YOLO v7中的结构化重参数卷积。

矩阵A的重要意义

矩阵A捕获了之前状态的信息,来构建一个新的状态,网上部分的文章也提到了说。本质上是由矩阵A产生出了隐状态。

那我们如何创建矩阵A?来使得模型获得更多的隐状态信息呢?

由此引出了在Mamba中的一个很重要的技术HiPPO技术。即高阶多项式投影算子。HiPPO 试图将迄今为止看到的所有输入信号压缩成系数向量

我们可以通过HiPPO压缩和重建输入信号的信息。得到重建的信号

在这里插入图片描述

它使用矩阵A来构建一个状态表示,很好地捕捉最近的token并衰减较l旧的token。其公式可以表示如下:

A n k { ( 2 n + 1 ) 1 / 2 ( 2 k + 1 ) 1 / 2 n + 1 0 \mathbf{A}_{n k}\left\{\begin{array}{l} (2 \boldsymbol{n}+1)^{1 / 2}(2 \boldsymbol{k}+1)^{1 / 2} \\ \boldsymbol{n}+1 \\ 0 \end{array}\right. Ank (2n+1)1/2(2k+1)1/2n+10

在这里插入图片描述
使用HiPPO构建矩阵A显示出比将其初始化为随机矩阵要好得多。因此,与I旧信号(初始token)相比,它更准确地重建了更新的信号(最近的tokn)。

这个矩阵旨在将过去的历史压缩成一个状态,其中包含足够的信息以大致重构历史。

这个矩阵的解释是它产生一个记忆其历史的隐藏状态。

S4模型的引出

总结:它由三个部分组成 Structured State Spaces for Sequences(s4)

  • State Space Models 状态空间模型(有连续的状态空间表示)

  • HiPPO for handling long-range dependencies用于处理长距离依赖HiPPO

  • Discretization for creating recurrent and convolution representations用于创建循环和卷积表示的离散化

然后,HiPPO 被应用于我们之前看到的循环和卷积表示,以处理长距离依赖关系。结果是序列的结构化状态空间(S4),这是一类能够高效处理长序列的 SSM。

在这里插入图片描述

A Selective SSM(S6)概述

在这一部分,我们结合之前的一些概念推导和相关公式和方法的引入。来简单的概述Mamba中的一些主要的创新点(贡献)

S6主要包含的两个部分为:

  1. A selective scan algorithm,which allows the model to filter(ir) relevant information(一种选择性的扫描算法)允许模型过滤不相关的信息

  2. A hardware-aware algorithm that allows for efficient storage of (intermediate) results through parallel scan, kernel fusion, and Pecomtaton 一种硬件感知算法,通过并行扫描、内核融合和重新计算实现对(中间)结果的高效存储

它们共同创建了选择性SSM或S6模型,可以像自注意力一样用于创建Mamba块

A Selective SSM -> S6模型

S4(结构化的状态空间模型)存在的问题

SSM + HiPPO + Structured Matrices = S4

状态空间模型,甚至S4(结构化状态空间模型在语言建模和生成中的某些关键任务上表现不佳,即聚焦或忽略特定输入的能力。)

S4在两个任务上表现不佳,其中一个是选择性复制的任务。SSM的目标是复制输入的部分并按顺序输出它们。

也就是说距离的间隔是发生变化的,而A B C矩阵是固定的,无法执行基于内容的推理

有选择的压缩信息。

在S4的模型之后我们将HiPPO矩阵参数化为Normal Plus Low-Rank (NPLR) 形式

在S4模型中, "结构化"主要指的是将状态转移矩阵A参数化为一种特殊的结构, 即Normal Plus Low-Rank (NPLR)形式。这种结构中:Λ是一个对角矩阵(diagonal matrix)
P和Q是两个低秩矩阵(low-rank matrices), 通常秩为1或2"结构化"实际上是S4模型的核心思想, 通过巧妙地对矩阵结构进行分解和参数化, 同时在表达能力和计算效率之间取得了很好的平衡。在S4模型的NPLR(Normal Plus Low-Rank)参数化中, Normal矩阵指的是一个正规矩阵(Normal matrix)。

在这里插入图片描述

DPLR的形式:公式中的中间的部分

A = V ( Λ − ( V ∗ P ) ( V ∗ Q ) ∗ ) V ∗ A=V\left(\Lambda-\left(V^{*} P\right)\left(V^{*} Q\right)^{*}\right) V^{*} A=V(Λ(VP)(VQ))V

因此,S4模型实际上是在HiPPO矩阵附近的NPLR子空间中寻找最优的状态转移矩阵,既保留了HiPPO矩阵的长期记忆能力,又继承了正规矩阵的优良性质。

在S4模型的基础上经过改进提出了最后的S6模型来作为Mamba的输入。

有选择的对数据进行压缩

Mamba是介于RNN和Transform之间的对数据有选择性的来进行压缩的。尽可能的解决了两个模型所村咋的问题。

在这里插入图片描述
Mamba模型提出了几个特点和贡献,这些特点和贡献使其与其他序列模型(如S4模型)有所区别:

模型特点和贡献:

  1. 选择性状态空间模型:Mamba引入了选择性状态空间模型,这些模型提高了架构的建模能力,特别是在需要基于内容的推理的任务上。

  2. 选择机制:选择机制允许模型根据当前token选择性地传播或忘记信息,为需要关注输入特定部分的任务提供了优势。

  3. 硬件感知算法:Mamba采用硬件感知并行算法,在循环模式下计算,而不实现扩展状态的具体化,为内存带宽和计算效率进行了优化。

  4. 简化的架构:Mamba没有使用注意力块,简化了架构,可能减少了参数数量和计算开销。

Mamba在性能上所产生的优势。

  1. Mamba在语言、音频和基因组学等多种模态上实现了最先进的性能。
  2. 在语言建模中,Mamba模型可以超越相同大小的Transformer模型,甚至可以匹配参数数量是其两倍的Transformer模型。
  3. Mamba模型还以其高速推理和吞吐量而受到关注,比Transformer模型快得多。

在这里插入图片描述
在改进之后就会避免和上图一样的N和D保持形状不变的问题,从而产生无法进行内容感知等问题,在改进之后就会使得B C的形状是可变的从而变化为可以学习的参数信息。A可以保持不变。但是步长(三角符号)发生改变就会使得A(ba)也是可以发生改变的

在这里插入图片描述

较小的步长△导致忽略特定单词,而是更多地使用先前的上下文,而较大的步长△则更专注于输入单词而不是上下文

在这里插入图片描述

然后我们的步长是可变的,对于不同的输入的token我们要进行忽略的信息不同就会导致步长发生百变化从而使得参数可以进一步学习

扫描操作

在上一步我们已经提到了对于不同的token来说步长是可以发生变化的从而就会导致其中的参数 A B C动态的发生变化。

我们的卷积操作需要固定卷积核。将这些A B C参数拼接起来作为卷积核,但是我们的参数动态发生变化,就导致了卷积核会动态的发生变化,所以无法在定义卷积操作。所以只能使用循环操作了

在这里插入图片描述
但是之前我们提到了卷积操作时可以进行并行化的操作的,但是循环操作是无法进行并行化的操作的只能顺序的执行推理。

下一步的改进就是实现循环的并行化操作。

每个状态是前一个状态(乘以A)和当前输入(乘以B)的总和。这被称为扫描操作,可以很容易地用for循环计算。

在这里插入图片描述
Mamba就通过了并行扫描算法来做进一步改进操作实现并行化的,下面介绍的是SCAN操作的并行化方法。

在这里插入图片描述

硬件感知算法(待续)

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

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

相关文章

如果只能保留一个复制粘贴软件,那一定是它pastemate

下载地址:Pastemate 在日常的工作和生活中,使用电脑必离不开的功能中,一定有复制粘贴。传统的复制粘贴方式效率不那么高,Windows内置的剪切板功能感觉又差那么些意思。 🧐对于功能和颜值都有要求的你,一定…

端口隔离配置的实验

端口隔离配置是一种网络安全技术,用于在网络设备中实现不同端口之间的流量隔离和控制。以下是对端口隔离配置的详细解析: 基本概念:端口隔离技术允许用户将不同的端口加入到隔离组中,从而实现这些端口之间的二层数据隔离。这种技…

Linux入门2——初识Linux权限

目录 0. Linux下的用户 1.文件访问者的分类 2.文件类型和访问权限 3. 文件权限值的表示方法 4.文件访问权限的相关设置方法 4.1 修改文件的访问权限 4.2修改文件的拥有者和所属组 0. Linux下的用户 在学习Linux权限之前,我们要先来了解Linux下的用户&#x…

(十七)、Mac 安装k8s

文章目录 1、Enable Kubernetes2、查看k8s运行状态3、启用 kubernetes-dashboard3.1、如果启动成功,可以在浏览器访问3.2、如果没有跳转,需要单独安装 kubernetes-dashboard3.2.1、方式一:一步到位3.2.2、方式二:逐步进行 1、Enab…

杭州网站设计中的常见误区及解决方案

在杭州网站设计领域,随着数字经济的快速发展,越来越多的企业意识到互联网的重要性。然而,在实际的网站设计过程中,仍然存在一些常见的误区,这些误区可能会影响用户体验和网站的整体效果。以下是几种普遍存在的误区及其…

国产动漫论坛系统小程序的设计

管理员账户功能包括:系统首页,个人中心,用户管理,动漫分类管理,动漫视频管理,动漫图片管理,动漫文章管理,交流论坛,系统管理 微信端账号功能包括:系统首页&a…

汇编语言 访问CMOS RAM并打印时间(未完)

题目:以"年/月/日 时:分:秒"的格式,显示当前的日期,时间 提示:在此代码的基础上加以改造 assume cs:code code segment start:mov al,9 ;年out 70h,al ;传入9号单元的地址in al,71h ;取9号单元的内容,高4位为十位、低4位为各位mov ah,almov cl,4shr ah,…

1-仙灵之谜(区块链游戏详情介绍)

1-仙灵之谜(区块链游戏详情介绍) 前言(该游戏仅供娱乐)正文 前言(该游戏仅供娱乐) 依稀记得本科那会儿参加了一个区块链实验室,那时每周末大家都会爬山或者抽出一下午讨论区块链以及未来&#x…

< 初等物理 >

SI国际单位制 常见的公制单位 为什么需要单位,是统一衡量的标准 通过国际单位,以及单位的拓展,以及单位的组合,形成一系列新的测量单位 面积 m^2 速率 m/s 米每二次方秒,m / s, delta表示增量, 每秒移动多少米 加…

pdf怎么转变成jpg图片?值得推荐的几种PDF转jpg方法

pdf怎么转变成jpg图片?jpg格式的图像在电子邮件、社交媒体等在线平台上分享非常方便,用户无需担心软件兼容性问题。将PDF内容转换为jpg后,能够有效保留原始文档的视觉布局,使信息更加生动易懂,适合用于演示和展示。同时…

【小沐学GIS】基于ubuntu+three.js的OSM建筑模型显示(node.js、Python)

文章目录 1、简介1.1 ubuntu1.2 node1.3 python1.4 osm1.5 three.js 2、安装ubuntu3、安装node4、安装python结语 1、简介 1.1 ubuntu https://cn.ubuntu.com/download https://ubuntu.com/download Ubuntu是一个以桌面应用为主的Linux发行版操作系统,其名称来自非…

萝卜大杂烩 | 快速掌控seaborn(画图必备)

本文来源公众号“萝卜大杂烩”,仅用于学术分享,侵权删,干货满满。 原文链接:快速掌控seaborn Matplotlib绘制一张美图需要很多参数调整,于是就出现了high-level版的Seaborn,几行代码即可输出美美的图形&am…

超详细的 GitHub 个人主页美化教程

Guthub 个人主页 (官方称呼是 profile)可以展示很多有用的信息,例如添加一个首页被访问次数的计数器,一个被 Star 与 Commit 的概览信息,以及各种技能标签,设备标签等,还可以利用 wakatime 显示…

一文上手SpringSecurity【七】

之前我们在测试的时候,都是使用的字符串充当用户名称和密码,本篇将其换成MySQL数据库. 一、替换为真实的MySQL 1.1 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</v…

一文理解mysql 联合索引和各种SQL语句分析

文章目录 索引图示主键索引二级索引表SQL总结索引图示 主键索引 二级索引 这里如果是联合索引的话,那里面的key就是多个colume的值 表 -- demo.`order` definitionCREATE TABLE `order` (

请求转发和响应重定位

一、请求转发 二、响应重定位 302&#xff1a;服务器的收到请求&#xff0c;但所需要的行为和资源要重定位到其他地方&#xff08;可以是外部和服务器的其他位置&#xff09;时就会像请求者发送302状态码 location响应头&#xff1a;告诉请求者重定位的URL路径

【前端】35道JavaScript进阶问题(1)

来源&#xff1a; javascript-questions/zh-CN/README-zh_CN.md at master lydiahallie/javascript-questions GitHub 记录一些有趣的题。 1 输出是&#xff1f; const shape {radius: 10,diameter() {return this.radius * 2},perimeter: () > 2 * Math.PI * this.rad…

如何通过python+sqlalchemy获得MSsql视图的结构

话不多说 目的:为了对接第三方表视图,需要知道表视图的字段结构,如名称,对应的表字段类型 实现结果如图: 直接上代码: from sqlalchemy import create_engine, MetaData, select, text from web import urlquoteDRIVER "ODBC Driver 18 for SQL Server" INSTANCE…

晓羽知识答题系统V1.8.0

一款适用于企业或组织进行知识答题系统&#xff0c;根据排名进行奖品派发&#xff0c;支持微信小程序和H5方式使用 V1.8.0答题活动支持按题型分配问题数量 答题活动支持按题型分配问题数量&#xff0c;满足指定一定数量的单选题、多选题、判断题&#xff1b; 答题活动支持注…

【数据结构】环形队列(循环队列)学习笔记总结

文章目录 什么是环形队列?基于 C 语言实现环形队列环形队列的应用场合 在计算机科学中&#xff0c;数据结构是组织和存储数据的方式&#xff0c;它对于高效的算法设计至关重要。队列是一种常见的数据结构&#xff0c;遵循 FIFO&#xff08;先进先出&#xff0c;First-In-Firs…