Topics

・関数型プログラミングとオブジェクト指向のパラダイムとしての対立 国内の【自称】関数型コミュニティと海外の論調の違い

ガラパゴス・ネットスラング=「関数型ポエム」という呪詛、先入観的読書と、フェアなレビューの登場

Qiitaの騒動から派生して、東北大学の住井 英二郎@esumii氏、らくだの卯之助@camloeba氏その他が、犯罪者集団に合流して2ちゃんねるでの誹謗中傷チームの「8賢者」「ウィザード組」とかアホなことをやってる件について

JavaScriptではES6+とReact-JSXからES5へのトランスパイルが標準に / ATOMエディタで最速環境構築 厳選パッケージ 3 + 3 2015年夏バージョン

2016年のnode、ES6、React、Babel、Atomエディタ界隈の方向性

Dockerじゃないsystemd-nspawn+machinectlが非常に良い

99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その1】「計算機科学のほんとうの基礎」を理解していない。IQ145のJKと同じ事を語るMITの権威とSICPという聖典の権威を借りてマインドコントロールを解いてみよう

99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その2】関数型プログラミングのイミュータブルな世界観とイミュータブルな実世界を完全に統合

10年先を行く斬新な関数型(FRP)データベースについて説明する 99%のプログラマがIQ145のJKに「ダサい」と言われてしまう理由とは?【その3】

[React (.js Facebook)解説 関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間 サポート記事【静的HTML編】React 解説【動的HTML-FRP編】

量子コンピュータが超高速である原理と量子論とそれに至るまでの科学哲学史をゼロからわかりやすく解説01量子コンピュータが超高速である原理と量子論とそれに至るまでの科学哲学史をゼロからわかりやすく解説02

『関数型プログラミングに目覚めた!』のレビュー(Day-1)について

LISPデータ構造の問題点の指摘と抜本的解法としての新プログラミング言語の策定/純粋関数型言語「SPINOZA」

著書『関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間』 [Day1]たち読み記事 無料公開中

『関数型プログラミングに目覚めた! IQ145の女子高生の先輩から受けた特訓5日間』を大変多くの方々にお買い求めいただき、感謝します。本書の全目次を公開し、質問を受け付けます。

2016年3月9日水曜日

ベイズ導入とベイズ統計的機械学習参考書の紹介など

最近の機械学習のあらゆる教科書に必ずといって良いほど、最初のほうの章を割いて解説(紹介)されているのがベイズ統計学です。

ベイズ理論は簡潔な「ベイズの定理」から展開される非常に美しい理論体系で、
それゆえrobust(堅牢)で応用範囲が想像を絶するほど豊かです。
昨今もろに統計学的データサイエンス化してしまった機械学習、人工知能の研究の根幹となる理論であり、実用、応用で道具として使えればそれで良いというノリでさらりと終わらされてしまう(と自分は見てて思う)のはもったいないと思いつつ、巷の説明が非常に難解なので、ベイズ推定の概念の導入の導入として、考えうるかぎり一番かんたんな説明を試みます。

トランプのカードを考える。

カードが黒 ■
カードが赤 □
と表記し、
カードのマーク(スート)の強さは
♠ > ♡ > ♢ > ♣なので、
上位2つを ↑
下位2つを ↓
とグループわけして表記することにする。

|   | ■ | □ |            
+---|---|---+
| ↑ | ♠ | ♡ |
| ↓ | ♣ | ♢ |

ジョーカーを除外した13x4=52枚のデッキからカード1枚引いたとき、
カードが♠である確率を`
(♠)
と表記することにする。
♠♡♢♣のうち♠である確率は
(♠) = 1/4

カードが■である確率は、
(■) = 1/2

カードが↑である確率は、
(↑) = 1/2

♠は、■かつ↑なので、
同時確率(♠) = (■∩↑)

カードが■のとき、それが♠であるという、条件付き確率
(♠|■) = 1/2
カードが↑のとき、それが♠であるという、条件付き確率
(♠|↑) = 1/2

まとめると、  
(♠) = (■∩↑) = (■) x (♠|■)   
            = (↑) x (♠|↑)
(1/4)       = (1/2) x (1/2) 
            = (1/2) x (1/2)

移項すると、
(♠|■) = (♠)  / (■)  
もしくは、
(♠|↑) = (♠)  / (↑) 
という関係が成り立つ。 
(1/2) = (1/4)/ (1/2)

これは、デッキからカード1枚引いたとき、
そのカードが♠である確率
(♠) = 1/4
が、裏向けたまま「カードの色は黒(■)ですよ」と情報を与えられたことにより、
可能性は、♠♣に限定されてしまい、
カードが■のとき、それが♠であるという、条件付き確率
(♠|■) = 1/2
に収束したと解釈できる。

(♠) = 1/4
という「事前確率」が
(♠|■) = 1/2
という「事後確率」へと更新された現象を
「ベイズ更新」と呼ぶ。

同じように、デッキからカード1枚引いたとき、
そのカードが♠である確率
(♠) = 1/4
が、裏向けたまま「カードのマークは上位(↑)ですよ」と情報を与えられたことにより、
可能性は、♠♡に限定されてしまい、
カードが↑のとき、それが♠であるという、条件付き確率
(♠|↑) = 1/2
に収束したと解釈できる。

もう少し複雑なケース。

アウトレットセンターのある店舗で、
顧客の購入動向を統計的に分析することにした。
店舗に立ち寄る顧客が商品購入する確率は10%である。

購入する場合を  $
購入しない場合を ~
と表記すると
($) = (0.1)
(~) = (0.9)
となる。

商品購入する顧客が店員に声掛けする確率は 70%
商品購入しない顧客が店員に声掛けする確率は 20%

顧客が店員に声掛けする事象を ☻
顧客が店員に声掛けしない事象を ☹
と表記すると、
商品購入確率からの声掛けの条件付き確率は、

(☻|$) = (0.7)
(☹|$) = (0.3)

(☻|~) = (0.2)
(☹|~) = (0.8)
となる。

|   |  $  |  ~  |           
+---|-----|-----+
| ☻ | $∩☻ | ~∩☻ |
| ☹ | $∩☹ | ~∩☹ |

という4パターンの組み合わせを考慮しながら、
以下のように、すべての確率を洗い出すことができる。

($∩☻) = ($) x (☻|$) = (0.1)  x (0.7)  = 0.07
      = (☻) x ($|☻) = (0.25) x (0.28) = 0.07

($∩☹) = ($) x (☹|$) = (0.1)  x (0.3)  = 0.03
      = (☹) x ($|☹) = (0.75) x (0.04) = 0.03

(~∩☻) = (~) x (☻|~) = (0.9)  x (0.2)  = 0.18
      = (☻) x (~|☻) = (0.25) x (0.72) = 0.18

(~∩☹) = (~) x (☹|~) = (0.9)  x (0.8)  = 0.72
      = (☹) x (~|☹) = (0.75) x (0.96) = 0.72

このうち、たとえば最初の式、
($∩☻) =
($) x (☻|$) = (☻) x ($|☻)
という条件付き確率の関係性に着目して、
($|☻)  = ($)   x (☻|$) / (☻)
(0.28) = (0.1) x (0.7) / (0.25) 
と整理しなおしてみる。

左辺の($|☻) は、
顧客が店員に声掛けした場合の商品購入確率という条件付き確率である。

ある顧客が入店した際に、
「彼女が商品を購入するかどうか?」という確率は当初
($) = (0.1)
であったのが、
彼女が店員に声掛けした、という事象が確定した途端に、
彼女の商品購入確率($)が、声掛け(☻)の情報獲得によって
($|☻) = (0.28)
つまり、10% → 28% にupdate(更新)された、と解釈できる。
これがBayesian Updating「ベイズ更新」である。

($)→(Hypothesis)仮説
(☻)→(Evidence)証拠・データ
とし、
($|☻) = ($) x (☻|$) / (☻) をそのまま
(H|E) = (H) x (E|H) / (E) と書き換え、さらに
Probability(確率)のことであると明示する記法で
P(H|E) = P(H) x P(E|H) / P(E) 
と定義されていることが多い。(ベイズの定理・ベイズ推定)

P(E|H)は、Likelihood(尤もらしさ)、日本語では「尤度(ゆうど)」と呼ばれている。

P(H|E) = P(H) x P(E|H) / P(E)
で、
P(H)はPrior、日本語では「事前確率」
P(H|E)はPosterior、日本語では「事後確率」

PosteriorPrior x Likelihood
の関係が成り立ち、何度もUpdateできる。

ベイズ更新の繰り返しを利用して、事象の確率を推定することをベイズ推定と呼ぶ。

各パラメータには、確率だけでなく、確率分布、確率の確率分布、
さらに「確率分布」も確率変数と見なして、確率分布の確率分布、
など柔軟に適用でき自由度が無限に高い。

導入記事おわり。

以下、ついでに随想と参考書の紹介。

ではそもそも最初の「事前確率」はどうするのか?というのは、実は一大問題で、ベイズ理論がデータサイエンス、機械学習と結びつく際の根幹となる問題。
おそらく、昨今注目されている深層学習(ディープラーニング)(というバズワード)もこのベイズ更新の事前確率の初期値の問題に還元されてしまいます。

ディープラーニングって何がディープなのか?というと、要するにディープな多層構造のニューラルネットワークであるということで、
畳み込みニューラルネットワーク(Convolutional Neural Networks: CNN)
ディープボルツマンマシン(Boltzmann machine)などで構成されています。
ボルツマンマシンも、ホップフィールド・ネットワークで、大元はアソシアトロンで、ととにかく、まだこの段階では「ニューラルネットワーク」全開。
しかし、ニューラルネットワークという脳のニューロン、シナプスのモデル化は、もうまもなくすべてベイズ理論に還元されてしまって「古典化」するとしか思えないし、多分そうなります。

ニューラルネットワークはどこへ行った?

自分が機械学習というか人工知能に興味を持って勉強し始めたのは、そもそもは小学生のころ「マッチ箱の脳(AI)」をBASICで実装したり、ということからはじまりますが、もうちょっとちゃんとした本を読んだのは、平成元年のころ、さっきのアソシアトロンの発案者のひとり中野馨 先生が監修した『入門と実習 ニューロコンピュータ』

というものでした。当時、日本語では多分この本くらいしか機械学習の本なんて存在しなかったと思います。
この本にはガッツリ脳のニューロン、シナプスのによる学習機構のこと紙面の半分くらいを割いて書かれていました。学習とは、脳のシナプスの可塑性によって成し遂げられる、シナプス可塑性はヘッブの法則がある、ということで、現在までの機械学習の研究の多くはこの系譜にあります。アソシアトロンはもろにこのヘブ則をモデル化して連想記憶を実現したものです。

そもそも最初は、脳のシナプスの可塑性をモデル化した形式ニューロンが神経生理学者によって提唱され、これはチューリング完全の計算能力を持つ、バラ色の未来が予期されるということで、単純パーセプトロンが実装されたわけですが、これは期待に反してチューリング完全ではありませんでした。入力層と出力層のみの2層からなるパーセプロトンはではXORなどの線形非分離な問題は絶対に学習できないことが指摘されます。いわゆる「XOR問題」。いくら形式ニューロンの組み合わせで原理的にチューリング完全でも、学習機構の制限によってできない。パーセプトロンまでは脳のニューラルネットのモデル化でしたが、XOR問題あたりでニューラルネットと線形回帰の等価性の数学的証明など研究が著しく進みます。このあたりが機械学習が統計学に還元される萌芽でしょう。
実は単純パーセプトロンでも人口ニューロンの活性化関数に一次関数ではなくて二次関数以上を採用すればXOR問題は解けるという話もあるんですが、そもそも一次関数にこだわっているのは、シナプスの可塑性の原理にあるっぽいです。自然をリスペクトしているのかどうかはわかりません。しかし単純パーセプトロンさえ。その割には学習機構にヘブ則もへったくれもない、一回数学世界に還元したような学習機構がダブルスタンダードで、当時の自分はこの辺が特に??でした。

パーセプトロンのXOR問題以降その後10年ぐらい人工知能ブームが停滞します。希望って大事ですね。その後、線形分離不可能なXOR問題を解決しチューリング完全にすべく、多層で学習を可能にしたバックプロパゲーション(誤差逆伝播学習法)機能つきの多層パーセプトロンが地道に研究しつづけていた人たちによって発明されます。もうこの頃は、人口ニューロンの活性化関数が連続で微分可能でないといけない、確率的最急降下法だとか、完全に脳のニューロモデル、ヘブ則とかぶっちぎっていました。人間の脳神経細胞が微分とかしているわけがないので、ニューラルネットをモデル化しながら統計的学習手法とかやってるダブスタな潮流を眺めながら「何かが完全におかしい」と感じた当時の自分が機械学習の学習に完全に興味を失ってしまったのでした。まあ今でもディープラーニングと言いながらディープな階層、CNN、ボルツマンマシンだとニューラルネットやっているわけで、Googleネコ概念認識の実験にしてもいまだニューラルネットです。その実装の方向性は違うと思っていますが、要するにニューラルネットのクラスタ化と各クラスタでの特徴抽出(次元削減)がキモのようで、この辺はすべてニューラルネットでなく抽象化したベイズ統計に還元、一元化できるはずです。

特にまるで別分野で発展してきた、自然言語解析方面でのデータサイエンス界隈の知見の集積がものすごくて、そこでの最先端はもちろんベイズ理論で、特にクラスタリング、生成モデルで、ノンパラメトリックベイズ法、階層ディリクレ過程が衝撃的です。(ベイズ推定の最初の「事前確率」はどうするのか?)
ディープラーニングのクラスタ化自体を教師なし学習させるのが課題だと思うのですが、もうすぐ誰かがこの辺全部統合して、そこからさらに研究、実装の進化が加速すると予想します。画像認識でも階層ディリクレ過程とマルコフ確率場を利用した教師なし画像領域分割とか、すでに、どうやるか?ではなく、もう日本人でも優秀な人が誰がすぐやるか?のフェイズのブレイクスルーが山積みだと思います。

参考書の紹介など

以上、ニューラルネットはすでに古典的モデルであり、もれなくすべてベイズ統計に還元できる、ということを強調しました。歴史的な研究として学ぶのは良いと思うのですが、既存のニューラルネットを改善して、、、という研究の方向性はかなり筋が悪いと信じます。ニューラルネットは現在非常にとっちらかっていて、今後100%統計学的なデータサイエンス特にベイズ統計に一元化されるべきですし多分そうなっていくでしょう。
その意味で、非常に良いと思ったのが、結構最近の教科書、Prince本です。

Computer vision:
models, learning and inference
Simon J.D. Prince
July 7, 2012

です。
この本ではもはやニューラルネットやバックプロパゲーションなどそういうものは一切出てきません。100%ベイズです。
しかも、なんと個人使用に限り、無料で公式サイトからダウンロードできます。
http://www.computervisionmodels.com/
紙の本で買いたい人は、Amazonで10000円くらいで買えます。和訳の本はありません。

しかし、更に素晴らしいのは、
公式サイトに、
Japanese Video Lectures by Toru Tamaki
とあるので、見てみると、
https://www.youtube.com/channel/UCirqYKKjRztDywdQXLDYYAg
https://www.youtube.com/playlist?list=PLDVKrmVEl_WtGqMo6OWBiK7P9IsTPmTjO
https://www.udemy.com/computervision/learn/
と、広島大のToru Tamaki先生によるオンライン講義があり、ほぼ実質和訳として視聴できます。通して拝見しましたが、わかりやすいし透明黒板での動画とか教育に熱意を感じます。ものすごい準備と撮影に時間、手間がかかっていることでしょう。この人は素晴らしいです。Prince本もそうですが、正直、なんでこんな良質なものがネットで読めたり、視聴できるのかよくわかりません。Udemyのほうでは、Prince本の前半部分だけで、後半は有料配信なんだろうか、と思っていましたが、上述のとおりYoutubeで後半もあります。

Princeはベイジアンですが、上述のノンパラメトリックベイズモデルについては残念ながら語っていません。
その意味で必読なのが、通称「続パタ」です。

石井健一郎,上田修功:続・わかりやすいパターン認識(教師なし学習入門),pp. 326,オーム社(2014)です。

11章ではノンパラメトリックベイズモデルの基礎となるディリクレ過程やその実現例となる Chinese RestaurantProcess や Pitman-Yor 過程などについて丁寧に解説され、12 章では,ディリクレ過程混合モデルとその学習法について解説し,クラスタ数が未知の場合のクラスタリングの具体的な方法について説明されています。ノンパラメトリックベイズモデルについて国内で詳しく解析された書籍はほとんどないので、この本の評価が高いとすれば、それが理由でしょう。
もちろんこれも、第1章 ベイズ統計学からはじまる全力のベイジアン本です。11 ~ 13 章について主に執筆を担当している上田氏は現在,NTTコミュニケーション科学基礎研究所において「機械学習・データ科学センター」センター長でおられるようです。

最後にパターン認識と機械学習 - ベイズ理論による統計的予測(Pattern Recognition and Machine Learning)=PRML通称Bishop本

これもベイズ本ですが、テクストとして網羅的であろうとして、いろんなことも書いてあります。たとえばサポートベクトルマシン(SVM)とかは一過性のものだと思いますのであんまり興味は出ません。内容もさすがにちょっと古くなってきています。ただ必読書。

ベイズ入門者向け

超最近出た本。通り一辺倒の数式説明ではなく、「考え方」「概念」の解説に情熱がある著者で、シンパシーもあり。多分一番入門者向け。しかしちゃんと最終的にベータ分布あたりまで到達している。

「完全独習」と合わせて読むと相互補完できて良いと思う。

「パターン認識と機械学習」(PRML本)と並ぶ、機械学習定番書。
しかしあくまでタイトル通り、統計的学習の基礎 ―データマイニング・推論・予測の教科書。
最初に紹介した、Computer vision:
models, learning and inference
Simon J.D. Princeがざっと流してしまっている数学要素をよりきちんと解説しているので、Prince本の理解を深めるという意味でも必読。

この日本語訳は15000円ほどと高価だが、原書は
スタンフォード大の公式サイトから、これもPDFの無料ダウンロードあり。
http://statweb.stanford.edu/~tibs/ElemStatLearn/
 

0 コメント:

コメントを投稿

Popular Posts