GAN基础笔记

  1. GAN简述
    GAN的全称是Generative Adversarial Network,中文名为生成对抗网络。主要构成为Generator和Discriminator。Generator为生成器,Discriminator为鉴别器。给定一个Database(假设为image),Generator的目标是尽力生成和Database接近的image;而Discriminator的目标是尽力区分Generator产生的image以及Database的image。Generator和Discriminator互相对抗提升(类似做假钞的坏蜀黍和验假钞的警察uncle),最终要达到的结果是Discriminator无法区分image是来自Generator还是Database。

  2. Generator能不能单独完成任务?
    回答是可以的。相当于Auto-encode中的Deconder。但是网络层数相同的情况下,用VAE产生的图片的质量没有用GAN产生的好。此外,pixel和pixel之间也无法相互联系(也即没有全局观),除非加深网络深度。

  3. Discriminator能不能单独完成任务?
    明确Discriminator训练过程中需要合适的Negative example,而Generator恰好能提供。
    GAN基础笔记
    Generator就相当于上述式子

  4. Generator+Discriminator
    Bottom up (Generator):learn to generate the object at the component level.
    Top down (Discriminator):Evaluating the whole object and find the best are.
    在生成图像过程中,component之间的关系尤为重要。故而两者能够互补互成。

  5. GAN算法
    记Generator产生的数据集为PG(x),记输入网络的数据集为Pdata(x),我们应当使得PG(x)Pdata(x)尽可能地接近。由Maximum Likelihood Estimation = Minimize KL Divergence.我们得知G=arg minG Div(PG,Pdata),我们应当算出PG(x)Pdata(x)的Divergence,然后再最小化Divergence。来到这里我们先来看看有关Discriminator的训练。
    Train Discriminator:(fix G)
    V(G,D)=ExPdata[logD(x)]+ExPG[log(1D(x))]
    D=arg maxDV(G,D)
    GAN基础笔记
    通过推算,我们可以得出,在寻求D的最优解过程,maxDV(G,D)实际就是在计算PG(x)Pdata(x)的JS divergence。所以G=arg minD Div(PG,Pdata)就转换为G=arg minG maxDV(G,D)。我们再回过头来看,如何去maxDV(G,D),由于在Training Discriminator的过程中我们是把Generator定住的,所以我们先把V(G,D)记为L(G),对其求偏导:θGθGηL(G)/θG
    下图为pratice中的算法流程:
    GAN基础笔记