2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

カルマンフィルタと状態空間モデルを浅くでいいから行間なく理解したい

Last updated at Posted at 2022-06-30

はじめに

画像系の研究ばかりをやっていると実はあまり時系列データを扱う機会がなかったんですが,とある事情により扱いたい理由が発生したのでできるだけ行間なく自分の秘密ノートとしてここに残したいと思います.

状態空間モデルとは

一言で言えば時系列分析に使われるモデルです.有名なところで言えば株価や売上予測などに用いられています.

例えばある店の売上を予測するとしましょう.あるお店の売り上げが以下のようだったとします.

日付 売上
5/1 100
5/2 200
5/3 300
5/4 400
5/5 500
5/6 600

この時,5/7 の売上を予測しましょう.多くの人はなんとなく比例関係が見えるので 700 かな?と予測するのではないでしょうか.しかし,ただ単にこの売上というのは独立に変動していくものではありません.テレビに出演したから売り上げが 1 週間連続で伸び続けたのかもしれませんし,それとも暑くなってきて新作の "冷やしメロンパン" が売れたからなのかもしれませんし,もしくは人口が増えていったので自然と購買数が増えたのかもしれません.つまり,我々が売上として 観測 できるのは所詮売上だけなのです.

ですので,結論から言うと 5/7 の売り上げを 700 と言ってしまうのは少し気が早すぎるというものです.

状態空間モデルでは,こうした「目に見えない潜在的な要因」,すなわち 状態 の変動も考慮して予測を行おうという考え方をします.

しかし,こうなるとパンの売上に対して (ちょっと待って書きながら思ったけどいつパン屋さんになったんだ) 効いてくる潜在的要因の多さにうんざりしそうな気もしてきます.
ですので,あくまで「そういう世界を仮定しよう」というのがこのアイデアです.

具体的にどうやるの?

状態更新式および観測式と呼ばれる式を考えます.
まず初めに簡単のために今の状態 $k+1$ は 前の状態 $k$ によって決定され,$f$ により写像されるとします.("写像" が難しい場合はただ単に状態変化・遷移のための行列を掛けたと考えてよいでしょう.)

x_{k+1} = f(x_{k})

という 状態更新する式,すなわち 状態更新式 が得られます.ちなみに繰り返しますが,状態というのは潜在的な説明変数のことを意味しており,「その日の気温」「人出の数」「周辺の住民の人口」などを変数化させたものを指しています.

加えて,先述した通り状態空間モデルでは観測値を獲得しなければなりません.そのため,

y_{k} = g(x_{k})

という式で状態から観測した結果が得られると仮定します.これを 観測式 と呼びます.しかし,モデル化をするにあたって状態変化にあたってのノイズや観測にあたってのノイズを考慮する必要があります.(実社会データはノイズで溢れています.)
そのため,それぞれのノイズを加味すると,

x_{k+1} = f(x_{k}) + w_k
y_{k} = g(x_{k}) + v_k

と表記することができます.
このノイズは仮定としてよく用いられるのは平均 0 の正規分布です.(平均が 0 の時のノイズを白色,これが正規性 (ガウシアンに基づいている性質) を持っている場合に正規性白色雑音と呼ぶこともあるようです.どっかのサイトで分散 1 の状態を正規性白色と呼ぶような表記がありましたが分散は別にどうでもいいです.)

ところで,状態空間モデルの旨味はどこにあるかというと「状態の変化も予測の要因に加えることができる」という点にあったかと思います.つまり,もしも状態更新式について,状態が一切変化しない状態を考えるとただの重回帰問題に帰着させることができます.よって状態空間モデルは重回帰問題の拡張版と捉えてよいでしょう.

じゃあカルマンフィルタってなんだったの?

一言で言えば「状態変数およびモデル構築の最適化手法」を指しています.カルマンフィルタにおいては先述の状態遷移式について以下のように表記します.

x_{k+1} = f(x_{k}) + G(y_{k+1}-\hat{y_{k}})

さて,ここで話も長くなってきたので状況を整理しましょう.

  1. 時系列のデータについて予測をしたい
  2. 実際の事象についても数式で全てを表現することができるけれども,いざ表現しようとすると「状態」については見ることができないので我々が「観測」できるデータから考えよう.
  3. モデルを仮定して予測するのであれば,仮定した方の状態と観測は可観測である (だってそう自分がデザインしたんだから)
  4. じゃあ「実際モデル」から得られる「観測値」および,「仮定モデル」から得られる「観測値」の誤差を最小化していけば,「仮定モデル」は「実際モデル」に近づいていくよね?

というのがこの状態空間モデルのモチベーションであった.ある意味で機械学習と似ていて (というと怒られそうだが) ,犬猫クラス分類であれば世の中の犬猫の画像を完全に分けるための「実際モデル(=完璧な関数)」が存在していて,それに対して「仮定モデル」を作成して,関数フィッティングのように近づけていくというのが機械学習における解法だったはずである.つまり BackProp という観点においては似た物なのかもしれない.というか近年の "AI" とかいう四次元ポケット的なインチキ用語 の意味で言えば十分包含しているような気もする.

そして,このカルマンフィルタにおけるゲイン $G$ をカルマンゲインと呼びます.
さて,観測値に対して ($v_k$ のノイズが少ないという) 自信があれば,このカルマンゲインを大きくするべきです.なぜならば,大きく状態補正をすることができるためです.一方で状態推移の方に ($w_k$ のノイズが少ないという) 自信があればあまり変化をして欲しくないので $G$ は小さくするべきです.

なお,このカルマンゲイン $G$ の定め方は理論的には実際の状態および仮定の状態の二乗期待値誤差によって求めるという手法をとります.これはただ単に (数的処理から見れば複雑だが) 真の値に対する MSE を最小化しているだけのことです.
ここから先のカルマンゲインの導出に関しては他サイト様 (参考文献に記載あり) にお願いし申し上げたいと思います.

さいごに

慣れてないが故か,むずすぎないかこの概念.

参考文献

裏口からのカルマンフィルタ入門 (YouTube 動画)

カルマンゲインの導出方法

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?