对于GANs原始论文的理解

1. 训练过程以及理解

  GAN要同时训练一个生成网络(Generator)和一个判别网络(Discriminator),前者输入一个noise变量z,输出一个伪图片数据 G ( z ; θ g ) G\left ( z;\theta _{g} \right ) G(z;θg),后者输入一真实图片(real image)以及伪图片(fake image)数据 x ,输出一个表示该输入是真实图片或者伪造图片的二分类置信度 G ( x ; θ d ) G\left ( x;\theta _{d} \right ) G(x;θd),理想情况下,判别器 D 需要尽可能准确的判断输入数据到底是一个真实图片还是某种伪造的图片,而生成器G又需要尽最大可能去欺骗D,让D把自己产生的伪造图片全部判断为真实的图片。然后我们就这样互相欺骗,互相成长,乐此不疲。
根据上述训练过程的描述,我们可以定义一个损失函数:
L o s s F u n c t i o n = 1 m ∑ i = 1 m [ l o g D ( x i ) + l o g ( 1 − D ( G ( z i ) ) ) ] Loss Function=\frac{1}{m}\sum_{i=1}^{m}\left [ logD\left ( x^{i} \right ) +log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right )\right ] LossFunction=m1i=1m[logD(xi)+log(1D(G(zi)))]
其中, x i x^{i} xi, z i z^{i} zi分别表示真实的图片,noise变量。
优化目标为 :
m i n G m a x D L o s s F u n c t i o n = 1 m ∑ i = 1 m [ l o g D ( x i ) + l o g ( 1 − D ( G ( z i ) ) ) ] min_{G}max_{D} Loss Function=\frac{1}{m}\sum_{i=1}^{m}\left [ logD\left ( x^{i} \right ) +log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right )\right ] minGmaxDLossFunction=m1i=1m[logD(xi)+log(1D(G(zi)))]
训练网络D使得最大概率地分对训练样本的标签(最大化 l o g D ( x i ) logD\left ( x^{i} \right ) logD(xi)),训练网络G最小化KaTeX parse error: Expected '\right', got 'EOF' at end of input: …ight ) \right ),即最大化D的损失,使得G生成的图片尽可能真实,训练过程中固定一方,更新另一个网络的参数,交替迭代,使得对方的错误最大化。

不过需要注意的一点是,实际训练过程中并不是直接在上述优化目标上对 θ d \theta_{d} θd, θ g \theta_{g} θg 计算梯度,而是分成几个步骤:
训练判别器即更新 θ d \theta_{d} θd:循环k次,每次准备一组real image数据 x = x 1 , x 2 , ⋅ ⋅ ⋅ , x m x=x^{1},x^{2},\cdot \cdot \cdot ,x^{m} x=x1,x2,,xm和一组fake image数据 z = z 1 , z 2 , ⋅ ⋅ ⋅ , z m z=z^{1},z^{2},\cdot \cdot \cdot ,z^{m} z=z1,z2,,zm ,计算
▽ θ d 1 m ∑ i = 1 m [ l o g D ( x i ) + l o g ( 1 − D ( G ( z i ) ) ) ] \triangledown _{\theta _{d}}\frac{1}{m}\sum_{i=1}^{m}\left [ logD\left ( x^{i} \right ) +log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right ) \right ] θdm1i=1m[logD(xi)+log(1D(G(zi)))]
然后梯度上升法更新 θ d \theta_{d} θd

训练生成器即更新 θ g \theta_{g} θg:准备一组fake image数据 z = z 1 , z 2 , ⋅ ⋅ ⋅ , z m z=z^{1},z^{2},\cdot \cdot \cdot ,z^{m} z=z1,z2,,zm ,计算
▽ θ g 1 m ∑ i = 1 m [ l o g ( 1 − D ( G ( z i ) ) ) ] \triangledown _{\theta _{g}}\frac{1}{m}\sum_{i=1}^{m}\left [log\left ( 1-D\left ( G\left ( z^{i} \right ) \right ) \right ) \right ] θgm1i=1m[log(1D(G(zi)))]
然后梯度下降法更新 θ g \theta_{g} θg

可以看出,第一步内部有一个k层的循环,某种程度上可以认为是因为我们的训练首先要保证判别器足够好然后才能开始训练生成器,否则对应的生成器也没有什么作用,然后第二步求提督时只计算fake image那部分数据,这是因为real image不由生成器产生,因此对应的梯度为 0.

具体的流程如下:
uuu

2. GAN的优势与缺陷
与其他生成式模型相比较,生成式对抗网络有以下四个优势
  1. 根据实际的结果,它们看上去可以比其它模型产生了更好的样本(图像更锐利、清晰)。
  2. 生成对抗式网络框架能训练任何一种生成器网络(理论上-实践中,用 REINFORCE 来训练带有离散输出的生成网络非常困难)。大部分其他的框架需要该生成器网络有一些特定的函数形式,比如输出层是高斯的。重要的是所有其他的框架需要生成器网络遍布非零质量(non-zero mass)。生成对抗式网络能学习可以仅在与数据接近的细流形(thin manifold)上生成点。
  3. 不需要设计遵循任何种类的因式分解的模型,任何生成器网络和任何鉴别器都会有用。
  4. 无需利用马尔科夫链反复采样,无需在学习过程中进行推断(Inference),回避了近似计算棘手的概率的难题。
    与PixelRNN相比,生成一个样本的运行时间更小。GAN 每次能产生一个样本,而 PixelRNN 需要一次产生一个像素来生成样本。
    与VAE 相比,它没有变化的下限。如果鉴别器网络能完美适合,那么这个生成器网络会完美地恢复训练分布。换句话说,各种对抗式生成网络会渐进一致(asymptotically consistent),而 VAE 有一定偏置。
    与深度玻尔兹曼机相比,既没有一个变化的下限,也没有棘手的分区函数。它的样本可以一次性生成,而不是通过反复应用马尔可夫链运算器(Markov chain operator)。
    与 GSN 相比,它的样本可以一次生成,而不是通过反复应用马尔可夫链运算器。
    与NICE 和 Real NVE 相比,在 latent code 的大小上没有限制。
GAN目前存在的主要问题:
  1. 解决不收敛(non-convergence)的问题。
    目前面临的基本问题是:所有的理论都认为 GAN 应该在纳什均衡(Nash equilibrium)上有卓越的表现,但梯度下降只有在凸函数的情况下才能保证实现纳什均衡。当博弈双方都由神经网络表示时,在没有实际达到均衡的情况下,让它们永远保持对自己策略的调整是可能的【OpenAI Ian Goodfellow的Quora】。
  2. 难以训练:崩溃问题(collapse problem)
    GAN模型被定义为极小极大问题,没有损失函数,在训练过程中很难区分是否正在取得进展。GAN的学习过程可能发生崩溃问题(collapse problem),生成器开始退化,总是生成同样的样本点,无法继续学习。当生成模型崩溃时,判别模型也会对相似的样本点指向相似的方向,训练无法继续。【Improved Techniques for Training GANs】
  3. 无需预先建模,模型过于自由不可控。
    与其他生成式模型相比,GAN这种竞争的方式不再要求一个假设的数据分布,即不需要formulate p(x),而是使用一种分布直接进行采样sampling,从而真正达到理论上可以完全逼近真实数据,这也是GAN最大的优势。然而,这种不需要预先建模的方法缺点是太过自由了,对于较大的图片,较多的 pixel的情形,基于简单 GAN 的方式就不太可控了。在GAN[Goodfellow Ian, Pouget-Abadie J] 中,每次学习参数的更新过程,被设为D更新k回,G才更新1回,也是出于类似的考虑。

参考:https://blog.csdn.net/solomon1558/article/details/52549409

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值