自学参考:
thispersondoesnotexist
Generative Adversarial Nets
GAN论文逐段精读
视频课
课件+资料
笔记
一、引入
输入network的,除了x以外还有一个从某一简单的(已知)分布中随机采样得到的一个random的variable z z z
分布:高斯分布、均一分布
方法:
- X,Z两个向量直接接起来,变成一个比较长的向量,作为network的input
- X跟Z正好长度一样,相加以后,当做network的input
从network输出的也将是一个分布。
-
Creativity
-
Unconditional Generation:没有 x x x,只看 z z z
Z是从一个normal distribution(z所选择的不同的distribution之间的差异并没有真的非常大,generator会想办法把这个简单的distribution对应到一个复杂的distribution。⇒可以简单地选择“正态分布”)里sample出来的向量,通常会是一个low-dimensional的向量
一张图片就是一个非常高维的向量,所以generator实际上做的事情,就是产生一个非常高维的向量
当你输入的向量不同的时候,你的输出就会随之改变
-
Discriminator(判别器)
-
Basic Idea of GAN
二、GAN
Algorithm
以生成动漫人像为例
-
初始化generator与discriminator。开始以下迭代:
-
Fix generator G, and update discriminator D
(1)generator的参数,是随机初始化的,从这个高斯分布中,去random sample一堆vector丢到generator里,出一些图片会跟正常的二次元人物非常的不像。
(2)对discriminator来说,这就是一个分类的问题,或者是回归的问题。需要拿真正的二次元人物头像,跟generator产生出来的结果,去训练你的discriminator,分辨他们的差异:
① 如果视作分类的问题,你就把真正的人脸当作类别1,Generator产生出来的,这些图片当作类别2,然后训练一个classifier
②如果视为regression的问题,让discriminator看到真实二次元人脸图片就输出1,看到生成的图片你就输出0
-
Fix discriminator D, and update generator G
固定住判别器,训练Generator,目标是Discriminator的输出值越大越好
⇒假设Discriminator已经能够分辨照片的真假,让它觉得是真正的图片的话,那generator产生出来的图片,可能就可以以假乱真
另一个角度,把generator跟Discriminator直接接起来,当做一个比较大的network来看待,通过调整前几层Generator部分的参数,使得整个模型的输出分数越大越好。
用gradient ascent,调整generator,让目标函数越大越好。
Theory
- 目标objective:让生成器产生的和真实数据的分布尽可能接近
- 从normal distribution中采样一堆vector给generator,产生一个较复杂的distribution,这个较复杂的distribution称为PG
- 有一堆真正的Data形成了另外一个distribution,叫做Pdata
我们的目标是PG和Pdata越接近越好
- 散度divergence衡量分布之间的距离
通过sample数据,借助discriminator来计算 - 训练discriminator
- 看到real data,就给比较高的分数
- 看到generative的data,就给比较低的分数
- 公式形式:
- V:对于从Pdata里sample出来的真正的image,希望其评分越高越好;从PG即generator所产生的image,希望其评分越低越好
- V式子经过推导可以发现,他和JS散度有关,可以衡量两个分布之间的距离
- 训练过程等价于训练一个二元分类器
其中,V的形式等价于crossentropy乘上负号
- 思考:
- PG 跟