HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

【機械学習ステップアップ】確率モデルの考え方

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

はじめに

今回は機械学習の中でも、多くの初学者が行き詰まる確率モデルについて、その考え方をまとめておきたいと思います。

機械学習で最も基本的な話題の展開方法は、線形回帰や線形分類のお話を、適当な損失関数を最小化するような関数を決定するというお話で進めていくことです。これは直感的にはわかりやすく、しかも(深く考えなければ)、そこで設定される損失関数は常識的に真っ当なものに見えたりします。

よくある機械学習の問題設定

ここで簡単に例を提示しておきたいと思います。ベクトル$\mathbf x$とスカラー$y$の組が$N$個手に入っているとしましょう。このような訓練データ集合$D=\{(\mathbf x_1, y_1),..., (\mathbf x_N, y_N) \}$を使って、以下のような問題を解きます。

まず、仮定として$(\mathbf x, y)$には以下の関係があるだろうと想定します。 $$y \simeq \mathbf w ^T \mathbf x + b$$ なぜ完全に等号が成り立たないのかと言えば、実データは上記で示される関係から若干ずれているからです(その原因は定かではないですが)。もしも、上記の仮定が正しいものとして、実データが本当にこのように表せるとしたならば、$\mathbf w,b $はそれぞれどんな値になっていると良いのでしょうか。というのが基本的な回帰の問題になってきます。

よくある機械学習の解法

さて、問題設定がわかったところで、具体的に$\mathbf w,b$を決める手立てはあるでしょうか。 おそらく最も基本的な考え方(そしてこの記事をみている多くの方が知っているであろう考え方)は、以下の損失関数を使ったものであると思われます。 データが上手く仮定に当てはまっていたとすれば、$y - (\mathbf w ^T \mathbf x + b) \simeq 0$となっているはずなので、正方向のズレと負方向のズレを上手く勘定するために$\{y - (\mathbf w ^T \mathbf x + b)\}^2$を考えてすべてのデータについて足し合わせたもの(損失関数)を考えます。 $$ L(\mathbf w,b) = \sum_{n=1}^N \{y_n - (\mathbf w ^T \mathbf x_n +b)\}^2 $$ これが最小化されるような(なるべく$0$に近づくような)$\mathbf w, b$を解とします。

これが最もオーソドックスな回帰問題の解放になるでしょう。これは損失関数をパラメータ$\mathbf w, b$でそれぞれ微分した式を$0$と置いた連立方程式を考えてもいいですし、勾配法のような逐次最適化アルゴリズムを使っても良いでしょう。

いずれにしても解を得る方針というのは、定めた損失関数の最小化という形で表されます。

確率モデルの考え方

問題の定式化

さて、基本的な問題の定式化を抑えてしまえば、実は確率モデルの考え方というのは(数式を追うことは大変かもしれませんが)概念としてとびきり難しいわけではありません。まず、基本的な回帰の問題設定を再度みてみましょう。

ベクトル$\mathbf x$とスカラー$y$の組が$N$個手に入っているとしましょう。このような訓練データ集合$D=\{(\mathbf x_1, y_1),..., (\mathbf x_N, y_N) \}$には以下の関係があるだろうと想定していました。 $$ y \simeq \mathbf w ^T \mathbf x + b $$ さて、ここで等号が成り立っていない理由を先程は、「とにかく実データはそうはなっていない」くらいの感じで飛ばしてしまいましたね。この部分をもう少し掘り下げていくことで、確率モデルの考え方が始まります。

上記の式に、等号が成り立たなくなっている要因である「ノイズ$\epsilon$」を明示的に入れてやりましょう。 $$ y = \mathbf w ^T \mathbf x + b + \epsilon $$ 私達が本当に着目しているのは、$\mathbf w, b$の方なのですが、実データの観測・収集にはいつもノイズ$\epsilon$が入り込んでいるという形で式を記述しておくのです。ここで$\epsilon$は確率的に揺らぐ値であり、毎回値を変えます。 ここで、毎回値を変える$\epsilon$が、具体的にはどのように確率的に揺らぐのかを表したものが「確率分布$p(\epsilon)$」です。今回は、$p(\epsilon)$を平均$0$で分散$\sigma^2$の正規分布だと言うことにしておきましょう。これらを踏まえて、たいてい数式は以下のように記述されます。 $$ \begin{align} y = \mathbf w ^T \mathbf x + b + \epsilon \\ p(\epsilon) = \mathcal N(0, \sigma^2) \end{align} $$ あるいは以下のように書かれていることもあるかもしれません。 $$ \begin{align} y = \mathbf w ^T \mathbf x + b + \epsilon \\ \epsilon \sim \mathcal N(0, \sigma^2) \end{align} $$ ここでは2つ目の式が、「$\epsilon$という確率変数は確率分布$\mathcal(0, \sigma^2)$からサンプリングされます」という書き方をしているだけの話で、本質的には上の書き方と何も変わっていません。

今回は$\epsilon$は正規分布に従うという設定で話をしていますが、もしも違う心当たりがあるならば別の分布を使っても構いません。

問題を確率分布で一貫して表現

ここまで特に躓いたりはしていないでしょうか? ここまでは従来の表現方法を、ノイズ項$\epsilon$を明示することで書き換えただけに過ぎなく、多くの方がすんなり受け入れられているのではないかと予想しております。しかし、ここから確率分布の形で式を一貫して表現するようになると、急について来れなくなってしまう人が多いように私は感じています。

まず、先程の問題設定の話を、$\epsilon$が確率的に揺らぐせいで、観測される$y$も確率的に揺らいでしまう(値が毎回変わってしまう)と考えた場合には、$y$の確率分布を考えたくなるという出発点を受け入れなければなりません。 $$ \begin{align} y = \mathbf w ^T \mathbf x + b + \epsilon \\ p(\epsilon) = \mathcal N(0, \sigma^2) \end{align} $$ というものを、以下のように書き換えます。 $$ p(y\mid \mathbf x) =\mathcal N(\mathbf w ^T \mathbf x + b, \sigma^2) $$ さて、一体何が起こったのでしょうか。この式の意味するところは「$\mathbf x$が与えられたとき、$y$の値は平均$\mathbf w^T \mathbf x + b$で分散$\sigma^2$の正規分布に従う」となります。日本語に書き起こすとまだ分かりやすくなっているのではないでしょうか。 要するに、分散$\sigma^2$の確率的ノイズ$\epsilon$のせいで、$y$の方も分散$\sigma^2$で揺らぐのだが、平均的には$\mathbf w^T \mathbf x + b$という値になっている(ノイズがなければきれいに$y = \mathbf w^T \mathbf x + b$になっている)と言っているのです。

ちなみに、$\mathcal (\mu, \sigma^2)$と書いて「平均$\mu$で分散$\sigma^2$の正規分布」を表すことは頭に入れておきましょう。正規分布はありとあらゆる場所で姿を表すので、簡潔に表現できるようにしているんだな、くらいに思っておけばいいです。もちろん、実直にとある正規分布に従う確率変数$\epsilon$に関して

$$ p(\epsilon) = \frac{1}{\sqrt{2\pi \sigma^2} } \exp \left( -\frac{(\epsilon - \mu)^2}{2\sigma^2} \right) $$

と毎回書いても良いのですが、まあめんどくさいですよね。なぜなら、正規分布の形を決定づけるような興味がある部分は$\mu$と$\sigma^2$だけだからです。このことを明示するために

$$ p(\epsilon ; \mu, \sigma) = \frac{1}{\sqrt{2\pi \sigma^2} } \exp \left( -\frac{(\epsilon - \mu)^2}{2\sigma^2} \right) $$

などと重要なパラメータを「$;$」で区切って右側に書いたり、あるいは $$ p(\epsilon \mid \mu, \sigma) = \frac{1}{\sqrt{2\pi \sigma^2} } \exp \left( -\frac{(\epsilon - \mu)^2}{2\sigma^2} \right) $$ のように、「$\mid$」で区切って書いたりします(こちらの書き方はベイジアンの書き方だけども、正直意味がわかっていれば記法の違いは気にしなくてもいいと思う)。

さて、目が回りかけてきたところで、ひとまず休憩がてら言語化してまとめとしましょう。

基本的な考え方の機械学習に対して、ノイズを確率的に変動する変数として明示的に式に入れ込みました。これによって、観測するデータ自体も確率的に変動することとなり、私たちは$\mathbf x$が与えられたときの観測$y$の確率分布なるものを考えるようになったというわけです。

解法

さて、$y$は平均$\mathbf w^T \mathbf x + b$で分散$\sigma^2$の正規分布に従っています。というのがここまで私達が置いてきた仮定になります。もしも、このような仮定が正しいとしたならば、$D=\{(\mathbf x_1, y_1),..., (\mathbf x_N, y_N) \}$というデータが実際に現れる確率はどの程度でしょうか? 各データが独立に同じ確率分布から次々に手に入るとしたならば、$D$というデータが実際に現れる確率は、 $$ p(y_1\mid \mathbf x_1) p(y_2\mid \mathbf x_2) ... p(y_N\mid \mathbf x_N) = \prod_{n=1}^N p(y_n \mid \mathbf x_n) $$ と掛け算で表せます。この確率を尤度と呼びます。 そして次に、下記のような思想の元で問題を解きます。 「実際に手元にデータが手に入った確率、すなわち尤度は、それなりに高いはずである。なぜなら、尤度が非常に低いとしたならば、手元にデータが手に入ることは本来起こりづらかったはずだからだ」 つまり、尤度$\prod_{n=1}^N p(y_n \mid \mathbf x_n)$が大きな値になるように$\mathbf w, b$の値を決めるということになります($p(y\mid \mathbf x)$は平均$\mathbf w ^T \mathbf x + b$の正規分布と置いていることを思い出してください)。

そして、この方法を最尤推定と言いますが、ノイズを正規分布だと仮定した場合の最尤推定は、基本的な機械学習のところで説明した二乗誤差損失関数を利用した解法と結果が一致します(一方、ノイズが正規分布とは違う分布に従っていると仮定した場合には、異なる推定結果が得られるということでもある)。

さて、最尤推定では尤度をパラメータに$\mathbf w, b$について最大化するということをしますが、 $$ \prod_{n=1}^N p(y_n \mid \mathbf x_n) $$ という掛け算になっている式を最大化するのはなかなかに骨が折れます。そこで、単調増加関数である対数関数でラップした対数尤度を最大化するというのが基本的な戦略になります。 $$ \log \left\{ \prod_{n=1}^N p(y_n \mid \mathbf x_n) \right \} = \sum_{n=1}^N \log p(y_n \mid \mathbf x_n) $$ $p(y_n \mid \mathbf x_n)= \mathcal N(\mathbf w^T \mathbf x_n + b, \sigma^2)$であったので、これを代入してあげればよく、 $$ \begin{align} \sum_{n=1}^N \log p(y_n \mid \mathbf x_n) & = \sum_{n=1}^N \log \mathcal N(\mathbf w^T \mathbf x_n + b, \sigma^2) \\ & = \sum_{n=1}^N \log \left\{ \frac{1}{\sqrt{2\pi \sigma^2} } \exp \left( -\frac{(y_n - \mathbf w^T \mathbf x_n - b)^2}{2\sigma^2} \right) \right\} \\ & = \sum_{n=1}^N \left\{ \log \frac{1}{\sqrt{2\pi \sigma^2} } + \left( -\frac{(y_n - \mathbf w^T \mathbf x_n - b)^2}{2\sigma^2} \right) \right\} \\ & = - \frac{N}{2}\log(2\pi \sigma^2) - \frac{1}{2\sigma^2} \sum_{n=1}^N (y_n - \mathbf w^T \mathbf x_n - b)^2 \end{align} $$ を最大化しようという話になります。ここで、$\mathbf w, b$に関係無い部分を無視して、符号反転することで最小化問題として書き表してみると、 $$ \arg \min _{\mathbf w, b} \sum_{n=1}^N (y_n - \mathbf w^T \mathbf x_n - b)^2 $$ というのが、ノイズに正規分布を仮定した時の(平均の)最尤推定になります。 これで二乗誤差損失関数を仮定した場合の機械学習手法と全く同じ問題になっていることが確認できました。

ノイズを正規分布とみなした最尤推定

さて、なぜに二乗誤差関数を用いた方法と正規分布するノイズを仮定した最尤推定が同じ結果を導くのでしょうか。それは「数式を弄ったらそうなった」と言ってしまえばそうなのですが、直感的に捉えると以下のようになると思います。

正方向へのズレも負方向へのズレも対等に扱い、これらのズレがデータ全体をみたときに最小化されるようにパラメータを決定したのが二乗誤差の損失関数を用いた方法でした。一方で、最尤推定ではノイズが正規分布であるという仮定をしており、その仮定のもとで、「手元のデータが手に入る確率(尤度)を最大化」しようとします。ここで「正規分布というのは平均からずれればずれるほど、生じる確率というのは小さくなっている」ということに着目しましょう。すると、最尤推定では、「データが平均から大きくずれることはめったに無い=データは平均付近にたくさん集まっているはず」ということを、$\mathbf w, b$を調整して体現しようとするのです。結果として、二乗誤差が最小化されるようなパラメータの決定方法と同じ結果を導くことになります。

(もし偶然にも手元のデータが本当に平均から大きくずれた値となっていた場合にはどうなるだろうか。二乗誤差の損失関数は、そのようなデータに極めて大きなペナルティを課すことになるため、大きくずれた値のペナルティを少しでも減らそうと、パラメータが引きずられてしまう。同様にして正規分布を仮定した最尤推定では、大きく平均から値がずれるようなことはめったに起こらないはずであるため、尤度を高める帳尻合わせに、平均を大きくずれた値に合わせようとしてしまう。いずれも極めて外れ値に敏感な、過学習しやすい手法である)

余談

二乗誤差の方は、意図的に二乗誤差を使っていますが、きっと代わりにズレを二乗ではなく絶対値で評価してみても良いんじゃないかと考えたことはあるのではないでしょうか。これは計算に場合分けが出てきて結構面倒な話になってしまうという点がありますが、問題設定としてはそれだけの理由で否定されるようなものでもないと考えられるでしょう。

さて、二乗誤差を使う代わりに絶対値誤差を使う損失関数による解法を考えたとき、ではそれに対応するような確率モデルとは一体どのようなものでしょうか。そのようなものを考えることはできるのでしょうか。

分類の問題では$y$が$\{0, 1\}$のみを取るとして、交差エントロピーを損失関数とした解法が使われます(また、$\mathbf w ^T \mathbf x + b$に対してシグモイド関数を作用させます)。このような手法に対応する確率モデルとはどのようなものでしょうか。

更にパラメータにも何らかの確率分布を与える($\mathbf w ,b$などの値も何らかの確率的変動を受けている)ことでベイズモデリングの世界が開けてきます。またベイズ予測分布では、考えうるすべてのパラメータの可能性を考慮して予測を行い、予測それ自体がどれほど信用のおけるものであるのか(あるいは不確実であるのか)を計算することが出来ます。

www.hellocybernetics.tech

www.hellocybernetics.tech

www.hellocybernetics.tech

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

機械学習スタートアップシリーズ ベイズ推論による機械学習入門 (KS情報科学専門書)

ベイズモデリングの世界

ベイズモデリングの世界