一文带你搞懂熵、交叉、KL散度
第一次接触熵,似乎是在高中和大学化学,第二次接触熵,就在机器学习与深度学习中的交叉熵,用的很多,但交叉熵到底是怎么来的?让我们知其所以然。
熵
熵是用来描述不确定性的,熵越高,表示随机变量的不确定性越大,因为每个事件发生的概率更加均匀。熵越低,表示随机变量的不确定性越小,因为某些事件的概率更高,我们更容易预测随机变量的取值。
对于一件事情 X = 0 X=0 X=0, X = 0 X=0 X=0它发生的概率越高, X = 0 X=0 X=0不确定性就越低,描述 X = 0 X=0 X=0的不确定性,我们可以用它的负对数来表示,记为自信息|(x), P ( X = 0 ) P(X=0) P(X=0)越高,自信息越高,说明不确定性越高,P越低自信息越低,说明不确定性越小。
那么对于一个 0 − 1 0-1 0−1分布, X = 1 X=1 X=1发生的概率为 P ( X = 1 ) P(X=1) P(X=1),那么就可以计算自信息 I ( X = 1 ) I(X=1) I(X=1),同理 X = 0 X=0 X=0发生的概率为 P ( X = 1 ) P(X=1) P(X=1),那么就可以计算自信息 I ( X = 0 ) I(X=0) I(X=0),那么对于 X X X的信息量如何描述呢,我们把 I ( X = 1 ) I(X=1) I(X=1)和 I ( X = 0 ) I(X=0) I(X=0)做一个平均就好了,相当于信息期望。
对于0-1分布如此,对于任意一个分布就是: ∑ i = 1 n p i ⋅ l o g ( 1 p i ) \sum_{i=1}^np_i\cdot log(\frac1{p_i}) ∑i=1npi⋅log(pi1)(一样的,求信息期望嘛)
熵编码
从熵编码的角度来讲,更容易解释交叉熵
如果我们考虑一串由相互独立的事件组成的信息流,每个事件 x i x_i xi都有相应的概率 P ( x i ) P(x_i) P(xi)。
为了编码这些事件,就是说我们要为每个事件分配一个编码,而且要使得平均编码长度最小化,怎么做呢?
做法就是发生概率越大的事件,用最短的编码来表示,就更可能达到这个编码最短的目的。
对于一个发生概率为 P ( x i ) P(x_i) P(xi)的事件,当对它的编码长度为 − log 2 p ( x i ) -\log_2p(x_i) −log2p(xi) 时,我们实际上达到了这个下界(证明就不管啦~),这个时候,总编码就是最短编码,熵就是编码长度的期望,就被称为最短编码(最优编码)。
简单来说,为了编码这些事件,我们希望为每个事件分配一个编码,使得平均编码长度最小化。信息熵$H(X) $表示了这个平均编码长度的下界,即:
H
(
X
)
≤
∑
i
p
(
x
i
)
⋅
编码长度
(
x
i
)
H(X)\leq\sum_ip(x_i)\cdot\text{编码长度}(x_i)
H(X)≤i∑p(xi)⋅编码长度(xi)
当我们选择编码长度为
−
log
2
p
(
x
i
)
-\log_2p(x_i)
−log2p(xi)时,我们实际上达到了这个下界。
H
(
X
)
=
∑
i
p
(
x
i
)
⋅
(
−
log
2
p
(
x
i
)
)
H(X)=\sum_ip(x_i)\cdot(-\log_2p(x_i))
H(X)=i∑p(xi)⋅(−log2p(xi))
这个表达式在信息论中被称为香农熵,它确保了在给定概率分布的情况下,平均编码长度是最短的。
掌握交叉熵的意义以及在分类任务中的计算
熵是什么 从编码的角度看——熵是最优编码长度,最省事的编码长度
交叉熵,很明显编码长度不是
−
log
2
p
(
x
i
)
-\log_2p(x_i)
−log2p(xi),所以期望编码长度就不是最优最短的,交叉熵
H
(
p
,
q
)
H\left(p,q\right)
H(p,q)就会比上面说的熵
H
(
X
)
H(X)
H(X)大
H
(
p
,
q
)
=
∑
i
=
1
n
p
i
⋅
l
o
g
(
1
q
i
)
>
∑
i
=
1
n
p
i
⋅
l
o
g
(
1
p
i
)
\begin{gather} H\left(p,q\right)& =\sum_{i=1}^np_i\cdot log(\frac1{q_i})>\sum_{i=1}^np_i\cdot log(\frac1{p_i}) \end{gather}
H(p,q)=i=1∑npi⋅log(qi1)>i=1∑npi⋅log(pi1)
交叉熵越大,说明
−
log
2
q
(
x
i
)
-\log_2q(x_i)
−log2q(xi)与
−
log
2
p
(
x
i
)
-\log_2p(x_i)
−log2p(xi)差得越多,所以交叉熵可以描述p和q之间的差异大小。
KL散度
交叉熵不是最短编码,熵是最短编码,非最短编码的比最短编码长多少呢,那让他俩相减就得到了呗,而得到的这个值就是KL散度
L
K
(
p
,
q
)
=
∑
i
=
1
n
p
i
⋅
l
o
g
(
1
q
i
)
−
∑
i
=
1
n
p
i
⋅
l
o
g
(
1
p
i
)
\begin{gather} LK\left(p,q\right)& =\sum_{i=1}^np_i\cdot log(\frac1{q_i})-\sum_{i=1}^np_i\cdot log(\frac1{p_i}) \end{gather}
LK(p,q)=i=1∑npi⋅log(qi1)−i=1∑npi⋅log(pi1)