Generator

generator生成器用于生成的任务,除了输入各维特征外,我们还需要一个简单的分布样本作为输入,generator中的网络作用是从一个简单的输入和各维特征学习到一个复杂的分布。

image-20220216153838705

generator任务类型

generator适合于一些需要创造性的任务,如对话机器人,图片生成

image-20220216232351631

使用 StyleGAN生成的二次元头像

Generative Adversarial Network(GAN)生成对抗网络 概述

gan zoo:https://github.com/hindupuravinash/the-gan-zoo 收录超过几百种gan网络

normal generator生成器

用于从一个简单的学习一个复杂的分布

discriminator 鉴别器

image-20220216160948977

用于鉴别输出的分布是否符合任务要求

可以采用不同的架构,如cnn

image-20220216161533614

生成器和鉴别器之间即相互对抗又相互合作的关系,二者关系可以用下面这张图表示:

image-20220217111000692

GAN算法步骤

  1. 初始化生成器和鉴别器
  2. 对于每次训练:
    1. 固定生成器 ,仅训练鉴别器,鉴别器学习将真实值与generator生成值做区分,例如将真实值的输出设为1,生成器生成值的输出设为0,进行分类训练
    2. 固定鉴别器,训练生成器,使生成器生成值能骗过鉴别器,如对于a中的例子,生成器生成值也能使鉴别器输出为1image-20220216163112027
    3. 反复进行a,b过程

GAN理论

GAN中的生成器

image-20220216210222303

假设生成器的输入是一组简单分布的样本,PGP_G为生成器的输出,PdataP_{data}为真实的分布数据

GAN目的是寻找到一组网络参数G*,使得G=argminDiv(PG,Pdata)G*=arg min Div(P_G,P_data),其中div(divergence)是描述分布PGP_GPdataP_{data}之间差异的量。

image-20220216211053692

因为无论是真实分布的数据还是生成器的输出都是随机变量,我们无法构造一个类似loss函数来衡量二者的差异。在GAN中,div使用discriminator来实现。

GAN中的鉴别器

鉴别器训练过程是一个分类过程,分成生成器产生的数据和真实数据两类,训练直到找到网络的参数D,使得:

D=argmaxV(D,G)D^*=arg maxV(D,G)

V(G,D)=Ey Pdata[logD(y)]+Ey PG[log(1D(y))]V(G,D)=E_{y~P_{data}}[logD(y)]+E_{y~P_G}[log(1-D(y))]

image-20220216214059799

maxV(D,G)maxV(D,G)与div值相关,当生成器生成数据与实际数据很像时,鉴别器能够找到的最好的V(D,G)数值也不会很高,所以在寻找生成器网络参数时,可以用鉴别器的maxV(D,G)maxV(D,G)代替生成器的Div(P_G,P_data),称为JS divergence即:

G=argminGmaxDV(G,D)G^*=arg min_{G} max_{D} V(G,D)

上述方法在理论上是可行的,也是初代GAN使用的方法,但实际训练中,div最小值很难得到,js divergence实质上是二元分类的结果,对于任意两个不重合的PGP_GPDATAP_{DATA},js divergence都能鉴别出二者的差异,即对于任意不重合的PGP_GPDATAP_{DATA},js divergence=log2,因此需要找到更好的div计算方法。

Wasserstein distance

Wasserstein distance可以用推土机的例子来理解,假设有分布P和分布Q都是一堆土,Wasserstein distance就是将分布P和分布Q推成完全相同的形状所需要的平均移动距离。

image-20220216222200774

Wasserstein distance定义:对于分布P和Q,穷举所有的让分布P移动为分布Q移动方法,找到其中移动所需最短的距离,这个距离就是分布P和Q的Wasserstein distance

wasserstein distance计算方法

这里给出结论:

maxEy Pdata[D(y)]Ey PG[D(y)]max{E_{y~P_{data}}[D(y)]-E_{y~P_G}[D(y)]}

解出上式表示的optimization,就得到了wasserstein distance。其中D必须是一个足够平滑的曲面,如果不将D限制为平滑曲面,优化结果会给真实数据一个很大的正值,给生成器生成数据一个足够大的负值,从而使上式最大,如下图所示,这样train就不会收敛。

image-20220217104525224
构成足够平滑的曲面D的方法
  1. 初代WGAN方法

    使参数w位于c和-c之间,if w>c,w=c; if w<-c,w=-c

  2. 改进方法 -梯度下降GP(Gradient Penalty)

    使两个样本之间某点的导数接近1

    image-20220217105400228
  3. (best)spectral normalization(SNGAN)

    在任何位置都保持导数小于1

什么是train 收敛