手帳と試行

学んだことをアウトプットしていきます。 日々、ノートあるのみ。

メトロポリス法

M-H法の一種であるメトロポリス法を導入する。

メトロポリス・ヘイスティングス法からの導入

M-H法は次のようなアルゴリズムであった。

Metropolis-Hastings Algorithm
1.X←{}2.for t∈{1,2,…,n}:3.y∼Q(y∣x)4.r∼U(r∣0,1)5.if A(y∣x)>r:6.x←y7.X←X∪{x}8.return⁡X\begin{darray}{rl} 1. & X \gets \{\} \\ 2. & \text{for } t \in \{1, 2, \dots, n\} : \\ 3. & \qquad y \sim Q(y | x) \\ 4. & \qquad r \sim {\cal U}(r | 0, 1) \\ 5. & \qquad \text{if } A(y | x) \gt r : \\ 6. & \qquad \qquad x \gets y \\ 7. & \qquad X \gets X \cup \{x\} \\ 8. & \operatorname{return} X \end{darray}

ただし、A(y∣x)A(y | x) は受理確率と呼ばれる関数で、次式で表される。

A(y∣x)=P(y)Q(x∣y)P(x)Q(y∣x)\begin{aligned} A(y | x) = \frac{P(y) Q(x | y)}{P(x) Q(y | x)} \end{aligned}

ここで、提案分布 Q(y∣x)Q(y | x) を、関数の台 Y\mathcal Y が

Y={x+λc∣λ∈[1,−1]}\begin{gathered} \mathcal Y = \{x + \lambda c | \lambda \in [1, -1]\} \end{gathered}

であるような連続一様分布、すなわち

Q(y∣x)=U(y∣x−c,x+c)=12cI{x−c≤y≤x+c}\begin{aligned} Q(y | x) = \mathcal U(y | x-c, x+c) = \frac{1}{2c} \mathbb I\{x-c\le y \le x+c\} \end{aligned}

とおくと、

Q(x∣y)=U(x∣y−c,y+c)=12cI{y−c≤x≤y+c}=12cI{x−c≤y≤x+c}=Q(y∣x)\begin{aligned} Q(x | y) ={}& \mathcal U(x | y-c, y+c) \\ ={}& \frac{1}{2c} \mathbb I\{y-c\le x \le y+c\} \\ ={}& \frac{1}{2c} \mathbb I\{x-c\le y \le x+c\} \\ ={}& Q(y | x) \end{aligned}

ゆえ、受理確率は次式に変化する。

A(y∣x)=P(y)Q(x∣y)P(x)Q(y∣x)=P(y)P(x)\begin{aligned} A(y | x) = \frac{P(y) Q(x | y)}{P(x) Q(y | x)} = \frac{P(y)}{P(x)} \end{aligned}

これを用いれば、MH法は次のようなアルゴリズムに変化する。

1.X←{}2.for t∈{1,2,…,n}:3.y∼U(y∣x−c,x+c)4.r∼U(r∣0,1)5.if P(y)P(x)>r:6.x←y7.X←X∪{x}8.return⁡X\begin{darray}{rl} 1. & X \gets \{\} \\ 2. & \text{for } t \in \{1, 2, \dots, n\} : \\ 3. & \qquad y \sim {\cal U}(y | x-c, x+c) \\ 4. & \qquad r \sim {\cal U}(r | 0, 1) \\ 5. & \qquad \text{if } \frac{P(y)}{P(x)} \gt r : \\ 6. & \qquad \qquad x \gets y \\ 7. & \qquad X \gets X \cup \{x\} \\ 8. & \operatorname{return} X \end{darray}

このようなMH法をとくにメトロポリス法 (Metropolis algorithm) という。定数 cc はステップ幅と呼ばれる。

注意事項

このアルゴリズムをちょっと書き換えれば、xx がスカラーではなくベクトル x∈Rn\bm x \in \R^n であるような場合のメトロポリス法も容易に作成できる。

Metropolis Algorithm
1.X←{}2.for t∈{1,2,…,n}:3.for i∈{1,2,…,N}:4.yi∼U(yi∣xi−ci,xi+ci)5.r∼U(r∣0,1)6.if P(y)P(x)>r:7.x←y8.X←X∪{x}9.return⁡X\begin{darray}{rl} 1. & X \gets \{\} \\ 2. & \text{for } t \in \{1, 2, \dots, n\} : \\ 3. & \qquad \text{for } i \in \{1, 2, \dots, N\} : \\ 4. & \qquad \qquad y_i \sim {\cal U}(y_i | x_i-c_i, x_i+c_i) \\ 5. & \qquad r \sim {\cal U}(r | 0, 1) \\ 6. & \qquad \text{if } \frac{P(\bm y)}{P(\bm x)} \gt r : \\ 7. & \qquad \qquad \bm x \gets \bm y \\ 8. & \qquad X \gets X \cup \{\bm x\} \\ 9. & \operatorname{return} X \end{darray}

具体的には、提案 y∈Rn\bm y \in \R^n の各要素 yiy_i を一様分布 U(yi∣xi−ci,xi+ci)\mathcal U(y_i | x_i - c_i, x_i + c_i) からサンプルする。ただし cic_i は c∈Rn\bm c \in \R^n の各要素である。

yi∼U(yi∣xi−ci,xi+ci)\begin{aligned} y_i \sim \mathcal U(y_i | x_i - c_i, x_i + c_i) \end{aligned}

このとき以下のように、ステップ幅の各要素が時間によって変化しなければ、c\bm c の全要素が同一である必要はない。ただしアルゴリズムの途中で要素 cic_i が変化してはいけないので注意が必要である。

valid:c=[11]→c=[11]→…valid:c=[1.50.5]→c=[1.50.5]→…invalid:c=[1.50.5]→c=[0.51]→…\begin{aligned} &\text{valid}: && \bm c = \begin{bmatrix} 1 \\ 1 \end{bmatrix} && \to && \bm c = \begin{bmatrix} 1 \\ 1 \end{bmatrix} && \to && \dots \\ \\ &\text{valid}: && \bm c = \begin{bmatrix} 1.5 \\ 0.5 \end{bmatrix} && \to && \bm c = \begin{bmatrix} 1.5 \\ 0.5 \end{bmatrix} && \to && \dots \\ \\ &\text{invalid}: && \bm c = \begin{bmatrix} 1.5 \\ 0.5 \end{bmatrix} && \to && \bm c = \begin{bmatrix} 0.5 \\ 1 \end{bmatrix} && \to && \dots \\ \\ \end{aligned}

何がすごいの?

もういちどよく見てみよう。

Metropolis Algorithm
1.X←{}2.for t∈{1,2,…,n}:3.for i∈{1,2,…,N}:4.yi∼U(yi∣xi−ci,xi+ci)5.r∼U(r∣0,1)6.if P(y)P(x)>r:7.x←y8.X←X∪{x}9.return⁡X\begin{darray}{rl} 1. & X \gets \{\} \\ 2. & \text{for } t \in \{1, 2, \dots, n\} : \\ 3. & \qquad \text{for } i \in \{1, 2, \dots, N\} : \\ 4. & \qquad \qquad y_i \sim {\cal U}(y_i | x_i-c_i, x_i+c_i) \\ 5. & \qquad r \sim {\cal U}(r | 0, 1) \\ 6. & \qquad \text{if } \frac{P(\bm y)}{P(\bm x)} \gt r : \\ 7. & \qquad \qquad \bm x \gets \bm y \\ 8. & \qquad X \gets X \cup \{\bm x\} \\ 9. & \operatorname{return} X \end{darray}

確率分布を計算する箇所が、P(y)P(x)\dfrac{P(\bm y)}{P(\bm x)} のみになっている。

これはなかなかすごいことで、 この式により、

P(x)=1ZS(x)\begin{aligned} P(\bm x) = \frac{1}{Z} S(\bm x) \end{aligned}

などの形で書かれていて、しかも正規化定数 Z=∫dxS(x)Z = \int d\bm x S(\bm x) の計算が手計算では到底不可能であるような場合でも、P(x)P(\bm x) に従う乱数が生成できるのである。