からっぽのしょこ

読んだら書く!書いたら読む!同じ事は二度調べ(たく)ない

2.7:ユニグラムモデルのハイパーパラメータ推定【『トピックモデル』の勉強ノート】

はじめに

 機械学習プロフェッショナルシリーズの『トピックモデル』の勉強時に自分の理解の助けになったことや勉強会資料のまとめです。トピックモデルの各種アルゴリズムを「数式」と「プログラム」から理解することを目指します。

 この記事は、2.7節「ハイパーパラメータ推定」の内容です。不動点反復法を用いて、ユニグラムモデルにおけるハイパーパラメータの更新式を導出します。

 この記事で用いる記号類やユニグラムモデルの定義については、2.1-2:ユニグラムモデル【『トピックモデル』の勉強ノート】 - からっぽのしょこをご確認ください。

【前節の内容】

www.anarchive-beta.com

【他の節一覧】

www.anarchive-beta.com

【この節の内容】


2.7 ハイパーパラメータ推定

 MAP推定とベイズ推定では、ハイパーパラメータと呼ばれる事前分布のパラメータが必要である。前節までは、ハイパーパラメータの値を$\beta=2$のように自分で決めていた。この節では、経験ベイズ推定を用いてデータからハイパーパラメータを推定する。

・経験ベイズ推定

 経験ベイズ推定では、パラメータ$\boldsymbol{\phi}$を周辺化した周辺尤度$p(\mathbf{W} | \beta)$を最大化するハイパーパラメータ$\beta$を求める。

 ユニグラムモデルの周辺尤度は

$$ \begin{align} p(\mathbf{W} | \beta) &= \int p(\mathbf{W} | \boldsymbol{\phi}) p(\boldsymbol{\phi} | \beta) d\boldsymbol{\phi} \\ &= \int \prod_{v=1}^V \phi_v^{N_v} \frac{\Gamma(\beta V)}{\Gamma(\beta)^V} \prod_{v=1}^V \phi_v^{\beta-1} d\boldsymbol{\phi} \\ &= \frac{\Gamma(\beta V)}{\Gamma(\beta)^V} \int \prod_{v=1}^V \phi_v^{N_v+\beta-1} d\boldsymbol{\phi} \\ &= \frac{\Gamma(\beta V)}{\Gamma(\beta)^V} \prod_{v=1}^V \frac{ \Gamma(N_v + \beta) }{ \Gamma(N + \beta V) } \tag{2.8}\\ &= \frac{\Gamma(\beta V)}{\Gamma(N + \beta V)} \prod_{v=1}^V \frac{ \Gamma(N_v + \beta) }{ \Gamma(\beta) } \tag{2.8'} \end{align} $$

【途中式の途中式】

  1. それぞれ項を具体的な値に置き換える。
    • 生成モデル(2.1)より、尤度は$p(\mathbf{W} | \boldsymbol{\phi}) = \prod_{v=1}^V \phi_v^{N_v}$である。
    • 事前分布(2.7)より、$p(\boldsymbol{\phi} | \beta) = \mathrm{Dirichlet}(\boldsymbol{\phi} | \beta)$である。
  2. $\boldsymbol{\phi}$と関係のない項を$\int$の外に出し、$\phi_v$の項を1つにまとめる。
  3. ディリクレ分布の正規化項の導出過程(1.13)より、置き換える。
  4. 分母分子の$\beta,\ \beta V$を揃えるために、分母の項を入れ替える。


 この分布はポリヤ分布と呼ばれる。

 この式に不動点反復法を用いて更新を繰り返すことで、周辺尤度を最大化する$\beta$を求める。そこで不動点反復法を行えるように、式を変形する。

・不動点反復法のための式変形

 まずは、ディガンマ関数$\Psi(x)$について確認する。

$$ \Psi(x) = \frac{d\log \Gamma(x)}{dx} $$

 ディガンマ関数は、対数をとったガンマ関数の微分である。

 次のようなグラフになる。

ディガンマ関数


 ディガンマ関数の単調増加性から、対数をとったガンマ関数の曲線$f(x) = \log \Gamma(x)$上の2点$(x_1, y_1), (x_2, y_2)$を通る直線の傾き$\frac{\log \Gamma(x_2) - \log \Gamma(x_1)}{x_2 - x_1}$と曲線上の点$(x_1, y_1)$を通る接線の傾き$\Psi(x_1)$との関係は

$$ \frac{\log \Gamma(x_2) - \log \Gamma(x_1)}{x_2 - x_1} > \Psi(x_1) $$

である。

 グラフでも確認できる。

対数をとったガンマ関数


 このことから、$x_2$を$x$、$x_2$の1期前(更新前)の値として$x_1$を$\hat{x}$とすると

$$ \begin{align} \frac{ \log \Gamma(x) - \log \Gamma(\hat{x}) }{ x - \hat{x} } &\geq \Psi(\hat{x}) \\ \log \Gamma(x) - \log \Gamma(\hat{x}) &\geq (x - \hat{x}) \Psi(\hat{x}) \\ \log \Gamma(x) &\geq \log \Gamma(\hat{x}) + (x - \hat{x}) \Psi(\hat{x}) \tag{1}\\ \Gamma(x) &\geq \Gamma(\hat{x}) + \exp \{ (x - \hat{x}) \Psi(\hat{x}) \} \end{align} $$

という関係性が得られる。

 同様に、$x$が$n + x$だった場合を考える。

$$ \begin{align} \Gamma(n + x) &\geq \Gamma(n + \hat{x}) + \exp[ \{n + x - (n + \hat{x})\} \Psi(n + \hat{x}) ] \\ &= \Gamma(n + \hat{x}) + \exp\{ (x - \hat{x}) \Psi(n + \hat{x}) \} \\ \log \Gamma(n + x) &\geq \log \Gamma(n + \hat{x}) + (x - \hat{x}) \Psi(n + \hat{x}) \tag{2} \end{align} $$

 式(1)から式(2)を引く。

$$ \begin{aligned} \log \Gamma(x) - \log \Gamma(n + x) &\geq \log \Gamma(\hat{x}) + (x - \hat{x}) \Psi(\hat{x}) - \log \Gamma(n + \hat{x}) - (x - \hat{x}) \Psi(n + \hat{x}) \\ &= \log \Gamma(\hat{x}) - \log \Gamma(n + \hat{x}) + (x - \hat{x}) \Bigl( \Psi(\hat{x}) - \Psi(n + \hat{x}) \Bigr) \\ &= \log \Gamma(\hat{x}) - \log \Gamma(n + \hat{x}) + (\hat{x} - x) \Bigl( \Psi(n + \hat{x}) - \Psi(\hat{x}) \Bigr) \\ \frac{\Gamma(x)}{\Gamma(n + x)} &\geq \frac{ \Gamma(\hat{x}) \exp \Bigl( (\hat{x} - x) b \Bigr) }{ \Gamma(n + \hat{x}) } \end{aligned} $$

 最後に$\log$を外して、この関係式が得られる。ここで、$b = \Psi(n + \hat{x}) - \Psi(\hat{x})$と置いている。

 同様に、(2)から(1)を引いた式を求める。

$$ \begin{aligned} \log \Gamma(n + x) - \log \Gamma(x) &\geq \log \Gamma(n + \hat{x}) + (x - \hat{x}) \Psi(n + \hat{x}) - \log \Gamma(\hat{x}) - (x - \hat{x}) \Psi(\hat{x}) \\ &= \log \Gamma(n + \hat{x}) - \log \Gamma(\hat{x}) + (x - \hat{x}) \Bigl( \Psi(n + \hat{x}) - \Psi(\hat{x}) \Bigr) \\ &= \log \Gamma(n + \hat{x}) - \log \Gamma(\hat{x}) + \frac{x - \hat{x}}{\hat{x}} \Bigl( \Psi(n + \hat{x}) - \Psi(\hat{x}) \Bigr) \hat{x} \\ &\fallingdotseq \log \Gamma(n + \hat{x}) - \log \Gamma(\hat{x}) + (\log x - \log \hat{x}) \Bigl( \Psi(n + \hat{x}) - \Psi(\hat{x}) \Bigr) \hat{x} \\ \frac{\Gamma(n + x)}{\Gamma(x)} &\geq \frac{\Gamma(n + \hat{x})}{\Gamma(\hat{x})}\left( \frac{x}{\hat{x}} \right)^{ (\Psi(n + \hat{x}) - \Psi(\hat{x})) \hat{x} } \\ &= \frac{\Gamma(n + \hat{x})}{\Gamma(\hat{x})} \left(\frac{x}{\hat{x}} \right)^a \\ &= \frac{\Gamma(n + \hat{x})}{\Gamma(\hat{x})} {\hat{x}}^{-a} x^a \\ &= c x^a \end{aligned} $$

【途中式の途中式】

  1. 式を整理する。
  2. 後の因子に$\frac{\hat{x}}{\hat{x}} = 1$を分割して掛ける。
  3. 対数変化率より、$\frac{x - \hat{x}}{\hat{x}} \fallingdotseq \log x - \log \hat{x}$で置き換える。
  4. 両辺の$\log$を外す。
  5. $a = \Bigl(\Psi(n + \hat{x}) - \Psi(\hat{x})\Bigr) \hat{x}$とおく。
  6. $\frac{1}{x} = x^{-1}$であり、また$(x^n)^m = x^{n*m}$であることから、$\left(\frac{x}{\hat{x}} \right)^a$を分割する。
  7. $c = \frac{\Gamma(n + \hat{x})}{\Gamma(\hat{x})} {\hat{x}}^{-a}$とおく。


 以上のことを次にまとめる。

・まとめ

$$ \frac{\Gamma(x)}{\Gamma(n + x)} \geq \frac{ \Gamma(\hat{x}) \exp \{ (\hat{x} - x) b \} }{ \Gamma(n + \hat{x}) } $$

 ここで

$$ b = \Psi(n + \hat{x}) - \Psi(\hat{x}) $$

 また$n \geq 1,\ x \geq 0$のとき

$$ \frac{\Gamma(n + x)}{\Gamma(x)} \geq c x^a $$

である。ここで

$$ \begin{aligned} a &= \Bigl( \Psi(n + \hat{x}) - \Psi(\hat{x}) \Bigr) \hat{x} \\ c &= \frac{\Gamma(n + \hat{x})}{\Gamma(\hat{x})} \hat{x}^{-a} \end{aligned} $$


 この関係性を用いて式を変形し、不動点反復法を行う。

・ハイパーパラメータの推定

 式(2.8)に対して不動点反復法を用いて、更新を繰り返すことで$\beta$に関して最大化する。

 まずはそのための式変形を行う。先ほどの関係性を用いて、式(2.8')の前の項は

$$ \frac{\Gamma(\beta V)}{\Gamma(N + \beta V)} \geq \frac{ \Gamma(\hat{\beta} V) \exp \{ (\hat{\beta} V - \beta V) b \} }{ \Gamma(N + \hat{\beta} V) } $$

となり、後ろの項は

$$ \prod_{v=1}^V \frac{\Gamma(N_v + \beta)}{\Gamma(\beta)} \geq \prod_{v=1}^V \frac{ (N_v + \hat{\beta}) }{ \Gamma(\hat{\beta}) } \hat{\beta}^{-a} \beta^a $$

となる。

 よってこれらをまとめると、式(2.8)は

$$ \frac{\Gamma(\beta V)}{\Gamma(N + \beta V)} \prod_{v=1}^V \frac{ \Gamma(N_v + \beta) }{ \Gamma(\beta) } \geq \frac{ \Gamma(\hat{\beta} V) \exp \{ (\hat{\beta} V - \beta V) b \} }{ \Gamma(N + \hat{\beta} V) } \prod_{v=1}^V \frac{ (N_v + \hat{\beta}) }{ \Gamma(\hat{\beta}) } \hat{\beta}^{-a} \beta^a $$

とできる。ここで

$$ \begin{aligned} a &= \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \\ b &= \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \end{aligned} $$

である。

 右辺に$a,\ b$をそれぞれ代入すると

$$ \frac{ \Gamma(\hat{\beta} V) \exp \left\{ (\hat{\beta} V - \beta V) \Bigl( \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \Bigr) \right\} }{ \Gamma(N + \hat{\beta} V) } \prod_{v=1}^V \frac{ (N_v + \hat{\beta}) }{ \Gamma(\hat{\beta}) } \hat{\beta}^{-(\Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta})) \hat{\beta}} \beta^{(\Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta})) \hat{\beta}} $$

である。

 計算を分かりやすくするために、この式の対数をとり$G$とおく。

$$ \begin{aligned} G &= \log \Gamma(\hat{\beta} V) + (\hat{\beta} V - \beta V) \Bigl( \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \Bigr) - \log \Gamma(N + \hat{\beta} V) \\ &\qquad + \sum_{v=1}^V \log (N_v + \hat{\beta}) - V \log \Gamma(\hat{\beta}) - \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \log \hat{\beta} + \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \log \beta \end{aligned} $$

 この式を$\beta$に関して微分して0となる$\beta$を求める。

$$ \begin{aligned} \frac{\partial G}{\partial \beta} = - V \Bigl( \Psi(n + \hat{\beta}) - \Psi(\hat{\beta} V) \Bigr) &+ \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \frac{1}{\beta} = 0 \\ \beta &= \hat{\beta} \frac{ \sum_{v=1}^V \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) }{ V \Psi(n + \hat{\beta}) - V \Psi(\hat{\beta} V) } \end{aligned} $$

 $\beta$の1期前の値を$\hat{\beta}$としていたので、$\hat{\beta}$を現ステップ(更新前)の$\beta$とし、左辺の$\beta$を次ステップ(更新後)のパラメータ$\beta^{\mathrm{new}}$とする。

$$ \beta^{\mathrm{new}} = \beta \frac{ \sum_{v=1}^V \Psi(N_v + \beta) - \Psi(\beta) }{ V \Psi(n + \beta) - V \Psi(\beta V) } \tag{2.9} $$

 この式がハイパーパラメータ$\beta$の更新式となる。更新を繰り返すことで、周辺尤度が最大化される。

・事後確率を最大化によるハイパーパラメータ推定

 この項では、ハイパーパラメータ$\beta$に更に事前分布を設定する。パラメータ$\boldsymbol{\phi}$を周辺化したときのハイパーパラメータ$\beta$の事後確率を最大化することで、ハイパーパラメータを推定する。

 周辺尤度$p(\mathbf{W} | \beta) = \int p(\mathbf{W} | \boldsymbol{\phi}) p(\boldsymbol{\phi} | \beta) d\boldsymbol{\phi}$にベイズの定理(1.4)を用いて式を立てる。

$$ p(\beta | \mathbf{W}) = \frac{ p(\mathbf{W} | \beta) p(\beta) }{ p(\mathbf{W}) } $$

 事前分布のパラメータ$\beta$に対して、更に事前分布$p(\beta) = \mathrm{Gamma}(c, d)$を仮定する。$c,\ d$は$\beta$の事前分布(ガンマ分布)のパラメータである。

 計算を分かりやすくするために対数をとる。

$$ \log p(\beta | \mathbf{W}) = \log p(\mathbf{W} | \beta) + \log p(\beta) - \log p(\mathbf{W}) $$

 この式を用いて、事後分布$p(\beta | \mathbf{W})$を最大化する$\beta$を求める。このことを数式で表現するには次のように書く。

$$ \mathop{\mathrm{argmax}}\limits_{\beta} p(\beta | \mathbf{W}) = \mathop{\mathrm{argmax}}\limits_{\beta}[ \log p(\mathbf{W} | \beta) + \log p(\beta) - \log p(\mathbf{W}) ] $$

 対数関数$y = \log x$は単調増加するので、対数をとった事後分布$\log p(\beta | \mathbf{W})$が最大化されるとき$p(\beta | \mathbf{W})$も最大化される(のでこの等式が成り立つ)。

 この式に具体的な値を代入して解く。ただし$\log p(\mathbf{W})$は$\beta$に影響しないので省ける(省かなくても微分時に消える)。

$$ \begin{aligned} \mathop{\mathrm{argmax}}\limits_{\beta} p(\beta | \mathbf{W}) &= \mathop{\mathrm{argmax}}\limits_{\beta}[ \log p(\mathbf{W} | \beta) + \log p(\beta) ] \\ &= \mathop{\mathrm{argmax}}\limits_{\beta} \Biggl[ \log \Gamma(\hat{\beta} V) + (\hat{\beta} V - \beta V) \Bigl( \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \Bigr) - \log \Gamma(N + \hat{\beta} V) \Biggr.\\ &\qquad + \sum_{v=1}^V \log (N_v + \hat{\beta}) - V \log \Gamma(\hat{\beta}) \\ &\qquad - \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \log \hat{\beta} + \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \log \beta \\ &\qquad \Biggl. + \log \left( \frac{d^c}{\Gamma(c)} \beta^{c-1} \exp(- d \beta) \right) \Biggr] \\ &= \mathop{\mathrm{argmax}}\limits_{\beta} \Biggl[ - \beta V \Bigl( \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \Bigr) + \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \log \beta \Biggr.\\ &\qquad \Biggl. + c \log d - \log \Gamma(c) + (c - 1) \log \beta - d \beta \Biggr] \\ &= \mathop{\mathrm{argmax}}\limits_{\beta} \Biggl[ - \beta V \Bigl( \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \Bigr) + \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \log \beta \Biggr.\\ &\qquad \Biggl. + (c - 1) \log \beta - d \beta \Biggr] \end{aligned} $$

【途中式の途中式】

  1. それぞれの項を具体的な値に置き換える。
    • 周辺尤度(2.8)を変形した関数$G$を用いる。
    • ハイパーパラメータ$\beta$の事前分布は$p(\beta) = \mathrm{Gamma}(\beta | c, d)$である。
  2. 式を展開して、$\beta$と無関係な項を(は最大化に影響しない上、次の微分時に消えるため)省く。


 この式を$\beta$に関して微分して、$\frac{\partial}{\partial \beta} = 0$となる$\beta$を求める。

$$ \begin{aligned} \frac{\partial}{\partial \beta} = - V \Bigl( \Psi(n + \hat{\beta} V) - \Psi(\hat{\beta} V) \Bigr) &+ \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) \hat{\beta} \frac{1}{\beta} + (c - 1) \frac{1}{\beta} - d = 0 \\ \beta &= \frac{ c - 1 + \hat{\beta} \sum_{v=1}^V \Bigl( \Psi(N_v + \hat{\beta}) - \Psi(\hat{\beta}) \Bigr) }{ d + V \Psi(n + \hat{\beta} V) - V \Psi(\hat{\beta} V) } \end{aligned} $$

 $\hat{\beta}$を更新前の$\beta$、左辺の$\beta$を更新後の$\beta^{\mathrm{new}}$とすると、更新式

$$ \beta^{\mathrm{new}} = \frac{ c - 1 + \beta \sum_{v=1}^V \Bigl( \Psi(N_v + \beta) - \Psi(\beta) \Bigr) }{ d + V \Psi(n + \beta V) - V \Psi(\beta V) } $$

が得られる。

参考書籍

  • 岩田具治(2015)『トピックモデル』(機械学習プロフェッショナルシリーズ)講談社

おわりに

 この節でChapter2終了。出てくる用語や概念の理解が追い付いていなくて、不動点反復法やらイマイチ理解できていない…
 一度最後まで通したら理解も深まっていると思うので、2週目の段階でまた加筆修正しますね。

2019.07.14:加筆修正しました。

2020.07.02:加筆修正しました。

 ちょっと分かった気がします。

【次節の内容】

www.anarchive-beta.com