假设 P P P是真实分布, Q Q Q是预测分布。
KL散度
KL散度是一种衡量两个概率分布
P
P
P和
Q
Q
Q之间差异的方法。它定义为:
D
KL
(
P
∥
Q
)
=
∑
x
P
(
x
)
log
P
(
x
)
Q
(
x
)
D_{\text{KL}}(P \| Q) = \sum_{x} P(x) \log \frac{P(x)}{Q(x)}
DKL(P∥Q)=x∑P(x)logQ(x)P(x)
KL散度是非对称的,
D
KL
(
P
∥
Q
)
≠
D
KL
(
Q
∥
P
)
D_{\text{KL}}(P \| Q) \neq D_{\text{KL}}(Q \| P)
DKL(P∥Q)=DKL(Q∥P)。
交叉熵
交叉熵用于衡量在给定真实分布
P
P
P的情况下,使用另一个分布
Q
Q
Q进行编码所需的平均比特数(信息量)。对于两个概率分布
P
P
P和
Q
Q
Q,交叉熵定义为:
H
(
P
,
Q
)
=
−
∑
x
P
(
x
)
log
Q
(
x
)
H(P, Q) = -\sum_{x} P(x) \log Q(x)
H(P,Q)=−x∑P(x)logQ(x)
交叉熵是另一个衡量两个概率分布之间差异的方法,特别用于分类任务中。
GAN损失
GAN(生成对抗网络)是一种通过两个网络(生成器Generator和判别器Discriminator)相互对抗来学习的框架。生成器的目标是生成看起来真实的样本,而判别器的目标是区分真实数据和生成的数据。
在GAN的损失函数中,判别器
D
D
D的损失函数可以表示为:
L
D
=
−
E
x
∼
p
data
[
log
D
(
x
)
]
−
E
z
∼
p
z
[
log
(
1
−
D
(
G
(
z
)
)
)
]
L_D = -{E}_{x \sim p_{\text{data}}}[\log D(x)] - {E}_{z \sim p_z}[\log (1 - D(G(z)))]
LD=−Ex∼pdata[logD(x)]−Ez∼pz[log(1−D(G(z)))]
生成器
G
G
G的损失函数则是:
L
G
=
−
E
z
∼
p
z
[
log
D
(
G
(
z
)
)
]
L_G = -{E}_{z \sim p_z}[\log D(G(z))]
LG=−Ez∼pz[logD(G(z))]
这里, log D ( x ) \log D(x) logD(x) 和 log ( 1 − D ( G ( z ) ) ) \log (1 - D(G(z))) log(1−D(G(z))) 实际上是在计算交叉熵损失,因为判别器 D D D输出的是一个概率值, D ( x ) D(x) D(x)表示输入是真实数据的概率, D ( G ( z ) ) ) D(G(z))) D(G(z)))表示输入是生成数据的概率。
关系
KL散度与交叉熵:假设两个分布
P
P
P和Q,并且
P
P
P的熵为
H
(
P
)
H(P)
H(P),那么交叉熵
H
(
P
,
Q
)
H(P, Q)
H(P,Q)和KL散度
D
KL
(
P
∥
Q
)
D_{\text{KL}}(P \| Q)
DKL(P∥Q)之间有一个简单的数学关系:
H
(
P
,
Q
)
=
H
(
P
)
+
D
KL
(
P
∥
Q
)
H(P, Q) = H(P) + D_{\text{KL}}(P \| Q)
H(P,Q)=H(P)+DKL(P∥Q)
若
P
P
P为真实分布,则熵$H§ $是一个常量。此时,最小化交叉熵等价于最小化KL散度。
交叉熵与GAN损失:在GAN中,判别器和生成器的损失函数都通过交叉熵损失函数实现。判别器最小化一个交叉熵损失;生成器最大化判别器认为其生成样本是真的概率,这也等价于最小化一个交叉熵损失。在GAN中,直接优化的是交叉熵损失,间接地也影响了生成数据分布与真实数据分布之间的KL散度。