Bootstrap

在状态空间模型(SSM)中,详细的计算步骤和矩阵乘法示例

在状态空间模型(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]

;