エントロピーを視覚化しよう
このページはマス旅の一部です。
今回はデジタル情報の基本になる「エントロピー」という量について探ってみよう。
1.ウォーミングアップ
<自己情報量>
シャノンさんは珍しいことが起きたら情報量が多いと考えました。
つまり、シャノンは「情報量は、確率に反比例する」としました。
たとえば、イベントA、B、C、Dの確率が順に1、1/2,1/4,1/8だと
しましょう。
反比例をそのまま数式化するには、逆数で定義するのが自然です。
情報量はA,B,C,Dの順に1、2、4、8です。
動き方が派手すぎますね。それに情報量が倍々になってしまいますが、
8分の1の確率というだけで、情報量が8というのは大きすぎますね。
確率が微小数の256分の1だと情報量は256になり、意味不明ですね。
そこで、逆数にしたあと、2を底とした対数を使います。
つまり、
「確率pの(自己)情報量I=log_2(1/p)=-log_2(p)」
確率pの逆数のlog2、つまり、確率のlog2にマイナスをつける
と決めてみよう。
-がついて定義のみかけはいやな感じですが、これでいいのです。
たとえば,イベントDではp=1/8=2^(-3)ですね。
定義に当てはめてみよう。Dが起きたときの情報量は
I_D=-log_2(2^(-3))=-(-3)=3
となって、マイナスを打ち消してくれます。
AからDの確率を情報量に直して、順に並べてみよう。
A,B,C,D順に0,1,2,3
となって、いい感じですね。
情報量には単位があります。ふつうは2進数のけたのbitを使います。
なぜ、ビットだか分かりますか?
2進数は1の位から位があがるたびに2倍2倍になっていました。
Aの確率1は、2進数でも1です。これはAの確率で、情報量は0でした。
Bの確率1/2は、2進数では1の半分だから0.1とかきます。小数第1位に1がきて情報量が1です。
Cの確率1/4は、2進数では0.1の半分だから0.01とかきます。小数第2位に1がきて情報量が2です。
Dの確率1/8は、2進数では0.01の半分だから0.001とかきます。小数第3位に1がきて情報量が3です。
小数の位と情報量の間の規則性に気づきましたか?
そうです。「1がたつ小数の位=情報量」になってますね。
2進数の小数の位のビット位置=情報量だから、ビットと呼んでいるのですね。
確率が半分になって位が1つ進むと、情報量が1つ増えるという言い方もできます。
<否定の情報量>
イベントEに対する自己情報量I(E)は、Eの確率p(E)を使い、
I(E)=-log_2(p(E))と定義されました。
p(E)=1/2^nならば、
I(E)=-log_2(2^{-n})=log_2(2^n)=n (bit)
(2進化の確率の小数第n位にビットがたつ。)
では、余事象の自己情報量はどうなるかが気になりますね。
Eの余事象をFとすると、確率はp(F)=1-p(E)=1-p
だから、自己情報量はI(F)=-log_2(1-1/2^n)
=-log_2((2^n-1)/2^n)=-log_2(2^n-1)+log_2(2^n)
=n - log_2(2^n-1)
#たとえば、しかけのないコイントスは、出る確率は、表も裏も1/2です。
すると、p(表)=1/2^1だから、I(表)=1ビットの情報です。
I(裏)ももちろん1ビットです。
余事象の計算式では
1-log_2(2^1-1)=1-log_2(2-1)=1-log_2(1)=1-0=1ビットですから、一致しますね。
#たとえば、合格率が12.5%の難関校に合格すると、
p(合格)=1/2^3から、I(合格)=3ビットの情報量があるのですが、
p(不合格)=7/2^3から、I(不合格)=3-log_2(7)=3-2.807=0.193と情報量は0.2程度です。
合格という情報はビックリビックリビックリとなるのに、
不合格と聞いても驚かないだろうというのが、数字に表れてますね。
<情報の加法性>
自己情報量は対数によって、「かけわり」を「たしひき」に直します。
だから、確率のかけ算を情報量のたし算に直すから情報量に加法性が生まれるね。
大小2つのさいころをふったときに、両方偶数になる情報量を求めましょう。
大のさいころが偶数の確率は1/2だから、その自己情報量は1。
小のさいころが偶数の自己情報量も1。
「大小のさいころが両方偶数」になる情報量は1+1=2になるはずです。
実際、
「大小のさいころが両方偶数」になる確率は4分の1=0.01(2)だから、あってますね。
2.エントロピー
<平均情報量(情報量の期待値)>
(自己)情報量になれてきたので、次は、分布にからめて情報量を俯瞰してみよう。
#たとえば、しかけのないコイントスの確率は、表も裏も1/2です。
だから、情報量は表も裏も1でした。
ビットは情報量なので、確率との積和は、「情報量の期待値」になりますね。
期待値は平均値でもあるから、平均情報量の求め方にもなるね。
1/2*1+1/2*1=1
です。
難関校への合格不合格の場合はどうでしょう。
1/8*3+7/8*0.193=0.543875
です。
さっきよりへりましたね。
確率の偏りが極端にあると小さい情報量に期待値が引きずられるようです。
8月13日の天気の確率がp(雨)=1/2,p(晴れ)=p(曇り)=1/4,p(雪)=0として、情報量を平均してみよう。
雨、晴れ、曇り、雪のビットは1,2,2,-∞.
雪の確率は0なので、期待値の寄与も0です。
平均情報量は1/2*1+1/4*2+1/4*2+0=1.5。
2月1日の天気の確率がp(雨)=p(晴れ)=p(曇り)=p(雪)=1/4
として、情報量を平均してみよう。
雨、晴れ、曇り、雪のビットは2,2,2,2.
平均は1/4*2+1/4*2+1/4*2+1/4*2=2。
「2だけの平均は2」だから当然の結果ですね。
ということは、全体が2^3通りに分岐して等しい確率で起きるなら、
1つの情報量のビットは3だから、平均情報量も3になりますね。
こうやって、いろいろ調べると、
「事象の種類が増え、確率の分布が一様なときが平均情報量が多くなり、
事象の種類が減り、確率の分布が偏るときが平均情報量が0に近づく。」
ということが結論づけられそうです。
一般化してみよう。
全体事象Aが{e1,e2,..,en}のn個の事象に分割できるとき、
平均情報量H(A)の最大値は、確率が等しい、情報量が等しいときで、
Σ1/n{-log_2(1/n)}={-log_2(n^{-1})}=log_2(n)、
平均情報量H(A)が最小になるのは、分布が1つに集中し、他が0の確率になるときで、
p(a1)=1,他の確率が0ならば、I(a1)=0の1倍、つまり期待値=0。
さっきから平均情報量をさりげなく文字Hで表してます。
なぜ、Hなのでしょう。熱力学のエントロピー(Entropy)は、Hを使っています。
H=-KΣn_k log_e(n_k)と書きます。n_kは気体分子のk番目エネルギー準位にある確率です。定数Kは単位換算のためでしょうから、目をつむるとして、構造的にはまったく同じですね。そうです。
平均情報量は熱力学のエントロピーに対応していたのです。
熱力学では無秩序さの尺度としてエントロピーを使います。
情報理論では不確実性の尺度としてエントロピーを使います。
<エントロピー関数>
さっきまでわかったことをまとめると、
「n個の部分からなる事象のエントロピーは最小0で、最大がlog_2(n)となる」
ということだ。
エントロピーは「事象と確率がセット」になっているので2行でかける。
事象の数がn個あれば、2行n列の行列によって、
エントロピー空間が決まるね。これをn元事象系という。
2元事象系A={{a1,a2},{p,1-p}}では、
エントロピーH(p)=-plog_2(p)-(1-p)log_2(1-p)をエントロピー関数という。
数式は複雑にみえますが、a1とa2が等確率の1/2のときに最大で、
どちらかが1のときが0になるはずです。
これは、p=0、p=1のときにH=0、p=1/2のときにH=1という、
p=1/2で対称なグラフになることが予想できるね。
課題:geogebraでH(p)=-plog_2(p)-(1-p)log_2(1-p)のグラフをかこう。
q=1-x
H(x)=-xlog2(x)-qlog2(q)
A=(0,0)
B=(1,0)
C=(1/2,1)
これだけでエントロピー関数がかけるなんて、geogebraは便利だね。
エントロピー関数
3.エントロピーは変化する
<条件つきエントロピーとチェインルール>
確率は情報が増えると変化します。
モンティホール問題やベイズ理論を知っていれば、ピンとくるでしょう。
でも、知らない人でも、実例を見れば
「全体集合が変わるので確率が変わるというのが条件つき確率」ということがわかるでしょう。
例えば、天気予報や雨雲レーダーをみないで、雨かどうを判断すると
雨の確率が1/2だったとします。でも、どうも午後には雨雲がやってくるぞ
という情報があれば、雨の確率は格段に上がるでしょう。
もっと単純な話、
「さいころをふって1の目が出た確率」を聞かれたら6分の1と答えますね。もし、「奇数の目が出たぞ」という情報があれば、3分の1という確率に変わりますね。
これが
確率p(Y)に対して、事象や情報Xのもとでの条件つき確率p(Y|X)です。
エントロピーH(Y)に対しても、条件XつきのエントロピーH(Y|X)というものが考えられそうですね。
なんか難しそうな雰囲気がただよってきました。
でも、安心してください。
最初の情報量のところで、情報の加法性についてかきました。
大小のさいころが両方偶数である情報量は1つ1つが偶数である情報量の和でした。
I(大が偶数)=1, I(小が偶数)=1,I(両方偶数)=1+1=2
1,2はちょうど、確率の1/2.1/4に対応してましたね。
1/2*1/2=1/4についてはどう解釈しますか。
p(両方偶数)=1/2*1/2=p(大が偶数)*p(小が偶数)という積の法則ですね。
でも、別の考えもできるのです。
p(両方偶数)=p(大が偶数)*p(小が偶数|大が偶数)=1/2*1/2
p(両方偶数)=p(小が偶数)*p(大が偶数|小が偶数)=1/2*1/2
これを数式で利用してみよう。
そのために、
p(a∧b)=p(a)*p(b|a)
p(a∧b)=p(b)*p(a|b)
と記号化しましょう。
2つのさいころの2元情報系は次のようになります。
A=大の目={{偶、奇},{1/2,1/2}}={{a1,a2},{p(a1),p(a2)}}とする。
B=小の目={{偶、奇},{1/2,1/2}}={{b1,b2},{p(b1),p(b2)}}
ここで、「AとBが同時におきる結合情報系」を作ります。
AB={{(偶,偶),(偶,奇),(奇,偶),(奇,奇)},{1/4,1/4,1/4,1/4}}
={{(a1,b1),(a1,b2),(a2,b1),(a2,b2)},{p11,p12,p21,p22}}
ただし、(ai,bj)=ai∧bj,pij=p(ai∧bj)とします。
同時エントロピーH(AB)=-Σ_iΣ_j [pij log_2(p(ai,bj))]
=-Σ_iΣ_j [p(ai∧bj) log_2(p(ai∧bj))]
=-Σ_iΣ_j [p(ai)p(bj|ai) log_2( p(ai)p(bj|ai) )]
=-Σ_iΣ_j [p(ai)p(bj|ai){log_2(p(ai))+log_2(p(bj|ai))}]
=-Σ_iΣ_j [p(ai)p(bj|ai)log_2(p(ai)]
-Σ_iΣ_j [p(ai)p(bj|ai)log_2(p(bj|ai)]
=-Σ_i{Σ_j p(bj|ai)}[p(ai)log_2(p(ai)]
-Σ_ip(ai)Σ_j [p(bj|ai)log_2(p(bj|ai)]
Σ_j p(bj|ai)}=1だから、
H(AB)=-Σ_i[p(ai)log_2(p(ai)]
-Σ_ip(ai)Σ_j [p(bj|ai)log_2(p(bj|ai)]
つまり、
H(AB)=H(A)+H(B|A)
同時エントロピーはH(A,B)と書くこともあります。
この式は、エントロピーの加法性とか、チェーンルールと呼ばれています。
<エントロピー不等式>
大小さいころの場合は、
H(AB)=-Σ(1/4log_2(1/4))=Σ1/4*2=2
H(A)=Σ1/2*1=1
H(B|A)=-Σ[1/2Σ(1/2log_2(1/2)]=Σ1/2Σ(1/2*1)=Σ1/2*(1)=1
公式どうりだね。2=1+1。
H(AB)=H(A)+H(B|A)
もとはと言えば
log_2( p(ai)p(bj|ai) =log_2(p(ai))+log_2(p(bj|ai)
aをA,bをBに読みかえると、
logの中の「条件付き確率の式」がlogの働きで「条件付きエントロピーへの分解式」に変わったのだ。
大小さいころの場合は、事象が独立しているため、
H(A)=H(B)=H(A|B)=H(B|A)=1
になっている。
独立でない場合はエントロピーを条件つきにすると小さくなる、不確実性がへる。
H(A|B)≦H(A), H(B|A)≦H(B)
となるでしょう。
これは、証明するまでもなく、
最初の天気予報などの例から明らかでしょう。
シャノンはここから、
H(AB)=H(A)+H(B|A)≦H(A)+H(B)
という不等式を見つけました。
4.エントロピーの減少分
<相互情報量>
「独立性のない2元事象系の結合系」でエントロピーの減少量を計算してみよう。
#たとえば、あなたが算数の先生だとします。
算数好きと好きでない子は半々です。
算数好きの4分の3は発言すること、
算数好きでない子は4分の1が発言することを事実とします。
A=算数好きか={{Y,N},{1/2,1/2}
B=発言するか={{Y,N},{1/2,1/2}
AB={{(Y,Y),(Y,N),(N,Y),(N,N)},{1/2*3/4,1/2*1/4,1/2*1/4,1/2*3/4}}
{1/2*3/4,1/2*1/4,1/2*1/4,1/2*3/4}={3/8,1/8,1/8,3/8}
p(算数好き∧発言)=p(発言)p(算数好き|発言)から、
p(算数好き|発言)=p(算数好き∧発言)/p(発言)=(3/8)/(1/2)=(3/8)*2=3/4と条件付き確率が計算できます。
同様にして、
p(算数好き|発言No)=p(算数好き∧発言No)/p(発言No)=(1/8)/(1/2)=1/4
p(算数好きNo|発言)=p(算数好きNo∧発言)/p(発言)=(1/8)/(1/2)=1/4
p(算数好きNo|発言No)=p(算数好きNo∧発言No)/p(発言No)=(3/8)/(1/2)=3/4
ですね。
ベイズの定理は、
「クラスの子が算数が好きかどうかは半々の確率です。
もし、発言してくれたらp(算数好き|発言する)=3/4と確率が更新される」という確率にフォーカスしたものでした。
エントロピーは系を俯瞰して変化をとらえます。
I (Y,Y)=-log_2(3/8)=-(log_2(3)-log_2(8))=log_2(8) - log_2(3)=3-log_2(3)
I (Y,N)=-log_2(1/8)=log_2(2^3)=3
だから、2元事象系の結合系のエントロピーは、
H(AB)=3/8(3-log_2(3))+1/8(3)+1/8(3)+3/8(3-log_2(3))となるね。
pythonで計算します。
[IN]
from math import log2
3/8*(3-log2(3))+1/8*3+1/8*3+3/8*(3-log2(3))
[OUT]
1.811278124459133
およそ1.811だ。
AもBも等確率に分岐し、どの確率も0.1(2)で小数第1位に1がたつので平均も1、
だから、平均情報量という意味を思い出すと、
エントロピーH(A)=H(B)=1ですね。
ということは、
H(A|B)=H(AB)-H(A)=1.811-1=0.811
発言という事象を前提にすることで、不確実性が1から0.811に下がったことがわかりますね。
エントロピーの現象は1-0.811=0.189だ。
この減少分を
相互情報量 I(A ; B)
と呼びましょう。
I(A ; B)=H(A)-H(A|B)
さっきの例だと、
発言系Bの情報によって、算数好き系Aの不確実さが減少したということだね。
つまり、
「事後エントロピーによる事前エントロピーの減少分=相互情報量」とい
うことだ。
独立な事象だと、エントロピーは変化しなかったので、相互情報量が0ということもあるでしょう。
だから、等号も意識することで、一般には
0≦I(A ; B)≦H(A)
となるでしょう。
<相互情報量の対称性>
I(A;B)の式を変形してみよう。
結合事象系で、片方の変数をすべてなめて合計すると他方の変数の確率になる。p(ai)=Σ_j p(ai∧bj)だ。
また、条件つき確率は、同時確率を条件の確率で割って求められる。p(ai | bj)=p(ai∧bj)/p(bj)
だから、I(A;B)=H(A)-H(A|B)
=-Σ_i {p(ai)} log_2(p(ai)) + Σ_iΣ_j p(ai∧bj) log_2(p(ai|bj)
=-Σ_i {Σ_j p(ai∧bj)} log_2(p(ai)) + Σ_iΣ_j p(ai∧bj) log_2(p(ai∧bj)/p(bj)
=Σ_i Σ_j p(ai∧bj) log_2(1/p(ai)) + Σ_iΣ_j p(ai∧bj) log_2(p(ai∧bj)/p(bj)
=Σ_i Σ_j p(ai∧bj) [ log_2(1/p(ai)) + log_2(p(ai∧bj)/p(bj) ]
=Σ_i Σ_j p(ai∧bj) [ log_2((p(ai∧bj)/ {p(ai)p(bj)} ]
美しいですね!ai,bjについて対称になりました。
だから、
I(A;B)=I(B;A)
が結論付けられます。
チェーンルールからH(AB)=H(A)+H(B|A)だから、-H(B|A)=H(A)-H(AB)
I(A;B)=H(B)-H(B|A)
=H(B)+[H(A)-H(AB)]
=H(A)+H(B)-H(AB)=I(B;A)
相互情報量は、それぞれのエントロピーの合計から同次エントロピーをひいたものになります。
言い換えると、
H(AB)=H(A)+H(B)-I(B;A)
です。
つまり、
H(A)=H(A|B)+I(A;B)
H(B)=H(B|A)+I(A;B)
とあわせて考えると、
エントロピーの関係がベン図で整理できますね。
H(A)とH(B)の重なりがI(A;B)で、
それぞれのはみ出しが、H(A|B),H(B|A)です。
そして、H(A)とH(B)の合併がH(AB)
同時エントロピーは論理的には∧なのに、量的には⋃になるのが面白いですね。
課題:geogebraで同時エントロピーと条件付きエントロピーと相互情報量と平均情報量の関係を視覚化しよう。
#タイトルは「エントロピーの視覚化」
B=(1,0)
A=(-1,0)
C=(0,2)
a:Circle(A,C) #見出しをH(A)
b:Circle(B,C) #見出しをH(B)
c: (x+1)^2+y^2<5 && (x-1)^2+y^2<5
#テキストを挿入
"H(AB)" #極大文字サイズでゴシックにして、図の上方におく
"I(A;B)" #大文字サイズでゴシックにして、cの中央におく
"H(A|B)" #大文字サイズでゴシックにして、aの中央におく
"H(B|A)" #大文字サイズでゴシックにして、bの中央におく