クロスエントロピー


自己情報:i(A)i(A)i(A)i(A)i(A)
AAA:イベント
i(A)=logb(1P(A))=−logbP(A)i(A) = log_b(\frac{1}{P(A)}) = -log_bP(A)i(A)=logb​(P(A)1​)=−logb​P(A)
とくせい
i(AB)=logb(1P(A)P(B))=logb(1P(A))+logb(1P(B))=i(A)+i(B)i(AB) = log_b(\frac{1}{P(A)P(B)}) = log_b(\frac{1}{P(A)})+log_b(\frac{1}{P(B)}) = i(A)+i(B)i(AB)=logb​(P(A)P(B)1​)=logb​(P(A)1​)+logb​(P(B)1​)=i(A)+i(B)
エントロピー
自己情報の平均値
H(X)=∑jP(Aj)i(Aj)=−∑jP(Aj)log2P(Aj)H(X) =\sum_jP(A_j)i(A_j) = -\sum_jP(A_j)log_2P(A_j)H(X)=∑j​P(Aj​)i(Aj​)=−∑j​P(Aj​)log2​P(Aj​)
とくせい
0≦H(X)≦log 2 K,K:0leq H(X)leq log 2 K,K:0≦H(X)≦log 2 K,K:イベント数
エントロピーの利用
-平均桁数を表す
-データ圧縮に使用可能
利用i(X)i(X)i(X)
X
P(X)
i(X)
code
A
1/2
1
0
B
1/4
2
10
C
1/8
3
110
D
1/8
3
111
平均桁数
1×12+2×14+3×18+3×18=148=741\times\frac{1}{2} + 2\times\frac{1}{4} + 3\times\frac{1}{8} + 3\times\frac{1}{8} =\frac{14}{8} =\frac{7}{4}1×21​+2×41​+3×81​+3×81=814=47ビット
確率分布PPPとQQ
S=AjS = {A_j}S=Aj​
P(Aj)P(A j)P(Aj):確率分布PPPにおけるイベントAjA jAjの発生確率
Q(Aj)Q(A j)Q(Aj):確率分布QにおけるイベントAjA jAjが発生する確率
i(Aj)i(A j)i(Aj):確率分布QQにおけるイベントAjA jAjの自己情報
-i(Aj)=−log2Q(Aj)i(A_j) = -log_2Q(A_j)i(Aj​)=−log2​Q(Aj​)
-磁気情報はAjA jAjのビット数を表す
-誤った確率分布QQを使用すると、実際の最適ビット数は無効になります.
H(P,Q)H(P,Q)H(P,Q)
集合SSS上の確率分布PPPの確率分布QQのクロスエントロピー
確率分布PPPにおけるi(Aj)i(A j)i(Aj)の平均値
H(P,Q)=∑jP(Aj)i(Aj)=−∑jP(Aj)log2Q(Aj)=−∑x∈XP(x)log2Q(x)H(P,Q) =\sum_jP(A_j)i(A_j) = -\sum_jP(A_j)log_2Q(A_j) = -\sum_{x\in X}P(x)log_2Q(x)H(P,Q)=∑j​P(Aj​)i(Aj​)=−∑j​P(Aj​)log2​Q(Aj​)=−∑x∈X​P(x)log2​Q(x)
この値は、正確な確率分布PPPを用いた場合のビット数よりも大きい
H(P,Q)=−∑x∈XP(x)log2Q(x)≥−∑jP(x)log2P(x)=H(P)H(P,Q) = -\sum_{x\in X}P(x)log_2Q(x)\geq -\sum_jP(x)log_2P(x) =H(P)H(P,Q)=−∑x∈X​P(x)log2​Q(x)≥−∑j​P(x)log2​P(x)=H(P)
そのため、この値はPPPとQQがどれだけ似ているかを示しています.
同じ場合、H(P,Q)=H(P)H(P,Q)=H(P,Q)=H(P,Q)=H(P,Q)=H(P)
異なる場合、H(P,Q)>H(P,Q)>H(P,Q)>H(P,Q)>H(P,Q)>H(P,Q)>H(P)
H(P,Q):H(P,Q):H(P,Q):
Q(X)Q(X)Q(X)Q(X)Q(X)を仮定し、コードを追加
X
P(X)
i(X)
Q(X)
i(X)
code
A
1/2
1
1/8
3
000
B
1/4
2
1/8
3
001
C
1/8
3
1/4
2
01
D
1/8
3
1/2
1
1
平均桁数
3×12+3×14+2×18+1×18=2183\times\frac{1}{2} +3\times\frac{1}{4} +2\times\frac{1}{8} +1\times\frac{1}{8} =\frac{21}{8}3×21​+3×41​+2×81​+1×81=821ビット
1.5倍のビット数が必要
分類問題における損失関数
分類問題
-与えられた対象がAAAであるか否かを判断する
-A、B、C、...A、B、C、dotsa、B、C、...
機械学習は、所与のオブジェクトが各グループに属する確率を提供する.
必要な答えP=[P 1,p 2,...,pn],p 1+p 2+⋯+pn=1 P=[p 1,p 2,dots,p n],p 1+p 2+dots+p n=1 P=[P 1,p 2,...,pn],p 1+p 2+⋯+pn=1
Q=[q 1,q 2,...,qn],q 1+q 2+引数+qn=1 Q=[q 1,q 2,dots,q n],q 1+q 2+q n=1 Q=[q 1,q 2,...,qn],q 1+q 2+q 2+引数+qn=1
PPPとQQの違いを測る必要があります
平方和
∑(pi−qi)2\sum(p_i-q_i)^2∑(pi​−qi​)2
確率が大きいほど値が大きくなります
でも勉強が遅い
クロスエントロピーH(P,Q):H(P,Q):H(P,Q):
確率が大きいほど値が大きくなります
学習速度が速い
分類問題では主にクロスエントロピーを用いる
S=A,BS = {A,B}S=A,B
実際の状況.
P=[1,0]P = [1,0]P=[1,0]
→P(A)=1,P(B)=0\to P(A) = 1, P(B) = 0→P(A)=1,P(B)=0
予測Q(X)Q(X)Q(X)Q(X)Q(X)
[0.8,0.2]:Q(A)=0.8,Q(B)=0.2[0.8, 0.2]: Q(A) = 0.8, Q(B) = 0.2[0.8,0.2]:Q(A)=0.8,Q(B)=0.2
H(P,Q)=−∑x∈XP(x)log2Q(x)=−1×log20.8=0.3219H(P,Q) = -\sum_{x\in X}P(x)log_2Q(x) = -1\times log_20.8 = 0.3219H(P,Q)=−∑x∈X​P(x)log2​Q(x)=−1×log2​0.8=0.3219
[0.5,0.5]:Q(A)=0.5,Q(B)=0.5[0.5, 0.5]: Q(A) = 0.5, Q(B) = 0.5[0.5,0.5]:Q(A)=0.5,Q(B)=0.5
H(P,Q)=−∑x∈XP(x)log2Q(x)=−1×log20.5=1H(P,Q) = -\sum_{x\in X}P(x)log_2Q(x) = -1\times log_20.5 = 1H(P,Q)=−∑x∈X​P(x)log2​Q(x)=−1×log2​0.5=1
[0.2,0.8]:Q(A)=0.2,Q(B)=0.8[0.2, 0.8]: Q(A) = 0.2, Q(B) = 0.8[0.2,0.8]:Q(A)=0.2,Q(B)=0.8
H(P,Q)=−∑x∈XP(x)log2Q(x)=−1×log20.2=2.32H(P,Q) = -\sum_{x\in X}P(x)log_2Q(x) = -1\times log_20.2 = 2.32H(P,Q)=−∑x∈X​P(x)log2​Q(x)=−1×log2​0.2=2.32
import numpy as np
def crossentropy(P, Q):
  return sum([-P[i]*np.log2(Q[i]) for i in range(len(P))])
P = [1, 0, 0, 0]
Q = [0.7, 0.1, 0.1, 0.1]
print(crossentropy(P,Q))