• URL:
    NAME: Generative Adversarial Nets
    AUTHOR: Ian j. Goodfellow
    YEAR: 2014
    PUBLISHED: NIPS
    TAG: ((624166c6-e8db-466f-a5bf-827e5d7df141))
    CODE:
    IN A WORD:

abstract

提出了一个新的框架用来估计生成模型,通过对抗过程同时训练2个模型:生成模型,辨别模型。

what

image.png
被水标遮住的是VAE
可以看到,GAN是属于隐性生成模型
GAN顾名思义,就是生成对抗性网络。它的对抗体现在A(Adversarial)。

何为对抗

对抗网络实际上提出了一种新的框架,这种框架利用了对抗性训练过程,同时训练两个网络,两个网络之间相互博弈,互相进步。其中一个模型为生成模型,定义为G,另一个模型为判别模型,定义为D。
id:: 6242a0ad-7b2c-4434-ba2f-0b0083762af6
这两个模型一起对抗训练,生成模型产生一张图片去欺骗判别模型,然后判别模型去判断这张图片是真是假,最终在这两个模型训练的过程中,两个模型的能力越来越强,最终达到理想的纳什均衡状态。

GAN的缺陷

难训练

GAN的训练并非普通的凸优化问题,最大最小优化问题实质上是在找一个鞍点,随着训练次数增加,G、D的生成、判别能力越来越强,并且D的判别能力很容易影响G的生成能力,WGAN从理论上证明当D训练到最好的情况下,原始GAN中G的损失函数(实质上是一种对真实分布与生成分布的距离度量,如KL距离、JS距离、Wasserstein距离等)存在自相矛盾的缺陷,这也就导致GAN很难训练,微调敏感。

模式奔溃

模式崩溃指的是模型学习到真实样本的分布一部分,导致模型生成的样本非常单一,样本差异较小。

Conditional GAN

在Naive GAN中,我们设置的输入 z 为潜在向量,该向量从高斯分布中采样得到。而在CGAN中,我们的输入是两个:潜在向量和控制条件。
我们以 y 表示控制条件,它通常可以为一个one-hot向量,或者一个数值, z 为潜在向量, 那么生成结果就可以表示为$x = G(z | y)$。

🔔判别器的功能从一个变成乐两个,其一是判断G生成的图片复合真实样本的程度,其二是判断输入图片是否复合我们给定的条件y。

🔋 CGAN是有监督学习,采样的每一项都是一个pair对,如文字生成图片则需要文字和图片的GT pair。^^CGAN 的核心就是判断什么样的 pair 给高分,什么样的 pair 给低分。^^

辨别器

由于CGAN多了一个控制条件参数,所以辨别器也就出现了2种类型:
使用同一个辨别器

即生成的图片质量和符合要求需要同时通过 D 的”审查”

该辨别器$D(x|y), x\in G(z | y) or x\in Data$,Data为训练集的真实样本。对真实样本与标签的配对需要接近1,对于生成样本与标签需要接近于0,对于真实样本与不相符的标签,D的输出应该接近于0。
举个例子
条件 y 表示的是train,图片 x 也是一张清晰的火车照片, 那么 D 的输出就会是 1
image.png
而如下,左边虽然输出图片清晰,但不符合条件 c;右边输出图片不真实
image.png
D的输出都会是0
^^原始CGAN使用的方法^^
优化函数就变成了 image.png
很明显,就是将辨别器的参数变成了条件参数。

算法流程

image.png
可以看出来是先对辨别器进行的更新
image.png
第一项为正确条件与真实图片的pair,应该给高分;第二项为正确条件与仿造图片的pair,应该给低分(于是加上“1 ”的操作),第三项是错误条件与真实图片的pair,应该也给低分。

CGAN与GANs在判别器上的不同之处就是多除了第三项。

最后对生成器进行更新
image.png{:height 84, :width 493}