수치적 불안정성 문제

확장 칼만 필터는 비선형 시스템에서의 상태 추정 문제를 해결하는 강력한 도구이지만, 비선형 함수의 선형화 과정에서 수치적 불안정성이 발생할 수 있다. 수치적 불안정성은 특히 상태 전이 행렬과 관측 행렬의 조건수가 나쁘거나, 행렬 계산 과정에서 계산 오차가 축적되는 경우 발생할 수 있다. 이를 방지하기 위한 최적화 기법이 필요하다.

1. 공분산 행렬의 안정화

공분산 행렬 \mathbf{P}는 예측과 업데이트 단계에서 지속적으로 갱신된다. 그러나 \mathbf{P}가 매우 크거나 매우 작은 값으로 수렴하게 되면 계산의 안정성이 떨어질 수 있다. 이를 방지하기 위해서는 다음과 같은 방법들이 제안된다.

\mathbf{P} \leftarrow \mathbf{P} + \epsilon \mathbf{I}

여기서 \mathbf{I}는 항등 행렬이며, \epsilon은 매우 작은 양의 실수이다.

2. 상태 전이 행렬의 선형화

확장 칼만 필터에서는 상태 전이 함수가 비선형이므로, 이를 선형화하기 위해 테일러 급수를 이용하여 1차 미분 값인 야코비 행렬을 계산한다. 이때, 상태 전이 행렬 \mathbf{F}와 관측 행렬 \mathbf{H}의 계산이 정확해야 한다.

상태 전이 함수 f(\mathbf{x})에 대한 야코비 행렬 \mathbf{F}는 다음과 같이 계산된다.

\mathbf{F} = \frac{\partial f(\mathbf{x})}{\partial \mathbf{x}} \bigg|_{\mathbf{x} = \mathbf{x}_{k-1}}

이 야코비 행렬을 정확하게 계산하지 않으면 필터의 성능이 크게 저하될 수 있으며, 수치적 오차가 축적될 수 있다. 따라서 \mathbf{F}\mathbf{H}의 계산 과정에서 수치적 오류를 최소화하기 위한 기법들이 필요하다.

3. 시간 갱신 단계의 안정화

확장 칼만 필터의 시간 갱신 단계는 상태 변수와 공분산 행렬의 예측을 포함한다. 시간 갱신 단계에서 상태 변수 \mathbf{x}_k와 공분산 행렬 \mathbf{P}_k는 다음과 같이 업데이트된다.

\mathbf{x}_k = f(\mathbf{x}_{k-1}, \mathbf{u}_{k-1})
\mathbf{P}_k = \mathbf{F}_{k-1} \mathbf{P}_{k-1} \mathbf{F}_{k-1}^T + \mathbf{Q}_{k-1}

여기서 \mathbf{u}_{k-1}은 입력, \mathbf{Q}_{k-1}는 시스템 노이즈 공분산 행렬이다. 시간 갱신 과정에서 \mathbf{P}_k가 비정상적으로 커지는 문제를 방지하기 위해 시스템 노이즈 공분산 행렬 \mathbf{Q}_{k-1}의 값을 적절히 설정하는 것이 중요하다.

시스템 노이즈 공분산 \mathbf{Q}_{k-1} 설정

\mathbf{Q}_{k-1}의 설정은 필터 성능에 큰 영향을 미친다. 시스템 노이즈가 과소 설정되면 필터가 실제 시스템 변화를 잘 추적하지 못하게 되고, 과대 설정되면 필터가 불안정해질 수 있다. 일반적으로, \mathbf{Q}_{k-1}는 시스템의 실제 동적 모델에 근거하여 추정된다. 최적화를 위해서는 다음과 같은 기법을 사용할 수 있다.

4. 업데이트 단계의 최적화

확장 칼만 필터의 업데이트 단계는 관측값을 기반으로 상태 변수와 공분산 행렬을 수정하는 과정이다. 업데이트 단계는 다음과 같이 이루어진다.

\mathbf{K}_k = \mathbf{P}_k \mathbf{H}_k^T \left( \mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T + \mathbf{R}_k \right)^{-1}
\mathbf{x}_k = \mathbf{x}_k + \mathbf{K}_k \left( \mathbf{z}_k - h(\mathbf{x}_k) \right)
\mathbf{P}_k = \left( \mathbf{I} - \mathbf{K}_k \mathbf{H}_k \right) \mathbf{P}_k

여기서 \mathbf{K}_k는 칼만 이득, \mathbf{R}_k는 측정 노이즈 공분산 행렬, \mathbf{z}_k는 관측값, h(\mathbf{x}_k)는 상태에서 관측값으로 변환하는 함수이다.

측정 노이즈 공분산 \mathbf{R}_k 설정

업데이트 단계에서 중요한 부분은 측정 노이즈 공분산 행렬 \mathbf{R}_k의 설정이다. \mathbf{R}_k가 과소 설정되면 필터가 관측값을 과신하게 되어 상태 변수의 추정이 불안정해질 수 있다. 반대로, 과대 설정되면 관측값을 무시하게 되어 필터가 느리게 반응할 수 있다.

5. 수치적 오차 감소 기법

확장 칼만 필터의 계산 과정에서 발생할 수 있는 수치적 오차를 최소화하는 것이 필수적이다. 특히, 행렬의 곱셈, 야코비 계산, 역행렬 계산 등에서 오차가 발생할 가능성이 높다. 수치적 안정성을 유지하기 위한 몇 가지 기법을 살펴보자.

1. 행렬 역행렬 계산의 안정화

칼만 이득 \mathbf{K}_k를 계산할 때, 행렬 \left( \mathbf{H}_k \mathbf{P}_k \mathbf{H}_k^T + \mathbf{R}_k \right)^{-1}의 역행렬을 구하는 과정에서 수치적 오차가 발생할 수 있다. 이를 안정화하기 위한 방법은 다음과 같다.

\mathbf{A}^{-1} = (\mathbf{L} \mathbf{U})^{-1} = \mathbf{U}^{-1} \mathbf{L}^{-1}

여기서 \mathbf{L}\mathbf{U}는 각각 하삼각 행렬과 상삼각 행렬이다.

2. 야코비 계산의 정밀도 향상

확장 칼만 필터는 비선형 함수의 선형화에 의존하므로, 야코비 행렬을 정확하게 계산하는 것이 매우 중요하다. 잘못된 야코비 계산은 필터의 성능을 크게 저하시킬 수 있다. 야코비 계산의 정밀도를 높이는 방법은 다음과 같다.

\frac{\partial f(\mathbf{x})}{\partial \mathbf{x}_i} \approx \frac{f(\mathbf{x} + \Delta \mathbf{x}_i) - f(\mathbf{x} - \Delta \mathbf{x}_i)}{2 \Delta \mathbf{x}_i}

여기서 \Delta \mathbf{x}_i\mathbf{x}의 작은 변화량이다.

3. 수치 안정성을 위한 스케일링

상태 변수나 공분산 행렬이 큰 값으로 수렴하면 계산 과정에서 수치적 오차가 커질 수 있다. 이를 방지하기 위해 스케일링 기법을 사용할 수 있다.

\tilde{\mathbf{x}}_k = \mathbf{S}^{-1} \mathbf{x}_k

여기서 \mathbf{S}는 스케일링 행렬이다. 스케일링 후의 연산은 스케일링 행렬을 반영하여 계산된다.

6. 선형화 오차 최소화

확장 칼만 필터는 비선형 시스템을 다루기 때문에 필연적으로 선형화 과정에서 오차가 발생한다. 이 오차는 필터의 성능에 직접적인 영향을 미치므로, 이를 최소화하는 기법들이 필요하다. 선형화 오차를 줄이는 대표적인 방법은 다음과 같다.

1. 비선형 함수의 적절한 근사

확장 칼만 필터는 비선형 함수를 선형화하여 근사값을 구한다. 하지만 경우에 따라 이 근사가 적절하지 않으면 필터의 추정이 부정확해질 수 있다. 이를 해결하기 위한 방법은 비선형 함수의 정확한 근사를 찾는 것이다.

f(\mathbf{x}) \approx f(\mathbf{x}_0) + \nabla f(\mathbf{x}_0) (\mathbf{x} - \mathbf{x}_0) + \frac{1}{2} (\mathbf{x} - \mathbf{x}_0)^T \mathbf{H}_f (\mathbf{x} - \mathbf{x}_0)

여기서 \nabla f(\mathbf{x}_0)는 함수 f(\mathbf{x})의 야코비이고, \mathbf{H}_f는 해시안(Hessian) 행렬이다.

2. 선형화 간격의 최적화

확장 칼만 필터에서 비선형 시스템을 선형화할 때, 시스템의 상태 변화에 따라 일정 주기로 선형화를 수행한다. 이때 선형화 간격이 적절하지 않으면 선형화 오차가 발생할 수 있다.

3. 비선형 시스템의 모델링 개선

비선형 시스템의 모델 자체가 실제 시스템과 다르면 필터 성능이 저하될 수 있다. 이를 방지하기 위해 비선형 시스템을 보다 정확하게 모델링하는 것이 필요하다.

7. 상태 및 공분산의 재설정

확장 칼만 필터는 시간이 지남에 따라 상태 변수나 공분산이 잘못된 값으로 수렴하는 경우가 있을 수 있다. 이러한 상황에서는 필터를 리셋하거나 재설정하는 기법을 사용하여 필터의 성능을 유지할 수 있다.

1. 상태 변수의 재설정

상태 변수가 특정 임계값 이상으로 벗어나는 경우, 필터가 불안정해질 수 있다. 이때 상태 변수를 적절히 재설정하여 필터가 정상적인 상태로 복귀할 수 있도록 한다.

2. 공분산 행렬의 재설정

공분산 행렬 \mathbf{P}_k가 비현실적인 값으로 수렴하는 경우 필터의 성능이 떨어질 수 있다. 이를 방지하기 위해 공분산 행렬을 주기적으로 재설정할 수 있다.

8. 알고리즘 복잡도 감소

확장 칼만 필터의 계산 과정에서 발생하는 연산 복잡도를 줄이는 것도 중요한 최적화 기법이다. 특히, 상태 차원과 센서 데이터의 크기가 증가하면 연산 복잡도가 기하급수적으로 증가할 수 있다. 이를 해결하기 위한 몇 가지 최적화 기법이 있다.

1. 희소 행렬 기법

상태 전이 행렬 \mathbf{F}, 관측 행렬 \mathbf{H}, 공분산 행렬 \mathbf{P} 등이 대규모 상태 공간에서 희소 행렬일 수 있다. 이때 희소 행렬 특성을 활용하여 계산 효율을 높일 수 있다.

\mathbf{F} \mathbf{x} = \sum_{i=1}^n f_i \mathbf{x}_i

여기서 f_i는 0이 아닌 행렬 요소들이다.

2. 차원 축소 기법

상태 변수의 차원이 매우 큰 경우, 필터의 계산량이 크게 증가할 수 있다. 이를 방지하기 위해 차원 축소 기법을 적용할 수 있다.

\mathbf{x}' = \mathbf{W}^T \mathbf{x}

여기서 \mathbf{W}는 주성분 분석을 통해 얻은 변환 행렬이다.

3. 병렬 처리

확장 칼만 필터의 계산 과정은 병렬화가 가능한 연산들이 많이 포함되어 있다. 병렬 처리를 통해 계산 속도를 크게 향상시킬 수 있다.

9. 정규화 기법

확장 칼만 필터의 계산 과정에서 발생할 수 있는 오버플로우나 언더플로우 문제를 방지하기 위해 정규화 기법을 적용할 수 있다. 상태 변수나 공분산 행렬의 값이 지나치게 커지거나 작아지는 경우, 정규화를 통해 안정적인 계산을 유지할 수 있다.

1. 상태 변수의 정규화

상태 변수 \mathbf{x}_k가 매우 큰 값으로 수렴하거나, 매우 작은 값으로 수렴하는 경우 계산 과정에서 오버플로우나 언더플로우가 발생할 수 있다. 이를 방지하기 위해 상태 변수를 정규화하는 기법을 사용할 수 있다.

\mathbf{x}_k^{\text{norm}} = \frac{\mathbf{x}_k}{\|\mathbf{x}_k\|}

여기서 \|\mathbf{x}_k\|는 상태 벡터의 크기이다.

2. 공분산 행렬의 정규화

공분산 행렬 \mathbf{P}_k도 유사하게 정규화할 수 있다. 공분산 행렬의 값이 지나치게 커지면 필터가 불안정해질 수 있으므로, 이를 적절히 정규화하는 것이 필요하다.

\mathbf{P}_k^{\text{norm}} = \frac{\mathbf{P}_k}{\text{tr}(\mathbf{P}_k)}

여기서 \text{tr}(\mathbf{P}_k)는 공분산 행렬의 대각합(Trace)이다.

10. 필터의 초기화 최적화

확장 칼만 필터의 성능은 초기 상태와 공분산 행렬의 설정에 크게 의존한다. 초기 상태와 공분산 행렬을 잘못 설정하면 필터가 수렴하지 않거나 추정 성능이 매우 저하될 수 있다. 이를 해결하기 위한 몇 가지 초기화 최적화 방법이 있다.

1. 상태 변수의 초기화

상태 변수 \mathbf{x}_0는 필터가 추정을 시작하는 초기값이다. 정확한 초기값을 제공하는 것이 매우 중요하다. 초기값이 잘못 설정되면 필터가 수렴하는 데 시간이 오래 걸리거나, 전혀 수렴하지 않을 수 있다.

\mathbf{x}_0 = \underset{\mathbf{x}}{\arg\min} \sum_{i=1}^{n} \left( \mathbf{z}_i - h(\mathbf{x}) \right)^2

2. 공분산 행렬의 초기화

공분산 행렬 \mathbf{P}_0의 초기화는 필터의 불확실성을 나타낸다. 공분산 행렬의 초기값이 너무 크거나 작으면 필터의 추정 성능이 저하될 수 있다. 공분산 행렬의 초기값을 적절하게 설정하는 것이 중요하다.

\mathbf{P}_0 = \text{diag}(p_1^2, p_2^2, \dots, p_n^2)

여기서 p_i^2는 각 상태 변수의 초기 불확실성이다.

3. 시스템 노이즈 공분산 행렬 \mathbf{Q}_0의 초기화

시스템 노이즈 공분산 행렬 \mathbf{Q}_0는 시스템 모델의 불확실성을 나타내며, 필터의 동작에 큰 영향을 미친다. 시스템 노이즈를 잘못 설정하면 필터의 성능이 저하될 수 있다.

\mathbf{Q}_0 = \text{diag}(q_1^2, q_2^2, \dots, q_n^2)

여기서 q_i^2는 각 상태 변수의 시스템 노이즈를 나타낸다.

11. 고급 최적화 기법

확장 칼만 필터의 성능을 더욱 향상시키기 위해 고급 최적화 기법들이 존재한다. 이러한 기법들은 필터가 다루는 상태 공간의 크기나 시스템의 복잡도에 따라 적용할 수 있으며, 필터의 효율성과 정확성을 크게 향상시킬 수 있다.

1. 스무딩 기법

확장 칼만 필터는 실시간으로 상태를 추정하지만, 과거의 데이터에 대한 추정 성능을 향상시키기 위해 스무딩 기법을 사용할 수 있다. 스무딩은 과거 관측 데이터를 사용하여 이전 상태 추정을 개선하는 방법이다.

\mathbf{x}_{k|K} = \mathbf{x}_{k|k} + \mathbf{A}_k \left( \mathbf{x}_{k+1|K} - \mathbf{x}_{k+1|k} \right)

여기서 \mathbf{A}_k는 스무딩 이득이다.

2. 적응형 확장 칼만 필터

적응형 확장 칼만 필터는 필터의 파라미터(예: 시스템 노이즈 \mathbf{Q}_k 및 측정 노이즈 \mathbf{R}_k)를 실시간으로 조정하여 필터 성능을 최적화하는 기법이다. 이를 통해 환경 변화나 시스템 동특성에 따라 필터가 동적으로 변화할 수 있다.

\mathbf{R}_k = \mathbf{R}_{k-1} + \eta \left( \mathbf{z}_k - h(\mathbf{x}_k) \right)

여기서 \eta는 학습률이다.