ずいぶん前にできていたのだが、変分ベイズのフォローのために、ブログに書くのを後回しにしてたオンラインEMについて。 確率的勾配法など、通常はオンラインの方がバッチより収束が遅い。 が、EMアルゴリズムについては、オンラインの方が収束が速いらしい。PRML にも「この逐次型のアルゴリズムはバッチ型に比べて速く収束する」と書かれており、また論文にもそういうデータが載っている。 EM アルゴリズムを実装してみると、確かに収束が遅い。 収束し始めてから遅いのなら許せるけど、2サイクル目くらいからすでに遅い。せめて最初くらいもうちょっと速くなんないの! と文句言いたくなる。 EM アルゴリズムの1サイクルは結構重いので、さらにその気分を助長する。 というわけで、オンラインEMアルゴリズムについてとても興味が湧いたので、実装してみた。 参考にしたのは Neal and Hinton の increme