こんにちは。

本日は機械学習をやっていると必ず出てくるカルバックライブラーダイバージェンスについてです。分布間の似通いを測るこの指標を最小化したい!ということがよくあります。しかし、それはクロスエントロピー最小化と同値関係にあります。

以前、KLについて以下の二つの記事も書いたのでよければ見てください。

Cross-Entropy

前回も紹介しましたがクロスエントロピーはKLと同様に分布間の似通いを測ります。以下、p,q間の距離です

    \[H(p,q) = -\sum_x p(x)\log q(x)\]

この時点で同じように使うならどうやって使い分けるんだ?と思われると思います。実際、

    \[KL(P | Q) = \sum_{i} P(i )\frac{P(i)}{Q(i)}\]


    \[= \sum_{i} \left{ P(i)\log P(i)  - P(i) \log Q(i)   \right}\]


    \[=\sum_{i} \left{- P(i)\log \frac{1}{P(i)}  + P(i) \log \frac{1}{Q(i)}   \right}\]


    \[= - H(P) + H(P,Q)\]

ただし、

    \[H(P) = -\sum_{i} P(i)\log P(i)\]


    \[H(P,Q) =  \sum_{i}  P(i) \log \frac{1}{Q(i)}\]

です。機械学習においては「モデルの分布」を「真の分布」に近づけることが目標です。この際「真の分布」はもちろんわからず、得られたデータにより代表されます。P(D)とここでは表すことにします。つまり、KL(P(D) | P(model))を最小化することが目標ですがDは定数であるためそれは最終的にクロスエントロピーの最小化に等しくなることがわかります。

ではなぜ世間では「KL最小化しようぜ!、KL最小化しようぜ!」と盛り上がっているのでしょうか?

結論としては、私にはあまり理解できませんでした。

おそらく統計学的な考えが絡んでいるのだと思います。実際、アンサーにはミニバッチによるロバスト性についての意見をいただきました。
In may machine learning projects, mini-batich is involved to expedite training, where the 𝑝′ of a minibatch may be different from the global 𝑝. In such a case, Cross-Entropy is relatively more robust in practical when KL divergence needs a more stable H(p) to finish her job.

どなたかわかりやすい例などお持ちの方はコメントをいただきたいです。

話は変わりますが、せっかくなので多変数ガウス分布間のKLを計算してみます。たまには計算をやっとかないとどんどんできひんくなる、、

多変数ガウス分布の間のKL

ちなみに、一変数は以前やったので上のリンクから飛んでください。

p(x) = N(\mu_1,\Sigma_1)q(x) = N(\mu_2,\Sigma_2)とします。途中で計算が激しくなるところがあるので先にそこを計算します。

    \[H = \int_{-\infty}^\infty N(\mu,\Sigma) \log N(\mu,\Sigma) dx\]


    \[= E[\log N(\mu,\Sigma)]\]


    \[= E[\log(2\pi)^{-D/2} + \log |\Sigma|^{-1/2} -\frac{1}{2}(x-\mu)^T\Sigma^{-1}(x-\mu)]\]


    \[= -\frac{D}{2}log 2\pi - \frac{1}{2}\log|\Sigma| -\frac{1}{2}E[(x-\mu)^T\Sigma^{-1}(x-\mu)]\]

これがまず一つ目です。

    \[E[(x-\mu)^T\Sigma^{-1}(x-\mu)] = E[tr(\Sigma^{-1}(x-\mu)(x-\mu)^T)]\]


    \[= tr(\Sigma^{-1}E[(x-\mu)(x-\mu)^T])\]


    \[= tr(\Sigma^{-1}\Sigma) = tr(I) = D\]

二つ目です。

    \[\int_{-\infty}^\infty (x-\mu_2)^T\Sigma_2^{-1}(x-\mu_2)p(x) dx\]


    \[= \int \frac{1}{2}[(x-\mu_1)+(\mu_1 -\mu_2)]^T\Sigma_2^{-1}[(x-\mu_1)+(\mu_1 - \mu_2)]p(x)dx\]


    \[= \int \frac{1}{2} \left{ (x-\mu_1)^T\Sigma_2^{-1}(x-\mu_1) + 2(x-\mu_1)^T\Sigma_2^{-1}(\mu_1-\mu_2) + (\mu_1-\mu_2)^T\Sigma_2^{-1}(\mu_1-\mu_2)   \right}p(x)dx\]


    \[= \frac{1}{2} tr(\Sigma_2^{-1}\Sigma_1) + 0 + \frac{1}{2}(\mu_1-\mu_2)^T\Sigma_2^{-1}(\mu_1-\mu_2)\]

これで準備ができました。ではKLの計算です。

    \[KL = \int \left[ \frac{1}{2}\log \frac{|\Sigma_2|}{|\Sigma_1|} - \frac{1}{2} (x-\mu_1)^T\Sigma_1^{-1}(x-\mu_1) + \frac{1}{2} (x-\mu_2)^T\Sigma_2^{-1}(x-\mu_2)  \right]p(x)dx\]


    \[= \frac{1}{2}\log \frac{|\Sigma_2|}{|\Sigma_1|} - \frac{1}{2}E[(x-\mu_1)^T\Sigma_1^{-1}(x-\mu_1)] + \frac{1}{2}E[(x-\mu_2)^T\Sigma_2^{-1}(x-\mu_2)]\]


    \[= \frac{1}{2}\left[ \log\frac{|\Sigma_2|}{|\Sigma_1|} -D + tr(\Sigma_2^{-1}\Sigma_1) + (\mu_2-\mu_1)^T\Sigma_2^{-1}(\mu_2-\mu_1)  \right]\]

行列計算の練習にはいいかもしれません。でわ