선형칼만필터 (2)

칼만필터는 예측단계와 추정(업데이트) 두개의 시퀀스를 가지는 필터이다.
그런데 사실 디테일하게 이야기 하자면 할게 좀더 남았다.

  1. 대충 이전의 데이터를 가지고 다음에 들어올 입력값을 예상해놓는다 (예측단계)
    1.5 예측값의 분산의 계산 (공분간 계산단계)
  2. 입력이 들어왔다. (관측)
  3. 입력데이터와 예측데이터를 비교해서 최적의 출력값을 추정 (업데이트 단계)

이번 글에서는

1.5 예측값의 분산의 계산 (공분간 계산단계)

에 대해서 이야기해 보겠다.

(공)분산이 뭔가요 먹는건가요?

보통 분산하면 뭐가 떠오르는가 ?
더쉽게 말하자면, 데이터의 산만한 정도이다.
어떤 정밀한 기계도 측정/예측에는 반드시 오차가 따른다.
이것은 왜냐하면 우리는 진치 (True Value) 를 알 수 없고, 불확실한 측정에 의해서 진짜값을 추정할 수 밖에 없는것이다.
즉 어떠한 노이즈가 발생한다.

주의하라
지금 우리는 측정이 아니라 모델에 의한 예측을 하는 단계이다.
칼만필터는 이것을 프로세스에 의한 노이즈 w (Process noise) 라고 하고 모델안에 집어넣는다.

왜 측정 오차가 아닌가요?

지금은 측정에 관한 노이즈가 아니라 예측치에 관한 노이즈를 생각하고 있기떄문에 프로세스 노이즈이다.
프로세스 노이즈란, 간단히 말해서 우리가 만든 예측모델의 분산이다.
만약 우리가 쓰고있는 CV 모델이, 그러니까 일정 속도로 계속 움직일 것이다라는 예측이 빗나가고 많은 오차를 포함한다면, 이 w 는 큰 값을 가질것이다.

x_k = \Phi_{k-1}x_{k-1} + w_{k-1}

이러면 의문이 생길것이다.

아니 우리가 그런 노이즈를 식안에 넣을 수 있으면 진작에 넣었지… 모델의 정확도를 모르니까 개고생하는거 아니야..

라고생각할 수있다.
그래서 칼만씨는 이 노이즈 w 를 가우시안 분포를 따른다고 가정을 했다.
Q 를 방금 이야기한 프로세스 노이즈가 따르는 분산이라고 하겠다.
이걸 식으로 쓰면

w_k \sim \mathcal{N}(0,Q_k)

\mathcal{N} 요거는 가우시안을 따른다 라는 의미이고
(평균값,분산값) 으로 표현을 한다.

근데 여기서 지금까지 이야기한 분산을 공분산이라고 하는 경우도 있다.
공분산은, 아까 정의한 상태공간벡터의 분산행렬이다.
여기서는 데이터의 산만한정도를 표현하는 행렬이라고만 알아두자.
먼저 피부로 느껴야한다.

그래서 분산은 어떻게 계산하는데요?

지금 여러분은 그것보다 분산이 3개 있다는 사실을 깨달아야한다.

???

분산의 종류는 3가지다 여기서 적어놓겠다.

  1. process noise (co)variance Q
  2. Measurement noise (co)variance R
  3. State (co)variance P

2 에대해서는 나중에 설명하겠다.
제일 중요한것은 P 이다.

P 가 뭔데요

우리가 추정하는것이 무엇이였는지 생각해보자.
진치, True value 를 알고싶은것이다.
그걸워해서 위에서 여러가지 모델의 식을 세워왔다.

즉, P 는 카르만 필터의 최종 추정치의 분산을 나타낸다.
즉, 우리는 P 가 최소가 되도록 우리들의 추정치와 예측치를 사용해서 최적의 추정값을 찾지 않으면 안된다.

그래서 (공)분산은 어떻게 계산하는데요?

먼저 다음의 예를 생각해보자
당신은 회사를 다니는 결혼한 40대 회사원이다.
당신의 회사에는 예전부터 신경쓰이던 젊은 남녀 두 회사원이 있다.
당신은 그 둘이 혹시 사귀고 있는 것이 아닌지 예전부터 의심을 하고 있었다. 하지만 물증이 없었다.
어느날 당신은 혼자서 영화 조커를 보러 시내에 나갔다.

영화가 끝난후, 당신은 계속 의심을 하고 있었던 그 둘이 같이 시내를 돌아다니고 있는것을 발견했다.
그들이 사귀고 있을 확률을 그들이 같이 시내에 있었다는것을 관측하기 전과 후로 나누었을때 같을까?

아니 남녀 둘이 어? 시내에서 ? 어 같이 어? 빼박이지

10에 10은 다 이렇게 생각 할 것이다.
이 이야기로부터 알 수 있는것은 관측이라는 행동은, 확률에 변화를 줄 수 있다.
베이즈 정리가 바로 이 이야기의 주인공인데, 예컨데..
관측 전과 후는 (분산) 확률분포에 영향을 준다는 이야기다.

  • 수식을 좀 바꾸겠다.

여기서는 우리들이 예측한 값을 중심으로 P 만큼 분산을 가지는 모델을 상정하고있다.
예측치는 \hat{x}_k 라고 가정하겠다.

지금까지의 정의와 생긴게 다른데?

위에 뭐가 씌워져있는것은 기분탓이 아니라, 실제 진치 x_k 와 우리가 추정 혹은 예상한 값과의 차이를 나타내기위해서 머리에 모자를 씌웠다.
그러니까 위에 뭐가있는것은 진치가 아니라 우리들의 예측/추정 한 값, 혹은 계측한 값을 나타낸다.

  • 먼저 기대치에 대해서 생각을 해보자

기대치가 뭐임

기대치란, 동전을 많이 던졌을때 평균값을 이야기한다.
가우스 분포에서는 최빈값, 중앙값이 또한 기대치가 되겠다.

  • 오차에 대해서 생각을 해보자 여기서 오차란 기대치 (예측치) 와 진치 (Treu value) 와의 오차이다.
e = Expected(Measured) value  - Truevalue

아니 진치를 모르는데 오차를 어떻게 계산함?

이런 걱정은 잠시 집어 넣고 안다고 생각하고 돌리면 다음과 같은 식이 나온다.
진치와 기대치의 오차의 식이다.

\hat{x}_k(-) - x_k = \Phi_{k-1}(\hat{x}_{k-1}(+)-x_{k-1})+w_{k-1}

??? 플러스는 뭐고 마이너스는 뭐임?

자 여기서부터 중요하다. 처음에 시작할때, 칼만 필터에는 크게 두가지의 시퀀스가 있다고 했다.
감이 올지는 모르겠지만, 마이너스가 붙는 \hat{x}_k(-) 는 어디까지나 예측에 불과하다는것이며, 뭔가 추가를 해야할 값, 즉 보정이 들어가기전단계라는 의미가 된다.
즉, 예측에서 끝이 나는게 아니고 \hat{x}_k(+) 까지 가야 우리가 납득할만한 추정치가 된다는 뜻이다.
다시말해서, 시간의 개념을 적용한다는 의미이며, 베이즈에서의 사전/사후 추정과 일치하는 부분이다.

  • 대망의 공분산을 계산하는 식이다.

통계에서 분산을 정의하는 방식을 떠올려볼 필요가있다.
통계학에서는 분산을 오차의 제곱의 기댓값으로 정의한다.
식으로쓰면 다음과 같다.

Var[X] = E[ee^\text{T}]

X 는 데이터들이고 e=X-\mu 를 의미한다.
그리고 다음은 실제 공분산을 계산하는 식이다.

P_k = \mathbb{E}[(\hat{x}_k(-) - x_k)(\hat{x}_k(-) - x_k)^\text{T}]
=\mathbb{E}[\Phi_{k-1}(\hat{x}_{k-1}(+)-x_{k-1})(\hat{x}_{k-1}(+)-x_{k-1})^\text{T}\Phi_{k-1}^\text{T} + w_{k-1}w_{k-1}^\text{T}]
=\Phi_{k-1}P_{k-1}\Phi_{k-1}^\text{T}+Q_{k-1}

참고로, 노이즈들자체가 오차의 의미이기때문에 그대로 분산이 되는것도 알아두자.

\mathbb{E}[w_{k-1}w_{k-1}^\text{T} =Q_{k-1}]

위에 다 나왔던 식이다. 한 10분만 곰곰히 생각해보자.
전치할때는 좌우가 바뀌며, 상수로 생각하면 전치행렬은 그냥 곱셉이다.
또한, x 는 독립분포를 따른다.
즉, 오차의 분산행렬을 계산할때에 공분산은 0 이된다.

어느정도 고민했으면, 수식따위는 잊어버려라, 나중에는 잊고싶어도 잊을수없다.
중요한건 공분산 행렬이 어떻게 계산되는가이다.
쓸데없는곳에 힘빼지 말자.
우리들은 P_kP_{k-1} 에대한 꼬리가 꼬리를 무는 행렬인것을 알 수있다.
\Phi 에대해서는 우리는 고정으로 생각할거니까 어짜피 상수같은거다.
그러면 Q 값으로 P_{k-1} 를 새로운 P_k 값으로 갱신을 하고있는것을 알 수있다.
즉, 모델 \Phi를 알고 있고, 바로전의 우리들의 추정치의 분산을 알고있으며 P_{k-1} 바로전의 모델예측치의 분산 Q_{k-1} 를 알고있으면, 예측치의 분산 을 알 수있다는 것이다.

? 예측치의 분산? 이라구요?

그렇다 우리들은 예측치의 분산을 구한거다.

따라서 위의 식은 엄밀히 말하자면 P_k(-) 가 되겠다.
속여서 미안하다. 그래도 2/6 왔다.


© 2017. All rights reserved.

Powered by Hydejack v7.5.2