ベイズで機械学習

こんにちは、Panamixkedaです。3回目の投稿です。

なぜn回目と書くかといいますと、1回目・2回目と、コンサルへのデータ分析活用（NNは説明可能性的に難しいので木とかかな～？）の投稿→AI説明可能性についての本読みましたの投稿、という流れがあり、
一応今回もその流れにのせた投稿にしようかなと思ったからです。

今回はベイズで機械学習、です。
コンサルで推定を行うなら『推定の確からしさ』を数値で出してきたい、という方なら、参考していただけるかも（今回も多少の前知識が要るかもしれません）

コンサルするなら、説得力を追求しましょう！~~まあ殆ど解析的に解けないから近似値なんですけど。~~


#ベイズ推定とは
値がxとなる確率分布f(x)を推定する方法。
（点推定はこの値が一番確からしい、を言う方法/区間推定は推定値がこの値からこの値の間に入る確率を言う方法）

#パラメトリックベイズ/ノンパラメトリックベイズ
パラメトリックベイズとは、事前分布・事後分布の形をパラメタ以外明確に決め、観測結果からそれらパラメータを推定する手法。
例：xが平均が〇〇の正規分布に従う、と仮定。観測1回でxが10なら最尤推定を採用すれば〇〇は10。（平均値が一番出やすいしサンプリングして10なら平均は一番10っぽいでしょのマインド）

ノンパラメトリックベイズとは、事前分布・事後分布の形を明確には決めず、一定のルールを分布に対して作成するのみとし、観測結果から事前分布・事後分布の形を明確に推定する手法。
例：ガウス過程


##ガウス過程
ノンパラメトリックベイズの説明はわかりにくいだろうので、代表例のガウス過程について解説します。


確率変数列Xi（X1,X2,X3…）があり、任意のiについてその出力ベクトル$ \vec{y}=(f(X1),f(X2),...f(Xi)) $の同時確率分布が多次元（多変量）ガウス分布に従うような確率過程のこと、です。

まあこれでもわかりにくいですよね。また、どんな形のガウス分布やっちゅうねんというお話もあるかと。
意地でも数式を使わず説明してみます。数式は便利（短いかつ一意かつ抽象※うまく書けば）ですが、数式なら沢山ネットや書籍に転がっていると思うので。。。

カーネル（k）、というやつがおります。このカーネルはインプット側の確率変数の任意の2つのセットをとってきて、k(X1,X2)という風に値を出力します。この値は一般的にインプット同士の値が近ければ大きくなるよう設定します（例外的に周期カーネルといったものもあります。その名の通り、インプット同士の差が2πの整数倍に近かったら値が小さくなる、ゆうことですね）
iが2であるとき、X1、X2の値が確率的に定まり、またkの値はX1X1、X1X2、X2X1、X2X2の4組定まります。これを2×2行列で表現できますよね。

この行列を分散とする2次元ガウス分布から、任意の1点をサンプルしてきたものが$\vec{y}=(f(X1),f(X2))$の値です。

と、私は言葉で理解しております！（不正確なところがあればコメントください）
ノンパラメトリックベイズは事前分布・事後分布の明確な形は決めないわけですが、多少のルールは設定するよ、という感覚が伝われば幸いです。

詳しくは書籍（[ガウス過程と機械学習](https://www.amazon.co.jp/%E3%82%AC%E3%82%A6%E3%82%B9%E9%81%8E%E7%A8%8B%E3%81%A8%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E6%8C%81%E6%A9%8B%E5%A4%A7%E5%9C%B0-ebook/dp/B07QMMJJV8/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=1629479807&sr=8-1)）等を参考にしてください。


##ベイズ深層学習
やはり近年この話題はマストかなと。NNの重みパラメータwに事前分布を導入することで、アウトプットのyを確率変数とします。教師データxで学習させ、wの事後分布を推定します（つまりパラメトリック推定です）。

学習後もyは確率変数なわけで、またその値になる確率も算出することができます。NNでも推定の確からしさを数値化できるんですね。

え、ワタシコンサルだけど、wにどんな分布を仮定するかでそんな値は変わるのにどう説明するか、と？そうですね、正規分布が直感的にも計算のしやすさ的にもいいのかもしれないですけど、なんにせよ仮定のもとの数値であることには変わりません。（人間が見てもサルっぽいサルには高確率、サルっぽくないサルには低確率をちゃんと出力します、などの例示をする、くらいが考えられますかね。。。）

###ベイズ深層学習を最適化する
ベイズ深層学習（NN）の学習法、つまりwの事後分布の推定法ですけど、複雑ですが種類としてはパラメトリックベイズの最適化なので、パラメトリックベイズ最適化の手法の知識が必要です。色々な計算方法がありますが、すべて近似計算となっております。
以下手法。

####ラプラス近似
ラプラス近似とは、MAP推定で最も確率の高い数を点で推定し、その周辺をガウス分布で近似する手法です。
インプットをX/アウトプットをYとすると、重みの事後分布p(W|X,Y)はベイズの定理を用いてp(W)p(Y|X,W)に比例することが分かります。こいつ（の対数とったもの）をwで微分しまして、（逐次更新でもしていき）MAP推定による$w_{MAP}$の値を出します。これを平均とし、対数事後分布をwで2回微分したヘッセ行列をもちいて分散を設定したものを、事後分布の推定分布とします。

Wの事後分布が推定できた！これはうれしいのか？というと、目的は出力の確からしさを見ることでしたのでもうひと頑張り。

予測したい出力をy'とし、対応する入力をx'とします。p(y'|x',W)を出したいわけなのですが、これはニューラルネットの部分なので、めちゃくちゃ複雑な形となります。（ただし多変量ガウス分布か重ね合わせなので、ガウス分布の形にはなりますよね）ですので、ここで思い切って、$W_{MAP}$の近傍限定で、NNを線形近似してしまう、という簡易化の方法などが考えられます。多変量ガウス分布の分散は$σ_{y}^2$と推定されますので、平均の方だけこの線形近似で出します。

詳しくは書籍（[ベイズ深層学習](https://www.amazon.co.jp/%E3%83%99%E3%82%A4%E3%82%BA%E6%B7%B1%E5%B1%A4%E5%AD%A6%E7%BF%92-%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E9%A0%88%E5%B1%B1%E6%95%A6%E5%BF%97-ebook/dp/B07YSHL8MS)）等参考にしていただければと思いますが、勘所はこんなところでしょうか。
　　
　
　　


いかがでしょうか？ベイズって面白いですね（棒読み）
今回の記事では伝わらないかもしれませんが、このベイズあたりだったり統計系のことは、計算トリック（変数変換だったり、微積可能と知られてる形への変換だったり）のようなものを膨大に知ってないと、解析的計算が可能か、近似手法マストかの判断がつかない、などなどある大変な分野という認識です。
私は、先人が確立した解法をみたりするのはちょっと好きですが、計算自体はあまり好きではないので、、、

ただ、こういった領域についてとっかかり易い文でご紹介しておくのも、学問の門戸が広がっていいかなと思いました。趣味趣向が合う方は是非ガリガリ式変形などして計算トリック系も模索してみてください。

データ分析は最高～('ω')
では、今後ともよろしくお願いいたします。