赞
踩
任何事件都会承载着一定的信息量,包括已经发生的事件和未发生的事件,只是它们承载的信息量会有所不同。如昨天下雨这个已知事件,因为已经发生,既定事实,那么它的信息量就为0。如明天会下雨这个事件,因为未有发生,那么这个事件的信息量就大。
从上面例子可以看出信息量是一个与事件发生概率相关的概念,而且可以得出,事件发生的概率越小,其信息量越大。
我们已知某个事件的信息量是与它发生的概率有关,那我们可以通过如下公式计算信息量:
假设 X X X是一个离散型随机变量,其取值集合为 X \mathcal{X} X ,概率分布函数 p ( x ) = P r ( X = x ) p(x)=Pr(X=x) p(x)=Pr(X=x), x ∈ X x \in \mathcal{X} x∈X,则定义事件 X = x 0 X=x_0 X=x0的信息量为: I ( x 0 ) = − l o g ( p ( x 0 ) ) I(x_0)=-log(p(x_0)) I(x0)=−log(p(x0))
我们知道:当一个事件发生的概率为 p ( x ) p(x) p(x) ,那么它的信息量是 − l o g ( p ( x ) ) -log(p(x)) −log(p(x))。
那么如果我们把这个事件的所有可能性罗列出来,就可以求得该事件信息量的期望,信息量的期望就是熵。假设 事件X共有n种可能,发生 x i x_i xi的概率为 p ( x i ) p(x_i) p(xi) ,那么该事件的熵 H(X) 为:
H ( X ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) H(X)=-\sum^n_{i=1}p(x_i)log(p(x_i)) H(X)=−i=1∑np(xi)log(p(xi))
然而有一类比较特殊的问题,比如投掷硬币只有两种可能,字朝上或花朝上。买彩票只有两种可能,中奖或不中奖。我们称之为0-1分布问题(二项分布的特例),对于这类问题,熵的计算方法可以简化为如下算式:
H ( X ) = − ∑ i = 1 n p ( x i ) l o g ( p ( x i ) ) = − p ( x ) l o g ( p ( x ) ) − ( 1 − p ( x ) ) l o g ( 1 − p ( x ) ) H(X)=-\sum^n_{i=1}p(x_i)log(p(x_i))=-p(x)log(p(x))-(1-p(x))log(1-p(x)) H(X)=−i=1∑np(xi)log(p(xi))=−p(x)log(p(x))−(1−p(x))log(1−p(x))
相对熵又称KL散度,如果我们对于同一个随机变量 x 有两个单独的概率分布 P(x) 和 Q(x),我们可以使用 KL 散度(Kullback-Leibler (KL) divergence)来衡量这两个分布的差异。
在机器学习中,P往往用来表示样本的真实分布,Q用来表示模型所预测的分布,那么KL散度就可以计算两个分布的差异,也就是Loss损失值。
D K L ( p ∣ ∣ q ) = ∑ i = 1 n p ( x i ) l o g ( p ( x i ) q ( x i ) ) D_{KL}(p || q)=\sum^n_{i=1}p(x_i)log(\frac{p(x_i)}{q(x_i)}) DKL(p∣∣q)=i=1∑np(xi)log(q(xi)p(xi))
从KL散度公式中可以看到Q的分布越接近P(Q分布越拟合P),那么散度值越小,即损失值越小。
因为对数函数是凸函数,所以KL散度的值为非负数。
有时会将KL散度称为KL距离,但它并不满足距离的性质:
KL散度不是对称的;
KL散度不满足三角不等式。
我们将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
)
)
−
∑
I
=
1
n
p
(
x
i
)
l
o
g
(
q
(
x
i
)
)
=
−
H
(
p
(
x
)
)
+
[
−
∑
I
=
1
n
p
(
x
i
)
l
o
g
(
p
(
x
i
)
)
]
等式的前一部分恰巧就是p的熵,等式的后一部分,就是交叉熵:
H ( p , q ) = − ∑ I = 1 n p ( x i ) l o g ( p ( x i ) ) H(p, q)=-\sum^n_{I=1}p(x_i)log(p(x_i)) H(p,q)=−I=1∑np(xi)log(p(xi))
在机器学习中,我们需要评估label和predicts之间的差距,使用KL散度刚刚好,即 D K L ( y ∣ ∣ y ~ ) D_{KL}(y || \widetilde{y}) DKL(y∣∣y ),由于KL散度中的前一部分 − H ( y ) −H(y) −H(y)不变,故在优化过程中,只需要关注交叉熵就可以了。所以一般在机器学习中直接用用交叉熵做loss,评估模型。
- 熵表示一个概率分布的不确定性;
- 交叉熵表示一个概率分布相对于另一个概率分布的不确定性(例如:一个语言模型比另一个语言模型能更准确地预测单词序列数据,那它就应该有更小的交叉熵);
- 熵是交叉熵的下界;
JS散度度量了两个概率分布的相似度,基于KL散度的变体,解决了KL散度非对称的问题。一般地,JS散度是对称的,其取值是0到1之间。定义如下: J S ( P 1 ∣ ∣ P 2 ) = 1 2 K L ( P 1 ∣ ∣ P 1 + P 2 2 ) + 1 2 K L ( P 2 ∣ ∣ P 1 + P 2 2 ) JS(P_1 || P_2)=\frac{1}{2}KL(P_1 || \frac{P_1+P_2}{2})+\frac{1}{2}KL(P_2 || \frac{P_1+P_2}{2}) JS(P1∣∣P2)=21KL(P1∣∣2P1+P2)+21KL(P2∣∣2P1+P2)
GANs可以看成一个博弈,博弈双方都会有cost,如果是零和博弈,那么双方的cost之和为0。Discriminator是一个二元分类器,它的loss可以定义用交叉熵来定义:
J
(
D
)
(
θ
(
D
)
,
θ
(
G
)
)
=
−
E
x
∼
P
d
a
t
a
l
o
g
D
(
x
)
−
E
x
∼
P
G
l
o
g
(
1
−
D
(
x
)
)
J^{(D)}(\theta^{(D)},\theta^{(G)})=-E_{x \sim P_{data}}logD(x)-E_{x \sim P_{G}}log(1-D(x))
J(D)(θ(D),θ(G))=−Ex∼PdatalogD(x)−Ex∼PGlog(1−D(x))
从而,Generator的loss就定义为:
J ( G ) ( θ ( D ) , θ ( G ) ) = − J ( D ) ( θ ( D ) , θ ( G ) ) = E x ∼ P d a t a l o g D ( x ) + E x ∼ P G l o g ( 1 − D ( G ( x ) ) ) J^{(G)}(\theta^{(D)},\theta^{(G)})=-J^{(D)}(\theta^{(D)},\theta^{(G)})=E_{x \sim P_{data}}logD(x)+E_{x \sim P_{G}}log(1-D(G(x))) J(G)(θ(D),θ(G))=−J(D)(θ(D),θ(G))=Ex∼PdatalogD(x)+Ex∼PGlog(1−D(G(x)))
整个优化问题就是一个min max博弈:
J
=
m
i
n
θ
(
G
)
m
a
x
θ
(
D
)
E
x
∼
P
d
a
t
a
l
o
g
D
(
x
)
+
E
x
∼
P
G
l
o
g
(
1
−
D
(
x
)
)
J=\mathop{min}\limits_{\theta^{(G)}}\mathop{max}\limits_{\theta^{(D)}} E_{x \sim P_{data}}logD(x)+E_{x \sim P_{G}}log(1-D(x))
J=θ(G)minθ(D)maxEx∼PdatalogD(x)+Ex∼PGlog(1−D(x))
注意另一种表达:
把生成数据部分记为
E
z
∼
P
z
l
o
g
(
1
−
D
(
G
(
z
)
)
)
E_{z \sim P_{z}}log(1-D(G(z)))
Ez∼Pzlog(1−D(G(z)))
然而,这样定义的零和博弈在实际中效果并不好,主流方法是Generator的loss只考虑它自身的交叉熵,而不用全局的交叉熵。这样做能够确保任一博弈失利的一方仍有较强的梯度以扭转不利局面。采用这个loss的博弈为Non-saturating heuristic game,整个博弈不再是零和博弈,没有理论保证它会收敛达到纳什均衡。
J
(
G
)
(
θ
(
D
)
,
θ
(
G
)
)
=
E
x
∼
P
G
l
o
g
(
1
−
D
(
x
)
)
J^{(G)}(\theta^{(D)},\theta^{(G)})=E_{x \sim P_{G}}log(1-D(x))
J(G)(θ(D),θ(G))=Ex∼PGlog(1−D(x))
如上图,
l
o
g
(
1
−
D
(
X
)
)
log(1-D(X))
log(1−D(X))是我们计算G的loss function,在D(x)接近于0的时候,这个函数十分平滑,梯度非常的小。这就会导致,在训练的初期,G想要骗过D,变化十分的缓慢,而上面的函数,趋势和下面的是一样的,都是递减的。但是它的优势是在D(x)接近0的时候,梯度很大,有利于训练,在D(x)越来越大之后,梯度减小,这也很符合实际,在初期应该训练速度更快,到后期速度减慢。所以实际训练的时候,Discriminator仍然采用前面介绍的loss,但Generator采用下面的loss,这样可以提高训练的速度:
J
(
G
)
(
θ
(
D
)
,
θ
(
G
)
)
=
E
x
∼
P
G
l
o
g
(
D
(
x
)
)
J^{(G)}(\theta^{(D)},\theta^{(G)})=E_{x \sim P_{G}}log(D(x))
J(G)(θ(D),θ(G))=Ex∼PGlog(D(x))
对于来自
P
d
a
t
a
(
x
)
P_{data}(x)
Pdata(x)的一系列样本
{
x
1
,
x
2
,
.
.
.
,
x
m
}
\{x^1, x^2, ..., x^m\}
{x1,x2,...,xm},从
P
p
r
i
o
r
(
z
)
P_{prior}(z)
Pprior(z)中采样一系列噪声样本
{
z
1
,
z
2
,
.
.
.
,
z
m
}
\{z^1, z^2, ..., z^m\}
{z1,z2,...,zm},从而获得生成样本
{
x
~
1
,
x
~
2
,
.
.
.
,
x
~
m
}
\{\widetilde{x}^1, \widetilde{x}^2, ..., \widetilde{x}^m\}
{x
1,x
2,...,x
m},其中
x
~
i
=
G
(
z
i
)
\widetilde{x}^i = G(z^i)
x
i=G(zi)
固定G,找到一个最优的D能够正确区分fake/true,也就是对于来自真实分布中的x,D(x)要接近于1;对于来自生成分布中的x,D(x)要接近于0,从而实现
m
a
x
V
(
G
,
D
)
max V(G, D)
maxV(G,D):
V
=
E
x
∼
P
d
a
t
a
l
o
g
D
(
x
)
+
E
x
∼
P
G
l
o
g
(
1
−
D
(
x
)
)
≈
1
m
∑
i
=
1
m
l
o
g
D
(
x
i
)
+
1
m
∑
i
=
1
m
l
o
g
(
1
−
D
(
x
~
i
)
)
θ
D
←
θ
D
+
η
∇
V
(
θ
D
)
\theta_D \gets \theta_D+\eta \nabla V(\theta_D)
θD←θD+η∇V(θD)
从
P
p
r
i
o
r
(
z
)
P_{prior}(z)
Pprior(z)中采样另外m个噪声样本
{
z
1
,
z
2
,
.
.
.
,
z
m
}
\{z^1, z^2, ..., z^m\}
{z1,z2,...,zm}
固定D,找到一个最优的G可以迷惑D(让D以为是true),希望
D
(
G
(
z
)
)
D(G(z))
D(G(z))这一项越接近于1越好,也即是使
m
a
x
V
(
G
,
D
)
maxV(G,D)
maxV(G,D)尽可能小:
V
=
1
m
∑
i
=
1
m
l
o
g
(
1
−
D
(
G
(
z
i
)
)
)
V=\frac{1}{m}\sum^{m}_{i=1}log(1-D(G({z}^i)))
V=m1i=1∑mlog(1−D(G(zi))),
θ
G
←
θ
G
+
η
∇
V
(
θ
G
)
\theta_G \gets \theta_G+\eta \nabla V(\theta_G)
θG←θG+η∇V(θG)
当然判别器哪有这么好糊弄,所以这个时候判别器就会产生比较大的误差,误差会更新G,那么G就会变得更好了。
令
f
(
θ
D
)
=
P
d
a
t
a
(
x
)
l
o
g
D
(
x
)
+
P
G
(
x
)
l
o
g
(
1
−
D
(
x
)
)
f(\theta_D)=P_{data}(x)logD(x)+P_{G}(x)log(1-D(x))
f(θD)=Pdata(x)logD(x)+PG(x)log(1−D(x)),则有:
θ
D
∗
=
a
r
g
m
a
x
f
(
θ
D
)
\theta_D^* = arg max f(\theta_D)
θD∗=argmaxf(θD)
d
f
(
θ
D
)
d
θ
D
=
a
∗
1
θ
D
+
b
∗
1
1
−
θ
D
∗
(
−
1
)
=
0
\frac{df(\theta_D)}{d\theta_D}=a * \frac{1}{\theta_D} + b * \frac{1}{1-\theta_D} * (-1) = 0
dθDdf(θD)=a∗θD1+b∗1−θD1∗(−1)=0
a
∗
1
θ
D
∗
=
b
∗
1
a
−
θ
D
∗
a* \frac{1}{\theta_D^*} = b*\frac{1}{a-\theta_D^*}
a∗θD∗1=b∗a−θD∗1
a
∗
(
1
−
θ
D
∗
)
=
b
∗
θ
D
∗
a* (1-\theta_D^*) = b*\theta_D^*
a∗(1−θD∗)=b∗θD∗
θ
D
∗
=
a
a
+
b
\theta_D^* = \frac{a}{a+b}
θD∗=a+ba
θ
D
∗
(
x
)
=
P
d
a
t
a
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
\theta_D^*(x)=\frac{P_{data}(x)}{P_{data}(x)+P_{G}(x)}
θD∗(x)=Pdata(x)+PG(x)Pdata(x)
从而,
m
a
x
θ
D
V
=
V
(
θ
D
∗
)
=
E
x
∼
P
d
a
t
a
[
l
o
g
P
d
a
t
a
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
]
+
E
x
∼
P
G
l
o
g
[
P
G
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
]
=
∫
x
P
d
a
t
a
(
x
)
l
o
g
P
d
a
t
a
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
d
x
+
∫
x
P
G
(
x
)
l
o
g
P
G
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
d
x
=
−
2
l
o
g
2
+
∫
x
P
d
a
t
a
(
x
)
l
o
g
P
d
a
t
a
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
2
d
x
+
∫
x
P
G
(
x
)
l
o
g
P
G
(
x
)
P
d
a
t
a
(
x
)
+
P
G
(
x
)
2
d
x
=
−
2
l
o
g
2
+
K
L
(
P
d
a
t
a
(
x
)
∣
∣
P
d
a
t
a
(
x
)
+
P
G
(
x
)
2
)
+
K
L
(
P
G
(
x
)
∣
∣
P
d
a
t
a
(
x
)
+
P
G
(
x
)
2
)
这里有一个问题:Mode Collapse,data的分布是一个双峰的,但是学习到的生成分布却只有单峰,我们可以看到模型学到的数据,但是却不知道它没有学到的分布
造成这个情况的原因是,KL divergence里的两个分布写反了:
如果是第一个KL散度的写法,为了防止出现无穷大,所以有出现的地方都必须要有覆盖,就不会出现Mode Collapse
JS散度度量了两个概率分布的相似度,基于KL散度的变体,解决了KL散度非对称的问题。一般地,JS散度是对称的,其取值是0到1之间。定义如下:
J
S
(
P
1
∣
∣
P
2
)
=
1
2
K
L
(
P
1
∣
∣
P
1
+
P
2
2
)
+
1
2
K
L
(
P
2
∣
∣
P
1
+
P
2
2
)
JS(P_1 || P_2)=\frac{1}{2}KL(P_1 || \frac{P_1+P_2}{2})+\frac{1}{2}KL(P_2 || \frac{P_1+P_2}{2})
JS(P1∣∣P2)=21KL(P1∣∣2P1+P2)+21KL(P2∣∣2P1+P2),最终有:
V
(
θ
D
∗
)
=
−
2
l
o
g
2
+
2
J
S
(
P
d
a
t
a
(
x
)
∣
∣
P
G
(
x
)
)
V(\theta_D^*) =-2log2+2JS(P_{data}(x) || P_G(x))
V(θD∗)=−2log2+2JS(Pdata(x)∣∣PG(x))
观察上式,当
P
G
(
x
)
=
P
d
a
t
a
(
x
)
P_G(x)=P_{data}(x)
PG(x)=Pdata(x)时,G是最优的。
然而,经过许多次训练发现loss一直都是平的,也就是
m
a
x
D
V
(
G
,
D
)
=
0
\mathop{max}\limits_D V(G, D)=0
DmaxV(G,D)=0,JS散度一直都等于log2,
P
G
P_G
PG和
P
d
a
t
a
P_{data}
Pdata完全没有交集。但是实际上两个分布是有交集的,造成这个的原因是:
(1)我们无法真正计算期望和积分,只能使用sample的方法,如果训练的过拟合了,D还是能够完全把两部分的点分开。对于这个问题,我们是否应该让D变得弱一点,减弱它的分类能力,但是从理论上讲,为了让它能够有效的区分真假图片,我们又希望它足够powerful,所以这里就产生了矛盾;
(2)虽然两个分布都是高维的,但是两个分布都十分的窄,可能交集相当小,这样也会导致JS散度算出来等于log2,约等于没有交集。
解决的一些方法,有添加噪声,让两个分布变得更宽,可能可以增大它们的交集,这样JS散度就可以计算,但是随着时间变化,噪声需要逐渐变小。
两个网络交替训练,我们可以在起初有一个
G
0
G_0
G0和
D
0
D_0
D0,先训练
D
0
D_0
D0找到
m
a
x
D
V
(
G
0
,
D
0
)
\mathop{max}\limits_D V(G_0, D_0)
DmaxV(G0,D0),然后固定
D
0
D_0
D0开始训练
G
0
G_0
G0,训练的过程都可以使用gradient descent,以此类推,训练
D
1
,
G
1
,
D
2
,
G
2
,
.
.
.
D_1, G_1, D_2, G_2, ...
D1,G1,D2,G2,...
但是这里有个问题就是,你可能在
D
0
∗
D_0^*
D0∗的位置取到了
m
a
x
D
V
(
G
0
,
D
0
)
=
V
(
G
0
,
D
0
∗
)
\mathop{max}\limits_D V(G_0, D_0)=V(G_0, D_0^*)
DmaxV(G0,D0)=V(G0,D0∗),然后更新
G
0
G_0
G0为
G
1
G_1
G1,可能
V
(
G
1
,
D
0
∗
)
<
V
(
G
0
,
D
0
∗
)
V(G_1, D_0^*)<V(G_0, D_0^*)
V(G1,D0∗)<V(G0,D0∗)了,但是并不保证会出现一个新的点
D
1
∗
D_1^*
D1∗使得
V
(
G
1
,
D
1
∗
)
>
V
(
G
0
,
D
0
∗
)
V(G_1, D_1^*)>V(G_0, D_0^*)
V(G1,D1∗)>V(G0,D0∗),这样更新G就没达到它原来应该要的效果,如下图所示:
避免上述情况的方法就是更新G的时候,不要更新G太多。
我们的目的是通过最小化损失函数来最小化两个分布的距离,由于GAN中真实分布P和生成器定义的分布Q是高维空间的低维流形,即完全没有重叠或重叠可忽略不计的情况,这个时候生成器的分布变化后,两者的KL散度都没有变化(等于0),损失函数不变的话就没有梯度了,没梯度模型自然学不动了,所以这种情况下KL散度没有意义。
另外JS散度值是一个常数,这在学习算法中是比较致命的,这就意味这这一点的梯度为0,梯度消失了。
所以提出Wasserstein距离度量两个概率分布之间的距离,定义如下:
W
(
P
1
,
P
2
)
=
i
n
f
γ
∼
∏
(
P
1
,
P
2
)
E
(
x
,
y
)
∼
γ
[
∣
∣
x
−
y
∣
∣
]
W(P_1, P_2)=\mathop{inf}\limits_{\gamma \sim \prod(P_1, P_2)} \mathbb{E}_{(x,y) \sim \gamma}[||x-y||]
W(P1,P2)=γ∼∏(P1,P2)infE(x,y)∼γ[∣∣x−y∣∣]
∏
(
P
1
,
P
2
)
\prod(P_1, P_2)
∏(P1,P2)是P1和P2分布组合起来的所有可能的联合分布的集合。对于每一个可能的联合分布
γ
\gamma
γ,可以从中采样
(
x
,
y
)
∼
γ
(x,y) \sim \gamma
(x,y)∼γ得到一个样本x和y,并计算出这对样本的距离||x−y||,所以可以计算该联合分布
γ
\gamma
γ下,样本对距离的期望值
E
(
x
,
y
)
∼
γ
[
∣
∣
x
−
y
∣
∣
]
\mathbb{E}_{(x,y) \sim \gamma}[||x-y||]
E(x,y)∼γ[∣∣x−y∣∣]。在所有可能的联合分布中能够对这个期望值取到的下界就是Wasserstein距离:
i
n
f
γ
∼
∏
(
P
1
,
P
2
)
E
(
x
,
y
)
∼
γ
[
∣
∣
x
−
y
∣
∣
]
\mathop{inf}\limits_{\gamma \sim \prod(P_1, P_2)} \mathbb{E}_{(x,y) \sim \gamma}[||x-y||]
γ∼∏(P1,P2)infE(x,y)∼γ[∣∣x−y∣∣]
Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近;而JS散度在此情况下是常量,KL散度可能无意义。
考虑如下二维空间中的两个分布
P
1
P_1
P1和
P
2
P_2
P2,
P
1
P_1
P1在线段AB上均匀分布,
P
2
P_2
P2在线段CD上均匀分布,通过控制参数
θ
\theta
θ可以控制着两个分布的距离远近。
此时可以得到:
(
突
变
)
K
L
(
P
1
∣
∣
P
2
)
=
{
+
∞
i
f
θ
≠
0
0
i
f
θ
=
0
(突变)\quad KL(P_1||P_2)=\left\{
(
突
变
)
J
S
(
P
1
∣
∣
P
2
)
=
{
l
o
g
2
i
f
θ
≠
0
0
i
f
θ
=
0
(突变)\quad JS(P_1||P_2)=\left\{
(
平
滑
)
W
(
P
0
,
P
1
)
=
∣
θ
∣
(平滑)\quad W(P_0, P_1)=| \theta |
(平滑)W(P0,P1)=∣θ∣
如图所示例子,KL散度和JS散度是突变的,要么最大要么最小,Wasserstein距离却是平滑的,如果我们要用梯度下降法优化
θ
\theta
θ这个参数,前两者根本提供不了梯度,Wasserstein距离却可以。类似地,在高维空间中如果两个分布不重叠或者重叠部分可忽略,则KL和JS既反映不了远近,也提供不了梯度,但是Wasserstein却可以提供有意义的梯度。
交叉熵、相对熵(KL散度)、JS散度和Wasserstein距离(推土机距离)
相对熵(KL散度)
GAN: 原始损失函数详解
machine-learning gitbook
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。