アシアルブログスマートフォン用の表示で見るアシアルブログアシアルの中の人が技術と想いのたけをつづるブログです2020-01-10交差エントロピーについて基本的な考え方をまとめてみましたTweetこんにちは。Monaca開発チームの内藤です。機械学習における分類問題やロジスティック回帰などで評価関数として利用されることの多い関数で、次のような形をしています。これ、なんかちょっと、ヘンテコな形の式ですよね。普段は見かけない形の関数です。使われる関数であるわりに、なかなかまとまった解説がないようなので、今回はこの交差エントロピーについて、基本的な事項についてまとめてみました。(交差でない普通の)エントロピーについて普通のエントロピーは、情報量とも呼ばれていてという形をしています。これは、(定数倍を除いて)データの平均量を表しています。(なお、この定義は情報理論で定義されているエントロピーであり、単位はありません。エントロピー自体はもともと統計力学で最初に導入されたもので、こちらはボルツマン定数がかかるため物理的な単位を持っています)まず、この普通のエントロピーがどうしてこんな式になっているかについて、調べてみましょう。ビット数と、表現出来るパターン数エントロピー自体は、データを内部的に二進数で扱うかどうかとは無関係なのですが、二進数から考えるのが簡単だと思うので、ここではまず二進数でデータを表現することから考えてみます。ビットで何パターンを表現できるかを考えてみると、1ビットで2パターン、2ビットで4パターン、3ビットで8パターンというように、1ビット増えるごとに表現できるパターンが2倍になるので、nビットであれば、パターンを表現出来ることが分かります。いうことは、逆に、kパターンを何ビットで表せるかを考えると、ビット必要であることが分かります。(これはk=6などのときに整数になりませんが、今は気にしないことにします)簡単な例として、ABCDという4パターンを表現したい場合を考えましょう。雪と考えてくれても良いです。天気を例としたこちらの記事が非常に分かりやすかったので、参考とさせてもらっています。cookie-box.hatenablog.comそうすると、これは2ビットで表すことができます。ような感じで対応させれば良いでしょう。ここで、A,B,C,Dは、どれも同じくらいの頻度で発生するものとします。Dのそれぞれの発生する確率p(X)はと考えています。この場合、1個分(1日分)を表現するのに2ビット必要なので、n個分(n日分)を表現するのであれば、2nビットが必要になりますね。Cの3種類になりますが、CはAやBよりも頻度が2倍になっています。このとき、AやBは以前と同様、表現するのに2ビット必要です。実は、Cについてだけは、表現するのに1ビットで十分であり、かつ、この時もっとも効率が良くなります。実際に、もとのビットでの対応を思い出せば、となっているので、AやBは2ビット必要ですが、Cについては、上位1ビットが1であれば、その時点で下位1ビットを参照することなくCであることがわかります。この下位1ビットは、もともとは、CとDを区別するのに必要だった1ビットだから、今は不要になったという訳です。Cは、もともとはCとDだったものなので、AやBより出現頻度(=出現確率)が高いのですが、高い頻度で出現するCを1ビットだけで表せるということで、データ効率が最も良くなっていることになります。k_C個のパターンを識別するのに必要だったビット数を節約することが出来るということです。「Cのときは」表現するのにビット必要で、「C以外のときは」以前と同様にビットが必要になるということですね。出現確率(つまり頻度)としました。書き直すと、となります。そのものを使えば、結局これは(Mが明示的に確率pに依存するためpの関数として記述しなおせば)となります。するためにを導入すると、結局これはとなります。これは、最初に導入したエントロピーの式と比べて、定数α倍だけ異なりますが、基本的には同じ式になります。結論としては、このエントロピーというのは、データのパターンの出現確率(もしくは頻度)に偏りがある場合、それを表現するのに必要な平均ビット数(に比例した)関数である、ということがわかります。「情報量」と考えることが出来るのですね。式をみると、を良くみましょう。これを書き直してとしてみます。これと、平均値の定義式を比較すれば、であることが分かります。依存して決めることで、ビット数を節約して、効率の良い平均ビット数を得ることが出来ることを意味しています。q)は、明らかに効率的ではありません。xが発生する確率p(x)と、xを表現するのに必要なビット数を決める確率q(x)を別々に設定してしまったからです。q)を「pとqがどれくらい異なっているか?」の目安として使うことが出来ます。q)が小さい程、pとqは似ていることになります。H(p)となるように定義されたものです。q)と定数倍しか違いませんから、結局、これが小さくなるほど、関数p(x)と関数q(x)は近いとみなすことが出来ます。PHPでバイナリプログラミングその3こんにちは、久保田です。byスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。