GAN
计算过程
目标: 学习一个在x上的分布 p g p_g pg
定义:
随机噪声z作为输入: P z ( z ) P_{z}(z) Pz(z)
生成网络函数: G ( z ; Θ g ) G(z;\Theta_g) G(z;Θg)用来表示可导函数G在参数 θ g \theta_g θg下的函数
判别网络函数: D ( x ; θ d ) D(x;\theta_d) D(x;θd)的输出是一个{0,1}标量,D(x)表示x是否为从真实样本中取的样例。
对于判别网络而言:它的目标是最大程度的识别出真实样本和*生的对抗样本。
对于生成网络而言,它的目标是让判别器无法识别*生的对抗样本:
最小化这个函数等价于最大化
l
o
g
(
D
(
G
(
z
)
)
)
log(D(G(z)))
log(D(G(z))),因为越接近1表示样本越接近真实。
l
o
g
(
1
−
D
(
G
(
z
)
)
)
log(1-D(G(z)))
log(1−D(G(z)))
在训练的初期,D可以轻识别出*生的样本,因此,在该条件下
l
o
g
(
1
−
D
(
G
(
z
)
)
)
log(1-D(G(z)))
log(1−D(G(z)))是饱和的,所以可以使用一个等价的损失函数:
l
o
g
(
D
(
G
(
z
)
)
)
log(D(G(z)))
log(D(G(z)))作为优化目标(log trick)。
训练过程
最小化最大化的过程:
1. 先训练一个最优的判别器;
2. 基于最优的判别器训练一个最优的生成器
训练过程:往往先把判别器训练K次,然后生成器再训练一次,使得判别器总是要比生成器强一些。
存在的问题
梯度消失
当判别器目标函数达到最大值的时候,可以得到最优的判别网络为:
代入GAN的整体损失函数可以得到:
当判别网络最优的时候, P r 和 P Θ P_r和\space P_{\Theta} Pr和 PΘ应该是无限接近的,则这两个分部的JS散度为0,导致整个网络的优化目标变为 − 2 l o g 2 -2log2 −2log2,这是一个没有梯度的常量。所以证明了梯度消失是存在的。
模型坍塌
概念:训练集中有很多类别,但是GAN只能产生其中某几类。
产生原因:在最优判别网络的条件下,生成网络的目标函数更多的收到逆向KL散度的影响,使用逆向KL散度带来的负面影响就是它会尽可能避开所有真实分布中约等于0的点,所以生成的图像都集中在某几个类别中。
TODO
一些概念:
KL散度:计算信息增益,它是两个概率分布P和Q差别的非对称度量,是用来度量使用基于Q的编码来编码来自P的样本平均所需的额外位元数。
JS散度:用来度量两个概率分布的相似度。
Wasserstein距离:E(x,y)∼γ[||x−y||]可以理解为在这个路径规划下把P1推导P2的消耗,而Wass距离表示在该路径下的最小消耗。
W距离相比KL和JS散度的优势在于:即使两个分部的支撑集合(我理解为样本)没有重叠或者重叠非常少,仍然能反映两个分布的远近。而JS在此情况下是常量,KL散度可能没有意义。
一些疑问:
应该算一些trick。
在训练生成网络的时候,使用ReLU和sigmoid进行激活;
在训练判别网络的时候,使用maxout进行激活,并使用droppout来防止过拟合。