机器学习中的熵的理解
熵的概念最早起源于物理学,用于度量一个热力学系统的无序程度,在信息论里,熵是相对不确定的测量,熵越高,则能传输的信息就越多,熵越低,则能传递的信息就越低。
信息熵
熵 (entropy) 这一词最初来源于热力学。1948年,克劳德·爱尔伍德·香农将热力学中的熵引入信息论,所以也被称为香农熵 (Shannon entropy),信息熵 (information entropy)。本文只讨论信息熵。首先,我们先来理解一下信息这个概念。信息是一个很抽象的概念,百度百科将它定义为:指音讯、消息、通讯系统传输和处理的对象,泛指人类社会传播的一切内容。那信息可以被量化么?可以的!香农提出的“信息熵”概念解决了这一问题。
一条信息的信息量大小和它的不确定性有直接的关系。我们需要搞清楚一件非常非常不确定的事,或者是我们一无所知的事,就需要了解大量的信息。相反,如果我们对某件事已经有了较多的了解,我们就不需要太多的信息就能把它搞清楚。所以,从这个角度,我们可以认为,信息量的度量就等于不确定性的多少。比如,有人说广东下雪了。对于这句话,我们是十分不确定的。因为广东几十年来下雪的次数寥寥无几。为了搞清楚,我们就要去看天气预报,新闻,询问在广东的朋友,而这就需要大量的信息,信息熵很高。再比如,中国男足进军2022年卡塔尔世界杯决赛圈。对于这句话,因为确定性很高,几乎不需要引入信息,信息熵很低。
考虑一个离散的随机变量 x x x,由上面两个例子可知,信息的量度应该依赖于概率分布 p ( x ) p(x) p(x),因此我们想要寻找一个函数 I ( x ) I(x) I(x),它是概率 p ( x ) p(x) p(x)的单调函数,表达了信息的内容。怎么寻找呢?如果我们有两个不相关的事件 x x x和 y y y,那么观察两个事件同时发生时获得的信息量应该等于观察到事件各自发生时获得的信息之和,即: I ( x , y ) = I ( x ) + I ( y ) I(x,y)=I(x)+I(y) I(x,y)=I(x)+I(y)。
因为两个事件是独立不相关的,因此 p ( x , y ) = p ( x ) p ( y ) p(x,y)=p(x)p(y) p(x,y)=p(x)p(y)。根据这两个关系,很容易看出 I ( x ) I(x) I(x)一定与 p ( x ) p(x) p(x)的对数有关 (因为对数的运算法则是 l o g a ( m n ) = l o g a m + l o g a m log_a^{(mn)}=log_a^m+log_a^m loga(mn)=logam+logam。因此,我们有
I ( x ) = − l o g p ( x ) I(x)=-logp(x) I(x)=−logp(x)
其中负号是用来保证信息量是正数或者零。而 l o g log log 函数基的选择是任意的(信息论中基常常选择为2,因此信息的单位为比特bits;而机器学习中基常常选择为自然常数,因此单位常常被称为奈特nats)。 I ( x ) I(x) I(x)也被称为随机变量 x x x的自信息 (self-information),描述的是随机变量的某个事件发生所带来的信息量
最后,我们正式引出信息熵。 现在假设一个发送者想传送一个随机变量的值给接收者。那么在这个过程中,他们传输的平均信息量可以通过求 I ( x ) = − l o g p ( x ) I(x)=-logp(x) I(x)=−logp(x)关于概率分布 p ( x ) p(x) p(x)的期望得到,即:
H ( X ) = − ∑ x p ( x ) l o g p ( x ) = − ∑ i = 1 n p ( x i ) l o g p ( x i ) H(X)=-\sum_{x}p(x)logp(x)=-\sum_{i=1}^np(x_i)logp(x_i) H(X)=−∑xp(x)logp(x)=−∑i=1np(xi)logp(xi)
H ( X ) H(X) H(X)就被称为随机变量 x x x的熵,它是表示随机变量不确定的度量,是对所有可能发生的事件产生的信息量的期望。
从公式可得,随机变量的取值个数越多,状态数也就越多,信息熵就越大,混乱程度就越大。当随机分布为均匀分布时,熵最大,且 0 < = H ( x ) < = l o g n 0<=H(x)<=logn 0<=H(x)<=logn。
条件熵
定义:X给定条件下,Y的条件概率分布的熵对X的数学期望
公式为:
H
(
Y
∣
X
)
=
∑
x
p
(
x
)
H
(
Y
∣
X
=
x
)
=
−
∑
x
p
(
x
)
∑
y
p
(
y
∣
x
)
log
p
(
y
∣
x
)
=
−
∑
x
∑
y
p
(
x
,
y
)
log
p
(
y
∣
x
)
=
−
∑
x
,
y
p
(
x
,
y
)
log
p
(
y
∣
x
)
\begin{aligned} H ( Y | X ) & = \sum _ { x } p ( x ) H ( Y | X = x ) \\ & = - \sum _ { x } p ( x ) \sum _ { y } p ( y | x ) \log p ( y | x ) \\ & = - \sum _ { x } \sum _ { y } p ( x , y ) \log p ( y | x ) \\ & = - \sum _ { x , y } p ( x , y ) \log p ( y | x ) \end{aligned}
H(Y∣X)=x∑p(x)H(Y∣X=x)=−x∑p(x)y∑p(y∣x)logp(y∣x)=−x∑y∑p(x,y)logp(y∣x)=−x,y∑p(x,y)logp(y∣x)
条件熵
H
(
Y
∣
X
)
H(Y|X)
H(Y∣X) 相当于联合熵
H
(
X
,
Y
)
H(X,Y)
H(X,Y) 减去单独的熵
H
(
X
)
H(X)
H(X),即:
H
(
Y
∣
X
)
=
H
(
X
,
Y
)
−
H
(
X
)
H ( Y | X ) = H ( X , Y ) - H ( X )
H(Y∣X)=H(X,Y)−H(X)
举个例子,比如环境温度是低还是高,和我穿短袖还是外套这两个事件可以组成联合概率分布
H
(
X
,
Y
)
H(X,Y)
H(X,Y),因为两个事件加起来的信息量肯定是大于单一事件的信息量的。假设
H
(
X
)
H(X)
H(X)对应着今天环境温度的信息量,由于今天环境温度和今天我穿什么衣服这两个事件并不是独立分布的,所以在已知今天环境温度的情况下,我穿什么衣服的信息量或者说不确定性是被减少了。当已知
H
(
X
)
H(X)
H(X) 这个信息量的时候,
H
(
X
,
Y
)
H(X,Y)
H(X,Y)剩下的信息量就是条件熵:
H
(
Y
∣
X
)
=
H
(
X
,
Y
)
−
H
(
X
)
H ( Y | X ) = H ( X , Y ) - H ( X )
H(Y∣X)=H(X,Y)−H(X)
可参考链接例子理解条件熵
交叉熵
交叉熵,其用来衡量在给定的真实分布下,使用非真实分布所指定的策略消除系统的不确定性所需要付出的努力的大小。
公式为:
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
H ( p , q ) = - \sum _ { x } p ( x ) \log q ( x )
H(p,q)=−x∑p(x)logq(x)
其中
p
(
x
)
p(x)
p(x)表示真实样本的分布,
q
(
x
)
q(x)
q(x)表示预测模型的分布;
使用上面的交叉熵公式减去真实样本的熵
H
(
p
)
H(p)
H(p)(训练样本固定,该值固定) ,可得如下公式:
H
(
p
,
q
)
−
H
(
p
)
=
−
∑
p
(
x
)
log
q
(
x
)
+
∑
p
(
x
)
log
p
(
x
)
=
−
∑
p
(
x
)
(
log
q
(
x
)
−
p
(
x
)
)
=
−
∑
p
(
x
)
l
o
g
q
(
x
)
p
(
x
)
H ( p , q ) - H ( p ) = - \sum p ( x ) \log q ( x ) + \sum p ( x ) \log p ( x ) =-\sum p(x)(\log q(x)-p(x)) = -\sum p(x) log \frac{q(x)}{p(x)}
H(p,q)−H(p)=−∑p(x)logq(x)+∑p(x)logp(x)=−∑p(x)(logq(x)−p(x))=−∑p(x)logp(x)q(x)
上面的公式就是KL散度公式,用于判断两个分布的差异程度,因此可以使用交叉熵作为损失函数,通过减少交叉熵来达到模型的输出的分布尽量与训练样本的分布一致。
softmax 作为多分类的归一化处理函数,交叉熵为:
H
(
p
,
q
)
=
−
∑
x
p
(
x
)
log
q
(
x
)
H ( p , q ) = - \sum _ { x } p ( x ) \log q ( x )
H(p,q)=−x∑p(x)logq(x)
sigmoid作为二分类的归一化处理函数,交叉熵为:
H
(
p
,
q
)
=
−
∑
x
(
p
(
x
)
log
q
(
x
)
+
(
1
−
p
(
x
)
)
log
(
1
−
q
(
x
)
)
)
H ( p , q ) = - \sum _ { x } ( p ( x ) \log q ( x ) + ( 1 - p ( x ) ) \log ( 1 - q ( x ) ) )
H(p,q)=−x∑(p(x)logq(x)+(1−p(x))log(1−q(x)))
可参考一个例子读懂深度学习中的交叉熵 比较形象的例子介绍交叉熵。
相对熵(KL散度 Kullback–Leibler divergence)
又称KL距离,KL散度是描述两个概率分布P和Q之间差异的一种方法。直观地说,可以用来衡量给定任意分布偏离真实分布的程度,如果两个分布完全匹配,那么KL(p||q)=0,否则它的取值应该是0~∞(inf)之间。KL散度越小,真实分布与近视分布之间的匹配程度就越好。
KL散度的计算公式:
离散概率分布的KL散度计算公式:
K
L
(
p
∥
q
)
=
∑
p
(
x
)
log
p
(
x
)
q
(
x
)
K L ( p \| q ) = \sum p ( x ) \log \frac { p ( x ) } { q ( x ) }
KL(p∥q)=∑p(x)logq(x)p(x)
连续概率分布的KL散度计算公式:
K
L
(
p
∥
q
)
=
∫
p
(
x
)
log
p
(
x
)
q
(
x
)
d
x
K L ( p \| q ) = \int p ( x ) \log \frac { p ( x ) } { q ( x ) } d x
KL(p∥q)=∫p(x)logq(x)p(x)dx
KL散度的基本性质:
1.非负性
2.不对称性
直观的理解KL散度,可参考初学机器学习:直观解读KL散度的数学概念
JS散度
KL散度的缺点是它不是距离、不对称。因此引进JS散度的概念。JS散度的定义如下:
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
)
J S \left( P _ { 1 } \| P _ { 2 } \right) = \frac { 1 } { 2 } K L \left( P _ { 1 } \| \frac { P _ { 1 } + P _ { 2 } } { 2 } \right) + \frac { 1 } { 2 } K L \left( P _ { 2 } \| \frac { P _ { 1 } + P _ { 2 } } { 2 } \right)
JS(P1∥P2)=21KL(P1∥2P1+P2)+21KL(P2∥2P1+P2)
由定义可以看出,JS散度是对称的,可以用于衡量两种不同分布之间的差异。JS散度用于生成对抗网络的数学推导上。
与KL的主要不同:
值域范围:
JS散度的值域范围是[0,1],相同为0,相反则为1。相比较于KL,对相似度的判别更准确了。
对称性
即 J S ( p ∥ q ) = J S ( q ∥ p ) J S ( p \| q ) = J S ( q \| p ) JS(p∥q)=JS(q∥p),而对称能让散度度量更准确。
KL散度和JS散度度量的时候有一个问题:
如果两个分配P,Q离得很远,完全没有重叠的时候,那么KL散度值是没有意义的,而JS散度值是一个常数。这在学习算法中是比较致命的,这就意味这这一点的梯度为0。梯度消失了。
参考:
1.https://blog.csdn.net/qq_29053993/article/details/83313866