「続・わかりやすいパターン認識」13章「共クラスタリング」の無限関係モデル(IRM)の数式について #ぞくパタ

ということを1年近く前につぶやいたりしてたのだが、オーム社のサイトで「続・わかりやすいパターン認識」(以降「ぞくパタ」)の正誤表がちゃんと公開されていることに最近ようやく気づいた。

上のツイートで言っている式 (6.9) ももちろん修正されているし、以下の記事で書いていた8章の問題点もことごとく手当されている。すばらしす。

まあこのツイートやらブログやらを参考にしてもらえたかどうかは定かではないわけだが、どこかで間違いを指摘しておくと反映される可能性がある、というのは勇気づけられる話。


話は変わって、2014/12 から開催されていた「続・わかりやすいパターン認識」読書会が先月めでたく最終回を迎えた、っぽい。

「ぽい」というのは、最後の2回に参加できなかったから。
まあもともと興味のある回にとびとびにしか参加してなかったわけだが、12章後半はある意味ディリクレ過程混合モデルの実装編で、この本のクライマックスだったから是非参加したかった。13章の無限関係モデル(IRM)も一応参加してみたかったところ。


というわけで参加できなかったフォローというか腹いせというか、で無限関係モデルを実装でもしてやろうと思って本を読み始めたのだが……。


まだ読んでいる人が少ないせいだろうか、少なくない数式が結構大胆に間違っている。
まあ、だいたいどの間違いも一目見て間違っていることはわかる(左辺に j がないのに、右辺に消えない j が残っている、とか)ので、抜き打ちの演習みたいなものか。
「これくらい計算できるよね?」という読者への親心を無下にするのも心苦しいが、見つけてしまった間違いはじゃんじゃん指摘してしまおう。


というわけで、この記事はぞくパタ13章の数式の誤りを淡々と指摘するだけの記事であり、IRM(Infinite Relational Model) がなにかわかるような記事ではないので、あらかじめ。


まずは p284 の式 (13.8)。右辺の分母に n が現れているが、実は n なんてどこにも定義されていない。
n_i^1 とか n_{(k,+)(i,j)} とか、そういうややこしいのはいろいろ定義されている*1からだまされるかもしれないが、ワナである。
この n の位置に入るのは、s_k^1 の個数なので正しくは K である。


P(s_k^1=\omega_i^1|{\boldsymbol s}_{-k}^1)=\begin{cases}\frac{n_i^1}{K-1+\alpha}\hspace{3ex}&(\text{existing cluster})\\\frac{\alpha}{K-1+\alpha} & (\text{new cluster})\end{cases}


次は同じ p284 (13.9) 式の新規クラスタのときの式。G_0({\bf\theta}_{i,+}) という記号が出てくる。
11章12章でさんざん見てきたので、ついうっかり知ってる記号だと思ってしまったかもしれないが、これも未定義である。
G_0 は11章12章ではディリクレ過程の基底分布として使われていた記号だが、13章では2次元の構造を持つクラスタを素のディリクレ過程ではモデリングできず、CRP(中華料理店過程)でモデリングされているため、そもそもディリクレ過程自体が出てこない。


「ディリクレ過程だったら基底分布にあたるもの」なら p281-282 にて導入されているベータ分布が相当する。
では G_0 はベータ分布なのだろうと解釈すると (13.9) 式で困ったことになる。


G_0(\theta)={\rm Be}(\theta;a,b)


G_0 はパラメータθ(スカラー)の分布であり、それを束ねた {\bf\theta}_{i,+} (ベクトル)の分布ではないので、G_0({\bf\theta}_{i,+}) という書き方は厳密には間違いとなる。
と、なんかややこしげに書いてしまったが、解決方法は簡単。G_0 じゃなくて単に P({\bf\theta}_{i,+}) と書いて同時分布にしてしまえばいい。厳密に考えても何の問題もなく、当たり障りもない。いや、この本の表記だと小文字 p か。


次、p287 (13.26) 式。左辺に j がないのに、右辺に消えない j が残る。
これは \prod 忘れなので、単純に正解を記そう。(13.9) 式と同じく未定義 n も手当すると、場合分けの式それぞれ次のようになる。


\displaystyle\frac{n_i^1}{K-1+\alpha}\prod_j\frac{B\left(n_{(+,+)(i,j)}+a,\;\tilde{n}_{(+,+)(i,j)}+b\right)}{B\left(n_{(-k,+)(i,j)}+a,\;\tilde{n}_{(-k,+)(i,j)}+b\right)}


\displaystyle\frac{\alpha}{K-1+\alpha}\prod_j\frac{B\left(n_{(k,+)(i,j)}+a,\;\tilde{n}_{(k,+)(i,j)}+b\right)}{B(a,\;b)}


(13.27) 式も同様なので、略。ただし、n は L になる。
もっとも、K-1+α も L-1+α も k や l に依存せず、どうせ全部足して1にするときに消えてしまうから、どちらにせよ実装では省略してしまってよかったりする(笑)。


最後、p288 (13.28)式。 k,l が消えずに残る。これも \prod 忘れ。
例によって未定義 G_0 があるので、これも p(\theta_{ij}) と直してあげつつ、2行目の式だけ正しく書きなおすとこうなる。


\displaystyle =P({\bf s}^1)P({\bf s}^2)\prod_{i=1}^{c^1}\prod_{j=1}^{c^2}\int\prod_{k:s_k^1=\omega_i^1\\l:s_l^2=\omega_j^2}P(R_{kl}|\theta_{ij})p(\theta_{ij})d\theta_{ij}


見つけた間違いはこれで打ち止めだが、2点蛇足。


その1。
この本の積分はちゃんと閉じた形式に計算しつくされており、実装者は自分で計算する必要がほとんどなくてすばらしいのだが、本文最後の積分であるこの \int\prod_{k:s_k^1=\omega_i^1\\l:s_l^2=\omega_j^2}P(R_{kl}|\theta_{ij})p(\theta_{ij})d\theta_{ij} だけは計算されていない。
ここまでの計算が全部できていたらこれくらい朝飯前(誇張抜き)なので、例によって抜き打ち演習として残しておいてもいいんだけど、せっかく全部の積分がやっつけられているのに雑魚一匹だけ残しておくのもなんだよなあ。というわけで、計算してしまおう。


\int\prod_{k:s_k^1=\omega_i^1\\l:s_l^2=\omega_j^2}P(R_{kl}|\theta_{ij})p(\theta_{ij})d\theta_{ij}=\frac{B\left(n_{(+,+)(i,j)}+a,\;\tilde{n}_{(+,+)(i,j)}+b\right)}{B(a,\;b)}


その2。
p288 に「P(s^1), P(s^2) は式 (11.11) のイーウェンスの抽出公式で求める」とある。そういえば 12章でもほぼ同じ文言を見た(p265)。
というわけで式 (11.11)「だけ」で P(s) 類が計算できる……と思ったらこれがワナだったりする。


式(11.11)をよく見てみよう。


P_E(n_1,\cdots,n_c)=\cdots


左辺は P(s) ではなく P(n_1,\cdots,n_c) なのである。実は、P(s) は並べ替えの自由度の分、確率はこれより下がる。
心配しなくても大丈夫、P(s) と P(n_1,\cdots,n_c) の変換式は式 (11.17) としてちゃんと載っている。
というわけで「P(s^1), P(s^2) は式 (11.11) のイーウェンスの抽出公式と式 (11.17) で求める」だと親切である。


と、あれこれ書いたが、当然、ここに書いてあることにも誤りが含まれている可能性はある。もし間違いなどあればご指摘歓迎。
IRM 実装編はまた今度。


【追記】
社内勉強会の資料公開した。

無限関係モデル (続・わかりやすいパターン認識 13章)
https://www.slideshare.net/shuyo/infinite-relational-model

【/追記】

*1:n_i^1n_{(k,+)(i,j)} では数えている対象が異なるので、個人的にはどちらかは m とか記号を変えて欲しかった。