生成对抗网络(Generative Adversarial Nets)学习笔记

生成对抗网络(Generative Adversarial Nets)学习笔记

  • 前言
  • 自动编码器VAE
  • Feature Disentangle
  • GANS
    • nature GAN
    • 反向nature GAN
    • CGAN
      • Supervised CGAN
      • Stack GAN
      • Patch GAN
      • Unsupervised CGAN
        • Direct Transformation
          • Cycle GAN
          • Star GAN
        • Projection to Common Space
    • Least Square GAN
    • Wasserstein GAN
    • Energy-based GAN
    • info GAN
    • VAE-GAN
    • BiGAN
  • GAN Evaluation

前言

根据讲义为bilibili的李宏毅对抗生成网络(GAN):https://www.bilibili.com/video/av24011528/?p=1
根据课件和作业:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS18.html

自动编码器VAE

生成对抗网络(Generative Adversarial Nets)学习笔记_第1张图片
Tips:简单来说是训练两个网络,首先输入一个随机向量,经过一个encoder编码器得到两个参数m和σ,然后得出c向量,将c向量作为输入输入进decoder解码器,得到output,我们需要做的就是minimize上图的函数,更新两个神经网络的参数后做到output和input尽量相似。输入图片的情况是类似的?
生成对抗网络(Generative Adversarial Nets)学习笔记_第2张图片
Tips:但是这种网络效果不好,VAE模型生成的所有输出都是分布的平均,相比gan的效果要差但是速度快

Feature Disentangle

生成对抗网络(Generative Adversarial Nets)学习笔记_第3张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第4张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第5张图片
Tips:简单来说就是利用不同的encoder训练特征分离。

GANS

nature GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第6张图片
Tips:将一串随机数的向量通过生成器生成一张图片,让鉴别器对图片进行评价,然后对生成器进行更新。简单来说就是让机器为我们生成东西,再让机器对它评价。
生成对抗网络(Generative Adversarial Nets)学习笔记_第7张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第8张图片
Tips:训练鉴别器的时候,首先先由生成器生成m张图片,接下来调整θ来最大化函数V,V中的D(x)鉴别器对该生成图片的评价,前者的意思是对真实图片的评分越大越好,后者评价越低越好,然后就是用类似Gradient Descent的方式来改变θ。训练生成器的时候,同样也是定义一个函数V来最大化,将噪音的samples作为输入通过生成器产生图片后让鉴别器评价,之后类似。
生成对抗网络(Generative Adversarial Nets)学习笔记_第9张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第10张图片
接下来具体说的是生成器Generator和鉴别器Discriminator的更新方法
Tips:首先我们需要找到data的分布概率
生成对抗网络(Generative Adversarial Nets)学习笔记_第11张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第12张图片
Tips:为了让他生成的图片更好,使得生成器生成的图片的分布概率跟data的分布概率高度相同,用一个函数G来表示,最小化PG和Pdata的Div也就是差异Divergence,接下来就是要学习方式来表示这个div函数,这里就用到了discriminator
生成对抗网络(Generative Adversarial Nets)学习笔记_第13张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第14张图片
Tips:方法类似交叉熵,但是是最大化函数V,Ex~Pdata意思是x是从data里sample出来的,第一个式子的意思就是最大化剪别器对data里数据的评价。这里的函数D其实也就类似于我们上文的Div函数,这里最大化D其实就是最小化Div,因为最大化D的意思就能分辨两种图片的能力强,这样的话div函数就是两者的区别就是最小化了,对于生成器而言是要最小化div而对于鉴别器而言是最大化D*,两者分开,接下来是做法总结?
生成对抗网络(Generative Adversarial Nets)学习笔记_第15张图片
Tips:假设选择G1时,最大化V(G,D),则是图一上的那个红点能最大化,然后又要最小化不同G和D的V值,那么就是从三个图中的最高点选择最小的那个点,即G3是所求。
生成对抗网络(Generative Adversarial Nets)学习笔记_第16张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第17张图片
Tips:每一次迭代要多次训练鉴别器来找到maxV,然后一次训练生成器来更新参数

反向nature GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第18张图片

生成对抗网络(Generative Adversarial Nets)学习笔记_第19张图片
Tips:相比于nature GAN是输入向量输出图片,这里能做到的是由图片特征取出向量中的某一特征值

CGAN

Supervised CGAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第20张图片
Tips:这里的例子使用text to image的例子
生成对抗网络(Generative Adversarial Nets)学习笔记_第21张图片
Tips:这里先sample出良好的例子对,c为输入的一段文字叙述,x为生成器生成的图片,然后一样生成噪音z,将c和噪音z相加作为输入输入进生成器产生一组x’。现在开始最大化函数V,将式子分为三部分,第一部分的意思是,让剪别器判断如果输入c和生成x正确,给高分,第二部分是文字c和生成器x的图片中x不好,给低分,如果是文字c和生成器x的结果无法配在一起,也要给低分。这三种情况在?
生成对抗网络(Generative Adversarial Nets)学习笔记_第22张图片
Tips:唯一正确的情况是图对文且图清晰,另外两个不正确的情况是图不对文或者图不好
生成对抗网络(Generative Adversarial Nets)学习笔记_第23张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第24张图片

Stack GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第25张图片
Tips:简单来说的意思就是先产生小张的图,然后根据小张的图生成大张的图,比如第一个生成器输入文字输出小图,然后第二个生成器输入同样的文字和上个小图,然后输出一个较大的图,同理两个生成器处都有鉴别器来评分

Patch GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第26张图片
Tips:简单来说就是相比于上文中GAN对整张图片的评价,此处采用一些小范围的像素来进行评价

Unsupervised CGAN

Direct Transformation

生成对抗网络(Generative Adversarial Nets)学习笔记_第27张图片
Tips:适合小型转换,这里使用类风格转换的例子。

Cycle GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第28张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第29张图片
Tips:这样使得Domain X经过Gx->y生成的图片要和原图差不多,Domain Y也同理,这时候再经过鉴别器来生成。

Star GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第30张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第31张图片
Tips:先训练一个鉴别器判断是要哪个domain,再用生成器,此处输入多了一个目标风格,生成图片,再用这个图片输入同样的生成器,生成还原图片希望它和输入图片一样,然后用这个第一个生成器生成的图片经过辨别器来评分。

Projection to Common Space

生成对抗网络(Generative Adversarial Nets)学习笔记_第32张图片
Tips:经过编码器从中抽取input的特征,再用decoder生成,这种做法适合较大的变换
生成对抗网络(Generative Adversarial Nets)学习笔记_第33张图片
Tips:训练两对网络,使用类似Cycle GAN的格式,最后结果是希望通过Domain X的Encoder X的结果和如图输入Encoder Y的结果类似,这样就能满足?
生成对抗网络(Generative Adversarial Nets)学习笔记_第34张图片

Least Square GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第35张图片Tips:将评分的sigmoid换成线性防止梯度消失

Wasserstein GAN

Tips:用基础的JS divergence会遇到问题,如果两个分布没有重合,他们的divergence是一样的,即不会由PG0更新至PG1,可以使用WGAN来解决
生成对抗网络(Generative Adversarial Nets)学习笔记_第36张图片
Tips:假设存在两个分布P和Q,现在要求P和Q的divergence,即可以理解为将Q的点移动,移动到能和P一摸一样分布的距离
生成对抗网络(Generative Adversarial Nets)学习笔记_第37张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第38张图片
Tips:穷举方式得到最短d,那么接下来就是要求最短的d了,此处的γ为moving plan,穷举所有xp,xq的组合,计算有多少从xp移动到xq,再计算xp和xq差了多少,这样就得到了β(γ)
生成对抗网络(Generative Adversarial Nets)学习笔记_第39张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第40张图片
生成对抗网络(Generative Adversarial Nets)学习笔记_第41张图片
Tips:同样是x从Pdata中sample则越大越好,反之PG越小越好,此处的鉴别器D要足够平滑,即斜率不能太大?方法
生成对抗网络(Generative Adversarial Nets)学习笔记_第42张图片
Tips:增加一个惩罚项,惩罚分布即data分布和G分布中间部分
生成对抗网络(Generative Adversarial Nets)学习笔记_第43张图片

Energy-based GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第44张图片
Tips:将Discriminator改成类似auto encoder的方式,输入一张image,计算reconstruction error,Generator不变。使用这种方法的好处是可以pre-train这个auto encoder,这样Discriminator开始的时候就很强,对Generator评价的能力就很强

info GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第45张图片
Tips:首先将input的vector转化成两部分c和z‘,通过得到的x经过分类器推导出结果c,也就是输入的那个c,可以将此处c理解为vector的特征,然后用discriminator判断x是不是真实的图片。这样做的好处能让input的每个feature都能影响到output

VAE-GAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第46张图片
Tips:将VAE和GAN结合,从VAE来看是input和output越接近越好,reconstruction loss越低越好,而从GAN来看,希望生成的image越真实越好,这样最后的结果就是能更好的训练,因为discriminator需要判断它是不是真实的,生成的,重构的。
生成对抗网络(Generative Adversarial Nets)学习笔记_第47张图片

BiGAN

生成对抗网络(Generative Adversarial Nets)学习笔记_第48张图片Tips:用两个完全不相关的encoder和decoder,encoder输入真实的image,输出向量z,而decoder输入某个分布的z,输出生成的imge。接下来训练一个Discriminator,要让它能做到输入一对z和image,若是encoder的那一对就给它高分因为是真实的,若是decoder的那一对就给它低分,然后再让encoder和decoder给encoder的那一对低分,给decoder的那一对高分,恰恰与Discriminator相反。最后的理想目标是学到分布P和分布Q是完全相同的。
生成对抗网络(Generative Adversarial Nets)学习笔记_第49张图片

GAN Evaluation

生成对抗网络(Generative Adversarial Nets)学习笔记_第50张图片
Tips:这里用的是Inception net,第一项考虑的是每个x的Distribution,判断它产生的好不好,另外一项则是平均Distribution,同时衡量这两项
生成对抗网络(Generative Adversarial Nets)学习笔记_第51张图片

你可能感兴趣的:(对抗生成网络)