メニュー

技術ブログ

Denso IT Lab.社員による技術情報の紹介

Denso IT Laboratory researcher's blog sites

数式

RSS

ページトップへ

確率ロボティクス第2章 練習問題を解いてみた

確率的ロボティクス 第2章の練習問題4を解いてみた.

$x$→状態.

$z$→観測値.

$x_{init}$→初期推測値.

(a)

事前信念.初期の推測値の周辺にガウス分布すると考える.

$$p(x|y) = N(x|y,\Sigma _{init})$$

そのときの観測値$z$の確率密度分布は,状態の周辺で分布すると考える.

$$p(z|x) = N(z|x,{\Sigma _z})$$

(b)

$$p(x|{y}) = N(\left. x \right|{y},{\Sigma _{init}})\\p(\left. z \right|{x}) = N(\left. z \right|{x},{\Sigma _z})$$

変数$y$を導入し,これらの同時分布を考えて,その対数をとる.

$$y = \left( {\begin{array}{*{20}{c}}
x\\
z
\end{array}} \right)$$

$$\ln p(y|{x_{init}}) = \ln p(z|x) + \ln p(x|{x_{init}})$$

この対数尤度,つまり2次形式を展開し,$x$について,平方完成する.
ただし,$x$や$z$に無関係な項は,定数項としてまとめる.

$$\begin{array}{l}
\ln p(y|{x_{init}}) = \ln p(z|x) + \ln p(x|{x_{init}})\\
= – \frac{1}{2}{(x – {x_{init}})^T}\Sigma _{init}^{ – 1}(x – {x_{init}}) – \frac{1}{2}{(z – x)^T}\Sigma _z^{ – 1}(z – x) + const.\\
= – \frac{1}{2}{x^T}\Sigma _{init}^{ – 1}x + {x^T}\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + {z^T}\Sigma _z^{ – 1}x – \frac{1}{2}{x^T}\Sigma _z^{ – 1}x + const.\\
= – \frac{1}{2}{x^T}(\Sigma _{init}^{ – 1} + \Sigma _z^{ – 1})x + {x^T}(\Sigma _{init}^{ – 1}{x_{init}} + \Sigma _z^{ – 1}z) – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const.
\end{array}$$

ここで,平均と共分散行列を以下のようにおく.

$$\begin{array}{l}
\Sigma _{x|z}^{ – 1} = \Sigma _{init}^{ – 1} + \Sigma _z^{ – 1}\\
{\mu _{x|z}} = \Sigma _{x|z}^{}(\Sigma _{init}^{ – 1}{x_{init}} + \Sigma _z^{ – 1}z)
\end{array}$$

すると,$x$に無関係な項を定数項に押し込んで,2次形式を以下にようにまとめることができる.

$$\begin{array}{l}
\ln p(y|{x_{init}}) = \ln p(z|x) + \ln p(x|{x_{init}})\\
= – \frac{1}{2}{x^T}\Sigma _{x|z}^{ – 1}x + {x^T}\Sigma _{x|z}^{ – 1}{\mu _{x|z}} – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const. \\
= – \frac{1}{2}{(x – {\mu _{x|z}})^T}\Sigma _{x|z}^{ – 1}(x – {\mu _{x|z}}) + const. \tag{1}
\end{array}$$

このことから,$p(x|z,x_{init})$はガウス分布であり,以下のように表せる.

$$p(x|z,x_{init}) = N(x|{\mu _{x|z}},\Sigma _{x|z})$$

(c)

題意から,$x$について,同時分布から$x$を積分消去し,$p(z|x_{init})$を得ることを考える.

$$p(z|x_{init}) = \int {p(z,x|{x_{init}})dx}$$

$p(z,x|x_{init})$を計算するため,(1)の定数部分を正しく展開し,その式を$x$について全区間積分することを考える.

$$ = – \frac{1}{2}{(x – {\mu _{x|z}})^T}\Sigma _{x|z}^{ – 1}(x – {\mu _{x|z}}) + \frac{1}{2}{\mu _{x|z}}^T\Sigma _{x|z}^{ – 1}{\mu _{x|z}}\\ – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const. \tag{2}$$

(2)を$x$について積分しても,第一項以外は定数項となる.
また,第一項は積分すると,$z$について無関係なガウス分布のスケーリングの値になる.
つまり,(2)を$x$について積分すると,$x$の項が積分消去され,以下の(3)が得られる.

$$\frac{1}{2}{\mu _{x|z}}^T\Sigma _{x|z}^{ – 1}{\mu _{x|z}} – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const. \tag{3}$$

次に,この(3)の$z$についての2次形式を考えると,以下のようになる.

$$\begin{array}{l}
\frac{1}{2}{\mu _{x|z}}^T\Sigma _{x|z}^{ – 1}{\mu _{x|z}} – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const.\\
= \frac{1}{2}{(\Sigma _{init}^{ – 1}{x_{init}} + \Sigma _z^{ – 1}z)^T}\Sigma _{x|z}^{}\Sigma _{x|z}^{ – 1}\Sigma _{x|z}^{}(\Sigma _{init}^{ – 1}{x_{init}} + \Sigma _z^{ – 1}z) – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const.\\
= \frac{1}{2}{(\Sigma _{init}^{ – 1}{x_{init}} + \Sigma _z^{ – 1}z)^T}\Sigma _{x|z}^{}(\Sigma _{init}^{ – 1}{x_{init}} + \Sigma _z^{ – 1}z) – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const.\\
= \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}\Sigma _{x|z}^{}\Sigma _{init}^{ – 1}{x_{init}} + \frac{1}{2}{z^T}\Sigma _z^{ – 1}\Sigma _{x|z}^{}\Sigma _{init}^{ – 1}{x_{init}} + \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}\Sigma _{x|z}^{}\Sigma _z^{ – 1}z\\
\ \ \ + \frac{1}{2}{z^T}\Sigma _z^{ – 1}\Sigma _{x|z}^{}\Sigma _z^{ – 1}z – \frac{1}{2}{x_{init}}^T\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{z^T}\Sigma _z^{ – 1}z + const.\\
= – \frac{1}{2}{z^T}(\Sigma _z^{ – 1} – \Sigma _z^{ – 1}\Sigma _{x|z}^{}\Sigma _z^{ – 1})z + {z^T}\Sigma _z^{ – 1}\Sigma _{x|z}^{}\Sigma _{init}^{ – 1}{x_{init}} – \frac{1}{2}{x_{init}}^T(\Sigma _{init}^{ – 1} – \Sigma _{init}^{ – 1}\Sigma _{x|z}^{}\Sigma _{init}^{ – 1}){x_{init}} + const. \tag{4}
\end{array}$$

このとき,$p(z|x_{init})$はガウス分布であり,以下のように平均と共分散行列を定義する.

$$\begin{array}{l}
\Sigma _{z|{x_{init}}}^{ – 1} = \Sigma _z^{ – 1} – \Sigma _z^{ – 1}\Sigma _{x|z}^{}\Sigma _z^{ – 1}\\
{\mu _{z|{x_{init}}}} = \Sigma _{z|{x_{init}}}^{}\Sigma _z^{ – 1}\Sigma _{x|z}^{}\Sigma _{init}^{ – 1}{x_{init}}
\tag{5}
\end{array}$$

そして,(4)と(5)から以下の2次形式が得られる.

$$- \frac{1}{2}{(z – {\mu _{z|{x_{init}}}})^T}\Sigma _{z|{x_{init}}}^{ – 1}(z – {\mu _{z|{x_{init}}}}) + const.$$

結果,$p(z|x_{init})$は,上記の平均と共分散行列で書ける.

$$p(z|{x_{init}}) = N(z|{\mu _{z|{x_{init}}}},\Sigma _{z|{x_{init}}}^{}) \tag{6}$$

$z_{GPS}=1000$ときの尤度は,(6)に各パラメータを代入し,計算すればよい.

このエントリーをはてなブックマークに追加

foldrを速くしたい〜Swift2シンポジウム

先日,Swift 2シンポジウム #2で発表しました.渋谷のdotsで行なわれました.渋谷のdotsは,オシャレな感じのシェアオフィス・ワーキングスペースで,とにかく渋谷駅徒歩3分という立地条件の良さが最高です.

自分の発表

今回の私の発表は,
「reverseが遅すぎるでござるが,解決したでござる.」
「無理にValue type programmingしたらiOSのコードが破綻したでござる.」
の2本でした.
かなり議論できたので非常に有益でした.

reverseが遅い件
これは,CollectionTypeにもいろいろ型があって,高速にreverseした配列を返せるものと,返せないものがあるということに起因するようだ.
Swiftのヘッダから読み取れるReverseRandomAccessCollectionなどの型を精査する必要があるが,イマイチ,こういう実装になったのか,extension以外の方法でreverseを使ったコードを高速化する方法がわからなかった.
今後,もう少し,精査する必要がある・・・という結論で議論は終わったように思う.

Value type programming
お便りいただきました.
ペンネームsonsonさんから,
「Value type programmingでiOSアプリを作ると,いろいろ面倒くさくなって,くじけそうです・・・,みなさん,どうすればいいでしょうか」
というお悩みです.
答え.
「Reactiveか,KVSか,Fluxか,あきらめて自分で値更新コードを書くか,Reference type programmingに戻りなさい.」
うん,やっぱりそうなのか.うん・・・・そうだよね・・・.

他の方の発表と議論

やっぱり例外
やはり熱いのが例外.前回同様議論白熱.
AppleがEitherで実装したResult型を標準ライブラリで実装してくれれば・・・この議論は終わると思うのですが・・・.
議論にも出ていたtry-catchを使うと戻り値の型が失われるという深刻な問題もあるし,結局,非同期のときにtry-catchは使えないもんね・・・・・.
Swiftの例外はどこに向かっていくのだろう・・・・.

やっぱりいいよね,議論スタイル

このシンポジウムのいいところは,やはり議論が活発であるところに尽きる.
割と悩みをダイレクトに発表あるいは,Twitterで質問するだけでも価値があると思われる.
今後は,Playgroundを使ってライブコーディングして,議論するようなスタイルを取り入れていくと,Swiftらしいし,議論ももっと盛り上がると思う.
Swiftの枠を外して,シンポジウムを組み立ててもいいように感じる.

謝辞

企画してくださった岸川さんには感謝.非常によいイベントだっと思います.
ここでお礼を申し上げたい.

今後も,このようなシンポジウムが開催されるときは,盛り上げる側で是非参加していきたいと思う.

参考リンク
つぶやきまとめ
私がシンポジウム中に書いたコードの殴り書き
reverseの高速化・foldrのリポジトリ


このエントリーをはてなブックマークに追加