ギプスサンプラ(Gibbs sampler)

パラメータ列z={z1,z2,...,zn}の同時分布P(z)からサンプリングしたい。このとき直接P(z)からサンプリングするのは計算量が大きすぎる。しかし単体のパラメータziの条件付き確率P(zi|z~i)からのサンプリングは可能であるとする(z~iはzからziを除いたパラメータ列)。
このような状況ではMCMC(マルコフ連鎖モンテカルロ法)という方法を使うことでP(z)からのサンプリングが可能になる。


MCMCの代表的な手法にはギプスサンプラがある。ギプスサンプラは以下の疑似コードようにしてサンプリングを繰り返すことでP(z)からパラメータ列zのサンプルを得ることができる、というもの。

foreach zi in z
  zi = rand;

while
  foreach zi in z
    zi' 〜 P(zi|zi-1)  # P(x)からのサンプリング
    zi = zi'

利用例としては潜在変数zを含むデータxに対するパラメータθのサンプリングをしたい場合があげられる。つまりP(θ|z,x)からのサンプリングをしたい。しかしzが潜在変数であり観測できないので、P(θ|z,x)からそのままサンプリングはできない。よってzを確率的に扱いP(θ,z|x)からのサンプリングを考える。
ところが同時分布からのサンプリングは計算量が大きく難しい。しかしP(θ|z,x)とP(z|θ,x)からのサンプリングが容易である場合にはギプスサンプラを用いて

while
  θ' 〜 P(θ|z,x)
  θ = θ'
  z' 〜 P(z|θ,x)
  z = z'

とすることでθ(と副次的にz)からサンプリングが可能になる。なお、ここまでの説明はPRMLの下巻を大いに参考した。

なおギプスサンプラにはblockedやcollapsedなど亜種があるのだが、それらについてはイケメン研究者のDaume氏の解説をみるといいかも。
http://nlpers.blogspot.com/2007/07/collapsed-gibbs.html