交叉熵(cross entropy)
交叉熵在机器学习中的地位十分重要,常在Logistic回归或者神经网络中作为Loss Function来使用,下面先详细谈一谈交叉熵的定义。
假设现在有关于样本集的两个概率分布
p
(
x
)
p(x)
p(x)和
q
(
x
)
q(x)
q(x),其中
p
(
x
)
p(x)
p(x)为真实分布,
q
(
x
)
q(x)
q(x)为非真实的分布(可以理解为我们通过该样本集训练得到的分布)。如果我们用真实分布
p
(
x
)
p(x)
p(x)来编码该样本,则编码的期望长度为:
H
(
p
)
=
∑
x
p
(
x
)
l
o
g
(
1
p
(
x
)
)
H(p)=\sum_xp(x)log(\frac 1{p(x)})
H(p)=x∑p(x)log(p(x)1)
但是真实分布往往是不可知的,这时我们可以用非真实分布
q
(
x
)
q(x)
q(x)来计算来自真实分布
p
(
x
)
p(x)
p(x)的平均编码长度,这就是交叉熵:
H
c
r
o
s
s
=
∑
x
p
(
x
)
l
o
g
(
1
q
(
x
)
)
H_{cross}=\sum_xp(x)log(\frac 1{q(x)})
Hcross=x∑p(x)log(q(x)1)
因为用
q
(
x
)
q(x)
q(x)来编码的样本来自于分布
p
(
x
)
p(x)
p(x),所以上述式子中求期望的概率为
p
(
x
)
p(x)
p(x)。
举个例子,考虑一个随机变量
x
x
x,真实分布
p
(
x
)
为
(
1
2
,
1
4
,
1
8
,
1
8
)
p(x)为(\frac 12, \frac 14, \frac 18, \frac 18)
p(x)为(21,41,81,81),非真实分布
q
(
x
)
为
(
1
4
,
1
4
,
1
4
,
1
4
)
q(x)为(\frac 14, \frac 14, \frac 14, \frac 14)
q(x)为(41,41,41,41),则依据真实分布求得的平均编码长度为
H
(
p
)
=
1.75
b
i
t
s
H(p) = 1.75bits
H(p)=1.75bits,交叉熵为:
H
c
r
o
s
s
=
1
2
l
o
g
2
4
+
1
4
l
o
g
2
4
+
1
8
l
o
g
2
4
+
1
8
l
o
g
2
4
=
2
b
i
t
s
H_{cross}=\frac 12 log_24+\frac 14log_24+\frac 18log_24+\frac 18 log_24=2bits
Hcross=21log24+41log24+81log24+81log24=2bits
相对熵(relative entropy)
相对熵也称为KL散度(Kullback-Leibler divergence),在机器学习中,相对熵的概念同样也非常重要。
假设
p
(
x
)
、
q
(
x
)
p(x)、q(x)
p(x)、q(x)是离散变量
X
X
X中取值的两个概率分布模型,则我们定义
p
p
p对
q
q
q的相对熵为:
D
K
L
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
l
o
g
(
p
(
x
)
q
(
x
)
)
D_{KL}(p||q)=\sum_xp(x)log(\frac {p(x)}{q(x)})
DKL(p∣∣q)=x∑p(x)log(q(x)p(x))
相对熵具有以下几条性质:
- 如果 p ( x ) p(x) p(x)和 q ( x ) q(x) q(x)两个分布相同,那么相对熵为0
- 相对熵不具有对称性,即 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)
-
D
K
L
(
p
∣
∣
q
)
≥
0
D_{KL}(p||q)\ge 0
DKL(p∣∣q)≥0
关于性质3的证明如下:
D K L ( p ∣ ∣ q ) = ∑ x p ( x ) l o g ( p ( x ) q ( x ) ) = − ∑ x p ( x ) l o g ( q ( x ) p ( x ) ) ≥ − l o g [ ∑ x p ( x ) ( q ( x ) p ( x ) ) ] = − l o g [ ∑ x q ( x ) ] = 0 ( 因 为 ∑ x q ( x ) = 1 ) \begin{aligned} D_{KL}(p||q)&=\sum_x p(x)log(\frac {p(x)}{q(x)})\\ &=-\sum_x p(x)log(\frac {q(x)}{p(x)})\\ &\ge -log[\sum_xp(x)(\frac {q(x)}{p(x)})]\\ &=-log[\sum_x q(x)]\\ &=0(因为\sum_x q(x)=1) \end{aligned} DKL(p∣∣q)=x∑p(x)log(q(x)p(x))=−x∑p(x)log(p(x)q(x))≥−log[x∑p(x)(p(x)q(x))]=−log[x∑q(x)]=0(因为x∑q(x)=1)
为了进一步理解相对熵的作用,我们将相对熵的公式进行展开:
D
K
L
(
p
∣
∣
q
)
=
∑
x
p
(
x
)
l
o
g
(
p
(
x
)
q
(
x
)
)
=
∑
x
p
(
x
)
l
o
g
(
p
(
x
)
)
−
∑
x
p
(
x
)
l
o
g
(
q
(
x
)
)
=
−
∑
x
p
(
x
)
l
o
g
(
q
(
x
)
)
−
[
−
∑
x
p
(
x
)
l
o
g
(
p
(
x
)
)
]
=
H
c
r
o
s
s
−
H
(
p
)
\begin{aligned} D_{KL}(p||q)&=\sum_x p(x)log(\frac {p(x)}{q(x)})\\ &=\sum_x p(x)log(p(x))-\sum_x p(x)log(q(x))\\ &=-\sum_x p(x)log(q(x))-[-\sum_x p(x)log(p(x))]\\ &=H_{cross}-H(p) \end{aligned}
DKL(p∣∣q)=x∑p(x)log(q(x)p(x))=x∑p(x)log(p(x))−x∑p(x)log(q(x))=−x∑p(x)log(q(x))−[−x∑p(x)log(p(x))]=Hcross−H(p)
通过上述推导,我们可以看出,
p
p
p对
q
q
q的相对熵就等于交叉熵与
p
p
p的熵之差。即用真实分布
q
(
x
)
q(x)
q(x)得到的平均码长比真实分布
p
(
x
)
p(x)
p(x)得到的平均码长多出的比特数就是相对熵。
我们已经证明了相对熵总是大于0的,并且可以直观的看出,当非真实分布
q
(
x
)
q(x)
q(x)越接近真实分布
p
(
x
)
p(x)
p(x)时,相对熵的值越接近0。
交叉熵和相对熵在机器学习中的应用
接着谈一谈相对熵和交叉熵在机器学习中的应用。在机器学习中,我们希望构建的模型在训练数据上学到的分布
P
(
m
o
d
e
l
)
P(model)
P(model)和真实的数据分布
P
(
r
e
a
l
)
P(real)
P(real)越接近越好,即相对熵越小越好。
在实际的应用中,完整数据集的真实分布是没法得到的,所以我们在训练模型时,往往考虑的是得到的模型的分布
P
(
m
o
d
e
l
)
P(model)
P(model)与训练数据的分布
P
(
t
r
a
i
n
)
P(train)
P(train)越接近越好,这里存在一个假设作为前提,即训练数据是从总体分布中独立同分布采样得到的。
上述观点可以描述如下:
- 学习的目的,希望得到一个与真实分布一致的分布模型: p ( m o d e l ) ≃ p ( r e a l ) p(model)\simeq p(real) p(model)≃p(real)
- 由于真实分布未知,用训练数据的分布来近似表示真实分布: p ( t r a i n ) ≃ p ( r e a l ) p(train)\simeq p(real) p(train)≃p(real)
- 退而求其次,希望得到一个与训练数据分布一致的分布模型: p ( m o d e l ) ≃ p ( t r a i n ) p(model)\simeq p(train) p(model)≃p(train)
根据之前的描述,我们可以知道,要使
p
(
m
o
d
e
l
)
p(model)
p(model)与
p
(
t
r
a
i
n
)
p(train)
p(train)越接近,就是要使相对熵
D
K
L
(
p
(
t
r
a
i
n
)
∣
∣
p
(
m
o
d
e
l
)
)
D_{KL}(p(train)||p(model))
DKL(p(train)∣∣p(model))最小,假设
p
(
m
o
d
e
l
)
p(model)
p(model)由参数
θ
\theta
θ确定,则
θ
\theta
θ可根据以下关系求解:
min
θ
D
K
L
(
p
(
t
r
a
i
n
)
∣
∣
p
(
m
o
d
e
l
)
)
=
min
θ
H
c
r
o
s
s
−
H
(
p
(
t
r
a
i
n
)
)
\begin{aligned} &\min_{\theta}\quad D_{KL}(p(train)||p(model))\\ =&\min_{\theta}\quad H_{cross}-H(p(train)) \end{aligned}
=θminDKL(p(train)∣∣p(model))θminHcross−H(p(train))
由于训练数据的分布
p
(
t
r
a
i
n
)
p(train)
p(train)是已知的,所以
H
(
p
(
t
r
a
i
n
)
)
H(p(train))
H(p(train))可以求出,是个常数,因此上述求解过程等价于求解使交叉熵
H
c
r
o
s
s
H_{cross}
Hcross最小的
θ
\theta
θ:
min
θ
H
c
r
o
s
s
\min_{\theta}\quad H_{cross}
θminHcross
下面以最常见的二项Logistic回归为例,说明上述过程。
二项Logistic回归是一种分类模型,由条件概率分布
P
(
Y
∣
X
)
P(Y|X)
P(Y∣X)表示,这里随机变量
X
X
X的取值为实向量,
Y
Y
Y取值为1或0,我们构建的
P
(
m
o
d
e
l
)
P(model)
P(model)的形式为:
{
P
(
Y
=
1
∣
x
)
=
e
x
p
(
ω
⋅
x
+
b
)
1
+
e
x
p
(
ω
⋅
x
+
b
)
P
(
Y
=
0
∣
x
)
=
1
1
+
e
x
p
(
ω
⋅
x
+
b
)
其
中
需
要
求
解
的
参
数
为
ω
和
b
\begin{cases} P(Y=1|x)=\frac {exp(\omega\cdot x+b)}{1 + exp(\omega\cdot x+b)}\\ \\ P(Y=0|x)=\frac {1}{1+exp(\omega\cdot x + b)} \end{cases} \\ \quad \\其中需要求解的参数为\omega和b
⎩⎪⎨⎪⎧P(Y=1∣x)=1+exp(ω⋅x+b)exp(ω⋅x+b)P(Y=0∣x)=1+exp(ω⋅x+b)1其中需要求解的参数为ω和b
训练数据的分布
P
(
t
r
a
i
n
)
P(train)
P(train)可以表示为:
P
(
Y
=
1
∣
X
=
x
i
)
=
y
i
P
(
Y
=
0
∣
X
=
x
i
)
=
1
−
y
i
\begin{aligned} &P(Y=1|X=x_i)=y_i\\ &P(Y=0|X=x_i)=1-y_i \end{aligned}
P(Y=1∣X=xi)=yiP(Y=0∣X=xi)=1−yi