热力学中的熵:
信息论中的熵:
我们知道信息被用来消除事物的随机不确定性。
那么,首先我们需要确定信源信息的不确定性该如何衡量。
信源信息的不确定性函数 f ( p ) 常满足两个条件:
对数函数同时满足这两个条件(其中的两个等号):
f ( p ) = l o g 1 p = − l o g p f(p) = log^\frac1p= -log^p f(p)=logp1=−logp
香农信息熵:要考虑信源所有可能发生情况的平均不确定性。若信源符号有n种取值:U1,…,Ui,…,Un,即信源可能呈现出的状态值,对应概率为P1,…,Pi,…,Pn,且各种出现彼此独立。此时信源的平均不确定性应当为单个符号不确定性-logpi的统计平均值(E),称为信息熵。
即
H ( U ) = E [ − l o g p i ] = ∑ i = 1 n p i l o g ( 1 p i ) H(U) = E[-log^{p_i}] = \sum_{i=1}^{n}p_ilog(\frac{1}{p_i}) H(U)=E[−logpi]=i=1∑npilog(pi1)
交叉熵定义:
交叉熵公式:
H ( P , Q ) = − ∑ x ∈ X p ( x ) l o g Q ( x ) = ∑ x ∈ X p ( x ) l o g 1 Q ( x ) H(P,Q)=-\sum_{x \in X}^{}p(x)log{Q(x)}=\sum_{x \in X}^{}p(x)log\frac{1}{Q(x)} H(P,Q)=−x∈X∑p(x)logQ(x)=x∈X∑p(x)logQ(x)1
交叉熵在深度学习中的应用十分广泛,一般作为神经网络的损失函数,用来衡量模型预测的分布与真实分布间的差异。
也称为KL散度(Kullback-Leibler divergence,简称KLD),信息散度(information divergence),信息增益(information gain)。
相对熵的定义:
计算公式为:
D K L ( P ∣ ∣ Q ) = ∑ x ∈ X p ( x ) l o g 1 Q ( x ) − ∑ x ∈ X P ( x ) l o g 1 P ( x ) = ∑ x ∈ X P ( x ) l o g P ( x ) Q ( x ) D_{KL}(P||Q)=\sum_{x \in X}^{}p(x)log\frac{1}{Q(x)}-\sum_{x \in X}^{}P(x)log\frac{1}{P(x)}=\sum_{x \in X}^{}P(x)log\frac{P(x)}{Q(x)} DKL(P∣∣Q)=x∈X∑p(x)logQ(x)1−x∈X∑P(x)logP(x)1=x∈X∑P(x)logQ(x)P(x)
相对熵举例:
假设某字符发射器随机发出0和1的两种字符,且其真实发出概率分布为A。现在有两人的观察概率分布B与C。各个分布如下:
问:B和C哪个更接近实际分布A?
答:
那么我们可以使用相对熵来衡量分布之间的相似(接近)
D K L ( A ∣ ∣ B ) = ∑ x ∈ X A ( x ) l o g A ( x ) B ( x ) = A ( 0 ) l o g A ( 0 ) B ( 0 ) + A ( 1 ) l o g A ( 1 ) B ( 1 ) D K L ( A ∣ ∣ C ) = ∑ x ∈ X A ( x ) l o g A ( x ) C ( x ) = A ( 0 ) l o g A ( 0 ) C ( 0 ) + A ( 1 ) l o g A ( 1 ) C ( 1 ) D_{KL}(A||B)=\sum_{x \in X}^{}A(x)log\frac{A(x)}{B(x)}=A(0)log\frac{A(0)}{B(0)}+A(1)log\frac{A(1)}{B(1)} \\ D_{KL}(A||C)=\sum_{x\in X}^{}A(x)log\frac{A(x)}{C(x)}=A(0)log\frac{A(0)}{C(0)}+A(1)log\frac{A(1)}{C(1)} DKL(A∣∣B)=x∈X∑A(x)logB(x)A(x)=A(0)logB(0)A(0)+A(1)logB(1)A(1)DKL(A∣∣C)=x∈X∑A(x)logC(x)A(x)=A(0)logC(0)A(0)+A(1)logC(1)A(1)
计算结果为:
D K L ( A ∣ ∣ B ) = 1 2 l o g 1 2 1 4 + 1 2 l o g 1 2 3 4 D K L ( A ∣ ∣ C ) = 1 2 l o g 1 2 1 8 + 1 2 l o g 1 2 7 8 D_{KL}(A||B)=\frac{1}{2}log\frac{\frac{1}{2}}{\frac{1}{4}}+\frac{1}{2}log\frac{\frac{1}{2}}{\frac{3}{4}} \\ D_{KL}(A||C)=\frac{1}{2}log\frac{\frac{1}{2}}{\frac{1}{8}}+\frac{1}{2}log\frac{\frac{1}{2}}{\frac{7}{8}} DKL(A∣∣B)=21log4121+21log4321DKL(A∣∣C)=21log8121+21log8721
得出结论:相比C而言,B更接近于A。
相对熵的性质:
D K L ( A ∣ ∣ B ) ≠ D K L ( B ∣ ∣ A ) D_{KL}(A||B)\neq D_{KL}(B||A) DKL(A∣∣B)=DKL(B∣∣A)
D K L ( B ∣ ∣ A ) > 0 D_{KL}(B||A) > 0 DKL(B∣∣A)>0
部分人称呼相对熵(KL散度)为KL距离,但实际上它并不能真正地度量距离。
J S ( P 1 ∣ ∣ P 2 ) = 1 2 K L ( P 1 ∣ ∣ P 1 + P 2 2 ) + 1 2 K L ( P 2 ∣ ∣ P 1 + P 2 2 ) JS(P_1||P_2) = \frac{1}{2} KL(P_1||\frac{P_1+P_2}{2}) + \frac{1}{2} KL(P_2||\frac{P_1+P_2}{2}) JS(P1∣∣P2)=21KL(P1∣∣2P1+P2)+21KL(P2∣∣2P1+P2)
联合熵也称之为复合熵(Joint Entropy):
用H(X,Y)表示,两个随机变量X,Y的联合分布的熵,形成联合熵。
条件熵: H(X|Y)表示在已知随机变量Y的条件下随机变量x的不确定性。
H(X|Y) = H(X,Y) - H(Y),表示(X, Y)的联合熵,减去Y单独发生包含的熵。
推导过程:
H ( x ∣ y j ) = − ∑ i = 1 n p ( x i ∣ y i ) l o g p ( x i ∣ y j ) H(x|y_j) = - \sum_{i=1}^{n}p(x_i|y_i)logp(x_i|y_j) H(x∣yj)=−i=1∑np(xi∣yi)logp(xi∣yj)
H ( x ∣ y ) = − ∑ i = 1 n ∑ j = 1 m p ( y j ) p ( x i ∣ y j ) l o g p ( x i ∣ y j ) H ( x ∣ y ) = − ∑ i = 1 n ∑ j = 1 m p ( x i , y j ) l o g p ( x i , y j ) p ( y j ) H ( x ∣ y ) = H ( x , y ) − H ( y ) H(x|y) = - \sum_{i=1}^{n}\sum_{j=1}^{m}p(y_j)p(x_i|y_j)logp(x_i|y_j) \\ H(x|y) = - \sum_{i=1}^{n}\sum_{j=1}^{m}p(x_i,y_j)log\frac{p(x_i,y_j)}{p(y_j)} \\ H(x|y) = H(x,y) - H(y) H(x∣y)=−i=1∑nj=1∑mp(yj)p(xi∣yj)logp(xi∣yj)H(x∣y)=−i=1∑nj=1∑mp(xi,yj)logp(yj)p(xi,yj)H(x∣y)=H(x,y)−H(y)
推导过程:
I ( X ; Y ) = H ( X ) − H ( X ∣ Y ) I ( X ; Y ) = H ( X ) + H ( Y ) − H ( X , Y ) I ( X ; Y ) = ∑ x p ( x ) l o g 1 p ( x ) + ∑ y p ( y ) l o g 1 p ( y ) − ∑ x , y p ( x , y ) l o g 1 p ( x , y ) I (X;Y) = H(X) - H(X|Y) \\ I (X;Y)=H(X)+H(Y)-H(X,Y) \\ I (X;Y)=\sum_{x}^{}p(x)log\frac {1}{p(x)} + \sum_{y}^{}p(y)log\frac{1}{p(y)} - \sum_{x,y}^{}p(x,y)log\frac{1}{p(x,y)} I(X;Y)=H(X)−H(X∣Y)I(X;Y)=H(X)+H(Y)−H(X,Y)I(X;Y)=x∑p(x)logp(x)1+y∑p(y)logp(y)1−x,y∑p(x,y)logp(x,y)1
结论:
I ( X ; Y ) = ∑ x , y p ( x , y ) l o g p ( x , y ) p ( x ) p ( y ) I (X;Y)=\sum_{x,y}^{}p(x,y)log\frac{p(x,y)}{p(x)p(y)} I(X;Y)=x,y∑p(x,y)logp(x)p(y)p(x,y)
即互信息I(X,Y)是联合分布p(x,y)与乘积分布p(x)p(y)的相对熵
文氏图图解:
# -*- coding: utf-8 -*-
#演示内容:香农信息熵的计算(例1和例2分别为两种不同类型的输入)以及互信息的计算(例3)。其中log默认为自然对数。
import numpy as np
from math import log
#例1: 计算香农信息熵(已知概率分布)
print("例1:")
def calc_ent(x):
ent = 0.0
for p in x:
ent -= p * np.log(p)
return ent
x1=np.array([0.4, 0.2, 0.2, 0.2])
x2=np.array([1])
x3=np.array([0.2, 0.2, 0.2, 0.2, 0.2])
print ("x1的信息熵:", calc_ent(x1))
print ("x2的信息熵:", calc_ent(x2))
print ("x3的信息熵:", calc_ent(x3))
print("")
#例2: 计算香农信息熵(此时给定了信号发生情况)
print("例2:")
def calcShannonEnt(dataSet):
length,dataDict=float(len(dataSet)),{}
for data in dataSet:
try:dataDict[data]+=1
except:dataDict[data]=1
return sum([-d/length*log(d/length) for d in list(dataDict.values())])
print("x1的信息熵:", calcShannonEnt(['A','B','C','D','A']))
print("x2的信息熵:",calcShannonEnt(['A','A','A','A','A']))
print("x3的信息熵:",calcShannonEnt(['A','B','C','D','E']))
#例3: 计算互信息(输入:给定的信号发生情况,其中联合分布已经手工给出)
print("")
print("例3:")
Ent_x4=calcShannonEnt(['3', '4', '5', '5', '3', '2', '2', '6', '6', '1'])
Ent_x5=calcShannonEnt(['7', '2', '1', '3', '2', '8', '9', '1', '2', '0'])
Ent_x4x5=calcShannonEnt(['37', '42', '51', '53', '32', '28', '29', '61', '62', '10', '37', '42'])
MI_x4_x5=Ent_x4+Ent_x5-Ent_x4x5
print ("x4和x5之间的互信息:",MI_x4_x5)