生成对抗网络原始论文重点解读
原文:https://arxiv.org/pdf/1406.2661.pdf
一、GAN基础
“D和G的训练是关于值函数V(G, D)的极小极大化的二人博弈问题”。
其中:
等价于
因此可以看作是最小化交叉熵,不断最小化交叉熵的结果使得判别器D判别真实数据和生成的假数据的能力逐渐增强。形象地说就是使得D将真实数据和假数据尽最大能力的分开。
In practice, equation may not provide sufficient gradient for G to learn well. Early in learning, when G is poor, D can reject samples with high confidence because they are clearly different from the training data. In this case, log(1 − D(G(z))) saturates. Rather than training G to minimize log(1 − D(G(z))) we can train G to maximize log D(G(z)).
实际上,等式(1)没有提供给生成器G不断优化所需的足够梯度。因此在训练的初期,当生成器G还很弱时,由于生成的假数据明显不同于训练的真实数据,判别器D有高的置信度去拒绝这些假样本。在这里, log(1−D(G(z))) l o g ( 1 − D ( G ( z ) ) ) 是饱和的。因此,我们用最大化 logD(G(z)) l o g D ( G ( z ) ) 替代最小化 log(1−D(G(z))) l o g ( 1 − D ( G ( z ) ) ) 来训练G。我们可以通过下面的图来看看:
很明显, log(1−D(G(x))) l o g ( 1 − D ( G ( x ) ) ) 函数的导数由小变大,说明起初训练时更新速度会很慢(训练方法为mini-SGD)。但相反, logD(G(z)) l o g D ( G ( z ) ) 函数的导数由大变小,符合我们实际训练时的要求(起初提供的梯度大,更新速度快,越接近最优值时更新的幅度越小)。
二、全局最优推导
命题1
固定生成器G,我们考虑最优的
D∗
D
∗
:
对于这个积分,要取其最大值,我们希望对于给定的x,积分里面的项是最大的,也就是我们希望取到一个最优的 D∗ D ∗ ,使得下面这个式子最大化
我们通过求导:
令上式等于0,整理得:
下图帮助理解:
该图转自译文 | 2014,初见GAN:解读GAN原始论文(含译文PDF下载)
定理1
当且仅当
pg=pdata
p
g
=
p
d
a
t
a
时,
C(G)
C
(
G
)
达 到
−log4
−
l
o
g
4
。
证明:
将
由于JS散度是大于等于0小于等于1的(当P1,P2完全相同时,那么JS =0, 如果完全不相同,那么就是1)。因此当 pg=pdata p g = p d a t a 时, C(G) C ( G ) 有最小值 -log4。
我们还可以这样理解,这个max值其实就是由JSD divergence和一个常数(-log4)构成的,这个max的值相当于衡量 Pdata(x) P d a t a ( x ) 与 Pg(x) P g ( x ) 的差异程度。所以这个时候,我们只要取:
三、GAN资源
[1] 交叉熵代价函数和KL散度/JS散度等概率距离度量
[2] Gan的数学推导
[3] 李宏毅老师的gan
[4] GAN完整理论推导与实现,Perfect!
[5] 生成对抗网络知识资料全集(论文/代码/教程/视频/文章等)
[6] GAN对抗网络相关资源
[7] 李宏毅深度学习视频 GAN(2017)