軌道予測の補足資料:ベイズフィルタについて


あってぃ(@paste_link)です。
このページは「
東工大Maquinista、ロボミントンの自動化とシャトルの軌道予測について」の補足資料です。あれな資料ですが興味のある方はお読みください。尚、説明に具体的な数式は出さないので、完全に理解したい方は個別に検索や書籍などで探していただくと良いかもしれません。


今年、シャトルの軌道予測で実装しましたパーティクルフィルタはベイズフィルタという理論?を応用したアルゴリズムの1つです。


この理論の根底に存在するのは統計学で用いられる、条件付き確率で授業で学ぶ、『Bayesの定理』と呼ばれる数式です。 

 IMG_20150507_010417

部屋着です。写真はぼくです。

この式そのものについての説明は割愛しますが、この定理はAを「知りたい値」、BをAを知るための手がかり」とおくことで、専ら「誤差のある計測の推定」に用いられます。 

例えば、(A,B)(ロボットの位置,センサの値)だったり、(シャトルの位置,Kinectから得たシャトルの座標)などです。大体の場合はBはセンサの値だと思います。

 

 短くまとめてしまうと、『ちょっと前のロボットの位置(計測ミスで微妙にずれてるかもしれない)とセンサーの値(計測ミスで微妙にずれてるかもしれない)から誤差を少しでも取り除いて今の位置を推定する式』です。

 

これらの理論の特徴は、ロボットの位置などのそれぞれの値を「確率分布」として捉えることです。

例えば、ロボットに「今のきみの位置(A)を教えて」と聞いたときに、同じ「0です」という答えが返ってくる場合にも、下図のようにAを分布として捉えると、同じ「0です」という答えにも様々なパターンが考えられます。

 pic8

赤線のような場合だと「自分の座標は強いて言うなら0かなぁ……」程度のニュアンスな一方で、青線の場合だと「高確率で0だ!!」という雰囲気になります。

これらはそれ以降のセンサによって得られた値(B)に対する影響を大きく変化させます。

ロボットが「自分の座標は強いて言うなら0かなぁ……」と考えている状態でセンサが「今の位置は20です」と出力したとき、このシステムは「じゃあ自分の位置は10くらいなのかもしれない……」と大きめに自分の位置を考え直します。一方で、ロボットが自分の位置を「高確率で0だ!!」と考えていれば、同じようにセンサが20という出力をしたときに「これはセンサのミスか何かだ!……でも念のため自分の位置は4くらいだと少し考えなおそう……」というような反応をするわけです。

 

また、Aの分布が赤線のような状態だったとしても、そのあとにセンサから何度も「今の位置は0です」という値を得た場合は、時間とともに「自分の位置、結構0なんじゃないか…?」「恐らく0だな…」「高確率で0だ!!」というように確率分布がシャープな形に遷移していきます。

 pic10

さて、ベイズフィルタの考え方を説明するために、簡単な例を考えます。

下図のようにロボットが直線上を移動する場合を考えます。図は雑です。許して。

 pic7

マシンにはセンサがついており、どの程度移動したのかを『大体』知ることができます。

センサの値を利用してロボットのできるだけ正確な位置を知りたいとき、Aを「ロボットの位置」、Bを「センサの値」として、ベイズフィルタを行ってみます。

①まず、人間がマシンを位置0に設置したとします。このとき、人間が微妙に位置をずらして設置してしまったりする可能性が存在します。そのため、ロボットの初期位置は大体下図のような確率分布で表すことができそうです。

pic1

②ここで、仮にロボットに「20まで動け」と指令を出したとします。そうしてロボットが移動したとします。このとき、もしかしたらタイヤが滑って20進めなかったかもしれませんし、ブレーキが弱くて20よりも大きく進んでしまったかもしれません。この時に、ロボットの位置の確率分布は下図の赤線のように変化します。動いた分だけ、自分の位置に対する「不確かさ」が上がっているため、青線よりも横に広がり気味な分布になります。

これが、Bayesの定理の式 $P(A|B)=\frac{P(B|A) P(A)}{P(B)}$ におけるP(A)に該当します。イメージとしては「センサの値を得る前の座標の予想」で、これを事前分布と呼びます。

pic2


③ここで、センサの値が「自分の位置は15でした」と出力したとします(B)。でも、この値は『本当はロボットは20の位置にしっかりいるのにセンサが不調で15とズレた値を返してしまった』、『ロボットが17の位置にいて、センサも少しずれてしまったせいで15という値が得られた』などの様々な可能性があります。これらの可能性を総合していくことで、下図の緑線のような「予想していた自分の位置と、センサーの値を総合して得られた自分の位置の分布」が完成します。これが $P(A|B)=\frac{P(B|A) P(A)}{P(B)}$ における「センサBの値15が得られた上での位置Aの分布P(A|B)」であり、事後分布と言います。Bayesの定理の左辺に相当します。

 pic3

注意すべきなのは、センサの出力(B)も確率分布である、ということです。センサに「今の位置を教えて!」と聞き、15だという返事が帰ってくる場合にも、下図の青のように「高確率で15!!」という場合や赤のように「一番可能性が高いのは15だけど……違う可能性も高いかなぁ」という場合などがあります。

もしBの分布が下図青線のような形だったら、事後分布(2つ上の図の緑線)はセンサの値を信用してより15という値に近づくでしょうし、Bが下図赤線のような分布だったらシステムはセンサの値をあまり信用せず、事後分布(上図の緑線)は事前分布に近い位置に来ることになります。
pic9
 

カルマンフィルタやパーティクルフィルタを実装する際には、センサの特性を基に、Bの分布の形状を正しく決定することが肝要です。

 

④最後に、この状態からロボットに「-5へ動け」と指令を出し、センサの値「-8」が得られたとすると、初期状態の分布は③の過程における自分の最終位置の予想の分布と全く等しいものになります(下図の青線)。事前分布(センサの値を得る前「自分は-5まで動いたつもりだからこの辺にいるはず!」という予想)が赤線のような-5を中心とした分布に、そして事後分布は事前分布からやや-8側に寄ったグラフになります。

 pic6

このように、ベイズフィルタは

    初期状態

    初期状態を基に次の状態を予想(事前分布)

    センサから得られた値とセンサ自信の特性(どの程度信頼できるか)、事前分布の3つを考慮して実際の位置を計算(事後分布)

    事後分布は次の初期状態になる

というサイクルの繰り返しとなります。

ちなみに、初期状態、事前分布、センサの特性などのすべての分布を正規分布と仮定した特殊な場合がカルマンフィルタです。上の例の場合も全て正規分布なのでカルマンフィルタです。この場合は正規分布の遷移していく様子の式が現代制御論における状態方程式とマッチするため制御理論的なアプローチと交ざりあうという非常に面白い事実があります(と認識しているのですが制御屋さんの各位、如何でしょうか…?(ゆるして(命だけは)))

また、Bayesの定理の更新式 $P(A|B)=\frac{P(B|A) P(A)}{P(B)}$ においてP(A)が事前分布、P(A|B)が事後分布だと説明しましたが、残る2変数について厳密ではない補足をしておくと、P(B|A)は「センサは『もしかしたら16かもしれない』って言ってるけど、じゃあロボットの座標18ってどれくらい妥当よ?」というニュアンスの値で、尤度(ゆうど)と言います。尤度の「尤」は「尤も(もっとも)」という熟語が表すように、「センサの値を踏まえて、座標が○○であることはどれくらいもっともらしいか」という指標となります。この数字が大きいほど『センサから見て』それっぽい値だったということになります。

P(B)についてですが、これは「左辺を正規化するためのつじつま合わせ」と思ってくれればいいです。左辺P(A|B)は確率密度関数であるため、全域で積分すると1にならなくてはならず、そのための定数がP(B)です。正直あまり重要じゃない気がします。

補足資料以上です。