からっぽのしょこ

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

2.7:ユニグラムモデルの経験ベイズ推定の導出:多様なハイパーパラメータの場合【青トピックモデルのノート】

はじめに

 『トピックモデル』(MLPシリーズ)の勉強会資料のまとめです。各種モデルやアルゴリズムを「数式」と「プログラム」を用いて解説します。
 本の補助として読んでください。

 この記事では、カテゴリモデルに対する経験ベイズ推定(ハイパーパラメータ推定)の数式の行間を埋めます。

【前節の内容】

www.anarchive-beta.com

【他の節の内容】

www.anarchive-beta.com

【この節の内容】

2.7 ユニグラムモデルの経験ベイズ推定の導出:多様なハイパーパラメータの場合

 ユニグラムモデル(unigram model)に対する不動点反復法(固定点反復法・fixed point iteration)を用いた経験ベイズ推定(empirical Bayesian estimation)におけるハイパーパラメータの計算式を導出する。この記事では、ハイパーパラメータが多様な値の場合を扱う。
 ユニグラムモデルの定義や記号については「2.2:ユニグラムモデルの生成モデルの導出【青トピックモデルのノート】 - からっぽのしょこ」、ハイパーパラメータが一様な値の場合については「2.7:ユニグラムモデルの経験ベイズ推定の導出:一様なハイパーパラメータの場合【青トピックモデルのノート】 - からっぽのしょこ」を参照のこと。

経験ベイズ解の設定

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

 \displaystyle
\boldsymbol{\beta}_{\mathrm{EB}}
    = \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}}
          p(\mathbf{W} | \boldsymbol{\beta})
\tag{1}

  \mathop{\mathrm{argmax}}\limits_{x} f(x) は、関数  f(x) を最大化させる引数(変数)  x を表す。また、単語分布のハイパーパラメータの経験ベイズ解を  \boldsymbol{\beta}_{\mathrm{EB}} とする。

 ユニグラムモデルにおける周辺尤度は、次の式で定義される。

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

途中式の途中式(クリックで展開)


  • 1: 周辺化されたパラメータ  \boldsymbol{\phi} を明示する。
  • 2: 依存関係に従い同時分布を分割する。
  • 3: ユニグラムモデルの定義(2.2節)より、尤度(文書集合の生成確率)と事前確率(ディリクレ分布)を具体的な式に置き替える。
  • 4:  \boldsymbol{\phi} と無関係な正規化項を  \int の外に出し、 \phi_v の項をまとめる。
  • 5: ディリクレ分布の正規化項(1.2.4項)より、積分の項全体を正規化項の逆数に置き替える。
  • 6: 各語彙の出現回数  N_v と総単語数  N の関係より、 N = \sum_{v=1}^V N_v である。
  • 6: 分母を入れ替えて  \beta_v, \sum_{v=1}^V \beta_v の項をそれぞれまとめる。

 周辺尤度の式については「2.2:ユニグラムモデルの生成モデルの導出【青トピックモデルのノート】 - からっぽのしょこ」を参照のこと。

 この式を式(1)に代入する。

 \displaystyle
\boldsymbol{\beta}_{\mathrm{EB}}
    = \mathop{\mathrm{argmax}}\limits_{\beta} \left[
          \frac{
              \Gamma(\sum_{v=1}^V \beta_v)
          }{
              \Gamma(N + \sum_{v=1}^V \beta_v)
          }
          \prod_{v=1}^V
              \frac{\Gamma(N_v + \beta_v)}{\Gamma(\beta_v)}
      \right]

 周辺尤度を最大化するハイパーパラメータは、式(2.8')を最大化するハイパーパラメータを求めればよいことが分かった。
 ただし、周辺尤度を解析的に計算するのは困難である。そこで、不動点反復法により繰り返し値を更新して経験ベイズ解を近似することを考える。

不動点反復法の更新式の導出

 周辺尤度(2.8')に関して、2つの項をそれぞれ

 \displaystyle
\begin{aligned}
\frac{
    \Gamma(\sum_{v=1}^V \beta_v)
}{
    \Gamma(N + \sum_{v=1}^V \beta_v)
}
   &\geq
      \frac{
          \Gamma(\sum_{v=1}^V \beta_v)
      }{
          \Gamma(N + \sum_{v=1}^V \beta_v)
      }
      \exp \left(
          \sum_{v=1}^V
              (\beta - \beta^{\mathrm{new}})
              b
      \right)
\\
\frac{\Gamma(N_v + \beta_v)}{\Gamma(\beta_v)}
   &\geq
      \frac{\Gamma(N_v + \beta_v)}{\Gamma(\beta_v)}
      \beta_v^{-a}
      (\beta_v^{\mathrm{new}})^a
\end{aligned}

に置き換えて、下限  G とおく。

 \displaystyle
\begin{align}
p(\mathbf{W} | \beta)
   &= \frac{
          \Gamma(\sum_{v=1}^V \beta_v)
      }{
          \Gamma(N + \sum_{v=1}^V \beta_v)
      }
      \prod_{v=1}^V
          \frac{\Gamma(N_v + \beta)}{\Gamma(\beta)}
\tag{2.8'}\\
   &\geq
      \frac{
          \Gamma(\sum_{v=1}^V \beta_v)
      }{
          \Gamma(N + \sum_{v=1}^V \beta_v)
      }
      \exp \left(
          \sum_{v=1}^V
              (\beta_v - \beta_v^{\mathrm{new}})
              b
      \right)
      \prod_{v=1}^V
          \frac{\Gamma(N_v + \beta_v)}{\Gamma(\beta_v)}
          \beta_v^{-a}
          (\beta_v^{\mathrm{new}})^a
    \equiv
      G
\tag{2}
\end{align}

 また(式が長くなるので)、次のようにおいた。

 \displaystyle
\begin{aligned}
a  &= \Bigl(
          \Psi(N_v + \beta_v)
          - \Psi(\beta_v)
      \Bigr)
      \beta_v
\\
b  &= \Psi \left(
          N + \sum_{v=1}^V \beta_v
      \right)
      - \Psi \left(
          \sum_{v=1}^V
              \beta_v
        \right)
\end{aligned}
\tag{3}

途中式の途中式(クリックで展開)


  • 1: 対数ガンマとディガンマ関数の不等式を用いて、式を置き換える。

  \hat{x} \geq 0 に対して、 x \gt 0 n \geq 0 のとき、次の関係が成り立つ。

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

  \sum_{v=1}^V \beta_v \hat{x} \sum_{v=1}^V \beta_v^{\mathrm{new}} x に対応させて項を変形する。
 また、 \hat{x} \geq 0 に対して、 n \geq 1 のとき、次の関係が成り立つ。

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

  \beta_v \hat{x} \beta_v^{\mathrm{new}} x に対応させて項を変形する。


 現在の値を  \beta_v、更新後の値を  \beta_v^{\mathrm{new}} とする。周辺尤度に関して  \beta_v の周りでテイラー展開(近似)して下限として用いる。
 詳しくは「対数ガンマ関数とディガンマ関数の不等式の導出【青トピックモデルのノート】 - からっぽのしょこ」を参照のこと。

 周辺尤度の代わりに、下限を最大化するハイパーパラメータを考える。

 \displaystyle
\begin{align}
\boldsymbol{\beta}^{\mathrm{new}}
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}}
          G
\\
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}}
          \log G
\end{align}

 計算を簡単にするため、対数をとった周辺尤度の下限  \log G の最大化を考える。

 この式に周辺尤度の下限(2)を代入して、式を整理する。

 \displaystyle
\begin{aligned}
\boldsymbol{\beta}^{\mathrm{new}}
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}} \left[
          \log \left(
              \frac{
                  \Gamma(\sum_{v=1}^V \beta_v)
              }{
                  \Gamma(N + \sum_{v=1}^V \beta_v)
              }
              \exp \left(
                  \sum_{v=1}^V
                      (\beta_v - \beta_v^{\mathrm{new}})
                      b
              \right)
              \prod_{v=1}^V
                  \frac{\Gamma(N_v + \beta_v)}{\Gamma(\beta_v)}
                  \beta_v^{-a}
                  (\beta_v^{\mathrm{new}})^a
          \right)
      \right]
\\
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}} \Biggl[
          \log \Gamma \left(
              \sum_{v=1}^V \beta_v
          \right)
          - \log \Gamma \left(
              N + \sum_{v=1}^V \beta_v
            \right)
          + \sum_{v=1}^V
                (\beta_v - \beta_v^{\mathrm{new}})
                b
      \Biggr.
\\
   &\qquad \qquad \qquad
      \Biggl.
          + \sum_{v=1}^V \Bigl\{
              \log \Gamma(N_v + \beta_v)
              - \log \Gamma(\beta_v)
              - a \log \beta_v
              + a \log \beta_v^{\mathrm{new}}
          \Bigr\}
      \Biggr]
\\
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}} \left[
          - \sum_{v=1}^V
              b \beta_v^{\mathrm{new}}
          + \sum_{v=1}^V
              a \log \beta_v^{\mathrm{new}}
      \right]
\\
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\beta}} \left[
          \sum_{v=1}^V \Bigl\{
              - b \beta_v^{\mathrm{new}}
              + a \log \beta_v^{\mathrm{new}}
          \Bigr\}
      \right]
\end{aligned}

途中式の途中式(クリックで展開)


  • 1: 周辺尤度の下限を具体的な式(2)に置き替える。
  • 2: 対数の性質  \log (x y) = \log x + \log y \log \frac{x}{y} = \log x - \log y \log x^a = a \log x より、積が和、商が差、べき乗が積になる。
  • 3:  \boldsymbol{\beta}^{\mathrm{new}} と無関係な項を省く。

  \boldsymbol{\beta}^{\mathrm{new}} に影響しない項は省ける。または、定数  \mathrm{const.} としてまとめておくと偏微分の際に0になり消える。

 周辺尤度の下限を最大化するハイパーパラメータは

 \displaystyle
\sum_{v=1}^V \Bigl\{
    - b \beta_v^{\mathrm{new}}
    + a \log \beta_v^{\mathrm{new}}
\Bigr\}
\tag{4}

を最大化するハイパーパラメータを求めればよいことが分かった。

 下限  G の対数を  F とおく。また、 \boldsymbol{\beta}^{\mathrm{new}} に影響しない(式(4)以外の)項をまとめて  \mathrm{const.} とする。

 \displaystyle
\begin{aligned}
F  &= \log G
\\
   &= \sum_{v=1}^V \Bigl\{
          - b \beta_v^{\mathrm{new}}
          + a \log \beta_v^{\mathrm{new}}
      \Bigr\}
      + \mathrm{const.}
\end{aligned}

 関数  F \beta_v^{\mathrm{new}} に関して微分する。

 \displaystyle
\begin{aligned}
\frac{\partial F}{\partial \beta_v^{\mathrm{new}}}
   &= \frac{\partial}{\partial \beta_v^{\mathrm{new}}} \left\{
          \sum_{v=1}^V \Bigl\{
              - b \beta_v^{\mathrm{new}}
              + a \log \beta_v^{\mathrm{new}}
          \Bigr\}
          + \mathrm{const.}
      \right\}
\\
   &= - \frac{\partial}{\partial \beta_v^{\mathrm{new}}} \left\{
          \sum_{v=1}^V
              b \beta_v^{\mathrm{new}}
        \right\}
      + \frac{\partial}{\partial \beta_v^{\mathrm{new}}} \left\{
          \sum_{v=1}^V
              a \log \beta_v^{\mathrm{new}}
        \right\}
      + \frac{\partial \mathrm{const.}}{\partial \beta_v^{\mathrm{new}}}
\\
   &= - b
        \frac{\partial \beta_v^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + a
        \frac{\partial \log \beta_v^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + 0
\\
   &= - b
      + a \frac{1}{\beta_v^{\mathrm{new}}}
\end{aligned}

途中式の途中式(クリックで展開)


  • 1:  F の式全体の微分を考える。
  • 2: 和の微分  \{f(x) + g(x)\}' = f'(x) + g'(x) より、項ごとの微分の和に分割する。
  • 3-4:  \beta_v^{\mathrm{new}} に関する微分なので、それ以外の  \beta_v \beta_{v'}^{\mathrm{new}}\ (v' = v) は定数として扱う。これを偏微分と言う。

 前の項は、 v 番目の項の係数のみが残る。

 \displaystyle
\begin{aligned}
\frac{\partial}{\partial \beta_v^{\mathrm{new}}} \left\{
    \sum_{v=1}^V 
        b \beta_v^{\mathrm{new}}
\right\}
   &= \frac{\partial}{\partial \beta_v^{\mathrm{new}}} \Bigl\{
          b \beta_1^{\mathrm{new}}
          + \cdots
          + b \beta_v^{\mathrm{new}}
          + \cdots
          + b \beta_V^{\mathrm{new}}
      \Bigr\}
\\
   &= \frac{\partial b \beta_1^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + \cdots
      + \frac{\partial b \beta_v^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + \cdots
      + \frac{\partial b \beta_V^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
\\
   &= 0
      + \cdots
      + b
        \frac{\partial \beta_v^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + \cdots
      + 0
\\
   & = b
\end{aligned}

  \beta_v^{\mathrm{new}} の係数は  \frac{\partial}{\partial \beta_v^{\mathrm{new}}} の外に出せ、定数の微分は(定数  a x で微分すると)  \{a\}' = 0、変数の微分は(変数  x x で微分すると)  \{x\}' = 1 である。
 同様に後の項は、 v 番目の項のみが残る。

 \displaystyle
\begin{aligned}
\frac{\partial}{\partial \beta_v^{\mathrm{new}}} \left\{
    \sum_{v=1}^V
      a \log \beta_v^{\mathrm{new}}
\right\}
   &= \frac{\partial}{\partial \beta_v^{\mathrm{new}}} \Bigl\{
          a \log \beta_1^{\mathrm{new}}
          + \cdots
          + a \log \beta_v^{\mathrm{new}}
          + \cdots
          + a \log \beta_V^{\mathrm{new}}
      \Bigr\}
\\
   &= \frac{\partial a \log \beta_1^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + \cdots
      + \frac{\partial a \log \beta_v^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + \cdots
      + \frac{\partial a \log \beta_V^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
\\
   &= 0
      + \cdots
      + a
        \frac{\partial \log \beta_v^{\mathrm{new}}}{\partial \beta_v^{\mathrm{new}}}
      + \cdots
      + 0
\\
   & = a
       \frac{1}{\beta_v^{\mathrm{new}}}
\end{aligned}

 自然対数の微分は  \{\log x\}' = \frac{1}{x} である。


  \frac{\partial F}{\partial \beta_v^{\mathrm{new}}} = 0 となる  \beta_v^{\mathrm{new}} を求める。

 \displaystyle
\begin{align}
&&
- b
+ \frac{a}{\beta_v^{\mathrm{new}}}
   &= 0
\\
\Rightarrow &&
\beta_v^{\mathrm{new}}
   &= \frac{a}{b}
\\
&& &= \beta_v
      \frac{
          \Psi(N_v + \beta_v)
          - \Psi(\beta_v)
      }{
          \Psi(
              N
              + \sum_{v=1}^V
                  \beta_v
          )
          - \Psi(
              \sum_{v=1}^V
                  \beta_v
          )
      }
\tag{2.9'}
\end{align}

途中式の途中式(クリックで展開)


  • 1:  \frac{\partial F}{\partial \beta_v^{\mathrm{new}}} 0 とおく。
  • 2:  \beta_v^{\mathrm{new}} について式を整理する。
  • 3:  a, b に具体的な式(3)を代入する。
  • 4: 括弧を展開する。

 語彙  v に関する不動点反復法によるハイパーパラメータの更新式が得られた。

 他の語彙についても同様に求められるので、更新後のハイパーパラメータ  \boldsymbol{\beta}^{\mathrm{new}} は、次の  V 次元ベクトルになる。

 \displaystyle
\boldsymbol{\beta}^{\mathrm{new}}
    = (\beta_1^{\mathrm{new}}, \beta_2^{\mathrm{new}}, \cdots, \beta_V^{\mathrm{new}})


  i 回目の更新において、 \beta_v を現ステップ(更新前)の値(  i-1 回目の更新値)  \beta_v^{(i-1)} \beta_v^{\mathrm{new}} を次ステップ(更新後)の値(  i 回目の更新値)  \beta_v^{(i)} とする。

 \displaystyle
\beta_v^{(i)}
    = \beta_v^{(i-1)}
      \frac{
          \Psi \Bigl(
              N_v + \beta_v^{(i-1)}
          \Bigr)
          - \Psi \Bigl(
              \beta_v^{(i-1)}
          \Bigr)
      }{
          \Psi \Bigl(
              N
              + \sum_{v=1}^V
                  \beta_v^{(i-1)}
          \Bigr)
          - \Psi \Bigl(
              \sum_{v=1}^V
                  \beta_v^{(i-1)}
          \Bigr)
      }

 また、ハイパーパラメータの初期値を  \beta_v^{(0)} とする。
 この式により更新を繰り返すことで、経験ベイズ解  \boldsymbol{\beta}_{\mathrm{EB}} に近付いていく。

 この記事では、ハイパーパラメータが多様な値の場合のユニグラムモデルにおける不動点反復法によるハイパーパラメータの経験ベイズ推定を数式で確認した。次の記事では、プログラムで確認する。
 また前回と今回は、経験ベイズによるハイパーパラメータ推定を扱った。次々回からは、MAP推定によるハイパーパラメータ推定を扱う。

参考書籍

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

おわりに

 ハイパーパラメータが一様な場合を加筆修正する際に、多様な場合もついでにやりました。本に式が載ってない(私用の正解データがない)し、やるのはトピックモデルだけでいいかなとも思ったのですが、シンプルなモデルでの練習と思ってやってみました。
 元論文の表記に従って途中  a, b とおくのですが、「式が長くなる」か「記号が増える」なら今後使わない記号が増える方が嫌だなと思い、直後に代入して式展開していました。記事が書き上がって1日寝かせて読み返したら、やっぱり式が長すぎて分かりにくいなと感じ、 a, b のままで式展開するように書き直してみました。すると更新式が  \frac{a}{b} になり、なるほどこのためかと納得できたこどもの日の早朝でした。
 いやー多様版もしっかり書いて良かったです。

 2024年5月5日は、えびちゅうこと私立恵比寿中学のメジャーデビュー12周年&ココユノノカの加入3周年の日です。

 当時なのか記憶が曖昧ですがももクロの妹分のエビ中という存在は知っていましたが、そこから10年以上が経ち、まさか(そもそもアイドルにすら興味のなかった)自分がこんなにも好きになるとは思ってもいませんでした。
 何よりこれまで活動を続けてくれたメンバーのおかげですね!!!おめでとうございます!!ありがとうございます!!!これからもよろしくお願いします!!

【次節の内容】

www.anarchive-beta.com