無から始める変分ベイズ

## 動機

何らかのパラメータ $\theta$ で記述された分布があって、その分布から観測データ $D$ が得られるとします。ベイズの定理

$$
p(\theta | D) = \dfrac{p(D|\theta) p(\theta)}{p(D)} = \dfrac{p(D|\theta) p(\theta)}{\int p(D|\theta) p(\theta) d\theta}
$$

では、$p(\theta)$ を事前確率、$p(\theta|D)$ を事後確率と呼びますが、これを使って、事後確率が最大となる $\theta$ を求めたり（MAP推定）、$p(\theta|D)$ を実際に計算したり（ベイズ推定）したりするのでした。

参考: [藤井四段で学ぶ最尤推定、MAP推定、ベイズ推定](https://qiita.com/jyori112/items/80b21422b15753a1c5a4)

一方、確率的生成モデルと呼ばれる高度な方法だと、$\theta$ は決定的な値ではなく確率変数として考えます。つまり、$\theta$ を決定するようなハイパーパラメータ $\eta$ が登場し、

$$
p(\theta | D, \eta) = \dfrac{p(D|\theta, \eta) p(\theta|\eta)}{p(D|\eta)} = \dfrac{p(D|\theta, \eta) p(\theta|\eta)}{\int p(D|\theta, \eta) p(\theta|\eta) d\theta}
$$

と記述されます。
複雑なモデルの場合、分子の $p(D|\eta) = \int p(D|\theta, \eta) p(\theta|\eta) d\theta$ の部分の計算はお手上げです。それゆえ $p(\theta | D, \eta)$ がどうなっているのかもよく分かりません。

<br>

変分ベイズ法では、真の事後確率分布 $p(\theta | D, \eta)$ を、別の分布 $q(\theta)$ で近似します（この近似した分布は変分事後分布とも呼ばれます）。
流れとしては、まず扱いやすい形の分布を $q(\theta)$ として天下り的に初期設定し、ある最適化問題（後述）を解くことで、次第に真の事後確率分布に近づけていきます。ではどのような問題を解けばいいのでしょうか？

## 変分下界（変分下限）

まず、周辺尤度 $\log p(D|\eta)$ （先ほどのベイズの式の分母に$\log$を取ったものです）には下界があることを示します。

$$
\begin{align}
\log p(D|\eta) &= \log \int p(D, \theta|\eta) d\theta \\\
  &= \log \int q(\theta) \dfrac{p(D, \theta|\eta)}{q(\theta)} d\theta \\\
  &= \log E_{q(\theta)} [\dfrac{p(D, \theta|\eta)}{q(\theta)}] \\\
  &\geq E_{q(\theta)} [\log \dfrac{p(D, \theta|\eta)}{q(\theta)}] \\\
  &= \int q(\theta) \log \dfrac{p(D, \theta|\eta)}{q(\theta)} d\theta
\end{align}
$$

なお、イェンセンの不等式を途中で用いました。

$\int q(\theta) \log \frac{p(D, \theta|\eta)}{q(\theta)} d\theta$ は、$q(\theta)$ という関数を入力として取る関数であり、このようなタイプの関数を汎関数と呼びます。簡単のために、

$$
  F_\eta\\{q(\theta)\\} = \int q(\theta) \log \frac{p(D, \theta|\eta)}{q(\theta)} d\theta
$$

と記号を置きましょう。この $F_\eta$ を**変分下界（変分下限）**と言います。実は、この変分下界を最大化することが、$q(\theta)$ を真の事後確率分布 $p(\theta | D, \eta)$ に近づけることと等価なのです。次はそれを説明します。

## 周辺尤度、変分下界、KLダイバージェンスの関係

周辺尤度と変分下界の差がどの程度あるのかを計算してみます。

$$
\begin{align}
& \log p(D|\eta) - F_\eta\\{q(\theta)\\} \\\
=& \log p(D|\eta) - \int q(\theta) \log \frac{p(D, \theta|\eta)}{q(\theta)} d\theta \\\
=& \log p(D|\eta) \int q(\theta) d\theta - \int q(\theta) \log \frac{p(D, \theta|\eta)}{q(\theta)} d\theta \\ \\ (q(\theta) {は積分すると} 1) \\\
=& \int q(\theta)\log p(D|\eta) d\theta - \int q(\theta) \log \frac{p(D, \theta|\eta)}{q(\theta)} d\theta \\ \\ (\log p(D|\eta)\text{は}\theta\text{に依存しないため}) \\\
=& \int q(\theta)\log \dfrac{p(D|\eta) q(\theta)}{p(D, \theta|\eta)} d\theta \\\
=& \int q(\theta)\log \dfrac{q(\theta)}{p(\theta|D, \eta)} d\theta 
\end{align}
$$

最終的に得られた式は、KLダイバージェンスを用いて $KL[q(\theta), p(\theta|D, \eta)]$ と書けます。
KLダイバージェンスとは、大雑把には2つの分布の近さを表すような指標で、非負であり、小さければ小さいほど分布が近いことを表します。ここでは、真の事後確率分布 $p(\theta | D, \eta)$ に $q(\theta)$ が近ければ近いほど $KL[q(\theta), p(\theta|D, \eta)]$ が小さいという意味になります。

$\log p(D|\eta)$ が $q(\theta)$ に依存しないことを踏まえると、$KL[q(\theta), p(\theta|D, \eta)]$ をなるべく小さくする $q(\theta)$ を求めることは、変分下界 $F_\eta\\{q(\theta)\\}$ をなるべく大きくする $q(\theta)$ を求めるのと同じなのです。

したがって、変分ベイズ法では、何らかの形状の分布 $q(\theta)$ を設定し、その $q(\theta)$ に対して変分下界 $F_\eta\\{q(\theta)\\}$ を最大にするような $q(\theta)$ を計算することで、$q(\theta)$ が事後確率分布 $p(\theta | D, \eta)$ の最も良い近似になるのです。

## 変分法

変分下界 $F_\eta\\{q(\theta)\\}$ を最大にするような $q(\theta)$、とさらっと書きましたが、実際にはどのような計算を行うのでしょうか。通常の関数であれば微分（勾配）を取るだけですが、今回計算対象の $F_\eta$ は汎関数です。

一般的には、汎関数の極値を求めるにはオイラー・ラグランジュ方程式を解きます。汎関数 $F[q(x)] = \int f(x, q) dx$ の極値を与える $q(x)$ は次の方程式を解くことで求められます。

$$
\dfrac{\partial f(x, q)}{\partial q(x)} = 0
$$

今回は、この式が変分ベイズでは具体的にどのように式変形されるのか、という部分に関しては割愛させていただきます。

[変分ベイズ法の解説](https://qiita.com/takuro-Ishida/items/2ecfafc679260211a0ab#%E9%A0%91%E5%BC%B5%E3%81%A3%E3%81%A6%E8%A8%88%E7%AE%97)
[初心に帰って変分ベイズ(1)::8/31](https://fgjiutx.hatenablog.com/entry/2018/08/31/224227)

などが分かりやすかったのでこちらをご覧ください。

## 補足

今回は単純なケースとして、パラメータが $\theta$ 一つの場合を考えてみましたが、複数のパラメータが登場する複雑なケースも考えられます。例えば混合ガウスモデルのような隠れ変数が登場するモデルなどがあります。
このような場合、変分下界の最適化に相当する式をそれぞれのパラメータに対して立てて、それらの最適化の式を順番に（交互に）実行していき、収束したところで止める、という形になります。