M-H法の一種であるメトロポリス法を導入する。
メトロポリス・ヘイスティングス法からの導入
M-H法は次のようなアルゴリズムであった。
Metropolis-Hastings Algorithm
1.2.3.4.5.6.7.8.X←{}for t∈{1,2,…,n}:y∼Q(y∣x)r∼U(r∣0,1)if A(y∣x)>r:x←yX←X∪{x}returnX
ただし、A(y∣x) は受理確率と呼ばれる関数で、次式で表される。
A(y∣x)=P(x)Q(y∣x)P(y)Q(x∣y)
ここで、提案分布 Q(y∣x) を、関数の台 Y が
Y={x+λc∣λ∈[1,−1]}
であるような連続一様分布、すなわち
Q(y∣x)=U(y∣x−c,x+c)=2c1I{x−c≤y≤x+c}
とおくと、
Q(x∣y)====U(x∣y−c,y+c)2c1I{y−c≤x≤y+c}2c1I{x−c≤y≤x+c}Q(y∣x)
ゆえ、受理確率は次式に変化する。
A(y∣x)=P(x)Q(y∣x)P(y)Q(x∣y)=P(x)P(y)
これを用いれば、MH法は次のようなアルゴリズムに変化する。
1.2.3.4.5.6.7.8.X←{}for t∈{1,2,…,n}:y∼U(y∣x−c,x+c)r∼U(r∣0,1)if P(x)P(y)>r:x←yX←X∪{x}returnX
このようなMH法をとくにメトロポリス法 (Metropolis algorithm) という。定数 c はステップ幅と呼ばれる。
注意事項
このアルゴリズムをちょっと書き換えれば、x がスカラーではなくベクトル x∈Rn であるような場合のメトロポリス法も容易に作成できる。
Metropolis Algorithm
1.2.3.4.5.6.7.8.9.X←{}for t∈{1,2,…,n}:for i∈{1,2,…,N}:yi∼U(yi∣xi−ci,xi+ci)r∼U(r∣0,1)if P(x)P(y)>r:x←yX←X∪{x}returnX
具体的には、提案 y∈Rn の各要素 yi を一様分布 U(yi∣xi−ci,xi+ci) からサンプルする。ただし ci は c∈Rn の各要素である。
yi∼U(yi∣xi−ci,xi+ci)
このとき以下のように、ステップ幅の各要素が時間によって変化しなければ、c の全要素が同一である必要はない。ただしアルゴリズムの途中で要素 ci が変化してはいけないので注意が必要である。
valid:valid:invalid:c=[11]c=[1.50.5]c=[1.50.5]→→→c=[11]c=[1.50.5]c=[0.51]→→→………
何がすごいの?
もういちどよく見てみよう。
Metropolis Algorithm
1.2.3.4.5.6.7.8.9.X←{}for t∈{1,2,…,n}:for i∈{1,2,…,N}:yi∼U(yi∣xi−ci,xi+ci)r∼U(r∣0,1)if P(x)P(y)>r:x←yX←X∪{x}returnX
確率分布を計算する箇所が、P(x)P(y) のみになっている。
これはなかなかすごいことで、 この式により、
P(x)=Z1S(x)
などの形で書かれていて、しかも正規化定数 Z=∫dxS(x) の計算が手計算では到底不可能であるような場合でも、P(x) に従う乱数が生成できるのである。