からっぽのしょこ

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

4.3:トピックモデルの最尤推定(EMアルゴリズム)の導出【青トピックモデルのノート】

はじめに

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

 この記事では、トピックモデルにおけるEMアルゴリズムを用いた最尤推定の数式の行間を埋めます。

【前節の内容】

www.anarchive-beta.com

【他の節の内容】

www.anarchive-beta.com

【この節の内容】

4.3 トピックモデルの最尤推定(EMアルゴリズム)の導出

 トピックモデル(topic model)に対するEMアルゴリズム(EM algorithm)を用いた最尤推定(maximum likelihood estimation)におけるパラメータの計算式を導出する。トピックモデルを最尤推定する手法は、確率的潜在意味解析(PLSA・probabilistic latent semantic analysis)と呼ばれる。
 トピックモデルの定義や記号については「4.1-2:トピックモデル【『トピックモデル』の勉強ノート】 - からっぽのしょこ」を参照のこと。

最尤解の設定

 最尤推定では、尤度  p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi}) を最大化するパラメータ  \boldsymbol{\Theta}, \boldsymbol{\Phi} を求める。

 \displaystyle
\begin{aligned}
\boldsymbol{\Theta}_{\mathrm{ML}}
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\Theta}}
          p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})
\\
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\theta}}
          \log p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})
\\
\boldsymbol{\Phi}_{\mathrm{ML}}
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\Phi}}
          p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})
\\
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\Phi}}
          \log p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})
\end{aligned}

  \mathop{\mathrm{argmax}}\limits_{x} f(x) は、関数  f(x) を最大化させる引数(変数)  x を表す。また、トピック分布と単語分布のパラメータの最尤解を  \boldsymbol{\Theta}_{\mathrm{ML}}, \boldsymbol{\Phi}_{\mathrm{ML}} とする。
 計算を簡単にするため、対数尤度  \log p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi}) の最大化を考える。

 トピックモデルの尤度は、次の式で定義される。

 \displaystyle
\begin{aligned}
p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})
   &= \prod_{d=1}^D \prod_{n=1}^{N_d}
          p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi})
\\
   &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K
          p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_{z_{dn}})
\\
   &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K
          p(z_{dn} = k | \boldsymbol{\theta}_d)
          p(w_{dn} | z_{dn} = k, \boldsymbol{\phi}_{z_{dn}})
\\
   &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K
          p(z_{dn} = k | \boldsymbol{\theta}_d)
          p(w_{dn} | \boldsymbol{\phi}_k)
\\
   &= \prod_{d=1}^D \prod_{n=1}^{N_d} \sum_{k=1}^K
          \theta_{dk} \phi_{kw_{dn}}
\end{aligned}

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


  • 1-4: トピックモデルの定義(4.1節)より、尤度(文書集合の生成確率)を各単語のトピックの生成確率と各単語の生成確率の積に分解する。
  • 5: 尤度を具体的な式(各トピックと各単語の生成確率をカテゴリ分布のパラメータ)に置き換える。

 尤度の式については「4.1-2:トピックモデル【『トピックモデル』の勉強ノート】 - からっぽのしょこ」を参照のこと。
 トピックモデルの対数尤度は、解析的に計算できない。そこで、EMアルゴリズムにより繰り返し値を更新して最尤解を近似することを考える。

 EMアルゴリズムを行うために、単語  w_{dn} がトピック  k である確率を  q_{dnk} として、負担率  \mathbf{q} = \{\mathbf{q}_{11}, \cdots, \mathbf{q}_{DN_D}\} \mathbf{q}_{dn} = (q_{dn1}, \dots, q_{dnK}) を導入する。 \mathbf{q}_{dn} の各要素は確率なので、それぞれ非負の値であり、総和(全てのトピックに関する和)が1になる条件を満たす必要がある。

 \displaystyle
0 \leq q_{dnk} \leq 1
,\ 
\sum_{k=1}^K q_{dnk}
    = 1

 イェンゼンの不等式を用いて、対数尤度の下限を求める。

 \displaystyle
\begin{align}
\log p(\mathbf{W} | \boldsymbol{\Theta}, \boldsymbol{\Phi})
   &= \sum_{d=1}^D \sum_{n=1}^{N_d}
          \log \sum_{k=1}^K \Bigl\{
              p(z_{dn} = k | \boldsymbol{\theta}_d)
              p(w_{dn} | \boldsymbol{\phi}_k)
          \Bigr\}
    \equiv
      L
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d}
          \log \sum_{k=1}^K \left\{
              q_{dnk}
              \frac{
                  p(z_{dn} = k | \boldsymbol{\theta}_d)
                  p(w_{dn} | \boldsymbol{\phi}_k)
              }{
                  q_{dnk}
              }
          \right\}
\\
   &\geq
     \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K \left\{
          q_{dnk}
          \log \left(
              \frac{
                  p(z_{dn} = k | \boldsymbol{\theta}_d)
                  p(w_{dn} | \boldsymbol{\phi}_k)
              }{
                  q_{dnk}
              }
          \right)
      \right\}
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K \left\{
          q_{dnk}
          \log \left(
              \frac{
                  \theta_{dk}
                  \phi_{kw_{dn}}
              }{
                  q_{dnk}
              }
          \right)
      \right\}
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K \Bigl\{
          q_{dnk} \Bigl(
              \log \theta_{dk}
              + \log \phi_{kw_{dn}}
              - \log q_{dnk}
          \Bigr)
      \Bigr\}
    \equiv
      F
\tag{1}
\end{align}

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


  • 1: 対数をとった尤度を考える。
  • 2:  \frac{q_{dnk}}{q_{dnk}} = 1 を分割して掛けて、負担率を導入する。
  • 3: イェンゼンの不等式(1.1.10項)を用いて、下限の式に変形する。
  • 4: トピックモデルの定義(4.1節)より、尤度を具体的な式に置き換える
  • 5: 対数の性質  \log (x y) = \log x + \log y \log \frac{x}{y} = \log x - \log y より、分数を分解する。

 対数尤度を  L、対数尤度の下限を  F とおく。
 イェンゼンの不等式については「1.1.8-10:カルバック・ライブラー・ダイバージェンスとイェンゼンの不等式【『トピックモデル』の勉強ノート】 - からっぽのしょこ」を参照のこと。

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

 \displaystyle
\begin{align}
\mathbf{q}^{\mathrm{new}}
   &= \mathop{\mathrm{argmax}}\limits_{\mathbf{q}}
          F
\\
\boldsymbol{\Theta}^{\mathrm{new}}
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\Theta}}
          F
\\
\boldsymbol{\Phi}^{\mathrm{new}}
   &= \mathop{\mathrm{argmax}}\limits_{\boldsymbol{\Phi}}
          F
\end{align}

 EMアルゴリズムでは、対数尤度の下限を最大化する負担率とパラメータを求める。負担率の更新とパラメータの更新の2つのステップを交互に繰り返すことで、対数尤度の下限を最大化していき、(解析的に計算できない)最大化された対数尤度に近付けていく。

Eステップ

 Eステップでは、パラメータが与えられた下で(更新したパラメータで固定して)、対数尤度の下限が最大化するように負担率を更新する。

負担率の更新式の導出

 ラグランジュの未定乗数法を用いて、 \sum_{k=1}^K q_{dnk} = 1 の制約の下で下限  F が最大となる負担率  q_{dnk} を求める。

 \displaystyle
F(q_{dnk})
    = q_{dnk} \Bigl(
          \log \theta_{dk}
          + \log \phi_{kw_{dn}}
          - \log q_{dnk}
      \Bigr)
      + \lambda \left(
          \sum_{k=1}^K
              q_{dnk}
          - 1
      \right)

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


  • 1: ラグランジュ乗数  \lambda を用いて、最大化問題の対象である対数尤度の下限(1)と制約条件(総和が1である)を含めて、 q_{dnk} の関数  F(q_{dnk}) を立てる。

 ラグランジュの未定乗数法については「1.1.11:ラグランジュの未定乗数法【『トピックモデル』の勉強ノート】 - からっぽのしょこ」を参照のこと。
 ここでは  q_{dnk} に注目するため、 F(q_{dnk}) とおく。
 対数尤度の下限の項に関して、単語  w_{dn} 以外の単語  1, \dots, d-1, d+1, \dots, D 1, \dots, n-1, n+1, \dots, N_d、またトピック  k 以外のトピック  1, \dots, k-1, k+1, \dots, K の項は  q_{dnk} に影響しないため省ける。または、定数  \mathrm{const.} としてまとめておくと偏微分の際に0になり消える。

 関数  F(q_{dnk}) q_{dnk} に関して微分する。

 \displaystyle
\begin{aligned}
\frac{\partial F(q_{dnk})}{\partial q_{dnk}}
   &= \frac{\partial}{\partial q_{dnk}} \left\{
          q_{dnk} \Bigl(
              \log \theta_{dk}
              + \log \phi_{kw_{dn}}
              - \log q_{dnk}
          \Bigr)
          + \lambda \left(
              \sum_{k=1}^K
                  q_{dnk}
              - 1
          \right)
      \right\}
\\
   &= \frac{\partial}{\partial q_{dnk}} \Bigl\{
          q_{dnk} \log \theta_{dk}
      \Bigr\}
      + \frac{\partial}{\partial q_{dnk}} \Bigl\{
          q_{dnk} \log \phi_{kw_{dn}}
        \Bigr\}
      - \frac{\partial}{\partial q_{dnk}} \Bigl\{
          q_{dnk} \log q_{dnk}
      \Bigr\}
\\
   &\qquad
      + \frac{\partial}{\partial q_{dnk}} \left\{
          \lambda \left(
              \sum_{k=1}^K
                  q_{dnk}
              - 1
          \right)
      \right\}
\\
   &= \log \theta_{dk}
      \frac{\partial q_{dnk}}{\partial q_{dnk}}
      + \log \phi_{kw_{dn}}
        \frac{\partial q_{dnk}}{\partial q_{dnk}}
      - \left(
          \log q_{dnk}
          \frac{\partial q_{dnk}}{\partial q_{dnk}}
          + q_{dnk}
          \frac{\partial \log q_{dnk}}{\partial q_{dnk}}
      \right)
\\
   &\qquad
      + \lambda
        \frac{\partial q_{dnk}}{\partial q_{dnk}}
\\
   &= \log \theta_{dk}
      + \log \phi_{kw_{dn}}
      - \log q_{dnk}
      - \frac{q_{dnk}}{q_{dnk}}
      + \lambda
\end{aligned}

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


  • 1:  F(q_{dnk}) の式全体の微分を考える。
  • 2: 和の微分  \{f(x) + g(x)\}' = f'(x) + g'(x) より、項ごとの微分の和に分割する。
  • 3-4:  q_{dnk} に関する微分なので、それ以外の項  q_{d'n'k'}\ (d' \neq d, n' \neq n, k' \neq k) \theta_{dk}, \phi_{kv} は定数として扱う。これを偏微分と言う。

  q_{dnk} の係数は  \frac{\partial}{\partial q_{dnk}} の外に出せ、変数の微分は  \{x\}' = 1 なので、1つ目と2つ目の項は、係数のみが残る。
 3つ目の項は、積の微分  \{f(x)g(x)\}' = f'(x)g(x) + f(x)g'(x) と自然対数の微分  \{\log x\}' = \frac{1}{x} より、次のようになる。

 \displaystyle
\begin{aligned}
\frac{\partial q_{dnk} \log q_{dnk}}{\partial q_{dnk}}
   &= (\log q_{dnk})
      \frac{\partial q_{dnk}}{\partial q_{dnk}}
      + q_{dnk}
        \frac{\partial \log q_{dnk}}{\partial q_{dnk}}
\\
   &= \log q_{dnk}
      + q_{dnk} \frac{1}{q_{dnk}}
\\
   &= \log q_{dnk} + 1
\end{aligned}

 最後の項は、 k 番目の項の係数のみが残る。

 \displaystyle
\begin{aligned}
\frac{\partial}{\partial q_{dnk}} \left\{
    \lambda \left(
        \sum_{k=1}^K
            q_{dnk}
        - 1
    \right)
\right\}
   &= \lambda
      \frac{\partial}{\partial q_{dnk}} \left\{
          \sum_{k=1}^K
              q_{dnk}
          - 1
      \right\}
\\
   &= \lambda
      \frac{\partial}{\partial q_{dnk}} \Bigl\{
          q_{d1}
          + \cdots
          + q_{dnk}
          + \cdots
          + q_{dnk}
          - 1
      \Bigr\}
\\
   &= \lambda \left(
          \frac{\partial q_{d1}}{\partial q_{dnk}}
          + \cdots
          + \frac{\partial q_{dnk}}{\partial q_{dnk}}
          + \cdots
          + \frac{\partial q_{dnk}}{\partial q_{dnk}}
          - \frac{\partial 1}{\partial q_{dnk}}
      \right)
\\
   &= \lambda \left(
          0
          + \cdots
          + 1
          + \cdots
          + 0
          - 0
      \right)
\\
   &= \lambda
\end{aligned}

 定数の微分は  \{a\}' = 0 である。


  \frac{\partial F(q_{dnk})}{\partial q_{dnk}} = 0 となる  q_{dnk} を求める。

 \displaystyle
\begin{align}
&&
\log \theta_{dk}
+ \log \phi_{kw_{dn}}
- \log q_{dnk}
+ \lambda - 1
   &= 0
\\
\Rightarrow &&
\log q_{dnk}
   &= \lambda - 1
      + \log \theta_{dk}
      + \log \phi_{kw_{dn}}
\\
\Rightarrow &&
\exp(\log q_{dnk})
   &= \exp \Bigl(
          \lambda - 1
          + \log \theta_{dk}
          + \log \phi_{kw_{dn}}
      \Bigr)
\\
&&
   &= \exp(\lambda - 1)
      \exp(\log \theta_{dk})
      \exp(\log \phi_{kw_{dn}})
\\
\Rightarrow &&
     q_{dnk}
       &= \exp(\lambda - 1)
          \theta_{dk} \phi_{kw_{dn}}
\tag{2}
\end{align}

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


  • 1:  \frac{\partial F(q_{dnk})}{\partial q_{dnk}} 0 とおく。
  • 2:  \log q_{dnk} について式を整理する。
  • 3: 両辺それぞれで全体をネイピア数  e の指数  e^x = \exp(x) にする。
  • 4: 指数の性質  e^{n+m} = e^n e^m より、和が積になる。
  • 5: 指数と対数の関係  x = \exp(\log x) より、 \log を外す。

 この式の両辺で  k に関して和をとる。

 \displaystyle
\begin{aligned}
&&
\sum_{k=1}^K
    q_{dnk}
   &= \sum_{k=1}^K
          \exp(\lambda - 1)
          \theta_{dk} \phi_{kw_{dn}}
\\
\Rightarrow &&
1  &= \exp(\lambda - 1)
        \sum_{k=1}^K
          \theta_{dk} \phi_{kw_{dn}}
\\
\Rightarrow &&
\exp(\lambda - 1)
   &= \frac{
           1
      }{
           \sum_{k=1}^K
               \theta_{dk} \phi_{kw_{dn}}
      }
\end{aligned}

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


  • 1:  k に関して  1 から  K まで和をとる。
  • 2: 負担率  \mathbf{q}_{dn} の定義より、 \sum_{k=1}^K q_{dnk} = 1 である。
  • 2: 係数を  \sum の外に出す。
  • 3:  \exp(\lambda - 1) について式を整理する。

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

 \displaystyle
q_{dnk}
    = \frac{
          \theta_{dk} \phi_{kw_{dn}}
      }{
          \sum_{k'=1}^K
              \theta_{dk'} \phi_{k'w_{dn}}
      }
\tag{4.1}

 単語  w_{dn} におけるトピック  k の負担率  q_{dnk} の更新式が得られた。他の単語やトピックについても同様に求められる。

Mステップ

 Mステップでは、負担率が与えられた下で(更新した負担率で固定して)、対数尤度の下限が最大化するようにパラメータを更新する。

トピック分布のパラメータの更新式の導出

 Eステップと同様に、 \sum_{k=1}^K \theta_{dk} = 1 の制約の下で下限  F が最大となるパラメータ  \theta_{dk} を求める。

 \displaystyle
F(\theta_{dk})
    = \sum_{n=1}^{N_d}
          q_{dnk} \Bigl(
              \log \theta_{dk}
              + \log \phi_{kw_{dn}}
              - \log q_{dnk}
          \Bigr)
      + \lambda \left(
          \sum_{k=1}^K
              \theta_{dk}
          - 1
      \right)

 ここでは  \theta_{dk} に注目するため、関数  F(\theta_{dk}) とおく。
 対数尤度の下限の項に関して、 d' = 1, \dots, d-1, d+1, \dots, D k' = 1, \dots, k-1, k+1, \dots, K の項は  \theta_{dk} に影響しないため省ける。

 関数  F(\theta_{dk}) \theta_{dk} に関して微分する。

 \displaystyle
\begin{aligned}
\frac{\partial F(\theta_{dk})}{\partial \theta_{dk}}
   &= \frac{\partial}{\partial \theta_{dk}} \left\{
          \sum_{n=1}^{N_d}
              q_{dnk} \Bigl(
                  \log \theta_{dk}
                  + \log \phi_{kw_{dn}}
                  - \log q_{dnk}
              \Bigr)
          + \lambda \left(
              \sum_{k=1}^K
                  \theta_{dk}
              - 1
          \right)
      \right\}
\\
   &= \frac{\partial}{\partial \theta_{dk}} \left\{
          \left(
              \sum_{n=1}^{N_d}
                  q_{dnk}
          \right)
          \log \theta_{dk}
      \right\}
      + \frac{\partial}{\partial \theta_{dk}} \left\{
          \sum_{n=1}^{N_d}
              q_{dnk} \log \phi_{kw_{dn}}
        \right\}
      - \frac{\partial}{\partial \theta_{dk}} \left\{
          \sum_{n=1}^{N_d}
              q_{dnk} \log q_{dnk}
        \right\}
\\
   &\qquad
      + \frac{\partial}{\partial \theta_{dk}} \left\{
          \lambda \left(
              \sum_{k=1}^K
                  \theta_{dk}
              - 1
          \right)
      \right\}
\\
   &= \left(
          \sum_{n=1}^{N_d}
              q_{dnk}
      \right)
      \frac{\partial \log \theta_{dk}}{\partial \theta_{dk}}
      + 0
      - 0
      + \lambda
        \frac{\partial \theta_{dk}}{\partial \theta_{dk}}
\\
   &= \frac{
          \sum_{n=1}^{N_d}
              q_{dnk}
      }{
          \theta_{dk}
      }
      + \lambda
\end{aligned}

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


  • 1-4:  \theta_{dk} に関する微分なので、それ以外の項  \theta_{d'k'}\ (d' \neq d, k' \neq k) \phi_{kv}, q_{dnk} は定数として扱う。

  \frac{\partial F(\theta_{dk})}{\partial \theta_{dk}} = 0 となる  \theta_{dk} を求める。

 \displaystyle
\begin{align}
&&
\frac{
          \sum_{n=1}^{N_d}
              q_{dnk}
      }{
          \theta_{dk}
      }
      + \lambda
   &= 0
\\
\Rightarrow &&
\theta_{dk}
   &= \frac{
          \sum_{n=1}^{N_d}
              q_{dnk}
      }{
          - \lambda
      }
\tag{3}
\end{align}

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


  • 1:  \frac{\partial F(\theta_{dk})}{\partial \theta_{dk}} 0 とおく。
  • 2:  \theta_{dk} について式を整理する。

 この式の両辺で  k に関して和をとる。

 \displaystyle
\begin{aligned}
&&
\sum_{k=1}^K
    \theta_{dk}
   &= \sum_{k=1}^K
          \frac{
              \sum_{n=1}^{N_d}
                  q_{dnk}
          }{
              - \lambda
          }
\\
\Rightarrow &&
1  &= - \frac{1}{\lambda}
        \sum_{k=1}^K \sum_{n=1}^{N_d}
          q_{dnk}
\\
\Rightarrow &&
\lambda
   &= - \sum_{k=1}^K \sum_{n=1}^{N_d}
          q_{dnk}
\end{aligned}

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


  • 1:  k に関して  1 から  K まで和をとる。
  • 2: カテゴリ分布のパラメータ  \boldsymbol{\theta}_d の定義より、 \sum_{k=1}^K \theta_{dk} = 1 である。
  • 2: 係数を  \sum の外に出す。
  • 3:  \lambda について式を整理する。

 この式を式(3)に代入すると

 \displaystyle
\theta_{dk}
    = \frac{
          \sum_{n=1}^{N_d}
              q_{dnk}
      }{
          \sum_{k'=1}^K \sum_{n=1}^{N_d}
              q_{dnk'}
      }
\tag{4.2}

 文書  d におけるトピック  k に関するトピック分布のパラメータ  \theta_{dk} の更新式が得られた。他の文書やトピックについても同様に求められる。

単語分布のパラメータの更新式の導出

 これまでと同様に、 \sum_{v=1}^V \phi_{kv} = 1 の制約の下で下限  F が最大となる  \phi_{kv} を求める。

 \displaystyle
F(\phi_{kv})
    = \sum_{d=1}^D \sum_{n=1}^{N_d}
          q_{dnk} \Bigl(
              \log \theta_{dk}
              + \log \phi_{kw_{dn}}
              - \log q_{dnk}
          \Bigr)
      + \lambda \left(
          \sum_{v=1}^V
              \phi_{kv}
          - 1
      \right)

 ここでは  \phi_{kv} に注目するため、関数  F(\phi_{kv}) とおく。
 対数尤度の下限の項に関して、 k' = 1, \dots, k-1, k+1, \dots, K (と語彙が  v 以外の単語  w_{dn} \neq v も) の項は  \phi_{kv} に影響しないため省ける。

 関数  F(\phi_{kv}) \phi_{kv} に関して微分する。

 \displaystyle
\begin{aligned}
\frac{\partial F(\phi_{kv})}{\partial \phi_{kv}}
   &= \frac{\partial}{\partial \phi_{kv}} \left\{
          \sum_{d=1}^D \sum_{n=1}^{N_d}
              q_{dnk} \Bigl(
                  \log \theta_{dk}
                  + \log \phi_{kw_{dn}}
                  - \log q_{dnk}
              \Bigr)
          + \lambda \left(
              \sum_{v=1}^V
                  \phi_{kv}
              - 1
          \right)
      \right\}
\\
   &= \frac{\partial}{\partial \phi_{kv}} \left\{
          \sum_{d=1}^D \sum_{n=1}^{N_d}
              q_{dnk} \log \theta_{dk}
      \right\}
      + \frac{\partial}{\partial \phi_{kv}} \left\{
          \sum_{d=1}^D \sum_{n=1}^{N_d}
              q_{dnk} \log \phi_{kw_{dn}}
        \right\}
      - \frac{\partial}{\partial \phi_{kv}} \left\{
          \sum_{d=1}^D \sum_{n=1}^{N_d}
              q_{dnk} \log q_{dnk}
      \right\}
\\
   &\qquad
      + \frac{\partial}{\partial \phi_{kv}} \left\{
          \lambda \left(
              \sum_{v=1}^V
                  \phi_{kv}
              - 1
          \right)
      \right\}
\\
   &= 0
      + \sum_{d=1}^D \sum_{n:w_{nd}=v}
          q_{dnk}
          \frac{\partial \log \phi_{kv}}{\partial \phi_{kv}}
      - 0
      + \lambda
        \frac{\partial \phi_{kv}}{\partial \phi_{kv}}
\\
   &= \frac{
          \sum_{d=1}^D \sum_{n:w_{nd}=v}
              q_{dnk}
      }{
          \phi_{kv}
      }
      + \lambda
\end{aligned}

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


  • 1-4:  \phi_{kv} に関する微分なので、それ以外の項  \phi_{k'v'}\ (k' \neq k, v' \neq v) \theta_k, q_{dk} は定数として扱う。

  N_d 個の和を展開して微分を考える。

 \displaystyle
\begin{aligned}
\frac{\partial}{\partial \phi_{kv}} \left\{
    \sum_{d=1}^D \sum_{n=1}^{N_d}
        q_{dnk} \log \phi_{kw_{dn}}
\right\}
   &= \sum_{d=1}^D \sum_{n=1}^{N_d}
          q_{dnk}
          \frac{\partial \log \phi_{kw_{dn}}}{\partial \phi_{kv}}
\\
   &= \sum_{d=1}^D \left\{
          q_{d1k}
          \frac{\partial \log \phi_{kw_{d1}}}{\partial \phi_{kv}}
          + \cdots
          + q_{dnk}
            \frac{\partial \log \phi_{kw_{dn}}}{\partial \phi_{kv}}
          + \cdots
          + q_{dN_dk}
          \frac{\partial \log \phi_{kw_{dN_d}}}{\partial \phi_{kv}}
      \right\}
\end{aligned}

  w_{dn} = v のとき  \phi_{kw_{dn}} = \phi_{kv} なので

 \displaystyle
q_{dnk}
\frac{\partial \log \phi_{kw_{dn}}}{\partial \phi_{kv}}
    = \begin{cases}
          \frac{q_{dnk}}{\phi_{kv}}
              &\quad
                (w_{dn} = v) \\
          0
              &\quad
                (w_{dn} \neq v)
      \end{cases}

となり、語彙が  v の単語の微分の和となる。

 \displaystyle
\begin{aligned}
\frac{\partial}{\partial \phi_{kv}} \left\{
    \sum_{d=1}^D \sum_{n=1}^{N_d}
        q_{dnk} \log \phi_{kw_{dn}}
\right\}
   &= \sum_{d=1}^D \sum_{n:w_{nd}=v}
          q_{dnk}
          \frac{\partial \log \phi_{kv}}{\partial \phi_{kv}}
\end{aligned}

 単語番号  n を用いた式(表現)から、語彙番号  v を用いた式(表現)に変換した。


 ここで、 \sum_{n:w_{dn}=v} w_{dn} = v である単語インデックス  n に関する和を表す。

  \frac{\partial F(\phi_{kv})}{\partial \phi_{kw_{dn}}} = 0 となる  \phi_{kv} を求める。

 \displaystyle
\begin{align}
&&
\frac{
    \sum_{d=1}^D \sum_{n:w_{nd}=v}
        q_{dnk}
}{
    \phi_{kv}
}
+ \lambda
   &= 0
\\
\Rightarrow &&
\phi_{kv}
   &= \frac{
          \sum_{d=1}^D \sum_{n:w_{nd}=v}
            q_{dnk}
      }{
          - \lambda
      }
\tag{4}
\end{align}

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


  • 1:  \frac{\partial F(\phi_{kv})}{\partial \phi_{kv}} 0 とおく。
  • 2:  \phi_{kv} について式を整理する。

 この式の両辺で  v に関して和をとる。

 \displaystyle
\begin{aligned}
\sum_{v=1}^V
    \phi_{kv}
   &= \sum_{v=1}^V
          \frac{
              \sum_{d=1}^D \sum_{n:w_{dn}=v}
                  q_{dnk}
          }{
              - \lambda
          }
\\
1  &= - \frac{1}{\lambda}
        \sum_{v=1}^V \sum_{d=1}^D \sum_{n:w_{dn}=v}
            q_{dnk}
\\
\lambda
   &= - \sum_{v=1}^V \sum_{d=1}^D \sum_{n:w_{dn}=v}
          q_{dnk}
\end{aligned}

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


  • 1:  v に関して  1 から  V まで和をとる。
  • 2: カテゴリ分布のパラメータ  \boldsymbol{\phi}_k の定義より、 \sum_{v=1}^V \phi_{kv} = 1 である。
  • 2: 係数を  \sum の外に出す。
  • 3:  \lambda について式を整理する。

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

 \displaystyle
\phi_{kv}
    = \frac{
        \sum_{d=1}^D \sum_{n:w_{dn}=v}
            q_{dnk}
      }{
        \sum_{v'=1}^V \sum_{d=1}^D \sum_{n:w_{dn}=v'}
            q_{dnk}
      }
\tag{4.3}

 トピック  k における語彙  v に関する単語分布のパラメータ  \phi_{kv} の更新式が得られた。他のトピックや語彙についても同様に求められる。

対数尤度と下限の関係の導出

 最後に、対数尤度と対数尤度の下限の差から関係をみる。

 対数尤度  L と下限  F の差を求める。

 \displaystyle
\begin{aligned}
L - F
   &= \sum_{d=1}^D \sum_{n=1}^{N_d}
          \log \sum_{k=1}^K
              p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
\\
   &\qquad
      - \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K \left\{
          q_{dnk}
          \log \frac{
              p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
          }{
              q_{dnk}
          }
      \right\}
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d}
          \left\{
              \sum_{k=1}^K
                  q_{dnk}
          \right\}
          \log p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi})
\\
   &\qquad
      - \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K \left\{
          q_{dnk}
          \log \frac{
              p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
          }{
              q_{dnk}
          }
      \right\}
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K
          q_{dnk} \left(
              \log p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi})
              - \log \frac{
                  p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
              }{
                  q_{dnk}
              }
          \right)
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K
          q_{dnk}
          \log \left(
              p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi})
              \frac{
                  q_{dnk}
              }{
                  p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
              }
          \right)
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d} \sum_{k=1}^K
          q_{dnk}
          \log \frac{
              q_{dnk}
          }{
              p(z_{dn} = k | w_{dn}, \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
          }
\\
   &= \sum_{d=1}^D \sum_{n=1}^{N_d}
          \mathrm{KL} \Bigl(
              \mathbf{q}_{dn}, 
              p(z_{dn} | w_{dn}, \boldsymbol{\theta}_d, \boldsymbol{\Phi})
          \Bigr)
\end{aligned}

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


  • 1: 対数尤度と対数尤度の下限の差を考える。
  • 2: 対数尤度に関して、トピックを周辺化する。
  • 2: 対数尤度の項と下限の項の式の形を揃えるために、対数尤度の項に  \sum_{k=1}^K q_{dnk} = 1 を掛ける。
  • 3:  q_{dnk} で括る。
  • 4: 対数の性質  - \log (\frac{x}{y}) = - \log x + \log y = \log \frac{y}{x} より、 \log の項をまとめる。
  • 5: 条件付き確率  \frac{p(A, B)}{p(B)} = p(A | B) より、 \mathbf{w}_d を条件に入れる。

 文書  d の単語  w_{dn} とトピック  z_{dn} の同時分布は、依存関係より

 \displaystyle
p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
    = p(w_{dn} | z_{dn} = k, \boldsymbol{\phi}_k)
      p(z_{dn} = k | \boldsymbol{\theta}_d)

と分割できるので、ベイズ定理  p(B | A) = \frac{p(A | B) p(B)}{p(A)} としても捉えられる。

 \displaystyle
\begin{aligned}
p(z_{dn} = k | w_{dn}, \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
   &= \frac{
          p(w_{dn}, z_{dn} = k | \boldsymbol{\theta}_d, \boldsymbol{\phi}_k)
      }{
          p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi})
      }
\\
   &= \frac{
          p(w_{dn} | z_{dn} = k, \boldsymbol{\phi}_k)
          p(z_{dn} = k | \boldsymbol{\theta}_d)
      }{
          p(w_{dn} | \boldsymbol{\theta}_d, \boldsymbol{\Phi})
      }
\end{aligned}

 ただし、逆数として変形している。

  • 6: 式の形が(離散型確率分布の)KLダイバージェンス  \mathrm{KL}(p, q) = \sum_x p(x) \log \frac{p(x)}{q(x)} なので、式を置き替える。

 対数尤度  L と下限  L の差が、各単語の負担率  \mathbf{q}_{dn} とトピックの事後分布  p(z_{dn} | w_{dn}, \boldsymbol{\theta}_d, \boldsymbol{\Phi}) のKLダイバージェンスを全ての単語で和をとった値であることが分かった。
 対数尤度と下限が一致する(差が0になる)のとき、(全ての単語で)負担率と事後分布が一致する(KLダイバージェンスが0になる)ことを表す。
 KLダイバージェンスについては「1.1.8-10:カルバック・ライブラー・ダイバージェンスとイェンゼンの不等式【『トピックモデル』の勉強ノート】 - からっぽのしょこ」を参照のこと。

 この記事では、トピックモデルにおける最尤推定を数式で確認した。次の記事では、プログラムで確認する。
 またこの節では、最尤推定によりパラメータを点推定した。次節では、変分ベイズ推定によりパラメータを分布推定する。

参考書籍

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

おわりに

 ついにトピックモデルの章に突入しました。前章の混合ユニグラムモデルとの違いは、ここではそれぞれの文書ごとにトピック集合を持つという点です。そのため \theta_{dk},\ q_{dnk}のように次元が1つ増えています。
 それ以外は大差なく式変形も同様に進められます。3.3節の記事ではより細かい説明を載せているのでそちらもご参照ください。

 とは言え、この節は1人でさらっと実装まで1日でできてしまって感動してました。人って本当に成長するんだなぁ。

2019/07/29:加筆修正しました。

2020/08/24:加筆修正しました。

  • 2024.05.15:加筆修正しました。

 3.3節と同じ密度での解説にしました。
 毎度これ以上分かりやすくできないよってほど考え抜いて書いているんですが、1年も経つと物足りなくなって困ります。今回は、他の手法と比較しやすいように話の流れに統一感を持たせて、共通点と相違点が分かりやすくなればとの考えのもと構成しています。

【次節の内容】

  • スクラッチ実装編

 アルゴリズム4.1を参考にして、ループ処理を使って実装します。

www.anarchive-beta.com

 行列計算を使ってシンプルに実装します。

www.anarchive-beta.com


  • 数式読解編

www.anarchive-beta.com