変分Bayes
この記事ではBayes推定を解くための手法「変分Bayes」について解説する。
関連記事
- EMアルゴリズム
- 変分Bayes (本記事)
- VAE: 変分オートエンコーダー
目次
Bayes推定
確率変数\(x\)がパラメーター\(\theta\)の確率分布\(p(x|\theta)\)に従うことがわかっているとする。
\(p\)に従って独立に発生した幾つかのデータ\(X^{D} = \{x^{D}_n\}_{n=1}^{N}\)が既に観測されているとき、次に発生する\(x\)の分布をより正確に推測したい。
最尤推定とMAP推定ではただ一つのパラメーター\(\theta\)を求めることを目的としていたが、Bayes推定では\(\theta\)がそれぞれの値を取る確率を分布として求めることを目的とする。
- \(x\)および\(x^D_n\)が従う確率分布\(p(x|\theta)\)が関数として既知。
- \(\theta\)の(事前)確率分布\(p(\theta)\)が関数として既知。
- 分布\(p\)に従って独立に生成されたデータの集合\(X^D\)が観測されている。
観測データから推測される\(\theta\)の分布\(p(\theta|X^D)\)を求める。
Bayesの定理より以下のように求めることができる。
\begin{align} p(\theta|X^D) &= \frac{p(\theta, X^D)}{p(X^D)} \\ &= \frac{p(\theta, X^D)}{\int p(\theta, X^D) d\theta} \\ &= \frac{p(X^D|\theta)p(\theta)}{\int p(X^D|\theta)p(\theta) d\theta} \\ \end{align}
\(p(\theta|X^D)\)が得られたとき、次に発生する\(x\)の分布を次のように推測することができるようになる。
\begin{align} p(x|X^D) &= \int p(x|\theta) p(\theta | X^D) d\theta \end{align}
変分Bayes
変分Bayes(Variational Bayes, VB)は、1990年代に考案されたBayes推定の反復アルゴリズム。
- \(p(x, z)\)が関数として既知。
- 分布\(p\)に従って生成された値\((x, z)\)の内、\(x\)だけが観測されていてデータ\(x^D\)として値が得られている。
- \(p(z|x^D)\)に平均場近似を適用できる。
観測データから推測される\(z\)の分布\(p(z|x^D)\)を求める。
ここで、平均場近似(Mean field approximation)を適用できるとは、\(z\)の成分をM個のグループに分解して確率密度を以下のように近似することができるということを意味する。
\begin{align} p(z|x^D) &\sim q(z) \\ &= \prod_{m=1}^M q_m(z_m) \end{align}
また、これまで分布のパラメーターとして扱ってきた\(\theta\)も、潜在変数\(z\)の成分の一つとして含ませることができる。
アルゴリズムの導出
\(z\)の分布\(q^{(t)}\)を更新し続けて\(p(z|x)\)に近づけることを目指す。
そのためには\(q^{(t)}\)と\(p(z|x)\)とのKL情報量を最小化すれば良い。
\begin{align} D_{KL}\left(q^{(t)}\middle\|p(\cdot|x^D)\right) &= \int q^{(t)}(z)\log\frac{q^{(t)}(z)}{p(z|x^D)} dz \\ &= \int q^{(t)}(z)\log\frac{q^{(t)}(z)p(x^D)}{p(x^D, z)} dz \\ &= \log p(x^D) - \int q^{(t)}(z)\log\frac{p(x^D, z)}{q^{(t)}(z)} dz \\ &=: \log p(x^D) - F(q^{(t)}|x^D) \\ \end{align}
第1項は\(q^{(t)}\)に依存しないので、\(q^{(t)}\)を\(p(z|x)\)に近づけるということは変分下限\(F(q^{(t)}|x^D)\)を最大化するということと同義である。
平均場近似の仮定を用いて、変分下限を計算する。
\begin{align} F(q^{(t)}|x^D) &= \int q^{(t)}(z)\log\frac{p(x^D, z)}{q^{(t)}(z)} dz \\ &= \int q^{(t)}(z)\log p(x^D, z)dz - \int q^{(t)}(z)\log q^{(t)}(z) dz \\ &= \int q^{(t)}(z)\log p(x^D, z)dz - \int \left(\prod_{m'} q_{m'}^{(t)}(z_{m'})\right)\log\left(\prod_m q_m^{(t)}(z_m)\right) dz \\ &= \int q^{(t)}(z)\log p(x^D, z)dz - \sum_m \int \left(\prod_{m'} q_{m'}^{(t)}(z_{m'})\right)\log q_m^{(t)}(z_m) dz \\ &= \int q^{(t)}(z)\log p(x^D, z)dz - \sum_m \left( \left( \int q_m^{(t)}(z_m) \log q_m^{(t)}(z_m) dz_m \right) \prod_{m'\neq m} \left( \int q_{m'}^{(t)}(z_{m'}) dz_{m'} \right) \right) \\ &= \int q^{(t)}(z)\log p(x^D, z)dz - \sum_m \int q_m^{(t)}(z_m)\log q_m^{(t)}(z_m) dz_m \\ \end{align}
ここで、まず\(q_i^{(t)}\)だけを変動させて変分下限を最大化する。
\begin{align} \underset{q_i^{(t)}}{\rm argmax} F(q^{(t)}|x^D) &= \underset{q_i^{(t)}}{\rm argmax} \left( \int q^{(t)}(z)\log p(x^D, z)dz - \sum_m \int q_m^{(t)}(z_m)\log q_m^{(t)}(z_m) dz \right) \\ &= \underset{q_i^{(t)}}{\rm argmax} \left( \int q_i^{(t)}(z_i)q^{(t)}(z|z_i)\log p(x^D, z)dz - \int q_i^{(t)}(z_i)\log q_i^{(t)}(z_i) dz \right) \\ &= \underset{q_i^{(t)}}{\rm argmax} \left( \int q_i^{(t)}(z_i)\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)dz_i - \int q_i^{(t)}(z_i)\log q_i^{(t)}(z_i) dz \right) \\ &= \underset{q_i^{(t)}}{\rm argmax} \left( \int q_i^{(t)}(z_i)\log\left(\exp\left(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\right)\right)dz_i - \int q_i^{(t)}(z_i)\log q_i^{(t)}(z_i) dz \right) \\ &= \underset{q_i^{(t)}}{\rm argmax} \left( - \int q_i^{(t)}(z_i)\log\frac{q_i^{(t)}(z_i)}{\exp\left(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\right)} dz \right) \\ &= \underset{q_i^{(t)}}{\rm argmax} \left( - D_{KL}\left(q_i^{(t)}\|\frac{1}{C}\exp\left(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\right)\right) \right) \\ &= \underset{q_i^{(t)}}{\rm argmin} \left( D_{KL}\left(q_i^{(t)}\|\frac{1}{C}\exp\left(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\right)\right) \right) \\ &= \frac{1}{C}\exp\left(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\right) \\ \end{align}
ここで、\(\mathbb{E}_{q^{(t)}(z|z_i)}\)は\(q_i^{(t)}\)を除く\(\prod_{m\neq i}q_m^{(t)}(z_m)\)による期待値。
また、\(q_i^{(t)}\)は確率密度関数にならなければならないので、\(C=\int \mathbb{E}_{q^{(t)}(z|z_i)}\left(\rm{log}p(x^D, z)\right) dz_i\)によって正規化している。
なお、ここでは最終的にKL情報量になるよう式を変形することで\(q_i^{(t)}\)の更新先を求めたが、変分法を使って求めることもできる。(これが変分Bayesの名前の由来)
更新アルゴリズム
よって、\(q_m^{(t)}\)を以下のように更新することで変分下限を上昇させることができる。
\(\{q_m^{(0)}\}_{m=2}^M\)を適当に初期化し、以下の更新式で\(\{q_m^{(t)}\}_{m=1}^M\)を更新していく。
\begin{align} \begin{cases} q_1^{(t+1)}(z_1) &= \frac{1}{C}\exp\left(\mathbb{E}_{q^{(t)}(z_{2:M})}\left(\log p(x^D, z)\right)\right) \\ q_2^{(t+1)}(z_2) &= \frac{1}{C}\exp\left(\mathbb{E}_{q^{(t+1)}(z_1)q^{(t)}(z_{3:M})}\left(\log p(x^D, z)\right)\right) \\ &\vdots \\ q_i^{(t+1)}(z_i) &= \frac{1}{C}\exp\left(\mathbb{E}_{q^{(t+1)}(z_{1:i-1})q^{(t)}(z_{i+1:M})}\left(\log p(x^D, z)\right)\right) \\ &\vdots \\ q_M^{(t+1)}(z_M) &= \frac{1}{C}\exp\left(\mathbb{E}_{q^{(t+1)}(z_{1:M-1})}\left(\log p(x^D, z)\right)\right) \\ \end{cases} \end{align}
ここで、\(\mathbb{E}_{q^{(t)}(z_{i:j})}\)は\(\prod_{i\le m \le j}q_m^{(t)}(z_m)\)による期待値。
十分な回数の更新を行った結果、\(q^{(t)}(z)=\prod_{m} q_m^{(t)}(z_m)\)が\(p(z|x^D)\)の近似となる(場合がある)。
特徴
- 潜在変数を含む確率モデルのBayes推定に適用することができる。
- \(z\)に対する平均場近似の仮定が必要で、少なくとも2成分以上に分解できなければ適用できない。
- \(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\)の計算が必要。
- \(p(x|z), q(z)\)を共役事前分布の関係となるように設計することで、\(\mathbb{E}_{q^{(t)}(z|z_i)}\left(\log p(x^D, z)\right)\)が再び既知の分布になるよう誘導して計算を簡略化することができる。この記事では詳しい説明は省略する。