見出し画像

粒子フィルタの学び方とSLAM

画像1

マシュマロで質問いただきました。

粒子フィルタを使うのは、slamを高速化するアイデアの中でも基本的なアプローチだと思うのですが、直感的な理解はしている気がするのですが数式ベースの詳細な理解になかなか辿りつきません。
おすすめの教材や学び方、必要な事前知識を教えていただけますか?

質問ありがとうございます。粒子フィルタはめちゃめちゃ勉強すると味わい深く素晴らしいものです! 是非、しっかりとそれを支える数学的、計算論的部分含めて勉強しましょう!

とりあえず、鉄板は確率ロボティクスですね。分厚いですが良書ですので、是非取り組んでみてください。

またその中でも理論的にはSLAMに行く前の位置推定(状態推定)部分が粒子フィルタの勉強的には要になります。そういうわけで、私のイラストで学ぶ人工知能概論では、ベイズフィルタから粒子フィルタに至るまでの部分を極力エッセンスだけに絞って書いています。(執筆時は上記確率ロボティクスを参考にしました)まず、こちらを読んでいただいてから、確率ロボティクスに向かっていただいてもいいかもしれません。

SLAMはSimultaneous Localization and Mapping(自己位置と地図の同時推定)というように、「自己位置推定」と「地図作成」という二つのタスクが同時に連関しながら動きます。逆に言えば、そのうちの地図を固定値として、「自己位置推定」だけを扱ったのが自己位置推定です。そしてまず順番としては自己位置推定において粒子フィルタが現れます。それゆえに、まずは自己位置推定をしっかりと学び、その上で、粒子フィルタを自己位置推定において実装してみるのが大切かと思います。

自己位置推定は数学的には状態空間モデルと呼ばれるアプローチの状態推定と等価であり、制御工学ではオブザーバとも呼ばれます。なお、オブザーバの中のある意味で最適なものがカルマンフィルタであり、ベイズの視点からは、カルマンフィルタはベイズフィルタの一種として捉えられます。

というわけでカルマンフィルタや、状態空間モデルも、いろいろ調べて一緒に学習すると、視野が広がります。また、これのことは「確率ロボティクス」にもかなり書いてあるので魅力的です。

イラストで学ぶ人工知能概論でも書いているように、粒子フィルタはベイズフィルタをモンテカルロ近似するところから導かれます。モンテカルロ近似(/法)は大変、計算機科学において重要ですし、まさに、計算機が生まれたからこそ意味を持った20世紀の素晴らしい成果物です。

パターン認識と機械学習の下巻でも、サンプリングや近似推論法に関しての章があります。これらについても学んでおくとより視野が広がるでしょうし、特に「サンプリングによる分布の近似とはなにか?」がわからないと粒子フィルタのカッコよさはイマイチわからないと思います。

ちなみに、粒子フィルタは逐次モンテカルロ法(sequential Monte Carlo; SMC)とも呼ばれます。そういう意味でマルコフ連鎖モンテカルロ法(MCMC)みたいなアプローチと友達なんですね。MCMCも勉強しよう。

さて、理論的としての粒子フィルタはやはりSIR(Sampling Importance Resampling)という考え方が理論的骨子を成します。これはすごく一般的な手法で、SLAM以外にもいろいろ使えますので、覚えておきたいところです。

しかし、一方で、制御工学的な勉強や、ロボットの自己位置で扱おうとすると、第一歩目が状態ベクトルに多次元ベクトルを仮定し、ノイズモデルに多次元の正規分布を用いるということがしばしばなされます。

これはすごく自然で、数理的には素晴らしいことなので、日本の多くの大学生(学部生)が勉強しようとしたときに、これが壁になります。多次元正規分布は分散共分散行列を持ちます。この扱いが、多くの学生にとっては「ちんぷんかんぷん」になりやすいのです。

そもそも粒子フィルタとかベイズフィルタ、カルマンフィルタとかを勉強したかったはずが、その本質ではなくて、分散共分散行列に関係した行列の式変形の沼に沈んでしまいがちになるんですね。

これを乗り越えるためには、「まずメチャクチャ簡単な系で勉強する」というのが大事です。そういう意味でイラストで学ぶ人工知能概論では離散系のみを扱っています。連続系でやるときには1次元や2次元の系で勉強するのがおすすめです。

SLAMに関してはこれらの勉強と理解を踏まえれば、比較的素直に進めるのではないかと思います。

ただ、一方で、SLAMは地図と自己位置を同時推論するというという側面があり、これは機械学習の教師なし学習ではよくある話なのですが、EMアルゴリズムGibbs sampling でもあるような、複数のパラメータを順に推定して収束させていくというような世界観が腑に落ちる必要があります。

そういう意味では、混合正規分布(GMM: Gaussian Mixture Model)のようなクラスタリングのモデルなどを理解していると、理解は助けられるのではないかと思います。

生成モデルの視点から言うと、SLAMは基本的にはPOMDP(Partially Observable Markov Decision Process:部分観測マルコフ決定課程)です。雑に言えば隠れマルコフモデル(Hidden Markov Model: HMM)にactionをつけたのがPOMDPで、HMMから時間依存性をとったのがGMMのような混合モデルです。そういう意味でも、いろいろつながっています。

ざっと勢いで雑に説明しましたが、ちょっとでも足しになっていれば幸いです。

せっかくなので、確率ロボティクスの訳者でもある上田先生の本も貼っておきますね。上田先生はTwitter上にも生息しておられるので、もしよかったらそちらも……どうぞ(? 勝手にひとのTwitterを広報するヤツ)

SLAMはROSなどでも標準的に実装されていて使いやすくなったのは良いのですが、やはり数理の理解は持っておきたいですね。

以上! 質問者さんの勉強がはかどることを祈ります!

この記事が気に入ったらサポートをしてみませんか?