6.139 예측 단계와 갱신 단계의 행렬 연산

6.139 예측 단계와 갱신 단계의 행렬 연산

1. 개요

칼만 필터의 핵심은 예측(prediction)과 갱신(update)이라는 두 단계의 반복이다. 각 단계는 구체적인 행렬 연산으로 구성되며, 이들 연산의 수학적 의미와 수치적 특성을 정확히 이해하는 것이 효율적이고 안정적인 구현의 핵심이다. 본 절에서는 예측 단계와 갱신 단계의 행렬 연산을 상세히 분석한다.

2. 예측 단계의 행렬 연산

2.1 상태 예측

시각 k에서의 사후 추정값 \hat{\mathbf{x}}_{k\vert k}로부터 시각 k+1에서의 사전 추정값을 계산한다.

\hat{\mathbf{x}}_{k+1\vert k} = \mathbf{F}_k \hat{\mathbf{x}}_{k\vert k} + \mathbf{B}_k \mathbf{u}_k

이 연산은 행렬-벡터 곱 \mathbf{F}_k \hat{\mathbf{x}}_{k\vert k} \in \mathbb{R}^n으로, 계산 복잡도는 O(n^2)이다. \mathbf{F}_k가 희소(sparse)하면 복잡도는 비영 원소의 수에 비례하여 감소한다.

로봇공학에서 자주 등장하는 등속도 운동 모델(constant velocity model)의 경우, 상태 벡터 \mathbf{x} = [p, v]^T(위치, 속도)에 대하여

\mathbf{F} = \begin{bmatrix} 1 & \Delta t \\ 0 & 1 \end{bmatrix}

이 행렬은 상삼각 행렬이며, 행렬-벡터 곱은 O(n)의 복잡도를 가진다.

2.2 공분산 예측

\mathbf{P}_{k+1\vert k} = \mathbf{F}_k \mathbf{P}_{k\vert k} \mathbf{F}_k^T + \mathbf{Q}_k

이 연산은 칼만 필터에서 가장 계산 비용이 높은 부분 중 하나이다. 단계별 분석은 다음과 같다.

단계 1: 임시 행렬 \mathbf{M} = \mathbf{F}_k \mathbf{P}_{k\vert k} 계산

  • \mathbf{F}_k \in \mathbb{R}^{n \times n}, \mathbf{P}_{k\vert k} \in \mathbb{R}^{n \times n}
  • 복잡도: O(n^3)

단계 2: \mathbf{M}\mathbf{F}_k^T 계산

  • 복잡도: O(n^3)

단계 3: \mathbf{Q}_k 덧셈

  • 복잡도: O(n^2)

총 복잡도는 O(n^3)이며, \mathbf{P}_{k\vert k}가 대칭이므로 대칭 행렬의 성질을 이용하면 연산량을 약 절반으로 줄일 수 있다. \mathbf{P}_{k\vert k}의 대칭성은 합동 변환 \mathbf{F}_k \mathbf{P}_{k\vert k} \mathbf{F}_k^T에 의하여 보존되고, 대칭 행렬인 \mathbf{Q}_k를 더하므로 \mathbf{P}_{k+1\vert k}도 대칭이다.

2.3 양의 반정치성 보존

\mathbf{P}_{k\vert k} \succeq 0이면 임의의 벡터 \mathbf{v}에 대하여

\mathbf{v}^T \mathbf{F}_k \mathbf{P}_{k\vert k} \mathbf{F}_k^T \mathbf{v} = (\mathbf{F}_k^T \mathbf{v})^T \mathbf{P}_{k\vert k} (\mathbf{F}_k^T \mathbf{v}) \geq 0

이므로 \mathbf{F}_k \mathbf{P}_{k\vert k} \mathbf{F}_k^T \succeq 0이다. \mathbf{Q}_k \succeq 0이므로

\mathbf{P}_{k+1\vert k} = \mathbf{F}_k \mathbf{P}_{k\vert k} \mathbf{F}_k^T + \mathbf{Q}_k \succeq 0

이다. 이론적으로 양의 반정치성이 보존되지만, 유한 정밀도 부동소수점 연산에서는 반올림 오차가 누적되어 대칭성이나 양의 반정치성이 훼손될 수 있다.

3. 갱신 단계의 행렬 연산

3.1 혁신 계산

\tilde{\mathbf{z}}_k = \mathbf{z}_k - \mathbf{H}_k \hat{\mathbf{x}}_{k\vert k-1}

혁신(innovation) \tilde{\mathbf{z}}_k \in \mathbb{R}^m은 실제 관측과 예측 관측의 차이이다. 이 연산은 행렬-벡터 곱 \mathbf{H}_k \hat{\mathbf{x}}_{k\vert k-1}으로 O(mn)의 복잡도를 가진다.

3.2 혁신 공분산 계산

\mathbf{S}_k = \mathbf{H}_k \mathbf{P}_{k\vert k-1} \mathbf{H}_k^T + \mathbf{R}_k

단계별 분석은 다음과 같다.

단계 1: \mathbf{L} = \mathbf{H}_k \mathbf{P}_{k\vert k-1} 계산, 복잡도 O(mn^2)

단계 2: \mathbf{L}\mathbf{H}_k^T 계산, 복잡도 O(m^2 n)

단계 3: \mathbf{R}_k 덧셈, 복잡도 O(m^2)

\mathbf{S}_k \in \mathbb{R}^{m \times m}은 대칭 양의 정치(positive definite) 행렬이다. \mathbf{R}_k \succ 0이므로 \mathbf{S}_k \succ 0이 보장된다.

3.3 칼만 이득 계산

\mathbf{K}_k = \mathbf{P}_{k\vert k-1} \mathbf{H}_k^T \mathbf{S}_k^{-1}

\mathbf{S}_k^{-1}을 명시적으로 계산하는 대신, 선형 시스템 \mathbf{S}_k \mathbf{X} = \mathbf{H}_k \mathbf{P}_{k\vert k-1}^T를 풀어 \mathbf{K}_k = \mathbf{X}^T를 구하는 것이 수치적으로 더 안정적이다. 구체적으로는 다음과 같이 구현한다.

촐레스키 분해: \mathbf{S}_k = \mathbf{L}_S \mathbf{L}_S^T (복잡도 O(m^3/3))

전방 대입: \mathbf{L}_S \mathbf{Y} = (\mathbf{P}_{k\vert k-1} \mathbf{H}_k^T)^T (복잡도 O(m^2 n))

후방 대입: \mathbf{L}_S^T \mathbf{X} = \mathbf{Y} (복잡도 O(m^2 n))

전체 복잡도는 O(m^3 + m^2 n)이다.

3.4 상태 갱신

\hat{\mathbf{x}}_{k\vert k} = \hat{\mathbf{x}}_{k\vert k-1} + \mathbf{K}_k \tilde{\mathbf{z}}_k

행렬-벡터 곱 \mathbf{K}_k \tilde{\mathbf{z}}_k의 복잡도는 O(nm)이다.

3.5 공분산 갱신

표준 형태:

\mathbf{P}_{k\vert k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k\vert k-1}

이 연산에서 \mathbf{K}_k \mathbf{H}_k \in \mathbb{R}^{n \times n}의 계산은 O(n^2 m)이고, (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)\mathbf{P}_{k\vert k-1}의 계산은 O(n^3)이다.

수치 안정성을 위한 요셉 형태:

\mathbf{P}_{k\vert k} = (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k) \mathbf{P}_{k\vert k-1} (\mathbf{I} - \mathbf{K}_k \mathbf{H}_k)^T + \mathbf{K}_k \mathbf{R}_k \mathbf{K}_k^T

계산 비용은 약 2배 증가하지만, 대칭 양의 반정치성이 구조적으로 보장된다.

4. 연산 복잡도 요약

각 단계의 행렬 연산별 복잡도를 정리하면 다음과 같다.

연산행렬 크기복잡도비고
상태 예측 \mathbf{F}\hat{\mathbf{x}}n \times 1O(n^2)행렬-벡터 곱
공분산 예측 \mathbf{F}\mathbf{P}\mathbf{F}^T + \mathbf{Q}n \times nO(n^3)합동 변환
혁신 \mathbf{z} - \mathbf{H}\hat{\mathbf{x}}m \times 1O(mn)행렬-벡터 곱
혁신 공분산 \mathbf{H}\mathbf{P}\mathbf{H}^T + \mathbf{R}m \times mO(m n^2)합동 변환
촐레스키 분해 \mathbf{S} = \mathbf{L}_S \mathbf{L}_S^Tm \times mO(m^3/3)삼각 분해
칼만 이득 \mathbf{K}n \times mO(m^2 n)삼각 대입
상태 갱신 \hat{\mathbf{x}} + \mathbf{K}\tilde{\mathbf{z}}n \times 1O(nm)행렬-벡터 곱
공분산 갱신 (표준)n \times nO(n^2 m + n^3)행렬 곱

전체 반복당 복잡도에서 지배적인 항은 O(n^3)(공분산 예측)과 O(mn^2)(혁신 공분산)이다. 관측 차원 m이 상태 차원 n보다 작은 경우(m \ll n), 공분산 예측이 병목이 된다.

5. 효율적 구현 기법

5.1 대칭 행렬의 활용

\mathbf{P}가 대칭이므로, 상삼각(또는 하삼각) 부분만 저장하고 갱신하면 메모리와 계산량을 줄일 수 있다. 대칭 행렬-행렬 곱(SYMM) 루틴을 사용하면 일반 행렬 곱(GEMM)에 비하여 연산량이 약 절반이다.

5.2 희소 행렬 활용

대규모 SLAM 문제에서 상태 벡터의 차원 n이 수백에서 수천에 이를 수 있다. 이 경우 \mathbf{F}_k\mathbf{H}_k가 매우 희소한 경우가 많다. 희소 행렬 연산을 이용하면 공분산 예측과 갱신의 복잡도를 크게 줄일 수 있다.

예를 들어, 랜드마크 j에 대한 관측만 존재하는 경우, \mathbf{H}_k의 비영 블록은 로봇 상태와 랜드마크 j에 해당하는 열에만 존재한다. 이 경우 혁신 공분산 계산에서 \mathbf{P}의 해당 부분 행렬만 추출하여 사용하면 된다.

\mathbf{S}_k = \mathbf{H}_{k,r} \mathbf{P}_{rr} \mathbf{H}_{k,r}^T + \mathbf{H}_{k,j} \mathbf{P}_{jj} \mathbf{H}_{k,j}^T + \mathbf{H}_{k,r} \mathbf{P}_{rj} \mathbf{H}_{k,j}^T + \mathbf{H}_{k,j} \mathbf{P}_{jr} \mathbf{H}_{k,r}^T + \mathbf{R}_k

여기서 하첨자 r은 로봇 상태, j는 랜드마크를 나타낸다.

5.3 순차 갱신(Sequential Update)

다수의 관측을 동시에 처리하는 대신, 각 관측을 하나씩 순차적으로 갱신할 수 있다. 스칼라 관측(m = 1)에 대한 갱신에서는 \mathbf{S}_k가 스칼라가 되므로 역행렬 계산이 단순한 나눗셈이 된다.

\mathbf{K}_k = \frac{\mathbf{P}_{k\vert k-1} \mathbf{h}_k}{s_k}, \quad s_k = \mathbf{h}_k^T \mathbf{P}_{k\vert k-1} \mathbf{h}_k + r_k

여기서 \mathbf{h}_k\mathbf{H}_k의 행 벡터이고, r_k는 해당 관측의 잡음 분산이다. 이 방법의 복잡도는 관측당 O(n^2)이므로, m개의 관측에 대하여 총 O(mn^2)이 된다. 이는 m < n일 때 일괄 갱신(O(n^3))보다 효율적이다.

5.4 제곱근 필터의 예측 및 갱신

\mathbf{P} = \mathbf{L}\mathbf{L}^T로 분해하여 전파하는 제곱근 필터에서, 갱신 단계는 다음과 같이 수행한다.

  1. 결합 행렬 구성:

\begin{bmatrix} \mathbf{L}_{\mathbf{R}_k} & \mathbf{H}_k \mathbf{L}_{k\vert k-1} \\ \mathbf{0} & \mathbf{L}_{k\vert k-1} \end{bmatrix}

  1. 직교 삼각화(QR 분해 또는 기븐스 회전) 적용:

\mathbf{T} \begin{bmatrix} \mathbf{L}_{\mathbf{R}_k} & \mathbf{H}_k \mathbf{L}_{k\vert k-1} \\ \mathbf{0} & \mathbf{L}_{k\vert k-1} \end{bmatrix} = \begin{bmatrix} \mathbf{L}_{\mathbf{S}_k} & \bar{\mathbf{K}}_k \\ \mathbf{0} & \mathbf{L}_{k\vert k} \end{bmatrix}

여기서 \mathbf{T}는 직교 행렬, \mathbf{L}_{\mathbf{S}_k}\mathbf{S}_k의 촐레스키 인수, \mathbf{L}_{k\vert k}는 갱신된 공분산의 촐레스키 인수이다.

이 방법의 장점은 직교 변환이 수치적으로 안정적이고, 양의 정치성이 구조적으로 보장된다는 것이다.

6. 수치 예제: 2차원 위치 추정

상태 벡터 \mathbf{x} = [p_x, p_y, v_x, v_y]^T \in \mathbb{R}^4인 2차원 등속도 모델에서의 행렬 연산을 구체적으로 살펴본다.

\mathbf{F} = \begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0 & 1 & 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}, \quad \mathbf{H} = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \end{bmatrix}

\mathbf{F}는 상삼각 행렬이므로 \mathbf{F}\hat{\mathbf{x}}의 계산에서 곱셈 횟수가 6회(4^2 = 16회 대비)로 감소한다. \mathbf{H}\mathbf{P}의 좌상단 2 \times 2 블록만 추출하는 선택 행렬이므로, \mathbf{H}\mathbf{P}\mathbf{H}^T\mathbf{P}(1:2, 1:2) 부분 행렬에 해당한다.

\mathbf{S} = \begin{bmatrix} P_{11} & P_{12} \\ P_{21} & P_{22} \end{bmatrix} + \mathbf{R}

이 경우 2 \times 2 행렬의 역행렬은 해석적으로 계산할 수 있다.

\mathbf{S}^{-1} = \frac{1}{S_{11}S_{22} - S_{12}S_{21}} \begin{bmatrix} S_{22} & -S_{12} \\ -S_{21} & S_{11} \end{bmatrix}

7. 참고 문헌

  • Kalman, R. E. (1960). A new approach to linear filtering and prediction problems. Journal of Basic Engineering, 82(1), 35–45.
  • Simon, D. (2006). Optimal State Estimation: Kalman, H Infinity, and Nonlinear Approaches. Wiley.
  • Bierman, G. J. (1977). Factorization Methods for Discrete Sequential Estimation. Academic Press.
  • Golub, G. H., & Van Loan, C. F. (2013). Matrix Computations (4th ed.). Johns Hopkins University Press.
  • Thrun, S., Burgard, W., & Fox, D. (2005). Probabilistic Robotics. MIT Press.

v 0.1