学习记录(三)

1. 生成对抗网络(GAN)

Algorithm:
Initialize θd for D(discriminator)and θg for G(generator)

  • 在每一个训练迭代周期:
  1. 从database中采样出m个数据{x1,x2,…,xm}
  2. 从一个噪声分布(正态分布、高斯分布等)中采样出m个random vector{z1,z2,…,zm}
  3. 由采样得到的m个vector得到m张image(一个vector经过generator后产生一个image),即
  4. 更新discriminator的参数θd 来最大化:


    第一个式子表示通过discriminator网络后真实图片(xi)的得分高,generator产生的图片(x一把i)的得分低 。
    第二个式子表示梯度上升法(加号),不断更新,使得第一个式子的V越大越好。

到此为止上面为discriminator网络。

接下来为generator网络。

  1. 从一个噪声分布(正态分布、高斯分布等)中采样出m个random vector {z1,z2,…,zm}(不需要与2中的相同)
  2. 更新generator的参数θg 来最大化:


    第一个式子表明希望generator产生的图片通过discriminator后的分数越大越好。
    第二个式子表示梯度上升法(加号),不断更新,使得第一个式子的V越大越好。

discriminator网络和generator网络会反复的执行。

GAN as structured learning

structured learning:output a sequence,a matrix,a graph,a tree… 当模型输出复杂时,为结构模型。

  • Generator(Bottom Up): Learn to generate the object at the component level
  • Discriminator(Top Down): Evaluating the whole object, and find the best one

Auto-encoder:

生成对抗网络损失函数图 生成对抗网络算法_正态分布

Generator相当于图中的Decoder,Randomly generate a vector as code,然后这个code通过Generator产生Image。

Variational Auto-encoder(VAE):

生成对抗网络损失函数图 生成对抗网络算法_正态分布_02


Discriminator:

  • Discriminator is a function D(network,can deep)
    Input x:an object x(e.g. an image)
    Output D(X):scalar which represents how “good” an object x is
  • Suppose we already have a good discriminator D(x)…
  • 生成对抗网络损失函数图 生成对抗网络算法_生成对抗网络损失函数图_03

  • 所以其实discriminator自己也可以产生输出。

Discriminator - Training:

  • General Algorithm
  1. Given a set of positive examples,randomly generate a set of negative examples.
  2. In each iteration,learn a discriminator D that can discriminate positive and negative examples.
  3. Generate negative examples by discriminator D.

(即不断用discriminator生成的图像去替换negative examples)

生成对抗网络损失函数图 生成对抗网络算法_Domain_04


如图,蓝色的即为negative examples。看哪些非目标的分数高,就把negative examples移过去作为新的negative examples.

最后重合的时候训练结束:

生成对抗网络损失函数图 生成对抗网络算法_Domain_05

Discriminator - Generator之间的区别:

  • Generator:
    优点是容易产生图片,缺点是只能学习表象,很难学习pixel之间的联系,只是生硬地模仿。
  • Discriminator:
    优点是它会考虑大局,缺点是negative采样很难搞嘞。

Discriminator + Generator:

就是把:

生成对抗网络损失函数图 生成对抗网络算法_生成对抗网络损失函数图_03


换成:

生成对抗网络损失函数图 生成对抗网络算法_Domain_07


即用Generator去产生negative examples.

妙啊

2. Conditional GAN

Generator:

生成对抗网络损失函数图 生成对抗网络算法_Domain_08

discriminator:

生成对抗网络损失函数图 生成对抗网络算法_迭代_09


discriminator需要考虑两个问题:x是否真实,c和x是否match。

Algorithm:

  • 在每个训练迭代周期:
  1. 从database中采样m个positive examples{(c1,x1),(c2,x2),……,(cm,xm)}(c是text,x是image)
  2. 从一个噪声分布中采样出m个random vector{z1,z2,…,zm}
  3. 由采样得到的positive examples和噪声得到m张image,即
  4. 再去database里去采样m个positive examples {x1,x2,……,xm}
  5. 更新discriminator的参数θd 来最大化:


    第一个式子表示c和x配对则得分高(logD(ci,xi)),而一段文字c和generate出来的x配对则为低分(第二项),而一段文字c和从database出来的x配对也为低分(第三项)。
    第二个式子表示梯度上升法(加号),不断更新,使得第一个式子的V越大越好。

到此为止上面为discriminator网络。

接下来为generator网络。

  1. 从一个噪声分布中采样出m个random vector {z1,z2,…,zm}(不需要与2中的相同)
  2. 从database的m种condition中采样出m个{c1,c2,…,cm}
  3. 更新generator的参数θg 来最大化:


    第一个式子表明希望generator产生的图片通过discriminator后的分数越大越好。
    第二个式子表示梯度上升法(加号),不断更新,使得第一个式子的V越大越好。(图中好像写错了…

discriminator网络和generator网络会反复的执行。


3. Unsupervised Conditional GAN

Transform an object from one domain to another without paired data(e.g. style transfer)

  • 方法一:直接Transformation(转换差距较小)
  • 方法二:Projection to Common Space(转换差距较大)

方法一:Direct Transformation


生成对抗网络损失函数图 生成对抗网络算法_正态分布_10

这种做法很有可能Generator会忽略输入,输出一些与输入无关的,为了能骗过Discriminator。

Cycle GAN:


生成对抗网络损失函数图 生成对抗网络算法_迭代_11


同时去训练两个generator和两个discriminator。

类似的Disco GAN、Dual GAN等根Cycle GAN其实都是一样的思路。方法二:Projection to Common Space


生成对抗网络损失函数图 生成对抗网络算法_生成对抗网络损失函数图_12


因为是unsuperviced,所以两条网络要分开训练,相当于训练两个Vae GAN。

这种产生的问题是:The images with the same attribute may not project to the same position in the latent space. 就是说他们两个训练出来的输出可能风马牛不相及。于是就产生了很多来解决这个问题的东西,比如说如下图所示的Couple GAN、UNIT:


生成对抗网络损失函数图 生成对抗网络算法_生成对抗网络损失函数图_13


Sharing the parameters of encoders and decoders. 即Encoder的最后几个layer的参数共享,Decoder的前几个layer的参数共享。还有个方法如下:

生成对抗网络损失函数图 生成对抗网络算法_Domain_14


即让Domain Discriminator去判断vector是来自X Domain还是Y Domain。

The domain discriminator forces the output of encoderX and encoderY have the same distribution.

还可以cycle起来嘞:

生成对抗网络损失函数图 生成对抗网络算法_生成对抗网络损失函数图_15

跟cycle GAN差不多,用在了Combo GAN里面。