からっぽのしょこ

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

『ベイズ推論による機械学習入門』のノート:記事一覧

はじめに

 『ベイズ推論による機械学習入門』の学習時のノートです。基本的な内容は「数式の行間を読んでみた」とそれを「RとPythonで組んでみた」です。「数式」と「プログラム」から理解するのが目標です。

 この記事は、各節の記事へのリンクページです。

 省略してある内容等ありますので、本とあわせて読んでください。初学者な自分が理解できるレベルまで落として書き下していますので、分かる人にはかなりくどくなっています。同じような立場の人のお役に立てれば幸いです。

【目次】

Chapter 2 基本的な確率分布

2.2 離散確率分布

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


2.3 連続確率分布

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


Chapter 3 ベイズ推論による学習と予測

3.2 離散確率分布の学習と予測

 3つの離散分布(ベルヌーイ分布・カテゴリ分布・ポアソン分布)を例として、パラメータの事後分布と予測分布を解析的に計算する方法を解説して、RとPythonで実装します。

3.2.1 ベルヌーイ分布の学習と予測

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.2.2 カテゴリ分布の学習と予測

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.2.3 ポアソン分布の学習と予測

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.3 1次元ガウス分布の学習と予測

 1次元ガウス分布について3つのパターン(平均が未知、精度(分散)が未知、平均と精度が未知)を例として、パラメータの事後分布と予測分布を解析的に計算する方法を解説して、RとPythonで実装します。

 この節では、ガウス分布の分散パラメータ$\sigma^2$の代わりに、その逆数である精度パラメータ$\lambda$

$$ \begin{aligned} \lambda &= \sigma^{-2} = \frac{1}{\sigma^2} \\ \sigma^2 &= \frac{1}{\lambda} = \lambda^{-1} \end{aligned} $$

を用いる。

3.3.1 平均が未知の場合

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.3.2 精度が未知の場合

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.3.3 平均・精度が未知の場合

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.4 多次元ガウス分布の学習と予測

 多次元ガウス分布について3つのパターン(平均が未知、精度が未知、平均と精度が未知)を例として、パラメータの事後分布と未観測データの予測分布を解析的に計算する方法を解説します。

3.4.1 平均が未知の場合

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.4.2 精度が未知の場合

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.4.3 平均・精度が未知の場合

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


3.5 線形回帰の例

 応用例として線形回帰モデルに対するベイズ推論を行います。

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


Chapter 4 混合モデルと近似推論

4.2 確率分布の近似手法

www.anarchive-beta.com


4.3 ポアソン混合モデルにおける推論

 ポアソン混合分布を観測モデルとする事後分布に対して、3つの近似手法(ギブスサンプリング、変分推論、崩壊型ギブスサンプリング)を用いて近似推論します。

4.3.1 ポアソン分布混合モデル

 クラスタ数を$K$として、全てのクラスタのパラメータをまとめて$\boldsymbol{\lambda} = \{\lambda_1, \lambda_2, \cdots, \lambda_K\}$と表記する。クラスタ$k$における観測モデル(尤度関数)を、パラメータ$\lambda_k$を持つポアソン分布とする。

$$ p(x_n | \lambda_k) = \mathrm{Poi}(x_n | \lambda_k) \tag{4.27} $$

 ここに、$N$個のデータのクラスタ(潜在変数)$\mathbf{S} = \{\mathbf{s}_1, \mathbf{s}_2, \cdots, \mathbf{s}_N\}$を導入する。各データのクラスタは、$K$次元ベクトル$\mathbf{s}_n = (s_{n,1}, s_{n,2}, \cdots, s_{n,K})$であり、$n$番目のデータのクラスタが$k$のとき$s_{n,k} = 1$でそれ以外の要素は0をとる。$N$個の観測データ$\mathbf{X} = \{x_1, x_2, \cdots, x_N\}$は、ポアソン混合分布に従い独立に生成されるとする。

$$ p(x_n | \mathbf{s}_n, \boldsymbol{\lambda}) = \prod_{k=1}^K \mathrm{Poi}(x_n | \lambda_k)^{s_{n,k}} \tag{4.28} $$

$a^0 = 1$なので、$K$個のポアソン分布のうちクラスタ以外の分布の値が1になり、式(4.27)の形になる。
 また、全てのクラスタのパラメータ$\boldsymbol{\lambda}$に対する共通の事前分布に(超)パラメータ$a,\ b$を持つガンマ分布を仮定する。

$$ p(\lambda_k) = \mathrm{Gam}(\lambda_k | a, b) \tag{4.29} $$

 各データのクラスタを表す潜在変数$\mathbf{S}$は、パラメータ$\boldsymbol{\pi} = (\pi_1, \pi_2, \cdots, \pi_K)$を持つカテゴリ分布に従に独立に生成されるとする。

$$ p(\mathbf{s}_n | \boldsymbol{\pi}) = \mathrm{Cat}(\mathbf{s}_n | \boldsymbol{\pi}) \tag{4.2} $$

$\boldsymbol{\pi}$を混合比率と呼び、その事前分布に(超)パラメータ$\boldsymbol{\alpha} = (\alpha_1, \alpha_2, \cdots, \alpha_K)$を持つディリクレ分布を仮定する。

$$ p(\boldsymbol{\pi}) = \mathrm{Dir}(\boldsymbol{\pi} | \boldsymbol{\alpha}) \tag{4.4} $$


 観測データ$\mathbf{X}$、潜在変数$\mathbf{S}$、観測モデルのパラメータ$\boldsymbol{\lambda}$、混合比率パラメータ$\boldsymbol{\pi}$の同時分布$p(\mathbf{X}, \mathbf{S}, \boldsymbol{\lambda}, \boldsymbol{\pi})$は、生成過程(依存関係)(図4.3)より次のように分解できる。

$$ \begin{aligned} p(\mathbf{X}, \mathbf{S}, \boldsymbol{\lambda}, \boldsymbol{\pi}) &= p(\mathbf{X} | \mathbf{S}, \boldsymbol{\lambda}) p(\mathbf{S} | \boldsymbol{\pi}) p(\boldsymbol{\lambda}) p(\boldsymbol{\pi}) \\ &= \left\{ \prod_{n=1}^N p(x_n | \mathbf{s}_n, \boldsymbol{\lambda}) p(\mathbf{s}_n | \boldsymbol{\pi}) \right\} \left\{ \prod_{k=1}^K p(\lambda_k) \right\} p(\boldsymbol{\pi}) \\ &= \left[ \prod_{n=1}^N \left\{ \prod_{k=1}^K \mathrm{Poi}(x_n | \lambda_k)^{s_{n,k}} \right\} \mathrm{Cat}(\mathbf{s}_n | \boldsymbol{\pi}) \right] \left\{ \prod_{k=1}^K \mathrm{Gam}(\lambda_k | a, b) \right\} \mathrm{Dir}(\boldsymbol{\pi}) \end{aligned} $$

 各アルゴリズムにおいてこの関係を用いる。

4.3.2 ギブスサンプリング

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


4.3.3 変分推論

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


4.3.4 崩壊型ギブスサンプリング

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


4.4 ガウス混合モデルにおける推論

 平均と精度行列が未知の多次元ガウス混合分布を観測モデルとする事後分布に対して、3つの近似推論アルゴリズム(ギブスサンプリング、変分推論、崩壊型ギブスサンプリング)を用いて近似推論します。

4.4.1 ガウス混合モデル

 クラスタ数を$K$として、全てのクラスタの平均パラメータをまとめて$\boldsymbol{\mu} = \{\boldsymbol{\mu}_1, \boldsymbol{\mu}_2, \cdots, \boldsymbol{\mu}_K\}$、精度パラメータを$\boldsymbol{\Lambda} = \{\boldsymbol{\Lambda}_1, \boldsymbol{\Lambda}_2, \cdots, \boldsymbol{\Lambda}_K\}$と表記する。クラスタ$k$における観測モデル(尤度関数)を、平均パラメータ$\boldsymbol{\mu}_k = (\mu_{k,1}, \mu_{k,2}, \cdots, \mu_{k,D})$、精度行列パラメータ$\boldsymbol{\Lambda}_k = (\lambda_{1,1}^{(k)}, \cdots, \lambda_{D,D}^{(k)})$を持つ$D$次元のガウス分布とする。

$$ p(\mathbf{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Lambda}_k) = \mathcal{N}(\mathbf{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Lambda}_k^{-1}) \tag{4.84} $$

 ここに、$N$個のデータのクラスタ(潜在変数)$\mathbf{S} = \{\mathbf{s}_1, \mathbf{s}_2, \cdots, \mathbf{s}_N\}$を導入する。各データのクラスタは、$K$次元ベクトル$\mathbf{s}_n = (s_{n,1}, s_{n,2}, \cdots, s_{n,K})$であり、$n$番目のデータのクラスタが$k$のとき$s_{n,k} = 1$でそれ以外の要素は0をとる。$N$個の観測データ$\mathbf{X} = \{\mathbf{x}_1, \mathbf{x}_2, \cdots, \mathbf{x}_N\}$、$\mathbf{x}_n = (x_{n,1}, x_{n,2}, \cdots, x_{n,D})$は、ガウス混合分布に従い独立に生成されるとする。

$$ p(\mathbf{x}_n | \mathbf{s}_n, \boldsymbol{\mu}, \boldsymbol{\Lambda}) = \prod_{k=1}^K \mathcal{N}(\mathbf{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Lambda}_k^{-1})^{s_{n,k}} \tag{4.85} $$

$a^0 = 1$なので、$K$個のガウス分布のうちクラスタ以外の分布の値が1になり、式(4.84)の形になる。
 また、全てのクラスタのパラメータ$\boldsymbol{\mu}_k,\ \boldsymbol{\Lambda}_k$に対する共通の事前分布にガウス・ウィシャート分布を仮定する。

$$ \begin{align} p(\boldsymbol{\mu}_k, \boldsymbol{\Lambda}_k) &= \mathrm{NW}( \boldsymbol{\mu}_k, \boldsymbol{\Lambda}_k | \mathbf{m}, \beta, \nu, \mathbf{W} ) \\ &= \mathcal{N}(\boldsymbol{\mu}_k | \mathbf{m}, (\beta \boldsymbol{\Lambda}_k)^{-1}) \mathcal{W}(\boldsymbol{\Lambda}_k | \nu, \mathbf{W}) \tag{4.86} \end{align} $$

 ここで、$\mathbf{m}$と$\beta$はガウス分布の平均と精度の係数であり、$\nu$と$\mathbf{W}$はウィシャート分布の自由度とパラメータである。
 潜在変数$\mathbf{S}$については、ポアソン混合モデルと同じ仮定をおく。

 観測データ$\mathbf{X}$、潜在変数$\mathbf{S}$、観測モデルのパラメータ$\boldsymbol{\mu},\ \boldsymbol{\Lambda}$、混合比率パラメータ$\boldsymbol{\pi} = (\pi_1, \pi_2, \cdots, \pi_K)$の同時分布$p(\mathbf{X}, \mathbf{S}, \boldsymbol{\mu}, \boldsymbol{\Lambda}, \boldsymbol{\pi})$は、生成過程(依存関係)(図4.3)より次のように分解できる。

$$ \begin{aligned} p(\mathbf{X}, \mathbf{S}, \boldsymbol{\mu}, \boldsymbol{\Lambda}, \boldsymbol{\pi}) &= p(\mathbf{X} | \mathbf{S}, \boldsymbol{\mu}, \boldsymbol{\Lambda}) p(\mathbf{S} | \boldsymbol{\pi}) p(\boldsymbol{\mu}, \boldsymbol{\Lambda}) p(\boldsymbol{\pi}) \\ &= \left\{ \prod_{n=1}^N p(\mathbf{x}_n | \mathbf{s}_n, \boldsymbol{\mu}, \boldsymbol{\Lambda}^{-1}) p(\mathbf{s}_n | \boldsymbol{\pi}) \right\} \left\{ \prod_{k=1}^K p(\boldsymbol{\mu}_k | \boldsymbol{\Lambda}_k) p(\boldsymbol{\Lambda}_k) \right\} p(\boldsymbol{\pi}) \\ &= \left[ \prod_{n=1}^N \left\{ \prod_{k=1}^K \mathcal{N}( \mathbf{x}_n | \boldsymbol{\mu}_k, \boldsymbol{\Lambda}_k^{-1} )^{s_{n,k}} \right\} \mathrm{Cat}(\mathbf{s}_n | \boldsymbol{\pi}) \right] \left\{ \prod_{k=1}^K \mathcal{N}(\boldsymbol{\mu}_k | \mathbf{m}, (\beta \boldsymbol{\Lambda}_k)^{-1}) \mathcal{W}(\boldsymbol{\Lambda}_k | \nu, \mathbf{W}) \right\} \mathrm{Dir}(\boldsymbol{\pi}) \end{aligned} $$

 各アルゴリズムにおいてこの関係を用いる。

4.4.2 ギブスサンプリング

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


4.4.3 変分推論

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


4.4.4 崩壊型ギブスサンプリング

www.anarchive-beta.com

www.anarchive-beta.com

www.anarchive-beta.com


参考文献

  • 須山敦志『ベイズ推論による機械学習入門』(機械学習スタートアップシリーズ)杉山将監修,講談社,2017年.

おわりに

 1年ほど辞書的に使っていた須山ベイズ本の精読を始めました。一連の記事はその学習時の成果物です。
 著者様の名前を呼び捨てするのは気が引けるので『緑ベイズ入門』と略すことにします。緑ベイズと呼ばれる本は既にあるようなので入門を付けましたが、本来この本の題は"機械学習"入門な訳で、、、つまり『緑(色をした)ベイズ(推論による機械学習)入門』ということでひとつ。(あとで気付きましたが論文等でのノリなのかな)

 読み始めた現在、最後まで精読する気でおります。おりますが他の本も読んでおりますゆえ…。心折れないよう頑張ります。

 間違い等ありましたら遠慮なく全てご指摘いただけるととても嬉しいです。よろしくお願いします。

 勉強が進んで大幅な加筆修正等がありましたら記事の方も更新しますが、ちょっとした変更はGitHubの方で管理しています。

github.com


 3章前半の記事は、デジモン無印・02・tri.をBGMに生成されました。癒しを与えてくれたコロモンとパタモン、勇気を与えてくれた「Butter-Fly」と「brave heart」には特に心を支えられました。全ての関係者の皆様ありがとうございます!

  • 2020.11.14

 多次元ガウス分布で登場する行列計算がムリムリで3.4節と3.5節を飛ばしてましたが、ゼロつく1巻をやってたら少しできるようになったので挑戦しました。のべ1か月ちょいかかりましたがなんとか解けました!ついでに1つだけPythonでも実装してみました。

  • 2021.02.19

 一通り読み終わったのでこれまでに書いた記事を修正していきます。ついでにPythonでも実装してきます。あ、5章は無理でした。

  • 2021.04.19

 3章の修正とPython実装が完了しました。ダレてきたので休憩したいのですが、見返すと多々ヘンなこと書いてるので早急に修正を進めるつもりです。

  • 2021.05.18

 4章の修正とPythonでの実装が完了しました。以上でこの本は修了とします。5章の内容は読むだけにして、じっくり取り組むなら同じ内容の青い本(MLPシリーズ)を読むのがいいと思います。
 長かった、疲れた、やり切った、凄く成長した。

 これで終わりと思ったんですが、コード見直してたらかなり手直しをしてしまったので、近いうちに記事の方にも反映させようと思います。何かヘンなところがありましたらそれまでに教えていただけるととてもありがたいです。よろしくお願いします。
 ヘンなとこで言うと、縦ベクトルと横ベクトルをかなり雑に表記してしまっているのを但し書きし忘れていました。本にある通り、ベクトルは(ほぼ)全て縦ベクトルです(3.5節「線形回帰」の$\mathbf{y}_n$だけ横ベクトルだと思う)。

  • 2022.07.09

 1年前に手直ししたという作図コードをようやく反映していきます。それと、R力が上がってfor()でしていた処理をtidyverseの関数で置き換えられるようになったのでそれも反映します。さらに、Rのバージョンが上がってベースパイプ|>が実装されたので、magrittrパイプ%>%から置き換えます。
 今回の修正では、グラフに載せる情報が増えたり処理が早くなったりしたのですが、諸々のコードの可読性が悪くなってしまいました。そこで、確率分布に関する計算や作図の解説を別記事として充実させたので、必要であればそちらも合わせて読んでください。
 さすがに今回の修正で最後にしたい。