ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [알고리즘] 칼만 필터
    Research/Machine Learning 2020. 11. 10. 21:34

    칼만 필터란

    칼만필터는 측정치를 바탕으로 상태를 추정하는 재귀 필터이다.

    즉, 측정치 (대표적으로 센서 데이터; 레이더, GPS, 등)을 입력 받아 물체의 상태 (대표적으로 역학 위치; position, head angle, 등)을 추정하는 재귀 필터(재귀적; 반복적; 이전 data를 사용하여)로 해석할 수 있다.

     

    칼만 필터는 배경 조건은 1)선형성, 2)변수의 독립성 등이 있다.

    1) 선형성은 구하고자하는 상태값과 측정값이 선형적이여야 한다는 것이다.

    이는 후에 칼만 필터의 알고리즘을 보면 상태값을 측정값으로 혹은 측정값을 상태값으로 변환하는 과정에서 행렬의 곱으로 구성되기에 이와 같은 조건이 붙는다.

    2) 독립성은 초기 변수들 및 잡음들이 독립적이여야 한다는 것이다.

    칼만 필터는 가우시안 분포를 기반으로 알고리즘이 설계되었는데, 이때 잡음이나 타 변수들이 다른 변수에 종속되어 움직일 경우 이 가정이 깨지기 때문이다.

     

    이러한 칼만 필터는 특정 시점에서 상태 정보가 없는 경우 예측값을 제공해주며, 상태값 혹은 측정값에서 발생하는 잡음들의 영향력을 낮추어 보다 정확한 정보를 제공해 줄 수 있다.

     

    칼만 필터의 구조

    칼만 필터는 예측 (prediction)과 보정(update) 단계로 구성된다.

    예측 단계에서는 이전 정보들을 사용하여 현 시점의 정보를 예측한다.

    보정 단계에서는 예측 정보와 실제 측정된 정보를 비교하여 현 시점의 정보를 보정한다.

    어떠한 정보인지에 대한 설명을 생략한 것은 문제에 따라 측정값이 될 수도, 상태값이 될 수도 있기에 유도리 있게 적용해야한다. (실제로 다양한 정리글을 보면 칼만 필터에 대한 식이 조금씩 다르다.)

     

    예측 단계는 다음과 같이 이루어진다.

    위키 수식

    첫 수식은 현상태 예측값 x는 이전 상태(와 연속 정보 변환 행렬 F를 곱한 것)와 변환값 u(와 변환값to상태값 행렬 B)를 더하여 구한다.

    다음 수식은 이전 공분산(변환 행렬)과 변환값에 대한 공분산 행렬 Q를 더해 예측에 대한 공분산을 구한다.

     

    보정단계는 다음과 같다.

    위키 수식

    첫 식은 실제 측정값 z와 추정한 상태 값(상태to측정 행렬)의 차분을 구한다.

    둘째 식은 예측에 대한 공분산과 측정값에 대한 공분산을 더해 위에서 구한 차분에 대한 공분산을 구한다.

    셋째식은 예측에 대한 분산과  차분(예측 - 측정)에 대한 분산을 나눠 kalman gain을 구한다.

    이 K를 넷째, 다섯째에 사용하여 현 시점의 상태값과 공분산 행렬을 보정한다.

     

    결국, 칼만 필터는 이전 상태값과 변환 정도를 가지고 예측한 상태값을 측정값을 사용하여 보정하는 알고리즘이다.

    이때 예측에 대한 분산과 보정해야할 값(차분)에 대한 분산을 비교하여 어떤 정보가 더 신뢰성이 있는지를, 어느 정도 보정을 할지 (kalman gain)을 결정하는 알고리즘이다.

     

    확장 칼만 필터

    앞서 설명한 바와 같이 칼만 필터내 수식들은 변환 행렬들을 사용한다.

    이러한 점때문에 칼만 필터는 비선형적 시스템에 대한 문제를 잘 풀지 못한다.

    확장 칼만 필터는 칼만 필터내 선형성을 완화시켜 비선형적 문제도 풀 수 있도록 개선한 알고리즘이다.

    위키 수식 (예측 단계)
    위키 수식 (보정 단계)

    위 수식들을 보면 알 수 있듯이 앞서 설명한 칼만필터와 거의 유사한 구조를 가지고 있다.

    단지, 변환 행렬 (선형성)을 변환 함수 (비선형)으로 바꾸어 알고리즘을 구성한다.

    때문에 앞서 말한 선형성이 완화되어 비선형 시스템에도 적용이 가능하다.

     

    마무리

    저번 글을 쓰고 너무 오래 글을 안썼네요... 반성해야겠습니다.

    사실 칼만필터를 구현할때 거의 매번 공분산이라던지 예측값, 측정값을 뚜렷하게 정의할 수 있는 문제가 거의 없었습니다..

    다만, 어떻게 예측값을 구성할지 어떻게 칼만게인(신뢰도)를 구성할지를 수식에 너무 억매여 구현하지 않아도 된다고 생각합니다. (개인적으로)

    혹시 틀린 부분이 많을 수 있으니 지적해주심 감사합니다!

     

    출처
    https://ko.wikipedia.org/wiki/%EA%B3%B5%EB%B6%84%EC%82%B0ko.wikipedia.org/wiki/%EC%B9%BC%EB%A7%8C_%ED%95%84%ED%84%B0ko.wikipedia.org/wiki/%EC%B9%BC%EB%A7%8C_%ED%95%84%ED%84%B0

    'Research > Machine Learning' 카테고리의 다른 글

    [선형대수] 특이값 분해  (0) 2020.08.04
    [선형대수] 고유값과 고유벡터  (2) 2020.07.27

    댓글

Designed by Tistory.