熵的定义
熵的本质是一个系统“内在的混乱程度”。
从这个概念上来说,一个系统越混乱,不确定度,熵值越大。
假设随机变量
X
X
X有
n
n
n个取值
x
1
,
x
2
,
.
.
.
,
x
n
x_1, x_2,..., x_n
x1,x2,...,xn,概率分别为
P
1
,
P
2
,
.
.
.
,
P
n
P_1,P_2,...,P_n
P1,P2,...,Pn。
衡量不确定性的函数需要具有可加性以及随概率
P
P
P增加而减小(概率越小,不确定性越大),故使用
−
l
o
g
P
-logP
−logP。
对于随机变量的不确定度,就是各个取值的不确定性按照概率加权求和。
H
(
X
)
=
−
∑
i
=
1
n
P
i
l
o
g
2
(
P
i
)
H(X)=-\sum_{i=1}^{n}P_{i}log_2(P_i)
H(X)=−∑i=1nPilog2(Pi)
函数的具体解释也可以通过平均最小编码长度来解释。
−
l
o
g
2
P
-log_2P
−log2P为编码长度,熵为平均最小编码长度。
交叉熵和交叉熵损失
交叉熵
H
(
p
,
q
)
=
−
∑
i
=
1
n
P
i
l
o
g
Q
i
H(p,q)=-\sum_{i=1}^{n}P_ilogQ_i
H(p,q)=−∑i=1nPilogQi
把
p
p
p、
q
q
q看成关于
x
x
x的函数。
H
(
p
,
q
)
=
−
∑
p
(
x
)
l
o
g
q
(
x
)
H(p,q)=-\sum p(x)logq(x)
H(p,q)=−∑p(x)logq(x)
将Q理解为预测的概率分布,P理解为真实的概率分布。
那么交叉熵就是用预测的概率分布进行最小长度编码,所得到的真实分布下的编码长度。
这个用预测的概率分布进行的编码一定不如真实的最小长度编码,所以
H
(
p
,
q
)
≥
H
(
p
)
H(p,q)\geq H(p)
H(p,q)≥H(p)。
只有当
p
=
q
p=q
p=q时熵与交叉熵相等。
一般来说,
p
p
p与
q
q
q差距越大,交叉熵越大。所以可以降低交叉熵,使预测概率分布接近真实分布。
交叉熵损失
交叉熵损失为nll取下标的结果先softmax后取对数,并加负号。
−
l
o
g
(
s
o
f
t
m
a
x
(
n
l
l
(
X
)
)
)
-log(softmax(nll(X)))
−log(softmax(nll(X)))
softmax首先得到一个类似概率的结果,取值
(
0
,
1
)
(0,1)
(0,1),然后取对数为一个负值结果,在加上符号得到一个正的损失值。
可以看做是针对于特定样本的交叉熵,即样本为
X
X
X,只有此项
p
(
x
)
p(x)
p(x)为1,其余为0,取的也是对应
q
(
x
)
q(x)
q(x)的结果
s
o
f
t
m
a
x
(
n
l
l
(
X
)
)
softmax(nll(X))
softmax(nll(X))。
同时,有多个样本时,会进行一个取平均操作,就可以看做是针对这一批样本分布的交叉熵。
具体训练时Batch Size的选择可以看看这篇文章Batch Size对神经网络训练的影响。
KL散度
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
P
i
l
o
g
P
i
Q
i
D_{KL}(p||q)=\sum_{i=1}^{n}P_ilog\frac{P_i}{Q_i}
DKL(p∣∣q)=∑i=1nPilogQiPi
把
p
p
p、
q
q
q看成关于
x
x
x的函数。
D
K
L
(
p
∣
∣
q
)
=
∑
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
D_{KL}(p||q)=\sum p(x)log\frac{p(x)}{q(x)}
DKL(p∣∣q)=∑p(x)logq(x)p(x)
往下推导:
D
K
L
(
p
∣
∣
q
)
=
∑
p
(
x
)
l
o
g
p
(
x
)
q
(
x
)
=
H
(
p
,
q
)
−
H
(
p
)
D_{KL}(p||q)=\sum p(x)log\frac{p(x)}{q(x)}=H(p,q)-H(p)
DKL(p∣∣q)=∑p(x)logq(x)p(x)=H(p,q)−H(p)
将Q理解为预测的概率分布,P理解为真实的概率分布。
那么KL散度就是用预测的概率分布进行最小长度编码所得到的真实分布下的编码长度与实际的最小编码长度之差。
即KL散度为交叉熵和熵的差,KL散度与交叉熵只相隔一个常量H§。
所以,p与q差距越大,KL散度越大。当
p
=
q
p=q
p=q时,KL散度为0。