機械と学習する

統計解析、機械学習について学習したことをまとめていきます

様々な確率分布

【概要】

  • よく使われる確率分布の紹介と実装例をまとめました

【目次】

はじめに

ベイズ推論についての書籍をいくつか読んでいて、なんとなく理解はできても具体的なイメージってつきにくくないですか?
ということで、実装して理解を深めたいと思います。

この記事では、ベイズ推論の中でよく使われる確率分布について、概要と実装例をまとめてみます。 参考にした書籍は、「ベイズ深層学習」です。

ベイズ深層学習 (機械学習プロフェッショナルシリーズ)

ベイズ深層学習 (機械学習プロフェッショナルシリーズ)

間違いなどあったら指摘していただけると助かります。

【トップに戻る】

本記事の範囲

本記事では、ベイズ深層学習の3章の内容をいくつか実装していきます。 当初は、よく出てくる確率分布の紹介とベイズ線形回帰まで一気に書くつもりだったんですが、確率分布の章が思いの外長くなってしまったため、記事を分割することにしました。

まず、確率分布とは何か?ということを考えた後に、よく使われる確率分布についてそのイメージを掴むために可視化してみます。

実装については、以下のjupyter notebookに載っています。なお、先に書いた通り、ベイズ線形回帰まで書こうと思ったので、以下のnotebookにはベイズ線形回帰まで載っています。

gist47ca094d0ee45af92eed3a8b9b3c09ec

【トップに戻る】

確率分布

統計の分野においては、データはある確率分布から生成されると考えるのが基本です(統計をベースにしている「機械学習」も同じ)。

いつでも完全に同じデータが得られるような現象は稀です。 観測時の計測ノイズや本質的な揺らぎ(量子的な揺らぎ)を原因として、データは揺らぎます。 このような揺らぎを表現するための道具として確率分布を使います。

確率分布をパーツとして、解析したい問題(現象)をモデリングしていきます。 明示的に確率分布を組み合わせて構成したモデルを特に、「確率モデル」と呼ぶことが多い気がします(ここは言葉の理解が怪しいです)。 「機械学習」の文脈でよく使われる、線形回帰やニューラルネットワークも確率モデルとして扱うことができます。

では実際に、確率分布とはどのようなものがあるのかを図で確認してみます。

上記のnotebookには以下の8種類の分布を可視化するためのコードが書かれています。馴染みのある分布から聞いたことがない分布もあると思いますが、特にベイズ推論の中ではこれらの分布は頻出します。

1次元ガウス分布(正規分布)

ガウス分布正規分布とも呼ばれます。 この分布は最も有名であり、また、最も良く使われる連続量の確率分布です。

ガウス分布は多くのノイズ(ばらつき)のモデルに利用されています。 また、学力の程度を示す指標の一つである「偏差値」も試験の点数がガウス分布に従うと仮定して算出されています*1。 さらに、ガウス分布モデリングしているとは気付かずに使っている場合も多いです*2

ガウス分布は以下の確率密度関数で表されます。

{ \displaystyle
\mathcal{N}\left(x | \mu, \sigma^{2}\right) = \frac{1}{\sqrt{2 \pi \sigma^{2}}} \exp \left\{-\frac{(x-\mu)^{2}}{2 \sigma^{2}} \right\}
}

ここで、\mu \in \mathbb{R}は1次元の実数値で、分布の中心を表します。 \sigma^{2} \in \mathbb{R}は分散と呼ばれ、分布の広がりを定義します。

可視化してみると、以下のような形をしています。密度関数の式からも明らかに、平均 \muから左右に指数的に減少することがわかります。

f:id:hippy-hikky:20191022001640p:plain
ガウス分布の可視化.左は[tex: \mu=0, \sigma2=1]のガウス分布から10,000点のサンプルを取得して描いたヒストグラム.右は、[tex: \mu=0, \sigma2=[0.5, 1.0, 2.0]]の確率密度関数

上記の図を描きだすためのコードは、notebookのセル番号[2]にあります。 また、ガウス分布は、一様乱数から生成することができます(Box-Mullar法)。 Box-Mullar法によって一様乱数から生成するためのコードをセル番号[3]に記載しています。

多次元ガウス分布

上記のガウス分布を多変量に拡張した分布です。多変量なので、D次元の実数ベクトル( x \in \mathbb{R}^D)を生成する確率分布です。

定義式は以下の通りです。

{ \displaystyle
\mathcal{N}(\mathbf{x} | \boldsymbol{\mu}, \mathbf{\Sigma}) = \frac{1}{\sqrt{(2 \pi)^{D}|\mathbf{\Sigma}|}} \exp \left\{-\frac{1}{2}(\mathbf{x}-\boldsymbol{\mu})^{\top} \mathbf{\Sigma}^{-1}(\mathbf{x}-\boldsymbol{\mu}) \right\}
}

ここで、\boldsymbol{\mu} \in \mathbb{R}^{D}はD次元の平均ベクトルで、多変量の各軸の中心を表します。 \mathbf{\Sigma} \in \mathbb{R}^{D\times D}は共分散行列で、各変量間の関係性を表現しています。

二次元のガウス分布を可視化してみます。

f:id:hippy-hikky:20191023005259p:plain
2変量ガウス分布の可視化.図の右と上にそれぞれの軸で周辺化した分布(1次元ガウス分布)を合わせて示す.

上記の図を描きだすためのコードは、notebookのセル番号[4]にあります。 セル番号[4]は、scipyを使って2次元ガウス分布からの乱数を生成していますが、独立な正規分布に従う乱数を利用して変数変換することでライブラリを利用せずに多変量ガウス分布に従う乱数を生成することができます(参考:ガウス過程と機械学習)。 実際に独立なガウス分布から生成した乱数を使って2次元ガウス分布に従う乱数を生成したコードはセル番号[5]に記載しています。

二項分布(ベルヌーイ分布)

コイントスのように、状態が二つ(表、裏)だけで、各試行が独立でその確率は一定であるような試行はベルヌーイ試行と呼ばれています。 ベルヌーイ試行をN回行って、一つの状態が生じた回数x(コイントスの場合は表が出た回数など)が従う確率分布を二項分布と呼びます。

{ \displaystyle
\operatorname{Bern}(x | \theta)=\theta^{x}(1-\theta)^{1-x}
}

ここで \thetaは、一方の状態が生じる確率です(他方の確率は(1-\theta)となります)。 なお、N=1の場合を特別に「ベルヌーイ分布」と呼びます。

二項分布のNと\thetaを変えて可視化してみます。

f:id:hippy-hikky:20191023011049p:plain
二項分布の可視化.左右は確率θを変えた場合の分布.各グラフにはN=[10,50,100]の3パターンの分布を示す.

上記の図を描きだすためのコードは、notebookのセル番号[6]です。

多項分布(カテゴリ分布)

二項分布は状態が二つだけの分布でした。 例えば、サイコロの出る目や、多クラス分類問題を扱いたい場合には、多次元の分布を考える必要があります。 そこで、二項分布を多次元に拡張した分布として多項分布があります。

{ \displaystyle
\operatorname{Mult}(\mathbf{x} | M, \pi) = M! \prod_{k=1}^{K} \frac{ \pi^{x_k} }{ x_k!}
}

ここで、\piはK種類の状態それぞれの取りうる確率(\pi = \{\pi_1, \pi_2, \cdots, \pi_K\})を表します。 Mは全体の試行回数です。

確率\piを変えてK=3の場合の多項分布を可視化してみます。

f:id:hippy-hikky:20191023012854p:plain
多項分布の可視化.右はpi={0.4, 0.3, 0.3},左はpi={0.15, 0.7, 0.15}の多項分布.

上記の図を描きだすためのコードは、notebookのセル番号[7]です。

上記の図はK=3(3次元)の確率変数ですが、xの総和はMと等しくなるので、二つの状態が確定すれば3つ目の状態も確定します。そのため、二次元のヒートマップで確率分布を表すことができます。また、確率の総和は1であるため、上三角の領域のみに値が存在します。

ポアソン分布

二項分布はN回の試行の中で事象が発生する回数xについての確率分布でした。 世の中には明確に試行回数が決められないものも多くあります。例えば、交通事故の発生件数など*3。 このように何らかの事象の発生回数xについての確率分布としてポアソン分布というものがあります。

二項分布について、発生確率が極度に小さく試行回数無限大の極限でポアソン分布が導出できます(だからといって試行回数が極端に多い現象にしか使えないという訳ではないですよ)(参考:データ解析のための統計モデリング入門)。

{ \displaystyle
\rm{Poi}(x|\lambda) = \frac{\lambda^{y}\exp(-\lambda)}{x!}
}

ここで、 \lambdaは事象の平均発生回数を表すパラメータです。

パラメータ\lambdaを変えてみた場合のポアソン分布を可視化してみます。

f:id:hippy-hikky:20191023140245p:plain
ポアソン分布の可視化.lambda=[0.5, 5.0, 10.0]の場合のそれぞれの確率密度関数.横軸は発生回数.

上記の図を描きだすためのコードは、notebookのセル番号[8]です。

ベータ分布

ここまで、ガウス分布、離散確率分布といった比較的馴染み深い確率分布を紹介してきました。 次に、ベータ分布という分布を紹介します。 この分布は、0から1の範囲の実数\thetaを生成するための確率分布です。

{ \displaystyle
p(\theta | a, b) = {\rm Beta}(\theta | a, b) = \frac{\Gamma(a+b)}{\Gamma(a)\Gamma(b)}\theta^{a-1}(1-\theta)^{b-1}
}

ここで、a,bはそれぞれハイパーパラメータです。\Gamma(\cdot)はガンマ関数と呼ばれる関数です(ここでは扱いません)。

ベータ分布は、一般には馴染みが薄い分布だと思います。しかし、ベイズ推論の分野では以下の3つの理由から非常によく現れます。

  1. 0から1の範囲の変数を生成するという性質のため、「確率」をモデリングするには絶好の分布
  2. ベータ分布はaとbという二つのパラメータを持ちます。この二つのパラメータを調整することで様々な形状の分布を生成することができます。
  3. 上式の正規化項を除いた部分に注目すると、この部分は二項分布と似ています。ベータ分布は二項分布(ベルヌーイ分布)の「共役事前分布」と呼ばれており、二項分布と掛け合わせることでベータ分布が生成されるという特別な関係があります。

特に3つ目の理由が重要で、この関係を利用することで推論計算を解析的に解くことができます。

パラメータa, bを変えてみた場合のベータ分布を可視化してみます。

f:id:hippy-hikky:20191023141646p:plain
ベータ分布の可視化.ハイパーパラメータa, bをそれぞれ3種類ずつ与えた場合の分布形状.

a,bのパラメータを調整することで、様々な形状になることがわかります。 上記の図を描きだすためのコードは、notebookのセル番号[9]です。

ディリクレ分布

二項分布を一般化したものが多項分布でしたが、ベータ分布を多次元に拡張した分布がディリクレ分布です。 ベータ分布の拡張ということからもわかるように、ディリクレ分布は多項分布の共役事前分布となります。

f:id:hippy-hikky:20191023144259p:plain:h50

ディリクレ分布は、K次元のベクトル\mathbf{\pi} = (\pi_{1}, \cdots, \pi_{K})^{T}を出力します。 それぞれの要素 \pi_kは、 \sum^{K}_{k=1}\pi_{k} = 1.0、かつ、 \pi_k \in (0,1)となります。

f:id:hippy-hikky:20191023142307p:plain
ディリクレ分布の可視化.パラメータを3種類設定した場合の確率分布の形状.

上記の図を描きだすためのコードは、notebookのセル番号[10]です。

ガンマ分布

ガンマ分布は正の実数(x \ge 0)を生成する確率分布です。 ガンマ分布はそれ自体を生成モデルとして扱う場合もありますし、ガンマ分布のパラメータやポアソン分布のパラメータの共役事前分布として使われることもあります。

{ \displaystyle
\mathrm{Gam}(x|a) = \frac{ x^{a-1}\exp{{-x}} }{\Gamma(a)}
}

ここで、aはハイパーパラメータです。

f:id:hippy-hikky:20191023143520p:plain
ガンマ分布の可視化.3種類のパラメータの場合の確率密度関数

上記の図を描きだすためのコードは、notebookのセル番号[11]です。

【トップに戻る】

おわりに

ということで、よく使われる確率分布を8種類紹介し、それらの概形を把握するために可視化してみました。
結局、これだけでは何が嬉しいのかはわからないと思うのですが、これらの分布を組み合わせてモデルを構築し、様々な現象に起因するデータを解析していくことになります。

確率分布を利用した分析の最もシンプルな例として、チョコボールのエンゼル出現確率を二項分布や多項分布でモデル化するというものが挙げられます(私が書いている以下の記事参照)。

chocolate-ball.hatenablog.com

私自身もまだ勉強中なので、他に良い例を紹介できないのですが、今後新たに実験をしたらその結果を紹介したいと思います。

【トップに戻る】

おまけ

ベイズ深層学習の輪読会やってます。興味のある方参加いただけたらと思います。

「ベイズ深層学習」輪読会 #1 - connpass

第1回目の資料はこちら

www.slideshare.net

また、ここで紹介した確率分布を使った最もシンプルな例を以下の書籍(同人誌)にまとめています。もし興味があればポチっていただけると嬉しいです。

chocolate-ball.booth.pm

参考文献

  1. 須山敦志, 機械学習プロフェッショナルシリーズ ベイズ深層学習, 講談社, 2019

ベイズ深層学習 (機械学習プロフェッショナルシリーズ)

ベイズ深層学習 (機械学習プロフェッショナルシリーズ)

  1. 持橋大地, 大場成征, 機械学習プロフェッショナルシリーズ ガウス過程と機械学習, 講談社, 2019

ガウス過程と機械学習 (機械学習プロフェッショナルシリーズ)

ガウス過程と機械学習 (機械学習プロフェッショナルシリーズ)

  1. 久保拓弥, データ解析のための統計モデリング入門, 岩波書店, 2012

【トップに戻る】

*1:試験の成績がガウス分布に従うかは怪しい

*2:最小二乗法はノイズにガウス分布を仮定した場合と等価

*3:単位時間の事故発生確率と、全ての自動車が走っている時間から試行回数を作ることはできますが現実的ではないです