信息量、熵、KL散度、交叉熵概念理解
(1) 信息量
- 信息量是对事件的不确定性的度量。
假设我们听到了两件事,分别如下:
事件A:巴西队进入了世界杯决赛圈。
事件B:中国队进入了世界杯决赛圈。
仅凭直觉来说,显而易见事件B的信息量比事件A的信息量要大。
究其原因,是因为事件A发生的概率很大,事件B发生的概率很小。
所以当越不可能的事件发生了,我们获取到的信息量就越大。
越可能发生的事件发生了,我们获取到的信息量就越小。
(`事件发生的概率越小,信息量越大;事件发生的概率越大,信息量越小。`)
信息量的数学表达式
:
具体而言,对于一个离散随机事件
x
x
x,其发生的概率为
p
(
x
)
p(x)
p(x),则该事件所包含的信息量
l
(
x
)
l(x)
l(x) 定义为:
l
(
x
)
=
−
l
o
g
(
p
(
x
)
)
l(x)=-log(p(x))
l(x)=−log(p(x))
- 对数函数可以采用任意底数,常见的有自然对数(以 e 为底)和常用对数(以 2为底)。
- 使用常用对数2时,信息量的单位是比特(bit)
- 使用自然对数e时,单位是纳特(nat)
(2) 熵
-
信息量可以理解为
一个事件
由不确定变为确定,它的难度有多大。 -
熵可以理解为
一个系统
由不确定变为确定,它的难度有多大。
熵定义为对信息量 f ( p i ) f(pi) f(pi)求期望,熵越大,表示这个系统的不确定性越高。对所有可能发生的事件,把这个信息量求出来,然后和事件发生可能性相乘,最后全部加起来。
设X是一个离散型随机变量,分布律为
p
(
x
)
=
p
(
X
=
x
)
p(x) = p(X = x)
p(x)=p(X=x),
x
∈
X
x∈X
x∈X为取值空间集合 ,则随机变量X的熵
H
(
X
)
H(X)
H(X) 定义为:
H
(
X
)
=
−
∑
x
∈
X
p
(
x
)
l
o
g
(
p
(
x
)
)
H(X) = -\sum_{x∈ X} p(x)log(p(x))
H(X)=−x∈X∑p(x)log(p(x))
- 熵的单位
使用常用对数2时,熵的单位是比特(bit);
使用自然对数e时,熵的单位是纳特(nat)。
假设我们有一个离散随机变量 X,它有四个可能的结果:x1、x2、x3 和 x4,对应的概率分别为 0.1、0.2、0.3 和 0.4。我们要计算这个随机变量X的熵。
# 首先计算每个结果的信息量。根据信息量的定义,我们有
I(x1) = -log(0.1)
I(x2) = -log(0.2)
I(x3) = -log(0.3)
I(x4) = -log(0.4)
# 然后,我们将这些信息量与对应的概率相乘,并将结果相加,得到随机变量 X 的熵
H(X) = 0.1 * I(x1) + 0.2 * I(x2) + 0.3 * I(x3) + 0.4 * I(x4)
(3) 相对熵(KL散度)
相对熵,也叫KL散度,是一种衡量两个分布差异的方法。假设现在同一个随机变量 X ,有P、Q两个单独的概率分布(如下图),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
如何定义相对熵来衡量这两个分布的差异呢?
D
K
L
(
P
∣
∣
Q
)
=
∑
x
∈
X
p
x
(
l
Q
(
q
x
)
−
l
P
(
p
x
)
)
【对于每一个可能的
x
,
计算信息量之差】
=
∑
x
∈
X
p
x
(
−
l
o
g
(
q
x
)
−
(
−
l
o
g
(
p
x
)
)
=
∑
x
∈
X
p
x
(
−
l
o
g
(
q
x
)
)
−
∑
x
∈
X
p
x
(
−
l
o
g
(
p
x
)
)
【称为相对熵】
=
∑
x
∈
X
p
x
l
o
g
(
p
x
q
x
)
D_{KL}(P||Q)=\sum_{x∈X}p_x(l_Q(q_x)-l_P(p_x)) 【对于每一个可能的x,计算信息量之差】\\ =\sum_{x∈X}p_x(-log(q_x)-(-log(p_x)) \\ =\sum_{x∈X}p_x(-log(q_x))-\sum_{x∈X}p_x(-log(p_x)) 【称为相对熵】\\ =\sum_{x∈X}p_xlog(\frac{p_x}{q_x})
DKL(P∣∣Q)=x∈X∑px(lQ(qx)−lP(px))【对于每一个可能的x,计算信息量之差】=x∈X∑px(−log(qx)−(−log(px))=x∈X∑px(−log(qx))−x∈X∑px(−log(px))【称为相对熵】=x∈X∑pxlog(qxpx)
- D K L ( P ∣ ∣ Q ) = ∑ x ∈ X p x l o g ( p x q x ) D_{KL}(P||Q)=\sum_{x∈X}p_xlog(\frac{p_x}{q_x}) DKL(P∣∣Q)=∑x∈Xpxlog(qxpx),KL散度的值越小,Q分布越接近P分布;
- 根据吉布斯不等式,KL散度的值一定是大于等于0的;
KL散度不能用来衡量两个分布的距离,其原因在于KL散度不是对称的
,即 D K L ( P ∣ ∣ Q ) 不等于 D K L ( Q ∣ ∣ P ) D_{KL}(P||Q)不等于D_{KL}(Q||P) DKL(P∣∣Q)不等于DKL(Q∣∣P)。- KL散度通俗解释(英文原文):Kullback-Leibler Divergence Explained
- KL散度通俗解释(翻译版本):KL散度介绍
(4) 交叉熵
我们一般会从极大似然估计角度,来推导交叉熵公式。
二分类交叉熵公式推导:
为了计算方便,我们对似然函数求对数,并加负号,这样就从求解使似然函数最大时的参数,变为求解使交叉熵最小时的参数。
J
=
−
1
n
∑
i
=
1
n
(
y
i
l
o
g
y
i
^
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
)
在机器学习或深度学习中,其中
n
为批量样本数
J=-\frac{1}{n}\sum_{i=1}^n(y_ilog \hat{y_i}+ (1-y_i)log(1-\hat{y_i})) \\ 在机器学习或深度学习中,其中n为批量样本数
J=−n1i=1∑n(yilogyi^+(1−yi)log(1−yi^))在机器学习或深度学习中,其中n为批量样本数
多分类交叉熵公式:
对于多项分布,我们假设有
m
个类别,模型预测各个类别的分数分别为
(
y
i
1
^
,
y
i
2
^
,
.
.
.
,
y
i
m
^
)
,则有:
p
(
y
i
=
1
∣
x
i
,
w
)
=
y
i
1
^
p
(
y
i
=
2
∣
x
i
,
w
)
=
y
i
2
^
.
.
.
.
.
.
p
(
y
i
=
c
∣
x
i
,
w
)
=
y
i
c
^
.
.
.
.
.
.
p
(
y
i
=
m
∣
x
i
,
w
)
=
y
i
m
^
同样,合并上述公式:
p
(
y
i
∣
x
i
,
w
)
=
y
i
1
^
y
i
1
y
i
2
^
y
i
2
.
.
.
y
i
m
^
y
i
m
=
∏
c
=
1
m
y
i
c
^
y
i
c
对于
n
次观察结果
(
批量样本
n
)
,则有似然函数:
L
(
w
∣
X
,
Y
)
=
f
(
Y
=
y
1
,
.
.
.
,
y
n
∣
X
=
x
1
,
.
.
.
,
x
n
,
w
)
=
∏
i
=
1
n
∏
c
=
1
m
y
i
c
^
y
i
c
同样,为了计算方便,我们对似然函数求对数,并加负号:
J
=
−
1
n
l
o
g
L
(
w
∣
X
,
Y
)
=
−
1
n
∑
i
=
1
n
∑
c
=
1
m
y
i
c
l
o
g
y
i
c
^
对于多项分布,我们假设有m个类别,模型预测各个类别的分数分别为(\hat{y_{i1}},\hat{y_{i2}},...,\hat{y_{im}}),则有:\\ p(y_i=1|x_i,w)=\hat{y_{i1}}\\ p(y_i=2|x_i,w)=\hat{y_{i2}}\\ ......\\ p(y_i=c|x_i,w)=\hat{y_{ic}}\\ ......\\ p(y_i=m|x_i,w)=\hat{y_{im}}\\ 同样,合并上述公式:\\ p(y_i|x_i,w)=\hat{y_{i1}}^{y_{i1}}\hat{y_{i2}}^{y_{i2}}...\hat{y_{im}}^{y_{im}} =\prod\limits_{c=1}^{m}\hat{y_{ic}}^{y_{ic}} \\ 对于n次观察结果(批量样本n),则有似然函数:\\ L(w|X,Y)=f(Y=y_1,...,y_n|X=x_1,...,x_n,w)=\prod\limits_{i=1}^{n}\prod\limits_{c=1}^{m}\hat{y_{ic}}^{y_{ic}}\\ 同样,为了计算方便,我们对似然函数求对数,并加负号:\\ J=-\frac{1}{n}logL(w|X, Y)=-\frac{1}{n}\sum\limits_{i=1}^n\sum\limits_{c=1}^my_{ic}log\hat{y_{ic}}
对于多项分布,我们假设有m个类别,模型预测各个类别的分数分别为(yi1^,yi2^,...,yim^),则有:p(yi=1∣xi,w)=yi1^p(yi=2∣xi,w)=yi2^......p(yi=c∣xi,w)=yic^......p(yi=m∣xi,w)=yim^同样,合并上述公式:p(yi∣xi,w)=yi1^yi1yi2^yi2...yim^yim=c=1∏myic^yic对于n次观察结果(批量样本n),则有似然函数:L(w∣X,Y)=f(Y=y1,...,yn∣X=x1,...,xn,w)=i=1∏nc=1∏myic^yic同样,为了计算方便,我们对似然函数求对数,并加负号:J=−n1logL(w∣X,Y)=−n1i=1∑nc=1∑myiclogyic^
通过上述推导,我们就确定了多分类的交叉熵损失函数:
l
o
s
s
=
−
1
n
∑
i
=
1
n
∑
c
=
1
m
y
i
c
l
o
g
y
i
c
^
n
为批量样本,
m
为分类数
loss=-\frac{1}{n}\sum\limits_{i=1}^n\sum\limits_{c=1}^my_{ic}log\hat{y_{ic}} \\ n为批量样本,m为分类数
loss=−n1i=1∑nc=1∑myiclogyic^n为批量样本,m为分类数
当
m
=
2
m=2
m=2时候,就是二分类交叉熵损失函数:
l
o
s
s
=
−
1
n
∑
i
=
1
n
∑
c
=
1
2
y
i
c
l
o
g
y
i
c
^
=
−
1
n
∑
i
=
1
n
(
y
i
1
l
o
g
y
i
1
^
+
y
i
2
l
o
g
y
i
2
^
)
令
y
i
1
=
y
i
,那么
y
i
2
=
1
−
y
i
l
o
s
s
=
−
1
n
∑
i
=
1
n
(
y
i
l
o
g
y
i
^
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
)
n
为批量样本,和之前推导一样
loss=-\frac{1}{n}\sum\limits_{i=1}^n\sum\limits_{c=1}^2y_{ic}log\hat{y_{ic}} \\ =-\frac{1}{n}\sum\limits_{i=1}^n(y_{i1}log\hat{y_{i1}}+y_{i2}log\hat{y_{i2}})\\ 令y_{i1}=y_{i},那么y_{i2}=1-y_{i}\\ loss=-\frac{1}{n}\sum\limits_{i=1}^n(y_{i}log\hat{y_{i}}+(1-y_{i})log(1-\hat{y_i}))\\ n为批量样本,和之前推导一样
loss=−n1i=1∑nc=1∑2yiclogyic^=−n1i=1∑n(yi1logyi1^+yi2logyi2^)令yi1=yi,那么yi2=1−yiloss=−n1i=1∑n(yilogyi^+(1−yi)log(1−yi^))n为批量样本,和之前推导一样
我们现在从相对熵的角度,来看待交叉熵。那么,相对熵和交叉熵的有什么关系呢?
D
K
L
(
P
∣
∣
Q
)
=
∑
x
∈
X
p
x
(
−
l
o
g
(
q
x
)
−
(
−
l
o
g
(
p
x
)
)
=
∑
x
∈
X
p
x
(
−
l
o
g
(
q
x
)
)
−
∑
x
∈
X
p
x
(
−
l
o
g
(
p
x
)
)
=
∑
x
∈
X
p
x
(
l
o
g
(
p
x
)
)
−
∑
x
∈
X
p
x
(
l
o
g
(
q
x
)
)
令
H
(
p
,
q
)
=
−
∑
x
∈
X
p
x
(
l
o
g
(
q
x
)
)
,那么
D
K
L
(
P
∣
∣
Q
)
=
H
(
p
)
+
H
(
p
,
q
)
D_{KL}(P||Q)=\sum_{x∈X}p_x(-log(q_x)-(-log(p_x)) \\ =\sum_{x∈X}p_x(-log(q_x))-\sum_{x∈X}p_x(-log(p_x)) \\ =\sum_{x∈X}p_x(log(p_x))-\sum_{x∈X}p_x(log(q_x)) \\ 令H(p,q)=-\sum_{x∈X}p_x(log(q_x)),那么\\ D_{KL}(P||Q)=H(p)+H(p,q) \\
DKL(P∣∣Q)=x∈X∑px(−log(qx)−(−log(px))=x∈X∑px(−log(qx))−x∈X∑px(−log(px))=x∈X∑px(log(px))−x∈X∑px(log(qx))令H(p,q)=−x∈X∑px(log(qx)),那么DKL(P∣∣Q)=H(p)+H(p,q)
- 在机器学习中,训练数据的分布通常是固定的,因此 H ( p ) H(p) H(p)是一个常数,不影响模型的训练过程。我们的目标是使模型预测的概率分布q尽可能接近真实分布p,其实就是最小化交叉熵 H ( p , q ) H(p,q) H(p,q)。
- 所以我们把交叉熵损失函数定义为:
H ( p , q ) = − ∑ i = 1 n p ( x i ) l o g ( q ( x i ) ) H(p,q)=-\sum\limits_{i=1}^np(x_i)log(q(x_i)) H(p,q)=−i=1∑np(xi)log(q(xi))
总结如下:
通俗讲解这几个概念的视频,可以参考:
“交叉熵”如何做损失函数?打包理解“信息量”、“比特”、“熵”、“KL散度”、“交叉熵”