機械学習 はじめよう

第13回 ベイズ線形回帰[後編]

この記事を読むのに必要な時間:およそ 3 分

事前分布の選び方

こうしてp(w)からp(w|t)を求められることがわかりました。そして残っているのは,肝心の事前分布p(w)をどうするかという点です。

事前分布の選び方はベイジアンにおいて非常に大きな問題の一つです。こちらもポイントだけ抜き出すと,次の2点にまとめられます。

  • データ点が多ければ,事前分布に何を選んでも同じ事後分布に近づいていく
  • 共役事前分布ならば計算に都合がいい

事前分布p(w)がp(t|w)と共役であれば,先の更新式に当てはめたときにp(w)とp(w|t)が同じ形の分布になります。

今回の場合の共役事前分布は正規分布になります。このことは,尤度関数p(t|w)の形から示すことができるのですが,この連載の範囲ではないため,省略しますね。

特に一番最初の事前分布として,平均が0,共分散行列が単位行列の定数倍というとても扱いやすい正規分布を選ぶことにしましょう。

このp(w)を先ほどの更新式に代入して計算すると,以下のようになります。ただしexpの外側とp(t)は1/Z'という形にまとめてしまっています。

少々複雑な式が出てきてしまいました。expの中身については二次形式と呼ばれる形に頑張ってまとめて,expの前はとりあえず1/Z'と書くことにすると,以下の式に変形できることがわかっています。

ただし

あとはZ'を求めればいい? いえいえ,実はZ'は計算する必要がないんです。

Z'にwが入っていない,つまりwから見て定数であるところがポイントです。p(w|t)はwで積分したら1になりますから,Z'はexpの部分の正規化定数に他なりません。

そのことを踏まえてexpの部分をよく見れば,それは正規分布N(w|μ,Σ)=1/Zexp(-(w-μ)TΣ-1(w-μ))のexpの部分に一致しています。つまり,p(w|t)の正体は当然そのN(w|μ,Σ)だ!ということがZ'を求めずともわかってしまうのです。

しかも,得られた事後分布も正規分布であることから,それを次のデータ点に対する「共役な」事前分布として使えます。いいことずくめ。

さて,ここまでxを固定して,つまりデータ点が1個の場合に限って話してきましたが,N個のデータ点x=(x1,……,xN)T,t=(t1,……,tN)Tに対しても,その事後分布p(w|t,x)を同じように求めることができます。詳しい計算は省略しますが,その分布もやはり以下のような正規分布となります。

ただし

Φは第11回に登場した,次のように定義される行列です。

この結果は,まずデータ点(x1,t1)に対してその事後分布p(w|t1,x1)を求め,それをまた事前分布とみなし,別のデータ点(x2,t2)を使って次の事後分布p(w|t1,t2,x1,x2)を求めて……という操作を繰り返して得られるp(w|t1,……,tN,x1,……,xN)と同じ分布になります。

一見,当たり前のことを言っているだけに聞こえるかもしれませんが,結果がデータの順序によって違ってしまっては困ったことになりますので,こうした確認はとても重要です。

ベイズ線形回帰を解く

「ベイズ線形回帰を解く」と見出しを付けましたが,事後分布を求めたことで,すでにもう解けています。

wの事後分布p(w|t)=N(w|μNN)は正規分布ですから,平均のμNを頂点とするいわゆる釣り鐘型の分布になります。したがって一番「自信」のある,つまり一番確率の高い答えはw=μNです。

このように事後分布の最大点をwの推定値とみなす手法には,事後分布最大化(Maximum a Posterior,MAP)推定という名前が付いています。

「自信」の度合いは裾の広がり具合から知ることができます。それは共分散ΣNを見ればわかるのですが,読み解くのに少しコツがいります。

これは具体例で説明する方がわかりやすいので,次回の実践編の中で紹介することにしましょう。

正則化ふたたび

なんか毎回似たような小難しい式がいっぱい出てくるから,どれがどれだか……などと感じられているかもしれませんね。

例えば,第9回第11回に出てきた正則化付きの線形回帰の結果などはかなりよく似た式のように見えます。ここでλは正則化係数という,正則化の係具合を調整するパラメータでしたね。

あれ? よくよく見ると,単に似ているというレベルではなさそうです。先ほどのmNの式にΣNを代入してみましょう。

なんと,λがα/βに置き替わっているだけで,全く同じ式になっています!

ベイズ線形回帰では,p(w)は「事前分布の仮定⁠⁠,p(t|w)は「モデルの仮定」からそれぞれ適切に決めました。

一方の正則化付きの線形回帰では,二乗誤差が「モデルの仮定」であり,さらに二乗の正則化項をペナルティとして加えることで過学習的振る舞いを抑えるという仮定を追加していました。

こうして言葉にすると全く異なるように思える仮定から,同じ結果が得られていたわけです。

前回のまとめでも,機械学習は「仮定」の積み重ねであることを確認し,⁠全く異なる仮定を入れたのに同じ結果が導かれた」ことには,それらの仮定の選び方にある種の妥当性を与えてくれるのだ,という話をしていましたね。

線形回帰のベイズ化と正則化が同じ最適解を導くことも,やはりとても意味のあることなのです。

まとめ

今回,ベイジアンのもとで線形回帰を解いてみましたが,肝心の共分散をきちんと見ていないため,まだ分布で解を求めたという実感がないかもしれません。

次回はベイズ線形回帰のコードを書いて,具体的なデータで解いてみることで,そのあたりを少しでも実感してもらおうと思います。お楽しみに。

著者プロフィール

中谷秀洋(なかたにしゅうよう)

サイボウズ・ラボ(株)にてWebアプリ連携や自然言語処理を中心に研究開発を行いながら,英単語タイピングゲーム iVocaをサービス提供している。

URLhttp://d.hatena.ne.jp/n_shuyo/
Twitterhttp://twitter.com/shuyo