メトロポリス・ヘイスティングス名付けゲームが気になったので読んだ。
概要
まずは図1を見て概要を把握する。
二者間でだいたい同じものを見ている(共同注意)という前提のもと、明示的なフィードバックなしでサインの授受だけをして、メトロポリス・ヘイスティングス法に従って受け入れ/棄却を判断していくと、二者間で同じものに対しては同じサインが割り当てられていくというものだと理解した。人間の言語が社会的にちゃんと同じサインが同じものを指示することのモデルになっている。
実験と評価指標
概要はわかったが、結局それはなにがどうできたら成功と見なせるのか。
今回だとMNISTをラベルなしで教師なしクラスタリングするタスクを考える。10クラスという事前知識はあり、10個のサインが使える。共同で最適化した際に同じサインには同じクラスが対応するようなクラスタリングができていれば成功となる。(たとえば、個別でクラスタリングした場合、クラスタリング自体は上手くいくかもしれないが、サインとクラスの対応関係が揃うことは望めないのは直観的に理解できる)
Adjusted Rand Index(ARI)という指標があるのでそれを用いる。
グラフィカルモデル
手法に戻ってグラフィカルモデルを理解する。こういうグラフィカルモデルに慣れていないのでいろいろ混乱した。
- はlatent variableであるということがまず若干よくわからなかった。他者から見ると観測になりそうだが? でも内部的には確かに潜在変数なのかも
- さらに実際の分布ではなくサンプリングされたものをやり取りすることになるわけなのでとても概念がややこしい
- からに矢印が伸びている意味がわからなかったが、VAEのデコーダのパラメータということらしい
- 普通のVAEだととしては標準正規分布を考えるが、別にそうしないこともできるので、ここではGMMとからが導かれるというものを考えているらしい
アルゴリズム
話し手側がサインを振り出して、受け手側がそれを採用するか、自分が思ったサインをまだ信じるかが確率的に決まる。この確率がメトロポリス・ヘイスティングス法の計算になっている。
(のサンプリングまでしてそれを引数として渡す方が、なんとなく依存関係がきれいなような? Communication過程と考えるとこのシグニチャが適切なのだろうか)
各データについてMH-Communicationをして今回での暫定名付けを決めて、それで受け手側のパラメータを更新する。立場を逆転してMH-Commnicationをやって、元の話し手側のパラメータも更新する。なるほど明快。
コード
さらに具体的に理解するにはコードを見た方が良い。main.py
各iterationでのループが、
- それぞれのVAE学習
- VAEのパラメータは毎回初期から学習開始されている
- GMMのmuとvarがあるのでそれを事前分布として使うことになるのだと思う
- GMM更新パート
- VAEから得られる事後確率から各データのサインを振り出す
- それをMH-Communicationで受け入れ/棄却の判定を行う
- 得られたラベルでGMMのパラメータを推論する
となっていることがなんとなく理解できてくる。
疑問
GMMは必須か?→ 「6. Conclusion and discussion」のところに書いてある通り、まぁ他の手法で置き換えることもたぶん可能ではありそう。ニューラルネットにしか馴染みのない人にとってはそこの部分が簡潔になるとわかりやすいなぁと感じる。
最近の生成系の話題だとトークナイズとかいってVQ-VAE系を使うことが多いが、この手法のVAEをVQ-VAEにすることはできるか?→GMMと繋げるという事自体は難しくなってしまうかもしれないが、理屈として確率モデルとして成立している以上は同じことができそうな気がする。