引入
交叉熵是信息论中的概念,主要用于度量两个概率分布之间的差异。
1.信息量与信息熵
信息量是事件发生概率的度量,信息量的大小与信息发生的概率成反比,即一个事件发生的概率越低,所包含的信息量越大。假设某一事件发生的概率为
P
(
x
)
P(x)
P(x),其信息量为
I
(
x
)
=
l
o
g
a
1
P
(
x
)
=
−
l
o
g
a
P
(
x
)
(
1
)
I(x)=log_a\frac{1}{P(x)}=-log_aP(x) \qquad(1)
I(x)=logaP(x)1=−logaP(x)(1)
计算时
a
{\it a}
a一般取
2
,
e
,
10
{\it 2,e,10}
2,e,10。
信息熵是在结果出现之前对可能产生的信息量的期望,考虑该随机变量的所有可能的取值,即所有可能发生事件所带来的信息量的期望。假设
X
X
X是一个有限个值的随机变量,其概率分布为:
P
(
X
=
x
i
)
=
p
(
x
i
)
,
i
=
1
,
.
.
.
,
N
(
2
)
P(X=x_i)=p(x_i),i=1,...,N \qquad(2)
P(X=xi)=p(xi),i=1,...,N(2)
则其信息熵为:
H
(
x
)
=
−
∑
i
=
1
N
p
(
x
i
)
l
o
g
a
p
(
x
i
)
(
3
)
H(x)=-\sum_{i=1}^N{p(x_i)log_ap(x_i)} \qquad(3)
H(x)=−i=1∑Np(xi)logap(xi)(3)
例1:抛硬币时,p(正面朝上)=p(反面朝上)=0.5,则其信息量和信息熵的大小分别为:
I
(
x
正
)
=
I
(
x
反
)
=
−
l
o
g
2
(
0.5
)
=
1
I(x_正)=I(x_反)=-log_2(0.5)=1
I(x正)=I(x反)=−log2(0.5)=1
H
(
x
)
=
−
0.5
l
o
g
2
(
0.5
)
−
0.5
l
o
g
2
(
0.5
)
=
1
H(x)=-0.5log_2(0.5)-0.5log_2(0.5)=1
H(x)=−0.5log2(0.5)−0.5log2(0.5)=1
当随机系统中各个事件概率相等的时候,系统的熵最大,也就是不确定性最大,而随着某个事件的概率逐渐增大,对立事件概率越来越小,这种情况下系统的不确定性越来越小,最终趋向于0,也就是成为一个没有随机因素的系统。
2.相对熵(KL散度)
如果对于同一个随机变量X有两个单独的概率分布
P
(
X
)
P(X)
P(X)(样本的真实分布)和
Q
(
X
)
Q(X)
Q(X)(样本的预测分布),可以用KL散度衡量这俩个概率分布之间的差异,公式为:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
p
(
x
i
)
l
o
g
P
(
x
i
)
Q
(
x
i
)
=
∑
i
=
1
n
[
P
(
x
i
)
l
o
g
P
(
x
i
)
−
P
(
x
i
)
l
o
g
Q
(
x
i
)
]
=
H
P
P
(
X
)
−
H
P
Q
(
X
)
(
4
)
D_{KL}(p||q)=\sum_{i=1}^n{p(x_i)}log\frac{P(x_i)}{Q(x_i)}\\=\sum_{i=1}^n[P(x_i)logP(x_i)-P(x_i)logQ(x_i)]=H_{PP}(X)-H_{PQ}(X) \qquad(4)
DKL(p∣∣q)=i=1∑np(xi)logQ(xi)P(xi)=i=1∑n[P(xi)logP(xi)−P(xi)logQ(xi)]=HPP(X)−HPQ(X)(4)
这里的log是以e为底的对数。
KL散度越小,表示
P
(
X
)
P(X)
P(X)(样本的真实分布)和
Q
(
X
)
Q(X)
Q(X)(样本的预测分布)的分布更加接近。可以通过反复训练
Q
(
X
)
Q(X)
Q(X)使
Q
(
X
)
Q(X)
Q(X)的分布逼近
P
(
X
)
P(X)
P(X)。
例题2:在一个二分类任务中(例如猫狗分类),x1={猫},x2={狗},例如一张动物照片的真实分布P(X)=[1,0],预测分布Q(X)=[0.7,0.3],则KL散度为:
D
K
L
(
p
∣
∣
q
)
=
p
(
x
1
)
l
o
g
P
(
x
1
)
Q
(
x
1
)
+
p
(
x
2
)
l
o
g
P
(
x
2
)
Q
(
x
2
)
=
1
×
l
o
g
1
0.7
≈
0.36
D_KL(p||q)={p(x_1)}log\frac{P(x_1)}{Q(x_1)}+{p(x_2)}log\frac{P(x_2)}{Q(x_2)}=1\times{log\frac{1}{0.7}}\approx0.36
DKL(p∣∣q)=p(x1)logQ(x1)P(x1)+p(x2)logQ(x2)P(x2)=1×log0.71≈0.36
交叉熵
1.交叉熵概念
将KL散度公式展开:
D
K
L
(
p
∣
∣
q
)
=
∑
i
=
1
n
P
(
x
i
)
l
o
g
P
(
x
i
)
Q
(
x
i
)
=
∑
i
=
1
n
[
P
(
x
i
)
l
o
g
p
(
P
i
)
−
P
(
x
i
)
l
o
g
Q
(
x
i
)
]
=
H
P
P
(
X
)
+
[
−
∑
i
=
1
n
[
P
(
x
i
)
l
o
g
Q
(
x
i
)
]
(
5
)
D_{KL}(p||q)=\sum_{i=1}^n{P(x_i)}log\frac{P(x_i)}{Q(x_i)}\\=\sum_{i=1}^n[P(x_i)logp(P_i)-P(x_i)logQ(x_i)]\\=H_{PP}(X)+[-{\sum_{i=1}^n[P(x_i)logQ(x_i)]} \qquad(5)
DKL(p∣∣q)=i=1∑nP(xi)logQ(xi)P(xi)=i=1∑n[P(xi)logp(Pi)−P(xi)logQ(xi)]=HPP(X)+[−i=1∑n[P(xi)logQ(xi)](5)
对于确定的概率分布,
H
P
P
(
X
)
H_{PP}(X)
HPP(X)信息熵是一个定值。
在机器学习中,由于KL散度表示真实概率分布与预测概率分布的差异,越小表示预测的结果越好,所以最小化KL散度的值;交叉熵等于KL散度加信息熵(常量),相比KL散度更加容易计算,所以一般在机器学习中直接用交叉熵做loss。
例3.题目同例2,计算交叉熵。
H
(
P
,
Q
)
=
−
∑
i
=
1
n
[
P
(
x
i
)
l
o
g
Q
(
x
i
)
]
=
−
(
1
×
l
o
g
(
0.7
)
)
≈
0.36
H(P,Q)=-{\sum_{i=1}^n[P(x_i)logQ(x_i)]}=-(1\times log(0.7))\approx0.36
H(P,Q)=−i=1∑n[P(xi)logQ(xi)]=−(1×log(0.7))≈0.36
2.为什么使用交叉熵作为损失函数
2.1似然函数
假设离散随机变量
X
X
X具有概率质量函数
p
p
p,即
P
(
X
=
x
i
)
=
p
(
x
i
)
P(X=x_i)=p(x_i)
P(X=xi)=p(xi),如果
p
p
p有参数
θ
θ
θ决定,得到X的一些具体取值的集合
x
∈
X
x∈X
x∈X后,在这些观察值上的似然函数就是:
L
(
θ
∣
x
)
=
P
θ
(
x
)
=
P
θ
(
X
=
x
∣
θ
)
(
6
)
L(\theta|x)=P_\theta(x)=P_\theta(X=x|\theta) \qquad(6)
L(θ∣x)=Pθ(x)=Pθ(X=x∣θ)(6)
最大似然法就是通过最大化
L
(
θ
∣
x
)
L(θ|x)
L(θ∣x)获得
θ
θ
θ,即找到一组x使得
P
θ
(
X
=
x
)
P_θ(X=x)
Pθ(X=x)最大的参数。
假如
X
X
X是连续随机变量,那么它的一组取值的集合
x
x
x的似然函数是:
L
(
θ
∣
x
)
=
f
θ
(
x
)
=
f
θ
(
X
=
x
∣
θ
)
(
7
)
L(\theta|x)=f_\theta(x)=f_\theta(X=x|\theta) \qquad(7)
L(θ∣x)=fθ(x)=fθ(X=x∣θ)(7)
f
θ
f_θ
fθ是
X
X
X的概率密度函数。
2.2分类器中的损失函数
在机器学习的分类问题中。在二分类问题中,预测值y的取值是二选一,y属于伯努利分布,则有:
p
θ
(
x
)
=
θ
y
(
1
−
θ
)
(
1
−
y
)
(
8
)
p_\theta(x)=\theta^y(1-\theta)^{(1-y)} \qquad(8)
pθ(x)=θy(1−θ)(1−y)(8)
假设数据集为
D
=
(
(
x
1
,
y
1
)
,
.
.
.
,
(
x
N
,
y
N
)
)
D=((x_1,y_1),...,(x_N,y_N))
D=((x1,y1),...,(xN,yN)),则似然函数为:
l
(
θ
)
=
l
o
g
∏
i
=
1
N
p
θ
(
y
i
)
=
l
o
g
∏
i
=
1
N
θ
y
i
(
1
−
θ
)
(
1
−
y
i
)
=
∑
i
=
1
N
[
y
i
l
o
g
θ
+
(
1
−
y
i
)
l
o
g
(
1
−
θ
)
]
(
9
)
l(\theta)=log\prod_{i=1}^Np_\theta(y_i)=log\prod_{i=1}^N\theta^{y_i}(1-\theta)^{(1-{y_i})}\\=\sum_{i=1}^N[y_ilog\theta+(1-y_i)log(1-\theta)] \qquad(9)
l(θ)=logi=1∏Npθ(yi)=logi=1∏Nθyi(1−θ)(1−yi)=i=1∑N[yilogθ+(1−yi)log(1−θ)](9)
似然函数
l
(
θ
)
l(\theta)
l(θ)是目标函数,加上负号就变成损失函数。对比交叉熵公式,这个损失函数就是
y
i
y_i
yi与
θ
\theta
θ的交叉熵。
多分类问题
假设观察到的数据有
K
(
K
>
2
)
K(K>2)
K(K>2)个分类,
y
y
y对应的分布为多元分布,每个类对应的分布参数为
ϕ
1
,
ϕ
2
,
.
.
.
,
ϕ
K
\phi_1,\phi_2,...,\phi_K
ϕ1,ϕ2,...,ϕK,且
p
(
y
=
i
)
=
ϕ
i
,
∑
i
=
1
K
ϕ
i
=
1
p(y=i)=\phi_i,\sum_{i=1}^{K}\phi_i=1
p(y=i)=ϕi,∑i=1Kϕi=1其中
p
(
y
i
)
=
(
ϕ
)
I
(
y
i
=
1
)
.
.
.
(
ϕ
K
)
I
(
y
i
=
k
)
=
∏
i
=
1
K
(
ϕ
K
)
I
(
y
i
=
k
)
p(y_i)=(\phi)^{I(y_i=1)}...(\phi_K)^{I(y_i=k)}=\prod_{i=1}^K(\phi_K)^{I(y_i=k)}
p(yi)=(ϕ)I(yi=1)...(ϕK)I(yi=k)=i=1∏K(ϕK)I(yi=k)
则
y
i
y_i
yi的对数似然为:
l
(
ϕ
)
=
l
o
g
p
(
y
i
)
=
∑
k
=
1
K
I
(
y
i
=
k
)
l
o
g
ϕ
k
(
10
)
l(\phi)=logp(y_i)=\sum_{k=1}^KI(y_i=k)log\phi_k \qquad(10)
l(ϕ)=logp(yi)=k=1∑KI(yi=k)logϕk(10)
其中
I
(
y
i
=
k
)
I(y_i=k)
I(yi=k)中只有一项等于1,其余为0,就是
y
i
y_i
yi的one-hot编码。将
y
i
y_i
yi的one-hot编码记作
y
i
,
k
y_{i,k}
yi,k,则
ϕ
k
\phi_k
ϕk记作
ϕ
i
,
k
\phi_{i,k}
ϕi,k,似然函数变为
l
(
ϕ
)
=
∑
k
=
1
K
I
(
y
i
=
k
)
y
i
,
k
l
o
g
ϕ
i
,
k
(
11
)
l(\phi)=\sum_{k=1}^KI(y_i=k)y_{i,k}log\phi_{i,k} \qquad(11)
l(ϕ)=k=1∑KI(yi=k)yi,klogϕi,k(11)
那么所有N个样本的平均对数似然为:
l
(
ϕ
)
=
1
N
∑
k
=
1
K
y
i
,
k
l
o
g
ϕ
i
,
k
(
12
)
l(\phi)=\frac1{N}\sum_{k=1}^Ky_{i,k}log\phi_{i,k} \qquad(12)
l(ϕ)=N1k=1∑Kyi,klogϕi,k(12)
加上负号,目标函数变为损失函数,与交叉熵形式一致。