Processing math: 3%
スキップしてメイン コンテンツに移動

Entropy


Introduction
sorry, this page is Japanese only. 

今日はエントロピーについて書こうと思います。これは確率論や統計学で死ぬほど大事なKLダイバージェンスといものを理解するために必要な知識です。
この記事ではエントロピーについてしか書きませんが、今度KLダイバージェンスについても書こうと思います。

KLダイバージェンスの記事はこちら



Entropy
直観的な話
ある事象、「例えば明日大学の講義にX分遅刻する」という事象を考えます。
この事象に対する確率がP(X)が与えられているとしましょう。P(1)は一分遅刻する確率です。この時確率分布P(X)が持つ情報量はどれだけのものかとうことを考えたいとします。

明日の講義はテストを受けるとします。そのテストを受けないと単位を落としてしまします。しかし、テスト前日はすごく寝不足としましょう。遅刻する確率が99パーセントとわかった時、ほとんどどうあがいても遅刻するのであれば単位を落とすのはほぼ確実といえます。

よって前日に徹夜で勉強するよりも、睡眠不足を解消するために寝る方がよっぽど効率的であることがわかります。しかし、遅刻をする確率が50パーセントとわかった時、前日にテスト勉強をすればよいのか、せずに睡眠をとればよいのかわかりません。このように、確率が偏っているほど何が起こるか予測しやすく、対策を立てやすいのです。遅刻する確率が99パーセントとわかる時は遅刻する確率が50パーセントとわかった時に比べて圧倒的に多いはずです。

確率P(X)に対してこの情報量のことをP(X)の自己エントロピーといいます。

そして、自己エントロピーの期待値のことを平均エントロピーといいます。



立式
性質
ではこの情報量を数式で表していきましょう。まず自己エントロピーには大事な性質が二つあります。それが

  • 互いに独立な確率変数の自己エントロピーはそれぞれの情報量の和で表される。
  • 自己エントロピーは減少関数である。

の二つです。

自己エントロピーの加法性
互いに独立な確率変数の情報慮はそれぞれの情報量の和でなければいけません。例えば「明日の講義がY分早く終わる」という事象を考えます。この確率変数Yはあなたが何分講義に遅刻しようが講義が何分早く終わるなんてことには関係ないわけです。よって確率変数XとYは独立なわけです。ではもし「明日お前は30分遅刻し、講義は30分早く終わる」と未来の自分に教えてもらったとします・この時「明日自分は30分遅刻する」という事実と「明日の講義は30分早く終わる」という事実の二つの事実を知ったとして、それぞれの自己エントロピーの足し算と考えるのが自然なわけです。

つまり、互いに独立な確率変数の同時に起こる確率変数の同時におこる確率はそれぞれの確率の積であるのでP(X)P(Y)、情報量の関数をH()とするとき

H(P(X)P(Y)) = H(P(X)) + H(P(Y))

を満たしてほしいということになるわけです。このような関数は高校二年生で習いますね。

ずばり対数関数です。

自己エントロピーは減少関数
自己エントロピーは上記の「直観的な話」の中でその事象が起こる確率が高ければ自己エントロピーは低く、確率が低ければ自己エントロピーは高いという話をしました。



自己エントロピーの式
一つ目の性質を満たす関数といえば、対数関数でした。しかし、対数関数は単調増加関数(ずっと増えてる関数)です。そこで対数関数を-1倍することで減少関数をし、二つ目の性質を満たすわけです。よって自己エントロピーの関数は確率P(X)に対して

-log(P(X))

と定義されます。

平均エントロピーの式
平均エントロピーは自己エントロピーの期待値であったので

\int -P(X)log(P(X))dx
また、確率変数が離散(連続値でない)であれば

\sum -P(X)log(P(X))
となります。



平均エントロピーについての直観
平均エントロピーとは自己エントロピーの期待値でした。
ではこれは直観的にどのようなことを示しているのでしょうか。結論からゆうと平均エントロピーとはその分布の不確実性の大きさを示しています。次の二つの確率分布について考え、そのことを確かめてみましょう。

  • デルタ分布
  • 一様分布

デルタ分布の平均エントロピー
デルタ分布とはある確率変数で必ず確率1となり、それ以外の確率変数の確率は0となる確率分布のことです。
では[0,1]の値の中で100パーセントの確率で0.5の値をとるデルタ分布のエントロピーを求めてみましょう。

この時の平均エントロピーは区間は[0.5-\delta,0.5+\delta]とし、この時\delta \rightarrow 0 とすることで\frac{1}{2 \delta } log \frac{1}{2 \delta} を積分し、求めます。

なぜ、このような式になるかというと[0.1]は連続な区間であり、デルタ分布(今回の)は0.5で1をとるので、積分するには底辺が区間0.5-\delta,0.5+\delta]高さ1の長方形を考え、上記のようにして長方形の横幅を狭めていくことで積分をします。計算は次のようになります。


lim_{\delta \rightarrow 0} - \int_{0.5-\delta}^{0/5+\delta} \frac{1}{2 \delta} log \frac{1}{2 \delta} = lim_{\delta \rightarrow 0} [- \frac{1}{2 \delta} log \frac{1}{2 \delta}]_{0.5-delta}^{0.5+\delta} = lim_{\delta \rightarrow 0} -\frac{1}{2 \delta} log \frac{1}{2 \delta} \times 2 \delta = lim_{\delta \rightarrow 0} -log \frac{1}{2 \delta} = - \infty


よってデルタ分布ではエントロピーは-\inftyとなりました。エントロピーを不確実性と考えるとデルタ分布では100パーセント何が起こるかわかっているという直観と一致するわけです。

エントロピーの最大化と一様分布
上記でデルタ分布はエントロピーを最小化させる分布であることがわかりました。次にエントロピーを最大化するような分布は一様分布であることを示しましょう。

一様分布とは区間[a,b]に対してどの確率変数もP(X) = \frac{1}{b-a}となる確率分布です。
ではエントロピーの最大化をします。ここで1,2,3,,,,nのどれかをとる確率をP = [p_1,p_2,,,,p_n]と表すことができ、この離散確率分布のエントロピーを最大化させることを考えます。これにはラグランジュの未定乗数法という知識が必要になります。

\sum_{i=1}^{n} p_i = 1の条件の下でH = - \sum_{x \in X} p_i log p_iを最大化させます。
ラグランジュの未定乗数法を用いてL(p,\lambda)=H+\lambda(\sum p_i - 1) \frac{\partial L}{\partial p_i} = 0
より
-log p_i -1 + \lambda = 0 log p_i = \lambda-1
より
p_i = exp(lambda-1) 、これを条件式に代入すると
n exp(\lambda-1) = \lambda - 1 = log \frac{1}{n} = -logn
これを先ほどの式代入して
p_i = exp(-log n ) = \frac{1}{n} というふうに求まります。
これはつまり、P = [p_1,p_2,,,,p_n] という確率分布を示し、これは、まさに一様分布を示しています。つまり、エントロピーが最大になるのは一様分布であることがわかりました。一様分布はどの確率変数に対しても\frac{1}{b-a} 、今回でいえば\frac{1}{n}をとるので何が一番起こりやすいのかわからないことを踏まえると平均エントロピーを最大化させる分布は一様分布であったので、平均エントロピーとは分布の不確実性の高さを表すということがわかります。

_________________________________________________________________
終わりに
この辺でエントロピーの話は終わろうと思います。エントロピーはKLダイバージェンスのために書いたようなものなのでKLダイバージェンスのほうもご覧いただけると幸いです。


KLダイバージェンスの記事はこちら

___________________________________________Reference

http://s0sem0y.hatenablog.com/entry/2016/04/20/194040
http://s0sem0y.hatenablog.com/entry/2016/04/21/132645
https://ja.wikipedia.org/wiki/カルバック・ライブラー情報量
https://ja.wikipedia.org/wiki/情報量
https://qiita.com/tibigame/items/aebbac176d9bbdaf3d15
https://hinaser.github.io/Machine-Learning/math-for-ml.html
http://www7a.biglobe.ne.jp/~watmas/masaru-rep/info-normal.html
https://bi.biopapyrus.jp/seq/entropy.html) (https://lp-tech.net/articles/Lc0Jw
http://minami106.web.fc2.com/code/4.pdf
http://ossyaritoori.hatenablog.com/entry/2016/11/02/150335
https://lp-tech.net/articles/9pF3Z) (https://logics-of-blue.com/information-theory-basic/

コメント

このブログの人気の投稿

カーネルk-meansの実装

Introduction   English ver 今日はカーネルk-meansの実装をしました。k-menasアルゴリズムはクラスタリングのためのアルゴリズムです。僕がカーネルk-meansを実装しようと思ったのには一つ理由があります。それは僕の友人がk-meansのプレゼンを、僕がカーネルのプレゼンをしていた時に、k-meansにカーネルを適応できないかと思ったからです。そこで、カーネルk-meansについての論文を探しました。 ここのpdf を主に参考にさせていただきました。うまくカーネルk-meansを実装できたと思います。ここでは、普通のk-meansとカーネルを用いた,kernel k-meansについての実装の結果を紹介します。 また、この記事では実装結果のみ書きますが、理論のほうも別の記事で書くつもりです。書き終えたらリンクをこの記事にも貼っておきます。 #  理論編書きました。K-means 理論編 概要 dataset   ちょっとだけ理論の説明  k-means    kernel k-means   Dataset   English ver 今回使うのは二つのデータセットです。一つ目は、普通のk-means用のデータです。二つ目はkernel k-means用のデータセットです。 一つ目のデータは、三つのグループで構成されており、次元は2で、サンプル数は300です。以下のような分布になっています。 二つ目のデータは二つのグループで構成されており、次元は2でサンプル数は300です。   this page にデータセットを作ったコードを載せています。 ちょっとだけ理論の説明 k-meansとは、k-平均法とも呼ばれています。初めに、適当なクラスに分け、各クラスの中で平均となるベクトルを求めます。そして、各データに対して、すべての平均ベクトルとの距離を求めます。そして、最小となる距離になるクラスに改めて、そのデータをクラスタリングします。そして、新たに得られたクラスの中でそれぞれ平均ベクトルを求め、これを繰り返し、平均ベクトルが動かな...

ダイクストラ法

Introduction English ver 今日は、ダイクストラ法について書きます。ダイクストラ法とは最短距離を求めるアルゴリズムです。地図はグラフで表されます。もし、まだ this page を見ていない方は先にこちらをご覧ください。今回はこの記事を前提としています。このページでは、グラフの定義と、ヒープ構造について書いています。ダイクストラ法ではヒープ構造を使って、かなりの計算量を落とします。 この スライド はダイクストラ法を説明したスライドです。 Overview アルゴリズム 実装 アルゴリズム このアルゴリズムは スタート始点のノードを決める。そして、それをAと名付ける。 各ノードにd=\inftyを割り当てる。ただし、スタート地点はd=0 Aの隣接ノードのリストをadj_listと名付ける。  For adj in adj_list:  If d of adj > d of A + weight to adj -> d = A + weight to adj. グラフnetworkからAを取り除く グラフnetworkの中で最初のdを持っているノードをAとし、4に戻る。 となっています。 このアルゴリズムを図を用いて説明します。  このグラフを使って説明します。  初めに、スタート地点を決めます。そして、各ノードにd=\inftyを割り当てます。  Aから始まります。Aの隣接ノードであるBのdを更新します。もし、現在のBよりもAのdとA->Bへの重みを足したもののほうが小さいならdをその値に更新します。同じようにCnのdを更新します。 次にAを取り除きます。  次はBから始まります。Aと同じことをやります。 このダイクストラ法では今のような操作をグラフの全てのノードに×がつくまで続きます。 実装 このアルゴリズムではO(log(|V|^2))という計算量を持っています。最小のdを持つノードを探すのに時間がかかります。 しかし、ヒープ構造を使えばO((E+V)log(V))に減らせます。ヒープ構造で現時点での...

ヘッセ行列

Introduction English ver 今日は、ヘッセ行列を用いたテイラー展開について書こうと思います。 これは最適化を勉強するにあたって、とても大事になってくるので自分でまとめて残しておくことにしました。とくに、機械学習では最適化を必ず行うため、このブログのタイトルにもマッチした内容だと思います。 . 概要 ヘッセ行列の定義 ベクトルを用いたテイラー展開 関数の最適性 ヘッセ行列の定義 仮定 f は次のような条件を満たす関数です。. f はn次元ベクトルから実数値を出力します。 このベクトルは次のように表せます。 x = [x_1,x_2,,,,x_n] \forall x_i , i \in {1,2,,,n}, f は二回偏微分可能です。 定義 ヘッセ行列は \frac{\partial^2}{\partial x_i \partial x_j}を (i,j)要素に持ちます。 よってヘッセ行列は次のように表せます。 \[ H(f) = \left( \begin{array}{cccc} \frac{\partial^ 2}{\partial x_1^2} & \frac{\partial^2 f}{\partial x_1 \partial x_2} & &\ldots \frac{\partial^2 f}{\partial x_1 \partial x_n} \\ \frac{\partial^ 2 f}{\partial x_1 \partial x_2} & \frac{\partial^ 2 f}{\partial x_2^ 2} & \ldots & \frac{\partial^2 f}{\partial x_2 \partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial^ 2 f}{\partial x_n \partial x_2} & \frac{\partial^ 2 f}{\partial x_n \partial x_2} & \ldo...