ともにゃん的データ分析ブログ

勉強したことの備忘録とかね

なぜベイズ予測分布はあれなのか?

お久しぶりです

久しぶりの投稿となります。いつの間にかXGBoostについての記事

kefism.hatenablog.com

が好評を得ていて、ブログのアクセス数も随分と増えていました!非常に嬉しいことです☆(ゝω・)v

今回は、ベイズ関連の教科書を読むと必ず紹介されているアレ(予測分布)がなぜそういう形をしているのかを説明します☆(ゝω・)v

参考文献は

です☆(ゝω・)v

不等式の準備

一般的に、任意の実数 z に対して以下が成り立ちます:

 \log z \leq z -1

したがって、Q(x)P(x) をそれぞれ密度関数としたときに、上記 zP(x)/Q(x) を代入することによって


\begin{eqnarray}
&& \log \frac{P(x)}{Q(x)} \leq \frac{P(x)}{Q(x)} - 1 \\
&\iff& Q(x)\log \frac{P(x)}{Q(x)} \leq P(x) - Q(x)
\end{eqnarray}

を得ることができます。2行目は両辺に  Q(x)を掛けました。

さらに上記を両辺 x について積分をして整理すると


\begin{eqnarray}
&&\int Q(x)\log \frac{P(x)}{Q(x)} dx \leq \int P(x) dx - \int Q(x) dx \\
&\iff& \int Q(x)\log \frac{P(x)}{Q(x)} dx \leq 0 \\
&\iff& \int Q(x)\log P(x) dx - \int Q(x)\log Q(x) dx \leq 0 \\
&\iff& \int Q(x)\log P(x) dx \leq \int Q(x)\log Q(x) dx
\end{eqnarray}

となります。2行目の右辺は、密度関数の積分は1になることを利用しました。3行目の左辺は分数の対数の性質を利用しました。

上記の不等式をみると、密度関数 Q(x) における2つの対数尤度関数 \log P(x)\log Q(x) の期待値を比較したときに、必ず自分自身  Q(x) の対数尤度関数の期待値の方が任意の密度関数  P(x) の対数尤度関数 \log P(x) よりも大きくなることを意味しています。

汎化損失

 x を現在得ているデータ、 q(x) をデータ  x の真の分布、p^{\ast}(x) を我々が構築した予測分布とします。

SlideShareに上げているスライド

www.slideshare.net

でも説明していますが、汎化損失 G とは

G = -\int q(x)\log p^{\ast}(x)dx

で計算される数値のことをいいます。

この汎化損失は、推定された予測分布  p^{\ast}(x) の対数尤度を"真のデータの分布" q(x) で期待値を取ったものにマイナスをかけた形をしています。したがって"真のデータの分布" q(x)がもし分かっている場合に、汎化損失は値が小さければ小さいほど推定された予測分布がどのくらい望ましいかを表す数値であるとみることができます。


さて、はじめに準備した不等式によると、密度関数  q(x) に対する対数尤度の期待値は、自分自身の対数尤度  \log q(w) の場合が最も高くなるのでした。つまり、汎化誤差  G

 -\int q(x)\log q(x)dx \leq -\int q(x)\log p^{\ast}(x)dx = G

となります。データから推定された予測分布よりも、"真の分布"を予測分布としたときに、その予測分布が最も望ましいのは当然のことでしょう。


しかし、真のデータ分布は分かりません。パラメータの事後分布が構築できたときに、何を予測分布とするのが良いのでしょうか?それがどのベイズの教科書を読んでも出てくる、おなじみの予測分布の式

 p(y|x) = \int p(y|\theta)p(\theta|x)d\theta

です。ここで  y は予測値、\theta はパラメータ、p(y|\theta)\theta をパラメータとしてもつ y の分布、p(\theta|x) はデータ x の下で得られたパラメータ \theta の事後分布です(以降同様)。


 p(y|x) = \int p(y|\theta)p(\theta|x)d\theta が良い予測分布である理由

 p(y|x) = \int p(y|\theta)p(\theta|x)d\thetaが良い予測分布であるということですが、それを導出しましょう。

まず、どんな  p(y|x) が良いのかの指標となる、 p(y|x) の対数尤度を以下のように用意します:

 \int p(y|\theta) \log p(y|x) dy

この対数尤度を最大にする  p(y|x) が良い予測分布であるとします。

ここで、データ x は様々な値を取りうるので、上記の対数尤度を x の分布 p(x|\theta) で期待値を取ります:

 \int p(x|\theta) \int p(y|\theta) \log p(y|x) dy dx

さらに、ここでかなり強い仮定、"真のパラメータ  \theta の事前分布 p(\theta) が分かっている"を置きます。このときにこの真の事前分布で上記の式の期待値を取り、式変形を行っていきます:

 
\begin{eqnarray}
&& \int p(\theta) \int p(x|\theta) \int p(y|\theta) \log p(y|x) dy dx d\theta \\ 
&=& \int \int \int p(x|\theta) p(\theta) p(y|\theta) \log p(y|x) dy dx d\theta \\
&=& \int \int \int p(x, \theta) p(y|\theta) \log p(y|x) dy dx d\theta \\
&=& \int \int \int p(\theta|x) p(x) p(y|\theta) \log p(y|x) dy dx d\theta \\
&=& \int p(x) \int \log p(y|x) \int p(y|\theta)p(\theta|x) d\theta dy dx\\
\end{eqnarray}

1つ目の等号は被積分関数をすべて積分記号の中に入れました。1つ目の等号から2つ目の等号、2つ目の等号から3つ目の等号は、よく知られた条件付き確率の式 p(x|\theta) p(\theta) = p(x, \theta) = p(\theta|x)p(x) を使用しました。4つ目の等号は積分の順序を入れ替えて整理しました。

上記の2つ目以降の積分の部分

 \int \log p(y|x) \int p(y|\theta)p(\theta|x) d\theta dy

を確認してください。これは最初に用意した不等号で比較されている値

 \int Q(x)\log P(x) dx \leq \int Q(x)\log Q(x) dx

とよく似た形をしています。したがって

 p(y|x) = \int p(y|\theta)p(\theta|x) d\theta

としてやれば、他の任意の予測分布 p^{'}(y|x) に対して、最初に用意した不等号より

 \int p(y|x) \log p^{'}(y|x) dy \leq \int \log p(y|x) \int p(y|\theta)p(\theta|x) d\theta dy = \int p(y|x) \log p(y|x) dy

となるわけです。以上の不等式の両辺に-1をかけて不等号を入れ替えて、小さければ小さい程よい値という、最初に紹介した汎化損失の形で不等式を表現できます:

  - \int p(y|x) \log p(y|x) dy \leq - \int p(y|x) \log p^{'}(y|x) dy


ところで、 p(x) についての期待値計算を無視していましたが、この不等式は両辺を  p(x) で期待値をとっても不等号の向きは変わりませんのでここでは無視をして大丈夫です。

以上により、事後分布  p(\theta|x) が求まった下で汎化損失を最も小さくする予測分布は

 p(y|x) = \int p(y|\theta)p(\theta|x) d\theta

ということになるのです。


あの強い仮定はそのままで大丈夫?

"真のパラメータの事前分布 p(\theta) が分かっている"という仮定を置いて、この分布についての期待値をとりながら上記の結論を導きました。これはとても強い仮定です。なぜなら、誰も真のパラメータの事前分布なんて知らないからです。

どうやったって分かりっこないのだから、そこは目を瞑るしかありません。なので自分が設定した事前分布を信じて事後分布を構築し、事後分布を構築したならば

 p(y|x) = \int p(y|\theta)p(\theta|x) d\theta

によって予測を行うしかないのです。

ただ、これが汎化損失の意味で"手元にある事後分布"における最良の予測分布なのであって、この予測分布そのものが良い予測分布なのかは分かりません。あくまで、事後分布  p(\theta|x) を得たらならば、あれこれ色々な予測分布を考えるのではなく、上記の予測分布で予測をすればいいと言っているだけです。

そこで良い予測分布はどれなのか?の疑問に答えるのが、渡辺澄夫先生が開発されたWAICです。WAICは"真のデータの分布"と構築した予測分布とのある意味での"近さ"を表している値です。したがって、いくつか事後分布を構築してWAICによってモデル選択を行い、上記の予測分布によって予測するのが良いのではないでしょうか。