在状态空间模型(SSM)中,矩阵 A \mathbf{A} A、 B \mathbf{B} B和 X \mathbf{X} X的矩阵乘法用于计算状态更新和输出。以下是详细的计算步骤和矩阵乘法示例。
连续时间状态空间模型
状态空间模型的方程如下:
h
˙
(
t
)
=
A
h
(
t
)
+
B
x
(
t
)
\dot{\mathbf{h}}(t) = \mathbf{A}\mathbf{h}(t) + \mathbf{B}\mathbf{x}(t)
h˙(t)=Ah(t)+Bx(t)
y
(
t
)
=
C
h
(
t
)
+
D
x
(
t
)
\mathbf{y}(t) = \mathbf{C}\mathbf{h}(t) + \mathbf{D}\mathbf{x}(t)
y(t)=Ch(t)+Dx(t)
离散时间状态空间模型
离散化后的状态空间模型方程为:
h
[
t
+
1
]
=
A
‾
h
[
t
]
+
B
‾
x
[
t
]
\mathbf{h}[t+1] = \overline{\mathbf{A}}\mathbf{h}[t] + \overline{\mathbf{B}}\mathbf{x}[t]
h[t+1]=Ah[t]+Bx[t]
y
[
t
]
=
C
h
[
t
]
+
D
x
[
t
]
\mathbf{y}[t] = \mathbf{C}\mathbf{h}[t] + \mathbf{D}\mathbf{x}[t]
y[t]=Ch[t]+Dx[t]
我们用一个具体例子来说明 A \mathbf{A} A、 B \mathbf{B} B和 X \mathbf{X} X的矩阵乘法过程。
示例
假设:
- 批量大小 B = 1 B = 1 B=1
- 序列长度 L = 4 L = 4 L=4
- 输入通道数 D = 3 D = 3 D=3
- 隐藏状态维度 N = 2 N = 2 N=2
输入矩阵 X \mathbf{X} X
X
=
(
1
2
3
4
5
6
7
8
9
10
11
12
)
\mathbf{X} = \begin{pmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \\ 10 & 11 & 12 \end{pmatrix}
X=
147102581136912
形状为
(
L
,
D
)
=
(
4
,
3
)
(L, D) = (4, 3)
(L,D)=(4,3)
参数矩阵 A \mathbf{A} A和 B \mathbf{B} B
A
=
(
0.5
0.1
0.2
0.3
)
\mathbf{A} = \begin{pmatrix} 0.5 & 0.1 \\ 0.2 & 0.3 \end{pmatrix}
A=(0.50.20.10.3)
形状为
(
N
,
N
)
=
(
2
,
2
)
(N, N) = (2, 2)
(N,N)=(2,2)
B
=
(
0.4
0.5
0.6
0.7
0.8
0.9
)
\mathbf{B} = \begin{pmatrix} 0.4 & 0.5 & 0.6 \\ 0.7 & 0.8 & 0.9 \end{pmatrix}
B=(0.40.70.50.80.60.9)
形状为
(
N
,
D
)
=
(
2
,
3
)
(N, D) = (2, 3)
(N,D)=(2,3)
状态初始化 h [ 0 ] \mathbf{h}[0] h[0]
假设初始状态
h
[
0
]
\mathbf{h}[0]
h[0]为:
h
[
0
]
=
(
0
0
)
\mathbf{h}[0] = \begin{pmatrix} 0 \\ 0 \end{pmatrix}
h[0]=(00)
形状为
(
N
,
1
)
=
(
2
,
1
)
(N, 1) = (2, 1)
(N,1)=(2,1)
计算状态更新和输出
第一步:计算 B x [ t ] \mathbf{B} \mathbf{x}[t] Bx[t]
对于每个时间步 t t t,输入 x [ t ] \mathbf{x}[t] x[t]为 X [ t , : ] \mathbf{X}[t, :] X[t,:]:
B x [ 0 ] = ( 0.4 0.5 0.6 0.7 0.8 0.9 ) ( 1 2 3 ) = ( 0.4 × 1 + 0.5 × 2 + 0.6 × 3 0.7 × 1 + 0.8 × 2 + 0.9 × 3 ) = ( 3.2 5.6 ) \mathbf{B} \mathbf{x}[0] = \begin{pmatrix} 0.4 & 0.5 & 0.6 \\ 0.7 & 0.8 & 0.9 \end{pmatrix} \begin{pmatrix} 1 \\ 2 \\ 3 \end{pmatrix} = \begin{pmatrix} 0.4 \times 1 + 0.5 \times 2 + 0.6 \times 3 \\ 0.7 \times 1 + 0.8 \times 2 + 0.9 \times 3 \end{pmatrix} = \begin{pmatrix} 3.2 \\ 5.6 \end{pmatrix} Bx[0]=(0.40.70.50.80.60.9) 123 =(0.4×1+0.5×2+0.6×30.7×1+0.8×2+0.9×3)=(3.25.6)
第二步:更新状态 h [ t + 1 ] \mathbf{h}[t+1] h[t+1]
h [ 1 ] = A ‾ h [ 0 ] + B ‾ x [ 0 ] = ( 0.5 0.1 0.2 0.3 ) ( 0 0 ) + ( 3.2 5.6 ) = ( 3.2 5.6 ) \mathbf{h}[1] = \overline{\mathbf{A}} \mathbf{h}[0] + \overline{\mathbf{B}} \mathbf{x}[0] = \begin{pmatrix} 0.5 & 0.1 \\ 0.2 & 0.3 \end{pmatrix} \begin{pmatrix} 0 \\ 0 \end{pmatrix} + \begin{pmatrix} 3.2 \\ 5.6 \end{pmatrix} = \begin{pmatrix} 3.2 \\ 5.6 \end{pmatrix} h[1]=Ah[0]+Bx[0]=(0.50.20.10.3)(00)+(3.25.6)=(3.25.6)
第三步:计算输出 y [ t ] \mathbf{y}[t] y[t]
假设输出矩阵
C
\mathbf{C}
C为:
C
=
(
1.0
0.5
0.5
1.0
)
\mathbf{C} = \begin{pmatrix} 1.0 & 0.5 \\ 0.5 & 1.0 \end{pmatrix}
C=(1.00.50.51.0)
形状为
(
D
,
N
)
=
(
3
,
2
)
(D, N) = (3, 2)
(D,N)=(3,2)
y [ 0 ] = C h [ 0 ] + D x [ 0 ] = ( 1.0 0.5 0.5 1.0 ) ( 3.2 5.6 ) = ( 1.0 × 3.2 + 0.5 × 5.6 0.5 × 3.2 + 1.0 × 5.6 ) = ( 6.0 7.2 ) \mathbf{y}[0] = \mathbf{C} \mathbf{h}[0] + \mathbf{D} \mathbf{x}[0] = \begin{pmatrix} 1.0 & 0.5 \\ 0.5 & 1.0 \end{pmatrix} \begin{pmatrix} 3.2 \\ 5.6 \end{pmatrix} = \begin{pmatrix} 1.0 \times 3.2 + 0.5 \times 5.6 \\ 0.5 \times 3.2 + 1.0 \times 5.6 \end{pmatrix} = \begin{pmatrix} 6.0 \\ 7.2 \end{pmatrix} y[0]=Ch[0]+Dx[0]=(1.00.50.51.0)(3.25.6)=(1.0×3.2+0.5×5.60.5×3.2+1.0×5.6)=(6.07.2)
完整状态更新和输出计算
我们将对每个时间步执行上述步骤。为了简洁,省略后续时间步的详细计算,但步骤类似。通过这种方式,我们可以计算得到完整的输出序列。
总结
通过这个具体的例子,我们展示了如何进行矩阵乘法以计算状态更新和输出。在状态空间模型中, A \mathbf{A} A和 B \mathbf{B} B用于状态更新,而 C \mathbf{C} C用于计算输出。每个时间步的输入 x [ t ] \mathbf{x}[t] x[t]与 B \mathbf{B} B相乘,加上前一个时间步的状态 h [ t ] \mathbf{h}[t] h[t]与 A \mathbf{A} A相乘,得到新的状态 h [ t + 1 ] \mathbf{h}[t+1] h[t+1]。最终,通过与 C \mathbf{C} C相乘,得到输出 y [ t ] \mathbf{y}[t] y[t]。