熵的定义
熵的定义式为:
H
(
X
)
=
−
∑
x
∈
X
P
(
x
)
log
P
(
x
)
H(X) = -\sum_{x\in X} P(x) \log P(x)
H(X)=−x∈X∑P(x)logP(x)
单位为比特。
公式可写为 H ( X ) = E ( log 1 P ( x ) ) H(X)=E(\log \frac {1} {P(x)}) H(X)=E(logP(x)1)。
在信息论中, log 1 P ( x ) \log \frac{1}{P(x)} logP(x)1称为信息量,或者叫自信息,其代表一个事件所能够提供信息的多少。其是基于这样的想法进行信息量化的,一个不太可能发生的事件发生了,要比一个非常可能发生的事件提供更多的信息(概率小,log值高)。然而一个随机变量有多个取值, log 1 P ( x ) \log \frac{1}{P(x)} logP(x)1的期望就表示了这个随机变量所有取值提供信息的期望,也就是熵。
从公式意义上来说,信息熵代表的是随机变量或整个系统的不确定性,熵越大,随机变量或系统的不确定性就越大。
下面我来证明当所有取值的概率相同时,熵最大。
首先假设变量X只有两个取值,概率分别为 p 1 p_1 p1, p 2 p_2 p2。
H ( X ) = p 1 log p 1 + ( 1 − p 1 ) log ( 1 − p 1 ) H(X)=p_1 \log p_1 + (1-p_1) \log (1 - p_1) H(X)=p1logp1+(1−p1)log(1−p1)
d H d p 1 = log ( p 1 1 − p 1 ) \frac{\mathrm{d} H}{\mathrm{d} p_1 } = \log (\frac{p_1}{1-p_1}) dp1dH=log(1−p1p1)
另上式等于0, p 1 p_1 p1为0.5。
将情况扩展至多个取值的情况,我们可以这样操作,每次取出不同概率的两个取值。这两个取值的加和固定,由上面这种情况可知,当两个取值的概率相等时,熵最大。所以我们将这两个取值的概率置为相等,熵就会增加。多次执行此操作,直到所有概率值都相等,此时熵最大,证毕。
当所有取值的概率相等时,也就是不确定性最大的情况,此时熵最大,印证了我上面那个观点。
条件熵
公式定义如下:
H
(
X
∣
Y
)
=
−
∑
x
∈
X
,
y
∈
Y
P
(
x
,
y
)
log
P
(
x
∣
y
)
H(X|Y)=-\sum_{x\in X, y\in Y} P(x,y)\log P(x|y)
H(X∣Y)=−x∈X,y∈Y∑P(x,y)logP(x∣y)
公式意义:在了解Y的条件下,关于X的不确定性。
有如下关系: H ( X ) ≥ H ( X ∣ Y ) ≥ H ( X ∣ Y , Z ) H(X)\geq H(X|Y) \geq H(X|Y,Z) H(X)≥H(X∣Y)≥H(X∣Y,Z),即提前知道的变量越多,熵就越小。等号成立的条件是变量之间毫无关系。
互信息
互信息是用来度量两个随机事件“相关性”的量化度量。假定有两个随机事件X和Y,它们的互信息定义如下:
I
(
X
;
Y
)
=
∑
x
∈
X
,
y
∈
Y
P
(
x
,
y
)
log
P
(
x
,
y
)
P
(
x
)
P
(
y
)
I(X;Y)=\sum_{x\in X,y\in Y} P(x, y)\log \frac{P(x,y)}{P(x)P(y)}
I(X;Y)=x∈X,y∈Y∑P(x,y)logP(x)P(y)P(x,y)
容易推导得:
I
(
X
;
Y
)
=
H
(
X
)
−
H
(
X
∣
Y
)
I(X;Y) = H(X) - H(X|Y)
I(X;Y)=H(X)−H(X∣Y)。
所谓两个事件相关性的量化度量,就是在了解了其中一个Y的情况下,对消除另一个X不确定性所提供的信息量。
互信息的范围是 [ 0 , m i n ( H ( X ) , H ( Y ) ) ] [0,\ min(H(X),H(Y))] [0, min(H(X),H(Y))]。
相对熵(KL散度)
公式为:(f(x),g(x)表示概率分布)
K
L
(
f
(
x
)
∣
∣
g
(
x
)
)
=
∑
x
∈
X
f
(
x
)
log
f
(
x
)
g
(
x
)
KL(f(x)||g(x))=\sum_{x\in X} f(x) \log \frac {f(x)} {g(x)}
KL(f(x)∣∣g(x))=x∈X∑f(x)logg(x)f(x)
在机器学习中,f 往往用来表示样本的真实分布,g 用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss损失值。
从KL散度公式中可以看到 f 的分布越接近 g( f 分布越拟合 g),那么散度值越小,即损失值越小。
关于相对熵,有不等式 K L ( f ( x ) ∣ ∣ g ( x ) ) ≥ 0 KL(f(x)||g(x)) \geq 0 KL(f(x)∣∣g(x))≥0成立。证明如下:
以下推导基于Jensen 不等式,不了解的可以搜索一下。
− K L = ∑ x ∈ X f ( x ) log g ( x ) f ( x ) ≤ log ∑ x ∈ X f ( x ) g ( x ) f ( x ) = log ∑ x ∈ X g ( x ) = 0 -KL = \sum_{x\in X} f(x) \log \frac {g(x)} {f(x)} \\ \leq \log \sum_{x\in X} f(x) \frac{g(x)} {f(x)} \\ = \log \sum_{x\in X} g(x) \\ = 0 −KL=x∈X∑f(x)logf(x)g(x)≤logx∈X∑f(x)f(x)g(x)=logx∈X∑g(x)=0
因此 K L ≥ 0 KL\geq 0 KL≥0成立。
有如下三条结论:
- 对于两个完全相同的函数,它们的相对熵等于零。
- 相对熵越大,两个函数差异越大;反之,相对熵越小,两个函数差异越小。
- 对于概率分布或概率密度函数,如果取值均大于零,相对熵可以度量两个随机分布的差异性。
交叉熵
公式为:
H
(
f
(
x
)
,
g
(
x
)
)
=
−
∑
x
∈
X
f
(
x
)
log
g
(
x
)
H(f(x),g(x)) = -\sum_{x\in X} f(x)\log g(x)
H(f(x),g(x))=−x∈X∑f(x)logg(x)
容易推导得到:
K
L
(
f
(
x
)
∣
∣
g
(
x
)
)
=
−
H
(
f
(
x
)
)
+
H
(
f
(
x
)
,
g
(
x
)
)
KL(f(x)||g(x)) = -H(f(x)) + H(f(x),g(x))
KL(f(x)∣∣g(x))=−H(f(x))+H(f(x),g(x))。
第一部分是 f ( x ) f(x) f(x)的熵,第二部分是两个分布的相对熵。在机器学习中,我们需要评估 labels 和 predictions 之间的差距,由于KL散度中的前一部分 − H ( f ( x ) ) −H(f(x)) −H(f(x))不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做Loss,评估模型。
机器学习中, f ( x ) f(x) f(x)一般是类别标签,而 g ( x ) g(x) g(x)一般是预测概率,所以 f ( x ) f(x) f(x)的熵不会变化。因此交叉熵随着两者的相对熵变化而变化。即交叉熵越大,两个函数差异越大;反之,交叉熵越小,两个函数差异越小。
由于 K L ≥ 0 KL \geq 0 KL≥0,所以交叉熵 ≥ \geq ≥熵,当 f ( x ) f(x) f(x)与 g ( x ) g(x) g(x)分布相同时,交叉熵最小。