確率の対数を取る(あるいは情報エントロピー入門)
前置き
エントロピーは情報理論や物理学でも出てくるが,このノートのモチベーションは統計学の立場から.しかし,表記などは異なるが基本的にはどの分野でもエントロピーと呼ばれるものはおなじものと思われる.
前半のエントロピーの話は一応,要求される予備知識は高校数学の範囲内におさめたつもりだがどうだろうか.後半は大数の法則とかちょっと大学レベルの内容も出てくる.
数値例は Julia 言語による.
エントロピー
確率の話でよく一番基本的な例として出てくる「公平なコイン投げ」を考える.表が出る確率は
コイン投げの例がわかりやすいとしたら,逆に確率
2 を
右辺を情報量と呼ぶことにし,情報量の期待値をエントロピーと呼ぶ.
公平とは限らないコイン投げを考え,確率
期待値の定義を復習しておく.期待値は取りうる値の範囲全体にわたって,(確率)×(取りうる値)を足し合わせたものである.コイン投げの場合,取りうる値とその確率は次の表のように書き下せる.
裏 | 表 | |
---|---|---|
確率 | ||
情報量 |
取りうる値の範囲に対して確率がすべて書き下せるものを 確率分布 と呼ぶ.また,期待値が計算できるよう,確率分布と組で定義された変数を 確率変数 と呼ぶことにする.公平とは限らないコイン投げの場合のこの確率分布を2項分布と呼び,(1)の
取りうる値が裏・表の2通りでなくても,エントロピーは同様に考えることができる.公平とは限らない
期待値を計算できるように確率分布をすべて書き下すと次の表のようになる.
1 | 2 | |||
---|---|---|---|---|
確率 | ||||
情報量 |
この公平とは限らない
対数の底は2にすることも多いが,ネイピア数
相対的比較だけのためなら対数の底は割となんでもいいということである.割となんでもいいが 2 にしておくと感覚的にはわかりやすい.物理量と対応させるには
数値例
Julia の Distributions.jl パッケージでエントロピーを計算してみる.
まず,下の図のような公平なサイコロの分布について求める.
次のようにする.
using Distributions
using Plots
using LogExpFunctions
p0 = repeat([1/6], 6)
dice0 = Categorical(p0)
entropy(dice0)
確率分布自体をオブジェクト dice0
として持てて,確率分布のエントロピーを求める関数 entropy
があらかじめ定義されているのがよいところだ.値は約 1.79 だった.
julia> entropy(dice0)
1.7917594692280547
このエントロピーは底が
-sum(xlogx, p0)
次に,下の図のようなゆがんだサイコロの分布についてエントロピーを求める.
dice1 = Categorical( [0.1, 0.05, 0.1, 0.2, 0.15, 0.4] )
entropy(dice1)
値は約 1.58 だった.
julia> entropy(dice1)
1.5832755052458731
ゆがんだサイコロの分布のほうがエントロピーが小さい.
エントロピーは「乱雑さの指標」のように紹介されることがあり,人によってはゆがんだサイコロのほうが(値がそろってないので)乱雑に感じられるかもしれない.この場合の「乱雑さ」は(エネルギー,または適当なギャンブルを想像して)「利用しにくさ」のように捉えるとよい.確率に偏りがあればそこに賭けて勝ちやすくすることもできるが,フラットなときはランダムに賭けるより勝ちやすくはできない.
次のような,完全にイカサマのサイコロについてはエントロピーが 0 になる.
dice2 = Categorical( [1,0,0,0,0,0] )
entropy(dice2)
julia> entropy(dice2)
-0.0
このような場合のため,確率関連の数値計算を実装する際には
相対エントロピー
状態
と定義される.少しだけ式が長くなるが,次のように書いたほうがエントロピーとの対応がわかりやすいかもしれない.
また,次のような形にも書き換えてみる.
第2項は(2)の式で出てきた
最後に,重要なこととして相対エントロピーは真の分布が
多項分布に従って,確率変数を
このとき,
ここでスターリングの公式
と整理できる.大数の法則により,
という結果を得る.左辺はもともと手元にある観測値の分布(経験分布)がモデル
相対エントロピーの符号反転(
数値例
2つの確率分布のカルバック・ライブラ情報量を求める関数 kldivergence
もあらかじめ用意されている.
coin0 = Bernoulli(0.5)
p = plot(x -> kldivergence(coin0, Bernoulli(x)), legend=false)
xlabel!(p, "q")
ylabel!(p, "KLD")
次に
f(x, y) = kldivergence(Bernoulli(x), Bernoulli(y))
x = range(0.01, 0.99, length=100)
y = range(0.01, 0.99, length=100)
z = @. f(x', y)
p = heatmap(x, y, z)
xlabel!(p, "p")
ylabel!(p, "q")
等高線が楕円状になっていることからわかるように,カルバック・ライブラ情報量は左右対称ではない.つまり
Julia のコード全体は以下にまとめた.
参考にした文献など
前半のエントロピーについては主に 都筑卓司『マックスウェルの悪魔』(講談社ブルーバックス) のⅥ章を参考にした.似た解説は 田中章詞,富谷昭夫,橋本幸士『ディープラーニングと物理学』(講談社) の第1章にもある.しかしこれらの本の物理の話はこのノートではまったく触れられなかった.
後半の相対エントロピーについては主に, 赤池弘次『エントロピーとモデルの尤度』(日本物理学会誌) を参考にした.似た解説は 島谷健一郎『ポアソン分布・ポアソン回帰・ポアソン過程』(近代科学社) の第4章にもある.
最後のほうで少しだけ触れたカルバック・ライブラ情報量と統計学の情報量規準については 渡辺澄夫『ベイズ統計の理論と方法』(コロナ社) に詳しい.ベイズ統計の自由エネルギーも同様にカルバック・ライブラ情報量に基づく評価として使うことができる.BIC (Bayesian Information Criterion) や WBIC (Widely applicable Bayesian Information Criterion) は自由エネルギーの近似であるが,WAIC が事後(posterior)予測分布の良さを評価しているのに対し自由エネルギーは事前(prior)予測分布の良さを見ている.これについては 自由エネルギーもカルバック・ライブラー情報量に基づく情報量規準とみなせる に少し書いた.
ここで紹介した本はそれぞれ目指すところは異なるが,どれもそれぞれ個性的なので気になったものは読んでみてほしい.赤池弘次『エントロピーとモデルの尤度』(日本物理学会誌) だけは本でなく一つの論文だが,無料だし短いので読みやすく,特におすすめする.
Discussion