HELLO CYBERNETICS

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

【機械学習ステップアップ】ベイズモデルの考え方

 

 

follow us in feedly

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

はじめに

今回は確率モデルの考え方を発展させたベイズモデルの考え方について述べていきます。 確率モデルの基本について自身がない方はぜひ以下の記事を参照してください。

www.hellocybernetics.tech

確率モデルを掘り下げる

確率モデルを考えるときは、データ集合$D = \{(\mathbf x_1, y_1),..., (\mathbf x_N, y_N) \}$があるときに、$\mathbf x$と$y$の間には以下のような関係があると仮定します。 $$ \begin{align} y = \mathbf w^T \mathbf x + b + \epsilon \\ p(\epsilon) = \mathcal(0, \sigma^2) \end{align} $$ ここで、確率的に変動するノイズ項$\epsilon$を導入することで、話を展開していったのが前回の記事です。

分布を仮定して、パラメータを関数で表す

さて、上記のモデルは以下のようにも表せるということを前回の記事でもみました。 $$ p(y \mid \mathbf x) = \mathcal N( \mathbf w^T \mathbf x + b, \sigma^2) $$ 日本語で述べれば「平均的には$y$は$ \mathbf w^T \mathbf x + b$という値で表せるのだが、ノイズの効果によって$\sigma^2$の分散でばらつく」ということを言っています。これまでのように、モデルに対してノイズ項を入れるという話から展開しても良いですし、少し話の展開を変えてみて以下のようにしてもいいでしょう。

もしも$\mathbf x$が与えられたときには、平均$\mu$で分散$\sigma^2$の正規分布に従って$y$が生起すると仮定して、 $$ p(y \mid \mathbf x) = \mathcal N( \mu, \sigma^2) $$ と、とりあえず書き下しておいてから、「この正規分布の平均$\mu$は$\mathbf x$の関数になっており、$\mu = \mathbf w^T \mathbf x + b$で表すことができそうだ」という展開の仕方をしても構いません(言っていることは変わらない)。これは、今知りたい「$\mathbf x$が与えられたときの$y$の確率分布を予め仮定しておいて、その中でも特に知りたい平均$\mu$が$\mathbf x$の値によって変わるであろう」と考えていることになります。

ところで、もしかしたら分散$\sigma^2$の方も$\mathbf x$の値によって変わったりするかもしれません。例えば$y$が収入で$\mathbf x$がプログラミング言語の経験年数、年齢などを格納したベクトルだったとしたら、$\mathbf x$の値次第で$y$の平均は変わるでしょうし、分散の方も新卒はばらつきが少なく、ある程度年齢が上になってくるとばらついてくるという形で、$\mathbf x$に依存する形でモデル化できるかもしれません。

このように確率モデルは極めて柔軟に頭の中の思考や仮定を数式に落とし込むことができます(それが上手く推定できるかはまた別の話ですが)。

確率分布のパラメータの表現を柔軟にする

さて、ここまでの流れを一旦まとめてみましょう。データ集合$D = \{(\mathbf x_1, y_1),..., (\mathbf x_N, y_N) \}$があるときに、$\mathbf x$が与えられたときの$y$の確率分布を予め仮定します(ここでは正規分布を使っておきます)。 $$ p(y \mid \mathbf x) = \mathcal N( \mu, \sigma^2) $$ この段階で、私達が興味あるものは平均$\mu$の方であったとしましょう。$\mathbf x$に依存して$\mu$が値を変えるとしたならば、私達が考えるべきなのは平均$\mu$と$\mathbf x$の関係性ということになります。今までは一次式でなんとなく表していましたが、これを一般の$\mu = f(\mathbf x)$という形で表してやることにしましょう。

$$ p(y \mid \mathbf x) = \mathcal N( f(\mathbf x), \sigma^2) $$

と書くことができます。この$f$を多項式ということにしておいて、最尤推定をしたならば予想が付く通り、最小二乗法によって多項式フィッティングを行うという方法と同じ結果を導きます(正規分布は平均からずれることは確率的に起こりづらいので、最尤推定では平均を上手くデータの真ん中らへんに持ってくるようにパラメータを推定します。従って、最小二乗法と同じ結果になるのです)。

しかし、ここで考え方をガラッと変えてしまいましょう。もしも関数$f$の形それ自体が、ある程度ゆらぎを持っているとしたらどうでしょうか。つまり、$f$の形はいろいろな可能性が考えられるのですが、我々の偏見であったりデータの集め方であったり、何らかの要因によってバラついてしまうということです。そうしたら$f$の形自体が何らかの確率分布$p(f)$から生起しているというふうにモデリングをしてみるということになります。とりあえず$p(f)$がどういうものであるかは分かりませんが、以下のように書き表しておきましょう。

$$ \begin{align} p(y \mid \mathbf x) & = \mathcal N( f(\mathbf x), \sigma^2) \\ f & \sim p(f) \end{align} $$

これで$f$が$p(f)$から生起して、生起した$f$を使って$y$の平均を表しておくという階層構造を持ったモデルにすることができます。このようなモデル化を施すことが、実はベイズモデルの基本的な考え方になります。

具体的な例

さて、若干抽象的な話になってしまいましたが、少し具体的な例に戻りましょう。今、$y$の平均が$\mathbf x$に依存しており、その依存性を表す関数$f$自体も確率的に揺らぐということを書き下してきました。とりあえず、これまで通り、$f$は一次式になっているだろうと適当に辺をつけてしまって、以下のように書いておきます。

$$ \begin{align} p(y \mid \mathbf x) &= \mathcal N( f(\mathbf x), \sigma^2) \\ f(\mathbf x) &= \mathbf w^T \mathbf x + b \\ \mathbf w & \sim p(\mathbf w) \\ b & \sim p(b) \end{align} $$

これは$y$の平均は$\mathbf x$に依存しており、その依存性は$f$で表すことにしておき、$f$は$\mathbf x$の一次式で表され、$f$の形を決定づける$\mathbf w, b$がそれぞれ確率的に変動するということを書き下しているに過ぎません。全体の流れを把握するために、一つ一つ書き下しましたが、実質

$$ \begin{align} p(y \mid \mathbf x) &= \mathcal N( \mathbf w^T \mathbf x + b, \sigma^2) \\ \mathbf w & \sim p(\mathbf w) \\ b & \sim p(b) \end{align} $$

ということになります。$\mathbf w$や$\mathbf b$がどのように揺らぐのかは分かりません。もしもこいつらも正規分布だと思うのであれば、そのように仮定すればいいですし、いやいや、今回のケースでは$b$は正の値になっているはずだと思うならば、正の値しか取らない分布(例えばベータ分布)などを置いてみればいいでしょう。

流れのまとめ

さて、一旦まとめておきます。 まず、データ集合$D = \{(\mathbf x_1, y_1),..., (\mathbf x_N, y_N) \}$があるとき、$\mathbf x$が与えられたときの$y$の値は確率的に揺らぐものであると考え、確率分布で表現しておくことにします。例えば正規分布で置くことにすれば、

$$ p(y \mid \mathbf x) = \mathcal N( \mu, \sigma^2) $$

となるでしょう。さて、ここで平均$\mu$が$\mathbf x$に依存していることを表現するために以下のようにしておきます。

$$ p(y \mid \mathbf x) = \mathcal N( f(\mathbf x), \sigma^2) $$

続いて、実は$f$自体(すなわち、$y$の平均と$\mathbf x$との依存性)も確率的に揺らぐとして

$$ \begin{align} p(y \mid \mathbf x) &= \mathcal N( f(\mathbf x), \sigma^2) \\ f &\sim p(f) \end{align} $$

というものを導入することにしました。これでは抽象的すぎるので、$f$をパラメトリックに表現しておけば

$$ \begin{align} p(y \mid \mathbf x) &= \mathcal N( \mathbf w^T \mathbf x + b, \sigma^2) \\ \mathbf w & \sim p(\mathbf w) \\ b & \sim p(b) \end{align} $$

などとしたりできます。別にこの置き方でなくてもいいし、パラメトリックに置く必然性もありませんが。

重要なのは、「確率分布で表現しておく→確率分布のパラメータ自体(あるいはそれを表す関数)が確率的に揺らぐ→更にそのゆらぎを確率分布で表現する」という階層構造の流れになります。

ベイズ的な書き方

さて、本題であるベイズモデルの考え方の基本的な部分については既に述べたのですが、ここでベイズの書き方についてしっかり述べておきたいと思います。結局のところ、「なんとなく固定していた関数やパラメータの方も確率的に揺らぐと考え直す」ことで柔軟にモデルを構築できるようになったのが重要なところでした。

このような考え方をすると、式を書くときには、いろいろな確率変数が入り混じってくるため、これらをしっかり明示的に書いてやることが理解の手助けになります。例えば、

$$ p(y \mid \mathbf x) = \mathcal N( f(\mathbf x), \sigma^2) $$

と考えたところでは、ベイズモデルを考えていくときには$f$の方も確率的に揺らぐものであると考えているので、確率変数であることを明示しておき、「$\mathbf x$が与えられ、更に$f$も与えられたときの$y$の分布」を表現するために、

$$ p(y \mid \mathbf x, f) = \mathcal N(y \mid f(\mathbf x), \sigma^2) $$

と書いたりしたほうが分かりやすいかもしれません。この辺は、割とマチマチな印象なので(意味を理解していれば、文脈でわかると言えばわかるのですが)、ある程度慣れを必要とするかもしれません。

意外と長くなってしまったので今回はこの辺にしておきます。

ベイズモデルを予測に使う場合での基本的な考え方は、ぜひ以下の記事を参考にしてください。

www.hellocybernetics.tech

www.hellocybernetics.tech