学习记录(三)
1. 生成对抗网络(GAN)
Algorithm:
Initialize θd for D(discriminator)and θg for G(generator)
- 在每一个训练迭代周期:
- 从database中采样出m个数据{x1,x2,…,xm}
- 从一个噪声分布(正态分布、高斯分布等)中采样出m个random vector{z1,z2,…,zm}
- 由采样得到的m个vector得到m张image(一个vector经过generator后产生一个image),即
- 更新discriminator的参数θd 来最大化:
第一个式子表示通过discriminator网络后真实图片(xi)的得分高,generator产生的图片(x一把i)的得分低 。
第二个式子表示梯度上升法(加号),不断更新,使得第一个式子的V越大越好。
到此为止上面为discriminator网络。
接下来为generator网络。
- 从一个噪声分布(正态分布、高斯分布等)中采样出m个random vector {z1,z2,…,zm}(不需要与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):
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)…
- 所以其实discriminator自己也可以产生输出。
Discriminator - Training:
- General Algorithm
- Given a set of positive examples,randomly generate a set of negative examples.
- In each iteration,learn a discriminator D that can discriminate positive and negative examples.
- Generate negative examples by discriminator D.
(即不断用discriminator生成的图像去替换negative examples)
如图,蓝色的即为negative examples。看哪些非目标的分数高,就把negative examples移过去作为新的negative examples.
最后重合的时候训练结束:
Discriminator - Generator之间的区别:
- Generator:
优点是容易产生图片,缺点是只能学习表象,很难学习pixel之间的联系,只是生硬地模仿。 - Discriminator:
优点是它会考虑大局,缺点是negative采样很难搞嘞。
Discriminator + Generator:
就是把:
换成:
即用Generator去产生negative examples.
妙啊
2. Conditional GAN
Generator:
discriminator:
discriminator需要考虑两个问题:x是否真实,c和x是否match。
Algorithm:
- 在每个训练迭代周期:
- 从database中采样m个positive examples{(c1,x1),(c2,x2),……,(cm,xm)}(c是text,x是image)
- 从一个噪声分布中采样出m个random vector{z1,z2,…,zm}
- 由采样得到的positive examples和噪声得到m张image,即
- 再去database里去采样m个positive examples {x1,x2,……,xm}
- 更新discriminator的参数θd 来最大化:
第一个式子表示c和x配对则得分高(logD(ci,xi)),而一段文字c和generate出来的x配对则为低分(第二项),而一段文字c和从database出来的x配对也为低分(第三项)。
第二个式子表示梯度上升法(加号),不断更新,使得第一个式子的V越大越好。
到此为止上面为discriminator网络。
接下来为generator网络。
- 从一个噪声分布中采样出m个random vector {z1,z2,…,zm}(不需要与2中的相同)
- 从database的m种condition中采样出m个{c1,c2,…,cm}
- 更新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:
这种做法很有可能Generator会忽略输入,输出一些与输入无关的,为了能骗过Discriminator。
Cycle GAN:
同时去训练两个generator和两个discriminator。
类似的Disco GAN、Dual GAN等根Cycle GAN其实都是一样的思路。方法二:Projection to Common Space:
因为是unsuperviced,所以两条网络要分开训练,相当于训练两个Vae GAN。
这种产生的问题是:The images with the same attribute may not project to the same position in the latent space. 就是说他们两个训练出来的输出可能风马牛不相及。于是就产生了很多来解决这个问题的东西,比如说如下图所示的Couple GAN、UNIT:
Sharing the parameters of encoders and decoders. 即Encoder的最后几个layer的参数共享,Decoder的前几个layer的参数共享。还有个方法如下:
即让Domain Discriminator去判断vector是来自X Domain还是Y Domain。
The domain discriminator forces the output of encoderX and encoderY have the same distribution.
还可以cycle起来嘞:
跟cycle GAN差不多,用在了Combo GAN里面。