ベイズ統計の歴史とSTANを使ったベイズ推定

機械学習技術 人工知能技術 デジタルトランスフォーメーション技術 自然言語処理技術 深層学習技術 ベイズ推論とMCMCのフリーソフト R言語と機械学習 MCMC 確率的生成モデル 本ブログのナビ
ベイズ統計の歴史とSTANを使ったベイズ推定

前回までに作成した、サーバー/DBのプラットフォームに機械学習の結果を組み合わせると人工知能系のアプリケーションができる。今回はそれら機械学習の中でも、モデリング系に分類されるベイズ推定について述べたいと思う。

まず最初の参考図書が、「異端の統計学ベイズ」。Sharon Bertsch McGrayneによる「The Theory That Would Not Die: How Bayes’ Rule Cracked the Enigma Code, Hunted Down Russian Submarines, & Emerged Triumphant from Two Centuries of Centuries of Controversy」の邦訳で、ベイズの法則が以下にして生まれ、どのように発展してきたかの歴史を紐解いたものとなる。

ベイズ統計の歴史は、1740年代のトーマス・ベイズから始まる。神学と数学を学んでいたベイズは、当時の「あらゆるものの第一原因は神である」という思想に基づいて、因果の根本にある神=宇宙に潜む秩序の存在を数学的に明らかにしようとした。

ベイズより少し前の時代に複素数三角関数の定理であるド・モアブルの法則を見出した数学者アブラーム・ド・モアブル原因から結果へと考えを進めることで確率に関する問題を解いたのに対して、ベイズは逆の方向である結果から原因への逆確率の問題を解こうとした。正に見えているものから、その根本原因(宇宙の秩序=神)を導き出そうとしたのである。

それらを解くための手段として、出発点として、とりあえず何らかの数値(ベイズのいうところの「推測値」)をでっち上げ(主観的確率とも呼ばれる)、情報が得られた時点でその数値を修正するという解決法を思いつき、具体的な思考実験として、後ろにあって見ることの出来ない四角いテーブルにボールを投げ、最初に落ちた場所に対して、その後投げたボールが最初のボールよりも右に行ったか左に行ったかの情報を得ていく事で推定の精度をあげていくことを考えた。

このようなケースの場合、ボールを投げる数を増やすことにより、新たに得られる情報が増えて、最初に投げたボールが落ちたと思われる場所の推定範囲が狭まっていく。これは概念的には、客観的な情報に基づいて自分の意見を変えると言う極々当たり前の話でもある。

ここで情報と確率を結びつける。シャノンによる情報理論では、情報の量は不確かさが多い(確率が小さい)ものが大きくなり、少ないものが小さくなると定義している。別の言い方をすると、これから起こることが100%分かっている情報を受け取ってもありがた味は感じないが(価値はない)、起こる確率がの小さい事象についての情報を受け取る(それが起きることが分かっていれば)ありがたさがを感じる(価値がある)と言うことにになる。つまり情報量と確率は関連すると言うことになる。

この考え方を進めて、二つの情報を足し合わせる場合を考える。 例えば1/2と1/4でそれぞれ起こる確率の情報があるとした場合、これら2つの情報を足し合わせてると言うことは、具体的な例だと4枚のカードから抜いたものが偶数である情報は確率1/2で、その数字が特定のもの例えば2とか3とかである情報は1/4、それらを足し合わせたものは特定の数字でかつ偶数なので2とか4である情報つまり1/2×1/4=1/8の確率である情報だと言える。つまりより細かで詳細な情報は様々な情報の足し算であり、確率的にはそれらを掛け算した希少な確率の情報となる。これは情報の足し算が確率の掛け算となることを示している。

以上よりベイズの情報を集めていくという概念は、それぞれの起こる確率の掛け算で表されることになる(前提として集める情報の確率は計算できるものとなる)。

情報と確率を結びつけることができたので、更に結果と原因の概念を確率で表す。それらの概念はある原因の元で結果が起こると言い換えることができる。ここで条件付き確率を、事象Aが起こったと言う条件の元で事象Bが起こると言う確率と定義して、 式として

\[P(B|A)=\frac{P(A\cap B)}{P(A)}\]

と定義すると、Aを原因、Bを結果としてこの式で表すことができる。ここで逆の方向から見たP(A|B)=P(B∩A)/P(B)を考え、確率の積の法則よりP(A∩B)=P(B∩A)であることから

\[P(B|A)P(A)=P(A\cap B)=P(B\cap A)=P(A|B)P(B)\]

と表される。ここで原因の確率Aは分からないので、他の確率で表すと以下のようになる。

\[P(A)=P(A|B)P(B)+P(A|\overline B)P(\overline B)\]

これらを用いてベイズの式として以下が導出される。

\[P(B|A)=\frac{P(A|B)P(B)}{P(A|B)P(B)+P(A|\overline B)P(\overline B)}\]

この「異端の統計学ベイズ」に記載されているベイズの逐次的なアプローチとしては、チューリングがエニグマの解読の為や、海に消えた潜水艦や水爆を探したり、あるいは意思決定や、保険数理、がんの要因の発見等がある。これらはあくまでも手作業あるいはそれらを効率化したものでしかなく、少ないパラメータの世界でしか利用できなかった。

これに対して、コンピューターを用いたアプローチが1980年代より行われ始める。多数のパラメータのあるモデルへの対応として階層ベイズやギブスサンプラー等のマルコフ連載モンテカルロ法 (MCMC) 等を使う事で一度に相手にするパラメータを限定して逐次計算していくと言う手法が取られ始める。また機械学習のキモの一つである関数の積分による最適化の手法を組み合わせることで、大きな飛躍が得られた。実際に使われた領域としては、故障分析や病気の要因の抽出、そしてデジタル画像修復等の画像処理の分野等がある。

このMCMCをコード化したものが、BUGS(Bayesian inference Using Gibbs Sampling)やJAGS(Just Another Gibbs Sampler)、Stan(RStan)、PyMC等のオープンソースソフトウェアとなる。参考図書としては、BUGSでは「ベイズ統計で実践モデリング: 認知モデルのトレーニング

JAGS等では「ベイズ推論とMCMCのフリーソフト」、

ベイズ統計モデリング―R,JAGS,Stanによるチュートリアル― 原著第2版」、

Stanに関しては「StanとRでベイズ統計モデリング」、

実践Data Scienceシリーズ RとStanではじめる ベイズ統計モデリングによるデータ分析入門」、

またベイズは上記のように統計のアプローチの参考書が多いが、機械学習に特化したものとして「ベイズ推論による機械学習入門」等がある。

機械学習のアプローチとしては、ポアソンやガウス分布にモデルを仮定してそのパラメータを求める混合モデル(mixture model)近似推論、線形次元削(linear dimensionality reduction)や、”非負値行列因子分解(NMF)の概要とアルゴリズム及び実装例について“で述べている非負値行列因子分解(Nonnegative matrix factorization NMF)、隠れマルコフモデル(Hidden Markov model HMM)、トピックモデル、テンソル分解(tensor factorization)、ロジスティック回帰(logistic regression)、ニューラルネットワーク等がある。

実際のツールを使ったものとしてはStanを使ったアプローチがある。StanはMCMCを使ってサンプルデータを生成する、いわば乱数的なシミュレーションの一種である。通常の機械学習は主にモデルと実データのギャップを最小化するために関数を最適化していくのに対して、モデリング系は最初に設定したモデルのパラメータをシミュレーションしながら最適化していく為、学習データが少ないケースで強みを発揮する。

実際にStanを使うには、Rの’RSatn’と言うツールをインストールして利用する。

install.packages('rstan', dependencies=true)

上記はmodelとして、Y[n]が平均a + bX[n]・標準偏差sigmaの正規分布から生成されたものであることを宣言している。これを実行する為には以下のようなコードを書く。

library(rstan)

d <- read.csv(file='input/data.txt')
data <- list(N=nrow(d), X-d$X, Y=d$Y)
fit <- stan(file='model/stan-file.stan', data=data, seed=1234)

stanのコードは以下のようになる。

data {
データYの宣言
}
parameters {
サンプリングしたいパラメータθの宣言
}
modle {
尤度p(Y|θ)の記述
事前分布p(θ)の分布
}

model部は様々な確率分布で構成される。例えば、ある商品を買うか買わないか、薬が効くかどうかなどの結果が二値で表される場合に適用されるベルヌーイ分布や二項分布、品目がN種類あり、それぞれの品目の故障率の分布を考える場合に適用されるベータ分布、文書の中のトピックの分布を求めるのに使われるカテゴリカル分布やディリクレ分布等々。

data部はmodel部で使う、データの個数とデータの本体Yの宣言。parameters部は推定すべきモデルの中のパラメータを宣言する。確率変数であるので分散や平均、標準偏差になる。

最もシンプルな単回帰モデルでは以下のようになる。

data {
  int N ;
  real X[N];
  real Y[N];
}
parameters {
   real a;
   real b;
   real<lower=0> sigma;
}
model {
  for (n in 1:N) {
     Y[n] = normal(s + b*x[n], sigma):
}}

上記はmodelとして、Y[n]が平均a + bX[n]・標準偏差sigmaの正規分布から生成されたものであることを宣言している。これを実行する為には以下のようなコードを書く。

library(rstan)

d <- read.csv(file='input/data.txt')
data <- list(N=nrow(d), X-d$X, Y=d$Y)
fit <- stan(file='model/stan-file.stan', data=data, seed=1234)

コメント

  1. […] 前回はベイズの考え方と、ベイズの定理の式の導出までを述べた。今回は実際にどう使うのか?について述べてみたい。 […]

  2. […] これら因果関係を扱うモデルとしては前述のベイズ推定で述べた条件付き確率を元にしたグラフィカルモデルやベイジアンモデルあるいは前回のSWとIOTで述べたマルコフロジックネットワークと呼ばれる原因と結果の関係をノードとエッジの繋がりで表すモデルを使うことができる。 […]

  3. […] 以前述べたベイズ推定の応用としてベイジアンネットがある。ベイジアンネットは様々な事象間の因果関係(厳密には確率的な依存関係)をグラフ構造で表現するモデリング手法の一つで、故障診断や気象予測、医療的意思決定支援、マーケティング、レコメンドシステムなど様々な分野で利用や研究が行われている。 […]

  4. […] この時、最もシンプルなアプローチはy-f(x)を誤差eとしてこのeを最小にする解析的なもので、f(x)のパラメータが多く複雑になると計算が困難なるという課題を持つ。これに対してf(x)のパラメータが確率分布を持つ確率変数と考え、それらに事前確率(下図上右に示すパラメータの推定値がわからない状態)と事後確率(現実のデータにより推定値の範囲がわかってきた状態)を想定して、ベイズ推定によりその確率変数(パラメータ)を推定するアプローチを確率的なアプローチと呼ぶ。 […]

  5. […] ベイズ推定(1) ベイズ統計の歴史と概要(異端の統計学ベイズより) […]

  6. […] このサベッジの与えた確率理論は「ベイジアン理論」と呼ばれ確率理論や統計学に新風を与えた。この主観確率の使い方としては2通りのものがある。一つは実際の出来事に対して主観確率を割り当て、それを参考に行動を起こすもの、もう一つは自分と利害関係のある人物がどのような主観確率の割り当てを行なっているかを見破り、それを逆手にとって自分の行動を決めるというものとなる。 […]

  7. […] 機械学習としてのシミュレーションは、技術の方向性としてはDNN的なアプローチであるGANや、確率的アプローチであるベイズ推論等幅広いアプローチがある。今後これらの技術について述べていければと思う。 […]

  8. […] この主観的な確率を理論的に用いたものがベイズ理論となる。そこでは絶対的な確率の値ではなく、相対的な確率(事前確率と事後確率)の組み合わせが理論の根本となり、ステップを踏むことでより確かな確率に近づいていくという理屈が公式化され、様々な場面で活用化されてきた。 […]

  9. […] 確率モデルの基本コンセプトは、それら不確実性を持った事象(確率変数)の間を関係性を示した辺で繋いでグラフにするもので、深層学習の始まりに登場した制約つきボルツマンマシン、混合ガウス分布やナイーブベイズもグラフィカルモデルの一種となる。これらは機械学習の複雑なモデルを表すシーンで多く活用されている。 […]

  10. […] その過程で、深層学習では主に大量のデータを学習できるスケーラブルなモデルの開発や予測精度の向上が重視され、予測結果の根拠に対する解釈性や信頼度にたいする評価は後回しにされてきた・それに対してベイズ推定は解釈性の高い解析が得られる代わりに、大量・高次元のデータに対してスケールする手段の開発は遅れてきた。 […]

  11. […] ベイズ推定と情報理論 ベイズとシャノンの理論について […]

  12. […] さらに、これら因果関係を扱うモデルとしては前述のベイズ推定で述べた条件付き確率を元にしたグラフィカルモデルやベイジアンモデルあるいは前回のSWとIOTで述べたマルコフロジックネットワークと呼ばれる原因と結果の関係をノードとエッジの繋がりで表すモデルを使うことができる。 […]

  13. […] RでのSTANを使ったベイズ推定  […]

  14. […] Twitter Facebook はてブ Pocket LINE コピー 2023.07.04 2021.06.25 人工知能技術 機械学習技術 […]

  15. […] こで3/100と30/1000とを比べ、2つの推定の間に違いを見つけようとするアプローチがベイズ統計のアプローチとなる。これは「確率Pwがどういう値を取るかの確率P(Pw)」を見るというもので、 […]

モバイルバージョンを終了
タイトルとURLをコピーしました