basic idea
vector >Generator>image>Discrinminator>scalar(分越高,真实度越高)
算法:
Discriminator:
D(x)是discriminator给x这个image打的分,为一数值。
真实数据打分高,伪造数据分低。所以用1-D(x’i)
其中,discriminator使用sigmoid函数,将取值限制在0-1,以适应log运算要求。(但这样做其实不是最好方法)
D(x’i)值越小,V越大。使用Gradient Ascent(梯度上升)取得max。
ps:n为学习率(learning rate)。
Generator:
生成数据须取得高分,max V。
G(z)为输入噪声后生成的image,D(G(z))为对噪声生成的image的打分。还是用梯度上升。
GAN as structured learning
Can Generator learn by itself?
GAN比自动编码器(Auto-encoder)好的地方在于考虑到全局。
imput 的scalar与output的image关系密切
image>scalar>image,两image越相似,说明训练越好。(why not scalar>scalar?如果这样的话,input差距大,output差距反而会小,input一串数据变了,output可能只是一根头发丝变了)
Auto-encoder:encoder 把image转换为code,通过decoder转换为image。Generator即为我们要学习的decoder。其中,VAE(variational auto-encoder)可以把decoder train 最稳定。
但VAE需要多加hidden layer(加深network)才能学习到各像素之间的关系。
相比之下,GAN才能实现全局观。单个generator很难学习到关系。
Can Discriminator generate?
可以生成,但没有Generator配合,卡得很。
Discriminator更擅长评判已经生成的image componens间relationship。
另一方面,Discriminator必需negative image 的输入,否则会认为什么input都是满分。训练时,会降低非real examples的分值。(升real降低not real只适用于一维空间,我们能做的只是降低not real,生成新negative,再降低再生成)
总结
G生成negative samples训练D,D进行评判,通过穷举法找出分最高的,让G学习到全局观的分布。
G,D二者相互配合,固定一个,update另一个。