からっぽのしょこ

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

3.2.2:カテゴリモデルの生成モデルの導出【緑ベイズ入門のノート】

はじめに

 『ベイズ推論による機械学習入門』(MLSシリーズ)の独学時のノートです。各種のモデルやアルゴリズムについて「数式・プログラム・図」を用いて解説します。
 本の補助として読んでください。

 この記事では、カテゴリ分布に対するベイズ推論で登場する数式の行間を埋めます。

【前節の内容】

www.anarchive-beta.com

【他の節の内容】

www.anarchive-beta.com

【この節の内容】

3.2.2 カテゴリモデルの生成モデルの導出

 カテゴリモデル(Categorical model)の定義(仮定)を確認する。カテゴリモデルでは、生成分布をカテゴリ分布(Categorical distribution)、事前分布をディリクレ分布(Dirichlet distribution)とする。
 カテゴリ分布については「カテゴリ分布の定義式 - からっぽのしょこ」、ディリクレ分布については「ディリクレ分布の定義式 - からっぽのしょこ」を参照のこと。

生成過程の設定

 まずは、カテゴリモデルの生成過程(generative process)を数式で確認する。

 観測データ数を  N、データ番号(インデックス)を  n \in \{1, 2, \dots, N\} とする。
 カテゴリ数(次元数)を  K、カテゴリ番号を  k \in \{1, 2, \dots, K\} とする。

 各観測データ  \mathbf{s}_n は、 K 次元ベクトル(  K 個の要素で1つのデータ)

 \displaystyle
\mathbf{s}_n
    = (s_{n,1}, s_{n,2}, \cdots, s_{n,K})

であり、各要素  s_{n,k} は、0か1の2値で総和が1の値(1つの要素のみが1で他の要素は0)をとる。

 \displaystyle
s_{n,k} \in \{0, 1\}
,\ 
\sum_{k=1}^K s_{n,k}
    = 1

 値が1の要素番号(インデックス)によりカテゴリを示す。このような表記方法を1 of K表現やone-hot表現と呼ぶ。
  N 個の観測データをまとめて、観測データ集合  \mathbf{S} として扱う。

 \displaystyle
\mathbf{S}
    = \{\mathbf{s}_1, \mathbf{s}_2, \cdots, \mathbf{s}_N\}

 各観測データ  \mathbf{s}_n は、パラメータ  \boldsymbol{\pi} のカテゴリ分布に従い独立に生成されるとする。

 \displaystyle
\begin{align}
p(\mathbf{s}_n \mid \boldsymbol{\pi})
   &= \mathrm{Categorical}(\mathbf{s}_n \mid \boldsymbol{\pi})
\tag{3.23}\\
   &= \prod_{k=1}^K
          \pi_k^{s_{n,k}}
\\
\mathbf{s}_n
   &\sim
      \mathrm{Categorical}(\boldsymbol{\pi})
\end{align}

  \boldsymbol{\pi} を生成分布のパラメータと呼ぶ。データの生成分布を観測モデルや尤度関数とも呼ぶ。
  \boldsymbol{\pi} は発生確率パラメータなので、 K 次元ベクトル(  K 個の要素で1つのパラメータ)

 \displaystyle
\boldsymbol{\pi}
    = (\pi_1, \pi_2, \cdots, \pi_K)

であり、各要素  \pi_k は、0から1の値で総和が1の値を満たす必要がある。

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

 0から1の値を  \pi_k \in (0, 1) とも表記する。
 また、パラメータ  \boldsymbol{\pi} は、パラメータ  \boldsymbol{\alpha} のディリクレ分布に従い生成されるとする。

 \displaystyle
\begin{align}
p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
   &= \mathrm{Dirichlet}(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
\tag{3.24}\\
   &= \frac{\Gamma(\sum_{k=1}^K \alpha_k)}{\prod_{k=1}^K \Gamma(\alpha_k)}
      \prod_{k=1}^K
          \pi_k^{\alpha_k-1}
\\
\boldsymbol{\pi}
   &\sim
      \mathrm{Dirichlet}(\boldsymbol{\alpha})
\end{align}

  \boldsymbol{\alpha} を生成分布の超パラメータと呼ぶ。パラメータのパラメータを超パラメータ(ハイパーパラメータ)と言う。
  \boldsymbol{\alpha} は形状パラメータ(集中パラメータ)なので、 K 次元ベクトル

 \displaystyle
\boldsymbol{\alpha}
    = (\alpha_1, \alpha_2, \cdots, \alpha_K)

であり、各要素  \alpha_k は、正の値を満たす必要がある。

 \displaystyle
\alpha_k \gt 0

 ディリクレ分布の確率変数は、カテゴリ分布のパラメータの条件を満たす。

 以上で、カテゴリモデルの生成過程(定義・仮定)を確認した。生成過程は、変数やパラメータ間の依存関係であり、生成モデルや推論アルゴリズムの導出でも用いる。

尤度関数の導出

 次は、カテゴリモデルの尤度関数(likelihood function)を数式で確認する。パラメータが与えられたときのデータの生成確率(観測された全ての変数の同時確率)を尤度と呼ぶ。

 パラメータ  \boldsymbol{\pi} が与えられた(条件とする)下での観測データ  \mathbf{S} の生成確率は、生成過程(依存関係)に従い次のように変形できる。

 \displaystyle
\begin{aligned}
p(\mathbf{S} \mid \boldsymbol{\pi})
   &= p(\mathbf{s}_1, \mathbf{s}_2, \cdots, \mathbf{s}_N \mid \boldsymbol{\pi})
\\
   &= p(\mathbf{s}_1 \mid \boldsymbol{\pi})
      p(\mathbf{s}_2 \mid \boldsymbol{\pi})
      \cdots
      p(\mathbf{s}_N \ \boldsymbol{\pi})
\\
   &= \prod_{n=1}^N
          p(\mathbf{s}_n \mid \boldsymbol{\pi})
\end{aligned}

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


  •  N 個のデータは独立に生成されることから、観測データ集合  \mathbf{S} の生成確率は、各データ  \mathbf{s}_n の生成確率の積に分解できる。

 生成分布(3.23)を用いた式が得られた。

生成モデルの導出

 続いて、カテゴリモデルの生成モデル(generative model)を数式で確認する。観測・潜在変数やパラメータを全て確率変数とみなした結合分布(同時分布)を生成モデルと呼ぶ。

 観測変数  \mathbf{S}、パラメータ  \boldsymbol{\pi}、超パラメータ  \boldsymbol{\alpha} をそれぞれ確率変数とする結合分布は、生成過程(依存関係)に従い次のように分解できる。

 \displaystyle
\begin{aligned}
p(\mathbf{S}, \boldsymbol{\pi}, \boldsymbol{\alpha})
   &= p(\mathbf{S} \mid \boldsymbol{\pi})
      p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
      p(\boldsymbol{\alpha})
\\
   &= \left\{ \prod_{n=1}^N
          p(\mathbf{s}_n \mid \boldsymbol{\pi})
      \right\}
      p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
      p(\boldsymbol{\alpha})
\end{aligned}

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


 依存関係のない場合は独立性  p(x, y) = p(x) p(y)、依存関係のある場合は乗法定理  p(x, y) = p(x \mid y) p(y) により、式を変形していく。

  • 1: 変数やパラメータごとの項に分割する。

 依存関係のある(変数・)パラメータと超パラメータの項を分割する。

 \displaystyle
p(\mathbf{S}, \boldsymbol{\pi}, \boldsymbol{\alpha})
    = p(\mathbf{S}, \boldsymbol{\pi} \mid \boldsymbol{\alpha})
      p(\boldsymbol{\alpha})

 さらに前の項の、依存関係のある変数  \mathbf{S} とパラメータ  \boldsymbol{\pi} の項を分割する。

 \displaystyle
\begin{aligned}
p(\mathbf{X}, \boldsymbol{\pi} \mid \boldsymbol{\alpha})
   &= p(\mathbf{X} \mid \boldsymbol{\pi}, \boldsymbol{\alpha})
      p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
\\
   &= p(\mathbf{X} \mid \boldsymbol{\pi})
      p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
\end{aligned}

  \mathbf{S} \boldsymbol{\alpha} は無関係なので条件から省ける。

  • 2: 全データに関する  \mathbf{S} の項を、各データに関する  \mathbf{s}_n の項の積に分解する。

 1データレベルに項を分解した。

 この式自体が変数やパラメータ間の依存関係を表している。

グラフィカルモデルの確認

 最後は、カテゴリモデルの生成モデルをグラフィカルモデル表現(graphical model representation)で確認する。グラフィカルモデルについては1.5節を参照のこと。

 カテゴリモデルの生成モデルは、次の式に分解できた。

 \displaystyle
\begin{aligned}
p(\mathbf{S}, \boldsymbol{\pi}, \boldsymbol{\alpha})
   &= p(\mathbf{S} \mid \boldsymbol{\pi})
      p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
      p(\boldsymbol{\alpha})
\\
   &= \left\{ \prod_{n=1}^N
          p(\mathbf{s}_n \mid \boldsymbol{\pi})
      \right\}
      p(\boldsymbol{\pi} \mid \boldsymbol{\alpha})
      p(\boldsymbol{\alpha})
\end{aligned}

 この式をグラフィカルモデルにすると、次の図になる。

カテゴリモデルのグラフィカルモデル

 「  \boldsymbol{\alpha} \to \boldsymbol{\pi} 」が、生成分布のパラメータの事前分布  p(\boldsymbol{\pi} \mid \boldsymbol{\alpha}) に対応し、事前分布(のパラメータ)に従ってパラメータ  \boldsymbol{\pi} が生成されることを示している。
 「  \boldsymbol{\pi} \to \mathbf{s}_n 」が、生成分布(のパラメータ)に従って各データ  \mathbf{s}_n が生成されることを示している。

 「  N 」のプレートが、 \prod_{n=1}^N に対応し、 N 個の観測データ  \mathbf{s}_n が繰り返し生成されることを示している。

 この記事では、カテゴリモデルで用いる記号や定義を確認した。次の記事では、カテゴリモデルに対するベイズ推論を導出する。

参考文献

おわりに

 ユニグラムモデルの記事と内容が被ると思いつつも、どちらも書いておくと解説の流れがいいので更新。

 2025年11月25日は、ばってん少女隊の上田理子さんの25歳のお誕生日です。

 僥倖にも24歳ラストのイベントを観られました!おめでとうございます。これからもばってん少女隊をよろしくお願いします。

【次節の内容】

  • 数式読解編

 カテゴリモデルに対するベイズ推論を数式で確認します。

www.anarchive-beta.com

 ポアソンモデルの生成モデルを数式で確認します。

www.anarchive-beta.com


  • スクラッチ実装編

 カテゴリモデルの生成モデルをプログラムで確認します。

(準備中)