Generative Adversarial Nets笔记

GAN开山之作,论文中大量数学证明。链接

https://arxiv.org/abs/1406.2661

摘要

我们提出了一个通过对抗过程估计生成模型的新框架,在新框架中我们同时训练两个模型:一个用来捕获数据分布的生成模型G,和一个用来估计样本来自训练数据而不是G的概率的判别模型D,G的训练过程是最大化D产生错误的概率。这个框架相当于一个极小化极大的双方博弈。在任意函数G和D的空间中存在唯一的解,其中G恢复训练数据分布,并且D处处都等于1/2。在G和D由多层感知器定义的情况下,整个系统可以用反向传播进行训练。在训练或生成样本期间不需要任何马尔科夫链或展开的近似推理网络。 实验通过对生成的样品进行定性和定量评估来展示这个框架的潜力。



3.对抗网络

当模型都是多层感知器时,对抗模型框架是最直接应用的。为了学习生成器关于数据x上的分布Pg, 我们定义输入噪声的先验变量Pz(z),然后使用G(z;θg)来代表数据空间的映射,这里G是一个由含有参数θg 的多层感知机表示的可微函数。我们再定义了一个多层感知机D(x;θd)用来输出一个单独的标量。D(x) 代表x来自于真实数据分布而不是Pg的概率。我们训练D来最大化分配正确标签给来自于训练样例和由G生成的样例的概率。我们同时训练G来最小化log(1−D(G(z))):


公式解释:x是真实的数据,因此要判别器要判断x最大(接近1),即D(x)最大.z是随机噪声,用随机噪声和生成器生成G(z),再用判别器D判别这个数据是真实的还是虚假的D(G(x)).因为这个数据是虚假的,因此要使得log(1-D(G(x)))最小。即D(G(x))最大。

实际上,方程1可能无法为G提供足够的梯度来学习。训练初期,当G的生成效果很差时,D会以高置信度来拒绝生成样本,因为它们与训练数据明显不同。在这种情况下,log(1−D(G(z)))饱和。因此我们选择最大化logD(G(z))而不是最小化log(1−D(G(z))) 来训练G,该目标函数使G和D的动力学稳定点相同,并且在训练初期,该目标函数可以提供更强大的梯度。

<!--

  • G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片,记做G(z)。
  • D是一个判别网络,判别一张图片是不是“真实的”。它的输入参数是x,x代表一张图片,输出D(x)代表x为真实图片的概率,如果为1,就代表100%是真实的图片,而输出为0,就代表不可能是真实的图片。

在训练过程中,生成网络G的目标就是尽量生成真实的图片去欺骗判别网络D。而D的目标就是尽量把G生成的图片和真实的图片分别开来。这样,G和D构成了一个动态的“博弈过程”。

最后博弈的结果是什么?在最理想的状态下,G可以生成足以“以假乱真”的图片G(z)。对于D来说,它难以判定G生成的图片究竟是不是真实的,因此D(G(z)) = 0.5。(转自https://www.cnblogs.com/baiting/p/8314936.html

!-->


算法:

算法1.生成对抗网络的minibatch随机梯度下降训练。判别器的训练步数,k是一个超参数。在我们的试验中使用k=1,使消耗最小

for number of training iterations do

for k steps do:

在噪声先验分布为Pg(z)的m个噪声样本{z(1),...,z(m)}中采样一个minibatch.

在数据分布为pdata(x)的m个训练样本{x(1),...,x(n)}中采样一个minibatch.

通过随机梯度上升来更新判别器:

end for

在噪声先验分布为Pg(z)的m个噪声样本{z(1),...,z(m)}中采样一个minibatch.

通过随机梯度下降来更新判别器.

end for

猜你喜欢

转载自blog.csdn.net/qq_31390999/article/details/90573703