본문 바로가기

트렌드 한눈에 보기/산업 트렌드

두 편으로 이해하는 칼만 필터의 역사와 원리 - [원리]

칼만 필터를 이해하기 위해서는 우선 Recurrent filter에 대해 알아야 한다. 한국어로는 재귀 필터라고 한다. 필터를 공부함에 있어 용어가 헷갈리는 순간이 엄청 많은데, 영어로 보아도 한국어로 보아도 헷갈리는 것이 당연하니, 일단은 익숙해지는 것에 초점을 맞추고 넘어가자. 

 

 Recurrent Filter를 알아야 한다면, 그에 상대되는 필터의 종류도 알아야 한다. Batch Filter라는 것이다. 단순히 말해서, Batch filter는 주어진 전체 데이터를 활용하는 필터를 의미하고, Recurrent Filter는 최근에 입력된 데이터만을 활용하는 필터를 의미한다. 평균값을 구한다고 했을 때, Recurrent Filter와 Batch Filter는 아래와 같이 달라진다.

Recurrent filter에서는 직전 평균값에 새로운 데이터를 추가함으로써 간단하게 전체 평균을 구했다는 것을 확인할 수 있다. 그에 반해 Batch filter는 전체 데이터를 필요로 한다. 실시간 데이터 필터링에서는 Recurrent filter의 활용이 필수적이다. 더 빠르고, 간편하게 원하는 계산을 해낼 수 있기 때문이다.

 

 이제 끝났다. Kalman Filter는 아래와 같은 알고리즘으로 이뤄진다.

미안하다. 끝났다는 것은 거짓말이다. 칼만 필터는 이제 시작이다. 위 그림 중 주황색 영역이 칼만 필터의 역할이다. 알고리즘을 구체적으로 설명하기 전에 짚고 넘어가야 할 것들이 있다. 왜 Recurrent filter (재귀 필터)를 서두에서부터 짚고 넘어갔는지, 그리고 용어에 관한 이야기 ('추정' vs. '예측') 이다.

 

1. 왜 Recurrent Filter를 들먹이냐?!

 칼만 필터는 기본적으로, 하나의 추정값을 내뱉는다. 그리고 별도의 측정장치를 이용해 취득한 값을 활용해서 다음 추정값을 내뱉는다. 수식으로 풀어내면 아래와 같다. 

 하나도 Recurrent filter 같지 않다고? 풀어서 쓰면 더 Recurrent filter 같이 생겼다.

 "아니 재귀식이라는 것이 이전 값을 활용한다는 의미이지, 단순히 계수가 1-alpha, alpha의 꼴을 띤다고 되는 것이 아니지 않냐"라는 이의 제기에는 아래 용어 설명을 통해 답변 가능하다.

 

2. 용어 설명: 예측은 뭐고 추정은 뭐냐?!

 둘 다 영어로는 estimation일 테다. 엄밀히 말하자면, 예측은 prediction, 추정은 estimation이 될 테지만, 그렇다고 의미가 더 명확해지는 것은 아니다. 전문적인 용어로는 a priori estimation, a posteriori esimtation이 되는데, 더 헷갈리기만 한다. 그러매 그냥 그나마 익숙한 한국어로다가 "예측"과 "추정"이라는 말을 쓰는 것이다. 익숙해지면 된다.

 

 그래도 수식으로는 차이가 보인다. 예측을 뜻하는 변수에는 위첨자로 -가 붙어있고, 이외의 값들에는 붙어있지 않다. 차이를 보이려면 좀 더 명확한 것으로 표현할 것이지 왜 이렇게 작은 차이로 표현했냐 하면, 그 미묘한 맛을 살리기 위해서이다. 예측치와 추정치의 미묘한 차이를 구분하기 위해 Kalman Filter를 적용하는 것이다. 칼만 필터 알고리즘 영역 (주황색)에서는 1단계에 해당한다. 

 

 기본적으로 예측을 바탕으로 추정을 진행하게 된다. 그 차이는 아래와 같다.

1) 예측

2) 측정값 z를 활용해서 예측을 추정으로 진화

3) 시스템 모델 A를 활용하여 추정을 다음 예측으로 진화

4) ...반복

 

결국 1번 문제제기: 재귀식을 왜 들먹이냐는 질문은 아래와 같은 표현을 통해 해소된다. 

재귀식 맞지?!

 

이제 끝났다. 위 내용을 포함하여 보다 자세하게 기술한 칼만 필터 알고리즘은 아래와 같다.

Recurrent Filter에서는 alpha 값을 조정해가면서, 새로 취득한 데이터에 초점을 둘 것인지, 아니면 바로 이전 계산값에 초점을 둘 것인지 선택할 수 있었다. 하지만, alpha값의 조절은 온전히 알고리즘 설계자의 취향에 따르는 것이었다. "노이즈를 좀 줄였으면 좋겠다! 최근 경향을 무시해도 좋아" 라면 alpha값을 키우고, "노이즈가 좀 섞이더라도 데이터 경향을 명확하게 반영하고 싶다!" 라면 alpha 값을 줄이는 것이다. 

 

 하지만 칼만 필터에서는 이 alpha 값의 선택을 자동으로 해준다. "오차 공분산" 이라고 적힌 P 를 활용하여 Kalman Gain을 계속해서 업데이트 해주는 것이다. 오차 공분산의 뜻은, 추정값이 얼마나 참값에 근접하느냐를 말한다. "참값을 알지도 못하는데 어떻게 오차를 구하냐" 라는 합리적인 문제제기에는 "참값의 분포를 정규분포로 가정한다" 라는 만능 열쇠로 대체할 수 있다. 결과적으로 P가 커지면 추정 오차가 크고, P가 작아지면 오차가 작다는 뜻이다.

 

한 줄 정리하자면, Kalman Filter는 재귀 필터의 일종으로서, alpha값을 자동 조정하는 과정에서 오차 공분산을 활용한다. 이게 칼만 필터의 전부이다라는 것은 사실 새빨간 거짓말이다. 오차 공분산을 계산하는 것이 Kalman Filter의 핵심이다. 이것 없이는 좀 더 고상한 재귀 필터에 지나지 않는다. 칼만 박사가 처음 NASA와 미팅을 할 때, NASA의 연구진들 조차 끙끙 앓았던 부분이 오차 공분산을 모델링 하는 파트였다는 것은 NASA에서 발표한 회고록 (링크) 에도 적혀있다. State-space Modeling이라는 이름으로 따로 명명되어 있는 이 부분은 사실 Kalman Filter 보다도 중요하다. 고전 제어와 현대 제어로 나뉘는 분수령이기 때문이다. 

 

 하지만, 이 부분을 온전히 이해하지 않고도 python이나 MATLAB의 코드를 용처에 맞게 수정하는 것에는 무리가 없다. 내가 Kalman Filter를 사용하고자 하는 IMU에서는 어떤 식으로 오차 공분산 모델링이 적용되는지에 대해서는 더 공부를 해서 정리해보도록 하겠다.

 

두 편으로 이해하는 칼만 필터의 역사와 원리 - [역사] (tistory.com)

 

두 편으로 이해하는 칼만 필터의 역사와 원리 - [역사]

1960년에 개발된 칼만 필터는 현재까지도 다양한 센서값 보정에 사용되는 알고리즘이다... 라는 것은 진부하기 짝이 없는 표현이다. 좀 더 극적으로 상상해보자. NASA의 멤버들이 오토 파일럿 기능

mech-literacy.tistory.com

 

글을 쓰며 김성필 박사의 "칼만 필터는 어렵지 않아" 라는 책을 참고했다. 상당히 쉽게 풀어 쓰여있는 책이라 칼만 필터를 공부하려는 사람들에게 추천하는 바이다.