今回は、機械学習で非常によく用いられているベイズ手法による学習と予測の理論的背景を理解するために、前提知識とベイズ推論にための学習と予測の方法について一から百までまとめます。
今回を記事を執筆するあたっての参考書は、「ベイズ推論による機械学習(入門)」と「パターン認識と機械学習(上)」です。もしこれらの本を持っている人がいれば、これらを片手に本記事を読むことで理解が進むと思います。
また本記事は、最初にベイズ推論による学習と予測のアルゴリズムについて解説し、その後、具体例を通してこれらのベイズ手法の理解と確認をし、実際のデータを前にしてどのように分析するか、イメージできるようにしています。
- ベイズ推論における予測と学習
- コイン投げの例でベイズ推論を学ぶ
ベイズ予測や推論でやろうとしていること
この記事では、ベイズ推論の枠組みでできる内容について、数式を深掘りながら探索していきます。しかし、まず全体として何をやろうとしているのか、について全体感を持ちましょう。まず、ベイズ予測やベイズ推論でやろうとしていることは、データを用いて確率モデルを学習し、その学習した確率モデルを利用して未知のデータの予測をすることです。これはベイズ推論に限らず、機械学習でやっていることそのままです。つまり、ベイズ予測について何もわからない読者でも、やっていることは単純に何かしらの数理モデルを仮定し、その数理モデルのパラメータをデータを使って学習し、学習したパラメータを持つ確率モデルによって、未来の値を予測する、といった内容になります。
最終推定などの頻度主義と違い、ベイズ推定では確率モデルをパラメータも、確率モデルを通して扱うことがもっとも大きな特徴です。この予測したい現象の数理モデルにおけるパラメータも確率的に表現するというところが肝です。
とはいえ、数理モデルにおけるパラメータも確率的に表現する?そんなことは可能なのか?と思う人も多いと思います。この記事では、その部分が腹落ちして、なるほど!ベイズ統計の枠組みは大体理解できた!
となるようにしていきます。
ベイズ推論と通常の機械学習の違いについて
機械学習の学習と推論の全体像
ベイズ推論の学習の理解に入る前に、機械学習における学習と推論の全体像をおさらいしましょう。
機械学習では、現象に対する統計モデルを用意し、学習のフェーズではデータによってこれらの統計モデルのパラメータを学習します。予測フェーズでは、学習したパラメータを用いた統計モデルによって、モデルに説明変数を入力することで、予測結果を出力します。
これらはなんとなくイメージはできると思います。ではベイズ統計でやっていることは、どういうことなのか?
実は、ベイズ統計の枠組みのおける学習や推論の枠組みも、上と全く同様です。
しかし、ベイズ統計の中では、事前分布(prior distribution)だったり、事後分布(posterior distribution)、尤度(likelihood)、予測分布(predictive distribution) などの表現が登場し、全体としてどのような枠組みとなっているか、中々理解できなかったりします。
なので、今回の記事では、実際ベイズ統計は様々な用語や式変形が登場し迷子になりがちですが、ベイズ統計で登場するこれらの分布や情報が、一番最初に登場した機械学習の全体のどこに位置付けられるかについて、理解できるように解説をしていきます。
ベイズ推論における学習の枠組み
では、まずベイズ推論では学習をどのようにやっていくのかについて説明します。
今、何かしらの現象を予測しようと思い、パラメータ$\theta$を持つ数理モデルと、学習に使うデータセットが$\mathcal{D}$があるとします。
ここまでは大丈夫ですね。
次に、現時点では推理モデルはただ用意しただけでパラメータの値も決まってないので、データを用いてパラメータをデータに適するようなものに探したいと思います。(これは線形回帰などでパラメータを探すのと一緒です)
ベイズ統計では、このモデルのパラメタ$\theta$をデータ$\mathcal{D}$に適したものに変更し、データに適した新しいパラメタを得る処理を、下記にように書きます。
\begin{equation} p(\theta | \mathcal{D}) = \frac{p(\mathcal{D}|\theta) p(\theta)}{p(\mathcal{D})} \end{equation}
(1)式はすべての確率分布において成り立つ普遍的な式なので、当然ですが抽象度が高くなっています。そのため、(1)式を理解しようとしても、自分の中で腹落ちさせるのは至難の技だと思います。本記事では後半の方で具体例を通して、(1)では実際に何をやっているのか、について解説するので、今は(1)式は確かに成り立つな、ということが理解できれば十分です。
ちなみに、(1)式は条件付き確率の定義そのものです。条件付き確率の定義があやふやな人向けに、条件付き確率の定義を下に記載します。
\begin{equation} P(A, B) = P(A | B)P(B) = P (B | A)P(A) \end{equation}
ベイズ推定においては、(1)式の左辺、つまり$p(\theta | \mathcal{D})$を求めることがゴールとなります。この$p(\theta | \mathcal{D})$を、データから学習させたモデルの確率であり、これを事後分布と言います。また、右辺の$p(\theta)$を事前確率と呼びます。
ここまで、急に数式が登場して、頭が混乱してしまったでしょうか。
ベイズ推論における、学習ではある統計モデルにおいて、学習をしようとした際に、データに最適なパラメータを1つ見つける(これを点推定と言います)するのではなく、最適なパラメータを確率分布の形式で表現しようとしていることです。これが(1)から解釈でいる一つのベイズの定理の側面になります。
ざっくりこの内容を図に示すと下記のようになります。
ベイズ推論の学習においては、ある意味パラメータに関する事前知識のない状況からデータを用いて、モデルのパラメタを学習します。
モデルのパラメタを学習すると、パラメタの分布によって確率分布の形も変動する、といったイメージを持てると良いと思います。
繰り返しになりますが、ベイズ推論における学習の式(1)はあまりにも抽象的なため、この数式を見て何も理解できず虚無になるのは当然のことです。
後半の部分で実際に具体例を通してベイズ推論の学習と予測を行うので、その具体例を通して(1)式の理解を深めると良いと思います。
ベイズ推論における推論の枠組み
ここまでベイズ推論における学習の枠組みについてまとめてきました。ここからは、ベイズ推論における予測の仕組みについて説明していきます。
当然機械学習をする以上、過去のデータからモデルを学習し、そのモデルから将来何が起こるかを予測したいわけですね。ベイズ推定では、パラメータ$\theta$の学習も確率密度を用いて予測したように、将来起こり得る予測値$\hat{x}$も確率的に予測します。
この予測する確率的な値の分布のことをベイズ推定では、予測分布(predictive distribution)と呼び、$p(\hat{x} | \mathcal{D})$、もしくは$p(x_{*} | \mathcal{D})$のように表現します。
ベイズ推論における予測分布の定式化
\begin{equation} p(\hat{x}| \mathcal{D}) = \int p(\hat{x} | \theta) p(\theta | \mathcal{D}) d\theta \end{equation}
(3)の内容も抽象度が高いので、後半の具体例を通して理解できれば十分です。
内容としては、右辺でデータが既知の場合に得られた$\theta$ の分布に対して、その$\theta$から得られる$x$の予測値の期待値を取っているようなものです。しかし、(3)式自体も任意の$p(\theta)$において成り立つ普遍的な式なので、数式だけを見てイメージするのは難しいでしょう。
ちなみに、このモデルにおけるグラフィカルモデルはこのようになります。データセット$\mathcal{D}$からモデルのパラメータ$\theta$を推定していますが、逆にモデルパラメータ$\theta$の分布が定まった状態でデータ$\mathcal{D}$や予測値$\hat{x}$が生起するというような解釈もできます。
これをちゃんと定式化するとこのようになります。
今、既知のデータ$\mathcal{D}$予測したい値を$x$、また最適な確率変数のパラメタを$\theta$とします。
\begin{equation} \begin{split} p(\hat{x}, \theta | \mathcal{D}) &= p(\hat{x} | \theta) p(\theta | \mathcal{D}) \end{split} \end{equation}
(4)式は条件付き確率の連鎖律の公式を使っています。、(4)式から$\theta$を積分除去することで、求めたい$p(\hat{x}| \mathcal{D})$を得ることができます。ものように予測分布とは、実際に学習に用いたデータと予測したい変数の条件付き確率を出すために、モデルのパラメタ(今回の場合は$\theta$)を積分除去した周辺確率になリます。
ベイズ推論の学習や予測を具体例を通して学ぶ
ここまで学んだ内容を、具体例を通して確認してみましょう。以降では、具体的な確率的な具体例を提示し、ベイズ推論の枠組みを使って解決していきます。
記事を読みながら注意してもらいたいのは、どのような設定の問題を、ベイズ推論の枠組みを使って、どのように解いているか、をわかりやすく説明していきます。特に、ベイズ推論の学習の式である(1)式と(3)式がどのように実用上使われているか、に着目してみてください。
離散確率分布のおけるベイズ学習とベイズ予測
ここまで学んできたざっくりとした理論的背景を、現実の問題を解きながら確認していきましょう。
まずは、問題設定として下記の問題を考えましょう。
問題: 1回コインを投げた時に表が出るか裏が出るかの予測
裏が出るか表が出るかわからないコインがあります。このコインを投げた時の結果として、
X = {表, 表, 裏, 表, 表, 裏, 表, 表 , 表, 表, 裏, 表, 表, 裏, 裏, 表, 表, 裏 ,表, 表 }
という結果が得られています。
この時、次にコインを投げた時は表と裏, どちらが出るでしょうか?
このような、ある意味非常に簡単な確率の問題をベイズ推定の枠組みを使って、解いていきましょう。まずは簡単な問題からです。
ベイズ統計を利用しない解法
まず、ベイス手法を用いないでこのような予測問題に対応してみましょう。まず、過去の履歴から、20回コインを投げて、表が14回、裏が6回出現します。すると、単純に計算すると表が出る確率は、$\frac{14}{20} = 0.7$であり、裏が出る確率は、$\frac{6}{20} = 0.3$であるから、次にコインを投げた時の期待値は、コインが表であることを1、裏であることを0 とすると、0.7 程度であることがわかります。
非常に扱いやすいコイン投げの問題を、確率的に考えるとこのようになります。
コイン投げ問題をベイズ推定してみる
まず、コイン投げにおいて、表が出ることを1、裏が出ることを0とすると、このような0と1の2値をとるような$x \in (0, 1)$ xの確率分布はベルヌーイ分布を用いて表現することができます。
\begin{equation} \begin{split} p(x | \mu) &= Bern(x| \mu ) \\ &= (1-\mu)^{1-x} \mu^x \end{split} \end{equation}
ここで、$\mu$はベルヌーイ分布におけるパラメータです。ここで、この$\mu$が、ベイズ学習の式に登場した(1)の$\theta$に相当します。ここで、ベイズ推定においては、データを用いてこの$\mu$の分布を学習しますから、この$\mu$自体もモデル化する必要性があります。
先ほど、$\mu$はベルヌーイ分布におけるパラメタと説明しましたが、この$\mu$のとる範囲は、$\mu \in (0, 1)$ですので、この値の範囲をとるベータ分布を用いて、$\mu$を定式化してみます。
\begin{equation} \begin{split} p(\mu) &= Beta(\mu | a, b) \\ &= C \mu^{a -1} (1 - \mu) ^ {b-1} \end{split} \end{equation}
(1)式の$p(\theta)$は、今回の問題設定においては、(6)式のようになるわけです。ここでCはベータ分布における正規化項です。
ここで、(1)式はデータ$\mathcal{D}$を用いてパラメタ$\theta$を学習し、$p(\theta | \mathcal{D})$を得ることをしているので、(6)式で表される$p(\mu)$でもやってみましょう。
ちなみに、(6)式は今回のモデルである(5)式のパラメータ$\mu$の分布を決めるパラメータであり、パラメータのパラメータであることから、ハイパーパラメタと呼ばれています。
ここで、今回は実験値である$\bm{X}$が得られているため、これを用いて(1)の計算をしてみましょう。
\begin{equation} \begin{split} p(\mu | \bm{X}) &= \frac{p(\bm{X}|\mu) p(\mu)}{p(\bm{X})} \\ &= \frac {\{ \prod_{n=1}^{20} p(x_n | \mu) \} p(\mu)}{p(\bm{X})} \\ &\propto \{ \prod_{n=1}^{20} p(x_n | \mu) \} p(\mu) \end{split} \end{equation}
ここで(7)式の3行目の式変形ですが、現段階では$p(\bm{X})$はわかりません。しかし、$p(bm{X})$は$\mu$ に関係する項は含まない定数として考えられるので、ひとまず3行目のような式変形を行います。少なくとも、$p(\mu | \bm{X})$の形状を知る上では、$\mu$ に関係しない項は注目していないので、このような式変形をしています。
ここで、計算の都合で(7)式の対数を取ります。
\begin{equation} \begin{split} lnp(\mu | \bm{X}) &= \sum_{n=1}^{20} ln p(x_n | \mu) + lnp(\mu) + const. \\ &= \sum_{n=1}^{20} x_n ln \mu + \sum_{n=1}^{20}(1-x_n)ln(1-\mu) \\ & \quad + (a-1)ln \mu + (b-1)ln(1-\mu) + const. \\ &= (\sum_{n=1}^{20} x_n + a - 1)ln \mu + (20- \sum_{n=1}^{20}x_n + b-1)ln(1-\mu) \\ & \quad + const. \end{split} \end{equation}
と式変形することができます。ここで、$\mu$に関係しない項はすべてconst に押し込めています。
ここで、(7)式では$\propto$記号で結ばれていたのに、(8)式では等号になって違和感を感じた人もいるかもしれませんが、このconstに分母の$p(\bm{X})$を押し込めているので、等号でかけることに注意してください。
とりあえず、(8)式によって、$\mu$の事後分布の対数表示がわかりました。ここで、(8)式の対数表示の事後分布と(6)の事前分布を比較するために、(6)式にも対数を取ってみましょう。
\begin{equation} \begin{split} lnp(\mu) &= (a-1) ln \mu + (b-1) ln (1 - \mu) +const. \end{split} \end{equation}
(8)式が事後分布で(9)式が事前分布です。ここで$\mu$に関係する項に注目すると、
\begin{split} a -1 \quad &→ \quad \sum_{n=1}^{20} x_n + a - 1 \\ b -1 \quad &→ \quad 20- \sum_{n=1}^{20}x_n + b-1 \end{split}
となっていることから、事後分布の確率密度関数を$p(\mu | X) $ は、$a, b $を用いて、
\begin{equation} \begin{split} p(\mu | \bm{X}) &= Beta(\mu | \hat{a}, \hat{b}) \\ \hat{a} &= \sum_{n=1}^{20} x_n + a \\ \hat{b} &= \quad 20- \sum_{n=1}^{20}x_n + b \end{split} \end{equation}
となります。
ここで今回、X = {表, 表, 裏, 表, 表, 裏, 表, 表 , 表, 表, 裏, 表, 表, 裏, 裏, 表, 表, 裏 ,表, 表 } という情報があることから、新しい$\hat{a}, \hat{b}$はそれぞれ、
\begin{equation} \begin{split} \hat{a} &= \sum_{n=1}^{20} x_n + a = 14 + a\\ \hat{b} &= \quad 20- \sum_{n=1}^{20}x_n + b = 6+b \end{split} \end{equation}
となりました。今回初期分布として(6)に例えば、$a=1, b=1 $などを与えていれば、$\hat{a}=15, \hat{b} = 7$となるわけです。
初期値である、$a, b $はなんでも良いのですが、(11)式を見るとコイン投げの施行を重ねるごとに、初期値の影響はどんどん小さくなることがわかりますね。(例えば、$x_n → \infin$の状況を考えてみてください)
コイン投げ思考におけるベイズ予測
ここまででベイズ推論における学習ができました。具体的には、事後分布$p(\mu | \bm{X})$を下記のように得ることができました。
\begin{equation} \begin{split} p(\mu | \bm{X}) &= Beta(\mu | \hat{a}, \hat{b}) \\ \hat{a} &= \sum_{n=1}^{20} x_n + a \\ \hat{b} &= \quad 20- \sum_{n=1}^{20}x_n + b \end{split} \end{equation}
では次のこの事後分布を用いて、次のコイン投げで表が出るか、裏が出るかを予想してみましょう。
(3)式より、ベイズ予測 により、予測値$\hat{x}$を求めるには、以下のようにして予測値を求めればいいわけです。
p(\hat{x}| \mathcal{D}) = \int p(\hat{x} | \theta) p(\theta | \mathcal{D}) d\theta
今回のパターンでは、予測分布の計算はこのようになります。
\begin{equation} \begin{split} p(\hat{x}| \bm{X}) &= \int p(\hat{x} | \mu) p(\mu | \bm{X}) d\mu \\ &= \int (1-\mu)^{1-\hat{x}} \mu^{\hat{x}} \frac{\Gamma(\hat{a} + \hat{b} )}{\Gamma(\hat{a})\Gamma(\hat{b})} \mu^{\hat{a} -1} (1 - \mu) ^ {\hat{b}-1} d\mu \\ &= \frac{\Gamma(\hat{a} + \hat{b})}{\Gamma(\hat{a})\Gamma(\hat{b})} \int (1-\mu)^{\hat{b} -\hat{x}}\mu^{\hat{a} -1+\hat{x}} d\mu \\ &= \frac{\Gamma(\hat{a} + \hat{b})}{\Gamma(\hat{a})\Gamma(\hat{b})} \frac{\Gamma(\hat{a} + \hat{x})\Gamma(\hat{b} + 1 - \hat{x})}{\Gamma(\hat{a} + \hat{x} + \hat{b} + 1 - \hat{x})} \\ &= \frac{\Gamma(\hat{a} + \hat{b})}{\Gamma(\hat{a})\Gamma(\hat{b})} \frac{\Gamma(\hat{a} + \hat{x})\Gamma(\hat{b} +1 - \hat{x})}{\Gamma(\hat{a} +\hat{b} + 1)} \\ &= \frac{\Gamma(\hat{a} + \hat{x})\Gamma(\hat{b} + 1 - \hat{x})} {\Gamma(\hat{a})\Gamma(\hat{b}) (\hat{a} + \hat{b} ) } \end{split} \end{equation}
なかなか、難しい式変形になってしまいました。
とりあえず、今回は表になる時、つまり$\hat{x} = 1$になる確率を予想したいとすると、(13)式の$\hat{x} $に$\hat{x} = 1$を代入するともう少し式は単純になります。
\begin{equation} \begin{split} p(\hat{x} = 1| \bm{X}) &= \frac{\Gamma(\hat{a} + 1)\Gamma(\hat{b})} {\Gamma(\hat{a})\Gamma(\hat{b}) (\hat{a} + \hat{b}) } \\ &= \frac{ \hat{a}}{(\hat{a} + \hat{b} ) } \end{split} \end{equation}
となりました。
(10)式より、$\hat{a}, \hat{b}$の値はわかっているので、(14)式に代入しつつ一般的な形に書き直すと、
\begin{equation} \begin{split} p(\hat{x} = 1| \bm{X}) &=\frac{ \hat{a}}{(\hat{a} + \hat{b} ) } \\ &= \frac{\sum_{n=1}^{N} x_n + a} { N + a + b } \\ \end{split} \end{equation}
となります。$p(\hat{x} = 0 | \bm{X})$ も同様に計算すると(13)式より
\begin{equation} \begin{split} p(\hat{x} = 0 | \bm{X}) &= \frac{\Gamma(\hat{a})\Gamma(\hat{b} + 1 )} {\Gamma(\hat{a})\Gamma(\hat{b}) (\hat{a} + \hat{b}) } \\ &= \frac{ \hat{b}}{(\hat{a} + \hat{b} ) } \end{split} \end{equation}
となるので、より一般的な形に直してあげると
\begin{equation} \begin{split} p(\hat{x} = 0| \bm{X}) &=\frac{ \hat{b}}{(\hat{a} + \hat{b} ) } \\ &= \frac{N - \sum_{n=1}^{N} x_n + b} { N + a + b } \\ \end{split} \end{equation}
を得ることができました。確率変数$p(x)$は、0, 1の2値をとるので、(15)と(17)を合わせて、無事に$p(x | \bm{X})$をベイズ推定を用いて推論することができました。
まとめ
記事の冒頭でベイズ手法の概要と学習と推論のアルゴリズムについて簡単にまとめ、その後簡単なコイン投げの例を通して、ベイズ推定を実際にやってみました。
今回利用した確率密度関数は、尤度関数にベルヌーイ分布を用い、事前分布にベータ分布を用いました。しかし、実際これらの確率密度関数のペアは共役事前分布と呼ばれており、解析的に解くことができる確率分布を利用していました。
今回はコイン投げという非常に簡単な例を用いたのでうまく分布を予測することができましたが、実際の機械学習の実務ではこのような確率密度関数を利用しても、うまく扱いたいデータの分布を表現できない場合が多々あります。このような場合は、共役事前分布を使うことができず、より表現力の高いモデルを利用することになるのですが、そうすると解析的に解けなくなる問題が生じます。実際これらの問題に対しては、EMアルゴリズムやMCMCや近似推論の方法があり、実際の実務ではこれらを用いた学習手法がよく利用されるのですが、今回はベイズ推定の基本的なコンセプトと枠組みを学ぶためにあえて簡単な例を通して、これらを学ぶことにしました。
今後は、より複雑な現実世界に近い例を通して、ベイズの枠組みでモデリングをし、前述のEMアルゴリズムやMCMC、近似推論を用いた学習手法を紹介していきます。