確率モデルを完全に理解したい…。[1]https://togetter.com/li/1268851
ということで、今回は「タカシくんジャンケン異様に強い説」を題材に、ベイズ推定であつかう「確率モデル[2]複数の基本的な確率分布を組み合わせて作った確率分布」を学んでいきましょう。
長い記事になっていますが、この記事を最後まで辿り着く頃には、確率モデル構築の流れと考え方を完全に理解していることでしょう…。
本記事は以下の書籍を参考にしています。
タカシくんジャンケン異様に強い説
タカシくんはジャンケンが異様に強いと街で評判です。
ここに彼の過去の戦績(勝ち or 負けを観測したデータ)があるとします。データをもとに勝率を推定してみましょう。
(ここでの勝率とはタカシくんがジャンケンに勝つ潜在的な確率を指します。直接観測できない、言わば神のみぞ知る真の確率のことです。)
推定には色々な方法がある
推定には色々な方法があります。
勘で推定することもできますし、勝利数/過去の試合数(いわゆる最尤推定[3]導出過程を知りたい方はこちらをご参照くださいhttps://web.stanford.edu/class/cs109/reader/11%20Parameter%20Estimation.pdf )で計算することもできます。
しかし最尤推定では、例えばある人が3戦0勝だった場合、勝率が0/3=0だと推定されます。
だからと言って、ジャンケンに勝つ潜在的な確率が0、つまりタカシくんが必ずジャンケンに負ける人だと結論づけるのは違和感がありませんか?
このように最尤推定では、試行回数が少ないとき推定値が信頼できないという問題があるのでした。
そこで「ジャンケンなんて所詮運ゲー[4]ジャンケンのプロの方ごめんなさいだから勝率は0.5前後になるだろう」という事前知識を組み入れたくなります。
そんなときに確率モデルとベイズ推定が力を発揮します。
観測データ$\bf{X}$は確率分布から生成されると考える
まず大前提として、観測データは確率変数であり、何かしらの確率分布から生成されたものだと考えます(当たり前だけど、ここがとても重要)。
ジャンケンに「勝った」「負けた」というような2値の観測データを生成するような分布としてベルヌーイ分布があります。
ベルヌーイ分布はパラメータ$\mu \in (0, 1)$(一方の事象がどれだけ出やすいかをコントロールする)を指定すると形が一意に決まる分布です。
今回は、観測データ$\bf{X}$が具体的な形はよく分からない(形を一意に決定づけるパラメータ$\mu$が未知である)ベルヌーイ分布に従って生成されていると仮定しましょう。
この仮定によって、観測データ$\bf{X}$が確率的に生成される過程を条件付き確率
$$P(\bf{X}|\mu)=\mathrm{Bern}(\bf{X}|\mu)$$
で表せるようになります。このような確率分布は観測モデル[5]ベイズ推論による機械学習入門や確率的生成モデル[6]ガウス過程と機械学習と呼ばれます。
ちなみにこの条件付き確率に関して、観測データ$\bf{X}$を定数として扱い、パラメータ$\mu$の関数と見立てたものを尤度関数と呼びます。
(尤度関数を最大化する$\mu$をパラメータの推定値とすることを最尤推定と呼びます。)
パラメータ$\mu$も確率分布から生成されると考える
ところで、ベイズ推定ではこの$\mathrm{Bern}(\bf{X}|\mu)$の形を決定づける未知のパラメータ$\mu$も確率変数だと考えるのでした。
つまり、$\mu$は何かしらの確率分布に従って生成されると考えます(この確率分布のことを事前分布と呼びます)。
事前分布は何でもいいのですが、尤度関数がベルヌーイ分布で表されるとき、事前分布にベータ分布を選ぶと後の計算が効率的だということが知られています。(興味のある方は「共役事前分布」で検索してみてください。)
今回の場合だと、事前分布にベータ分布を選ぶことで、尤度と事前分布の積(事後分布)がベータ分布で表せます。
ベータ分布は連続値$x \in (0, 1)$となるような変数を生成する分布です。ここでは詳細は割愛しますが、ベータ分布は2つのパラメータ$a, b$をとります。
$$P(\mu)=\mathrm{Beta}(\mu|a, b)$$
またパラメータが登場しました。
となると、例によって「パラメータ$a, b$を生成する確率分布のことを考えるの?」と思われるかもしれませんが、今回はそこまでは考えません。
観測データ$x$を生成する確率分布のパラメータ$\mu$を生成する確率分布のパラメータ$a, b$を生成する確率分布まで求めるとなると、これはもう大変です。
(場合によっては、パラメータ$a, b$を生成する確率分布を考えることもあります。)
パラメータ$a, b$を手動で設定して事前分布に知識を反映
そうではなく、ここは$a, b$を手動で設定します。
それはすなわち、$\mu$を生成する確率分布(事前分布)の形を指定する、つまり自分が持っている事前知識を$\mu$の確率分布に反映させることになります。
例えば、ジャンケンの勝率は0.5を中心とした山なりの分布だろうと考えるならば、事前分布がそういう形になるように$a, b$を調整するのです。
観測データに基づいて$\mu$の確率分布の形を推定する
さて、ここまでで以下のパーツを手にしました。
$$P(\bf{X}|\mu)=\mathrm{Bern}(\bf{X}|\mu)$$
$$P(\mu)=\mathrm{Beta}(\mu|a, b)$$
$$(a, bは任意の値)$$
これらを組み合わせることで、ベイズの定理より観測データに基づいたパラメータ$\mu$の確率分布(事後分布)が解析的に求められます。
$$P(\mu|\bf{X}) \propto P(\bf{X}|\mu)P(\mu)$$
この$P(\mu|\bf{X})$は、さっきの共役事前分布のところでちらっと話しましたが、パラメータが$\hat{a}, \hat{b}$のベータ分布に従います。式で書くと以下のようになります。
$$P(\mu|\bf{X})=\mathrm{Beta}(\mu|, \hat{a}, \hat{b})$$
$$\hat{a}=\sum_{n=1}^{N}x_n + a$$
$$\hat{b}=N - \sum_{n=1}^{N}x_n + b$$
この$\hat{a}, \hat{b}$の導出は書籍に譲りますが、このように観測データ$\bf{X}$を生み出す確率分布の形を推定したいという気持ちで突き進んでいたら、気付いたら$\hat{a}, \hat{b}$を計算する問題に行きついてました。
あとは$\hat{a}, \hat{b}$を計算するだけで、観測データに基づいた$\mu$の確率分布の推定ができます。
一見遠回りにも見えますが、元々$\mu$はベータ分布から生成されると仮定しているので、そのベータ分布のパラメータを観測データを使って計算するのはおかしくないですよね。
おさらい
ここまでのモデリングの流れをおさらいしましょう。
- 観測データ$\bf{X}$を生成する確率分布$P(\bf{X}|\mu)$(尤度関数)を仮定する。
- パラメータ$\mu$を確率変数として扱い、観測データのことは一切考えずに$\mu$を生成する確率分布$P(\mu)$(事前分布)を仮定する。
$P(\mu)=\mathrm{Beta}(\mu|a, b)$のハイパーパラメータ$a, b$を手動で調整して事前知識を入れ込む。
- ベイズの定理を使って、尤度関数と事前分布から観測データから得られる情報を反映させた$\mu$の確率分布$P(\mu|\bf{X}) $(事後分布)を求める。
具体的には解析的に求められる$P(\mu|\bf{X})=\mathrm{Beta}(\mu|, \hat{a}, \hat{b})$の$\hat{a}, \hat{b}$を計算する。
この流れで、観測データに基づいて$\hat{a}, \hat{b}$を計算することで、勝率$\mu$がどういう分布の形になっているか推定できました。
ちなみにモデリング中は頭の中でこんなことを考えています。
- 観測データ$\bf{X}$(確率変数だとみなす)を生成する確率分布の形を求めたい。
→$\bf{X}$を生成する確率分布はベルヌーイ分布だと仮定する。
- ベルヌーイ分布は未知のパラメータ$\mu$(確率変数だとみなす)によって支配されている。(最終的にこのパラメータ$\mu$を観測データから学習したい。)
→パラメータ$\mu$が確率分布に従うとみなして、$\mu$を生成する確率分布の形を求めたい。
- $\mu$を生成する確率分布(ベータ分布)は未知のパラメータ $a, b$(確率変数だとみなす)によって支配されている。
- $\mu$に関して自分が持っている事前知識をモデルに入れたい。
→$\mu$を生成する確率分布のパラメータ$a, b$を手動で設定して$\mu$の確率分布の形を指定する。
- 尤度関数と事前分布が定義できたから、ベイズの定理で事後分布が求められる。
→事後分布を解析的に解くと、$\mu$はパラメータ$\hat{a}=\sum_{n=1}^{N}x_n + a, \hat{b}=N - \sum_{n=1}^{N}x_n + b$のベータ分布に従うと求められるから、観測データ$\bf{X}$を使って$\hat{a}, \hat{b}$を計算する。
さて、ここまで時間を掛けてしっかりとベイズ推定の流れを確認してきました。
「で、結局タカシくんの勝率はどうなったの?」
という話なわけですが、記事があまりにも長くなってしまったので、今日はここまでで…。
具体的な勝率の計算は、またいつか実際のデータを使ってプログラミングしながら推定していきましょう。
ここまでお付き合い頂きまして、ありがとうございました。
注釈
↩1 | https://togetter.com/li/1268851 |
---|---|
↩2 | 複数の基本的な確率分布を組み合わせて作った確率分布 |
↩3 | 導出過程を知りたい方はこちらをご参照くださいhttps://web.stanford.edu/class/cs109/reader/11%20Parameter%20Estimation.pdf |
↩4 | ジャンケンのプロの方ごめんなさい |
↩5 | ベイズ推論による機械学習入門 |
↩6 | ガウス過程と機械学習 |
コメント