在信息论中定义一个事件
X
=
x
X=x
X=x的自信息(self-information)为:
I
(
p
)
=
−
l
o
g
p
I(p)=-logp
I(p)=−logp,表示以
P
(
X
=
x
)
=
p
P(X=x)=p
P(X=x)=p的概率观测到的这事件时所包含的信息量,单位为奈特(nats),P(X=x)表示事件的概率其值为p,那么一奈特就是:以
1
/
e
1/e
1/e的概率观察到一个事件时获取的信息量(
−
l
o
g
(
1
/
e
)
=
1
-log(1/e)=1
−log(1/e)=1)。可以看出自信息和熵与事件的值无关 ,只与其概率有关。 深度学习中log底数通常为
e
e
e。
熵(香农熵) 表示对整个概率分布中的不确定性总量的量化(说的通俗点就是表示随机变量不确定性的度量),表示为
H
(
p
)
=
E
x
∼
P
[
I
(
p
)
]
=
−
E
x
∼
P
[
l
o
g
p
]
H(p)=E_{x\sim P}[I(p)]=-E_{x\sim P}[log p]
H(p)=Ex∼P[I(p)]=−Ex∼P[logp]。因为分别对应离散型随机变量和连续性随机变量,期望就是加权平均或积分,。
所以对于离散型随机变量
X
X
X其概率分布为
P
(
X
=
x
i
)
=
p
i
,
i
=
1
,
2...
n
P(X=x_i)=p_i,i=1,2...n
P(X=xi)=pi,i=1,2...n
则
X
X
X的熵可以表示为:
H
(
p
)
=
−
∑
i
=
1
n
p
i
l
o
g
(
p
i
)
H(p)=-\sum_{i=1}^{n}p_ilog(p_i)
H(p)=−i=1∑npilog(pi)
对于连续型随机变量
X
X
X,其取值范围是
[
a
,
b
]
[a,b]
[a,b],则
X
X
X的熵可以表示为:
H
(
p
)
=
−
∫
a
b
p
(
x
)
l
o
g
(
p
(
x
)
)
d
x
H(p)=-\int_{a}^{b}p(x)log(p(x))dx
H(p)=−∫abp(x)log(p(x))dx
这里的
p
(
x
)
p(x)
p(x)为分布函数。
如果对于同一个随机变量X,有两个概率分布,分别是Q和P,我们可以使用 KL散度 来衡量这两个分布之间的差异:
D
K
L
(
P
∣
∣
Q
)
=
E
x
∼
P
[
l
o
g
(
P
Q
)
]
=
E
x
∼
P
[
l
o
g
p
−
l
o
g
(
q
)
]
=
∑
i
=
1
n
p
i
l
o
g
(
p
i
)
−
∑
i
=
1
n
p
i
l
o
g
(
q
i
)
(
离
散
)
D_{KL}(P||Q)=E_{x\sim P}[log(\frac{P}{Q})]=E_{x\sim P}[logp-log(q)]=\sum_{i=1}^{n}p_ilog(p_i)-\sum_{i=1}^{n}p_ilog(q_i)(离散)
DKL(P∣∣Q)=Ex∼P[log(QP)]=Ex∼P[logp−log(q)]=i=1∑npilog(pi)−i=1∑npilog(qi)(离散)
当这两个离散分布是相同的,或者这两个连续分布是“几乎处处“”相同时,KL散度是为0的。KL散度并不是对称的,对于某些分布P和Q的
D
K
L
(
P
∣
∣
Q
)
≠
D
K
L
(
Q
∣
∣
P
)
D_{KL}(P||Q)\neq D_{KL}(Q||P)
DKL(P∣∣Q)=DKL(Q∣∣P)。因此KL散度的选择有很大的影响。
在实际的应用中,若我们的训练数据的上的经验分布表示为 p d a t a p_{data} pdata(用经验分布来代表实际分布,因为实际分布是不知道的,我们可以用样本经验分布来近似得到),模型分布表示为 p m o d e l p_{model} pmodel,那么可以通过最小化KL散度来求得模型分布 p m o d e l p_{model} pmodel,KL散度表示为: D K L ( p d a t a ∣ ∣ p m o d e l ) = E x ∼ p d a t a [ l o g p d a t a − l o g p m o d e l ] D_{KL}(p_{data}||p_{model})=E_{x\sim p_{data}}[logp_{data}-logp_{model}] DKL(pdata∣∣pmodel)=Ex∼pdata[logpdata−logpmodel],相当于最小化 − E x ∼ p d a t a [ l o g p m o d e l ] -E_{x\sim p_{data}}[logp_{model}] −Ex∼pdata[logpmodel],这是因为经验分布与参数无关, 所以最终的优化目标是模型的分布的熵。这从另外一个KL角度解释了 最大熵模型 的原理。
另外一个概念是 交叉熵 (cross-entropy),表示为熵和KL散度的和的形式:
H
(
P
,
Q
)
=
H
(
P
)
+
D
K
L
(
P
∣
∣
Q
)
=
−
E
x
∼
P
[
l
o
g
p
]
+
E
x
∼
P
[
l
o
g
p
−
l
o
g
q
]
=
−
E
x
∼
P
[
l
o
g
q
]
=
−
∑
i
=
1
n
p
i
l
o
g
(
q
i
)
H(P,Q)=H(P)+D_{KL}(P||Q)=-E_{x\sim P}[log p]+E_{x\sim P}[logp-logq]=-E_{x\sim P}[logq]=-\sum_{i=1}^{n}p_ilog(q_i)
H(P,Q)=H(P)+DKL(P∣∣Q)=−Ex∼P[logp]+Ex∼P[logp−logq]=−Ex∼P[logq]=−i=1∑npilog(qi)(离散)我们可以看见,当
P
P
P为经验分布
p
d
a
t
a
p_{data}
pdata,
Q
Q
Q为模型分布
p
m
o
d
e
l
时
p_{model}时
pmodel时,以交叉熵作为优化目标与最小化KL散度是等价的,所以交叉熵可以作为损失函数来使用。例如pytorch损失函数值之nn.BCELoss()(为甚么用交叉熵作为损失函数)
概率论与数理统计 浙大 第四版
Deep Learning 伊恩·古德费洛(中文)
Neural Network and Deep Learning ,Michael Nielsen(中文)