ベイズ機械学習のイメージについて

# この記事について

ベイズ推定、ベイズ機械学習でやっていることのイメージを掴めるように、登場する単語やそれぞれの意味、最尤推定やMAP推定(最大事後確率推定)との違いなどについて整理します。

# ベイズ推定の世界

## ストーリー

今、手元に教師データを$D=[x_0,x_1,x_2]$が集められているとします。この教師データが何らかの確率的規則に従うデータ群$x$から取得できたサンプルであると仮定します。その確率的規則を推定したいと考えています。そして、その求めたい確率的規則を模倣するために機械学習モデルを構築します。そのモデルはパラメータ$\theta$で構成される$x$の関数であるとおいて学習を行います。

## 登場人物

### 確率変数と確率分布

教師データとして$D=[x0,x1,x2]$という数列が得られたとします。これらの数列がある$x$を変数とした確率的規則Pから生成されたものとみなすとき、$x$を**確率変数**、Pを**確率分布**と呼びます。確率分布Pは**確率密度関数**ともいいます。

$$ P(x) = f(x;\theta) $$

これは、「教師データDが従う確率分布Pは、$x$の関数であり、;(セミコロン)より右側にあるパラメータ(この式では$\theta$)で構成される」ということを数式で記載しています。

もし、すでにこのPの分布の形である関数$f$とその構成要素である$\theta$の値がわかっているとすると、Pに$x_0$などを代入し、$P(x=x_0)$としてそのデータが手に入る確率を求めることができます。さらにまだ手元にない$x_3$なるデータが手に入る確率もわかります。もし、この関数が判明しているとしたら、学習など必要なくここで終了となります。ただし、当然、この関数は不明です。そのため、何らかの手段でこの分布の推定を試みます。


もし、このデータの規則に関する確率的性質を想像することが出来るのならfを特定の確率分布とおいて推定します。例えばfを正規分布とおいた場合、構成要素となるパラメータは平均μ、分散σとなります。想像が難しい場合はfをニューラルネットワークで表して近似する方法も考えられます。この場合、構成要素となるパラメータ$\theta$はネットワークの重みパラメータ群となります。

### 同時分布

二つ（以上)の確率変数が同時に発生する場合の確率分布を**同時分布**といいます。例えば、現在の真の風速Yと、風速計の測度値Xにおいて、真の風速がy(m/s)、かつ風速計がx(m/s)を示す確率と捉えることができます。

機械学習の文脈では、教師データ$D$と、その確率分布を構成する現時点ではまだ未知であるパラメータ$\theta$の同時分布を考えることになります。

$$ P(D,\theta) $$

この意味は、「**データ群から教師データDが取得でき、かつ未知のパラメータが$\theta$である確率分布**」を表しています。教師データが確率変数なのは上記の通りですが、その構成要素であるパラメータ$\theta$も確率変数と考えるのがミソとなります。

これは、本来、パラメータ$\theta$の真値はなんらかの定数のはずですが、実際は、決してその真の値を手に入れられることはなく、推定するたびに真値に近いかもしれない近似値$\theta_0,\theta_1,\theta_2$・・・が得られることになるので、このパラメータの推定値群を確率変数とみなす、すなわち**パラメータが従う確率分布が存在する**と考えることを意味します。パラメータに対するこの考え方がベイズ的推定の特徴となります。

ベイズ的推定において、この同時分布をどのように設計するかが最大の関心事となります。この同時分布は、データ群が従う確率分布$P(x)$と、パラメータが従う確率分布$P(\theta)$から構築されるためです。

$P(x)$は$\theta$で構成される関数となるため、この同時分布の確率ができるだけ高い時の$\theta$を使った$P(x)=f(x;\theta)$が、最終的に知りたい確率分布$P(x)$の形状をよく表していると考えることができます。$P(\theta)$の形がわかればどの$\theta$が高い確率になるかがわかります。そのため、一旦、データ群の形をfとおいた後は、その規則を推定するためのゴールとしては**$\boldsymbol{P(\theta)}$の形状を得ること**となります。

### 条件付き確率分布

ある確率変数の値が確定した上で、もう片方の確率変数が従う確率分布を**条件付き確率分布**といいます。例えば、真の風速がy(m/s)だったと仮にわかった場合において、風速計がx(m/s)の値を示す確率と捉えることができます。

機械学習の文脈では、同時分布と同じく、教師データ$D$と、その確率分布を構成する未知のパラメータ$\theta$の条件付き確率分布を考えることになります。|より右側が条件を表します。

$$ P(D|\theta) $$

上記の条件付き確率分布は、基本的にはデータ群の確率分布なのですが、「もし、$P(x)=f(x;\theta)$を構成するパラメータ$\theta$が具体的にある値に確定した場合に、手元にある教師データ$D$が実際に取得できる確率分布」を表しています。この確率分布において$\theta$は「条件」となっています。この関数は通常、**尤度関数**と呼ばれます。

この条件付き確率分布は、$P(D)$とは異なることに注意してください。この確率分布関数は$P(D)$を算出する際に$\theta$をある一つの値に固定させた場合の結果となっており、$P(D)$がとりうる形の可能性の一つにすぎません。

また、尤度関数は$P(x)=f(x;\theta)$のxに具体的なDの値を代入して、パラメータを色んな値に変えて作る確率分布になります。そのため、実際はパラメータ$\theta$だけの関数となります。

### ベイズの定理

いよいよベイズの定理の登場です。この定理は特に新しい法則から導かれているわけではありません。どんな確率分布に対しても一般的に成立する乗法定理の恒等式から導かれる結果であり、ある条件付き確率分布から、その条件を反対にした条件付き確率分布を導出するテクニックとなります。

$$ P(\theta|D) = \frac{P(D,\theta)}{P(D)}=\frac{P(D|\theta)P(\theta)}{P(D)} $$

機械学習の文脈でこの式を見てみます。左辺は基本的にはパラメータ$\theta$の確率分布なのですが、これの特別バージョン（条件付き）である「もし、教師データDが取得できた場合に、パラメータの値が$\theta$となる確率分布」を表しています。一般に、学習の目標である$P(\theta)$のことを**事前確率分布**と呼ぶ事に対して、$P(\theta|D)$のことを**事後確率分布**と呼びます。これは、教師データDが得られた事実から推定されるパラメータ$\theta$の得られやすさを表しています。

#### ベイズの定理の考え方

ここで、これまでの流れを振り返ってみます。私達が知りたいのはデータ群が従う確率分布$P(x)$でした。そのためのゴールはパラメータが従う事前確率分布$P(\theta)$を求めることでした。そして今、手元の教師データから考えられる事後確率分布$P(\theta|D)$というものが左辺にあります。これは事前確率分布$P(\theta)$の特別バージョンです。特別バージョンではありますが、この事後確率分布$P(\theta|D)$の形状が判明すれば、真のパラメータの推定に十分役に立つと考えられます。そのため、**教師データを利用して機械学習の手段により$P(\theta|D)$の形状を推定する**ことで、$P(\theta)$の近似を得ることを試みます。

当然、この$P(\theta|D)$の分布を学習前に想像することは困難です（想像できるなら学習は不要になります）。そのため、ベイズの定理を使って、条件を逆転させた条件付き確率分布から導いてやろうというのがこのテクニックの使い方となります。

それでは右辺の分子を見てみます。こちらは、尤度関数と事前確率分布関数が乗算された形になっています。そして、このあたりがベイズの混乱するところになるのですが、なんと学習の目的であった事前確率分布関数$P(\theta)$が右辺に入っている形になっています。知りたい$\theta$に関する分布の項が左辺にも右辺にも入っていて、一見、計算不能な形になっています。

そして、さらに分母においても、これから求めたいと考えているデータ群が従う確率分布$P(x)$に教師データのサンプルを代入することで得られる「教師データDが収集される確率$P(D)$」を求めるような形をしています。この分母も当然、計算不能です。

このように右辺に計算不能な項ばかり入っており、一見、全く役に立たない式のように見えます。そこでベイズ推定では、この問題を解決するために、なんと「**確率分布を適当に決める**」というアプローチをとります。なんとも乱暴な方法のようにも見えますが、実際問題ではうまく機能するようになります。


### 最尤推定
ベイズの定理において、各々の確率分布をどう適当に決めるかにより、いくつかの推定方法が考えられます。

$P(\theta|D)$が最大になる$\theta$を推定するために、ベイズの定理から思い切って$P(\theta)$、$P(D)$を無視して、尤度関数$P(D|\theta)$のみを考慮して最大化しようとしたものが**最尤推定**となります。ベイズの定理において、$P(\theta|D)=\delta(\theta-\hat{\theta})$（パラメータはただ一つの値$\hat{\theta}$となる）、$P(D)=1$(何度データ群からデータのサンプリングを行っても現在手元にあるデータが100%取得される)、$P(\theta)=1$(パラメータ$\theta$はどの値でもとりうる)、と置いたイメージとなります。

$$ \hat{\theta} \sim P(D|w) $$

この推定は、教師データDを完全に信頼して推定する方法となり、通常は過学習します。最尤推定は、機械学習において、**教師データとの差分を評価する損失関数を最小二乗誤差としてフィッティングをかけることと等価**になります。

### MAP推定(最大事後確率推定)

最尤推定はやりすぎだということで、$P(\theta|D)$が最大になる$\theta$を推定するために、ベイズの定理から$\theta$の確率的影響を受けない$P(D)$だけを無視して、$P(D|\theta)P(\theta)$を最大化しようとしたものがMAP推定となります。

$$ \hat{\theta} \sim P(D|\theta)P(\theta) $$

この推定は、最尤推定における過学習を防止するために、最尤推定の際はどんな値でも自由にとれる状態にあった$\theta$の可動範囲を$P(\theta)$で制限して教師データへのフィッティングをかける戦略をとっていると考えることができます。これは機械学習において、**最小二乗法で構築した損失関数に正則化によるペナルティを付ける行為と等価**となります。

この時、$P(\theta)$はどう設定するかというと先に述べたようにひとまず適当に決定します。適当のアプローチですが、主に以下のようにします。

- せっかく適当なので計算しやすいように定める
- 無情報事前分布とする

### ベイズ推定

最尤推定もMAP推定もベイズの定理から色々省くことで$\theta$を推定する方法でした。これらはベイズの定理の式を簡略化して解釈しているため、**最尤推定もMAP推定もベイズ推定ではない**ことに注意が必要です。どちらもパラメータを唯一のものとして扱う点推定となります。

ベイズ推定はベイズの定理から何も省くことなく真っ向勝負でパラメータ$\theta$の確率分布を推定する方法となります。MAP推定で省略していた周辺尤度も考慮に入れます。ベイズの定理の分母である周辺尤度は$P(D)$のままでは計算できない(想像できない)ため、周辺化のテクニックにより以下のように$\theta$について周辺化して計算を試みます。

$$ P(\theta|D) = \frac{P(D|\theta)P(\theta)}{\int_\theta P(D|\theta)P(\theta)d\theta} $$

周辺化のテクニックにより変換された分母ですが、教師データDが取得される確率$P(D)$を求めるために、「$P(x)=f(x;\theta)$の$x$に教師データDを代入し、さらに取りうる$\theta$をすべて代入した結果の総和」として算出を試みようとしていると解釈できます。少し前進したようにも見えますが、この積分を求めることはとても困難な作業になります。そのため、この値を近似的に求める(または回避する)ためにさまざまな手法が提案されています。(MCMCによるサンプリングや、変分推論法など）

### ベイズ予測分布

私たちが知りたいと考えていたものはデータ群が従う確率規則である確率分布$P(x)$でした。この分布を推定するためには、実際には教師データが必要になるので、$P(x|D)$と書く方が現実に即していると思います。最尤推定やMAP推定ではこの分布を構成するパラメータである$\theta$を$\hat{\theta}$と点推定します。そのため、これらの推定法では、データ群の従う確率分布を以下のように推定した事になります。

$$P(x|D)=f(x;\hat{\theta})$$

一方で、ベイズ推定の場合は、パラメータが従う確率分布$P(\theta)$を定義して推定します。この確率分布も実際には教師データから推定するため、事後確率分布$P(\theta|D)$の方が現実に即した分布を表していることになります。

ここで、$P(x|D)$に対して、確率分布の周辺化のテクニックにより、$\theta$で周辺化をしてみます。

$$P(x|D)=\int_{\theta}P(x|\theta)P(\theta|D)d\theta$$

この右辺の積分の中身を見てみると、$P(x|\theta)$に対して事後確率分布$P(\theta|D)$が掛け算されたものとなっています。$P(x|\theta)$は「パラメータを$\theta$と仮定した場合におけるデータ群が従う確率分布$P(x)$」です。この右辺の式は、「データ群が従う確率分布$P(x)=f(x;\theta)$の妥当性をパラメータ$\theta$の事後確率分布で評価し掛け算したものの総和をとることで平均化している」と解釈することができます。この$\theta$の中にはもちろん最尤推定やMAP推定で求められる$\hat{\theta}$も含まれています。この式は教師データに含まれない新しいデータ$x$の出現分布を表しており、**ベイズ予測分布**と呼ばれます。

このようにベイズ推定では、想定されるあらゆる確率的規則を評価しながら、その予測結果について推定することができるようになります。見方を変えると、最尤推定やMAP推定のように**一つの推定値に絞るのは自信がないため、可能な限り多くの推定値を算出して総合評価を行っている**と考えることができます。


機械学習でよくある「データxから予測値yを推定する」といったケースの場合は、教師データが$D={[x,y]}$となり、ベイズ予測分布は以下のような形で書くことができます。

$$P(y|x,D)=\int_{\theta}P(y|x,\theta)P(\theta|D)d\theta$$