那么状态方程和输出方程就变成如下的形式,为了简化,现在的
h
k
h_k
hk表示当前的状态,
h
(
k
−
1
)
h_(k-1)
h(k−1)表示之前的状态,
y
k
y_k
yk表示当前的输出,
x
k
x_k
xk表示当前的输入
再看卷积结构表示,如下:
如果我们递归的将
h
t
h_t
ht代入,并且展开可以得到一个
h
t
h_t
ht的通用表达式,将这个表达式代回
y
t
y_t
yt可以得到
y
t
y_t
yt的通用表达式,而
y
t
y_t
yt的表达式可以看作两个矩阵相乘,其中一个矩阵为输入矩阵(移动矩阵),另一个矩阵为固定矩阵(由于A、B、C矩阵是固定的,所以
K
‾
\overline{K}
K也为固定矩阵),这个形式非常类似CNN中的卷积操作(但是由于mamba是处理文本的,所以只需要一维矩阵),而卷积可以并行,所以它也可以并行执行
Mamba使用了参数化矩阵,来让A、B、C矩阵能根据输入来进行对应的变化。在原始的S4模型中,在训练完成后,对于每个输入只有一个
A
‾
、
B
‾
\overline{A}、\overline{B}
A、B矩阵,但是在Mamba模型中,每个batch中的每个序列的每一个输入元素都有一个
A
‾
、
B
‾
\overline{A}、\overline{B}
A、B矩阵,如下:
重新定义一种“加”运算,在这个运算中,是可以并行的,那么假设A矩阵是独立的,跟运算顺序是无关的,那么
y
2
y_2
y2就可以表示为,如下:
由上图可知,由于矩阵A是独立的,且B、C矩阵式通过x得到的,那么
X
0
X_0
X0 “加”
X
1
X_1
X1 取第二项就是
H
1
H^1
H1,
X
0
X_0
X0 “加”
X
1
X_1
X1 的结果再 “加”
X
2
X_2
X2 取第二项就是
H
2
H^2
H2,乘以C矩阵就是
y
2
y_2
y2
对于计算
y
3
y_3
y3,那么我们可以写出
X
0
、
X
1
、
X
2
、
X
3
X_0、X_1、X_2、X_3
X0、X1、X2、X3的新表示形式,然后分别计算第一层的结果,即
X
0
X_0
X0 “加”
X
1
X_1
X1 和
X
2
X_2
X2 “加”
X
3
X_3
X3 得到两个结果,再将这两个结果做"加"运算,将得到的结果取第二项,乘以C矩阵,就是
y
3
y_3
y3的结果,如下: