14 生成模型GAN

image.png

  • 2019年最好的结果:BigGAN

image.png
目前SOTA的结果都是GAN生成的,是最重要的生成模型。

生成对抗网络GAN

问题:希望从训练样本分布中采样新数据,但这个分布不仅维度高而且还很复杂,难以直接实现。
解决方案:对一个简单的分布采样,比如均匀分布;然后,学习一种映射将其变换到训练样本分布。
Q:用什么方法能够实现这个复杂的映射?
A:神经网络!
image.png
上述网络无法直接训练,Goodfellow想出两个玩家博弈的方法。

  • 生成网络:期望能够产生尽量真实的图片,进而骗过判别器。
  • 判别网络:期望能够准确的区分真假图片。

image.png

博弈过程中,生成器的能力会逐步提升到逼近真实的情况。如果生成器生成的图和真实图片分不开的时候,就会停止。

  • 采用minmax的方式联合训练:

image.png

x~pdata,即真实数据分布;p(z)是噪声分布;G{\thetag}是生成器 ,\theta_g是神经网络的参数,神经网络的任务是吃进一个z,生成一个样本\hat{x};D{\theta_d}就是判别器,也是一个神经网络,输出0到1之间的数,1表示样本是真的。 E代表期望,不可能单看一个样本,要看所有样本。 最大化max的含义(此时生成器G是固定的):让判别器对真实的图片打1分,对于假的图片打0分;这样式中两项都会尽量大,训练的是判别器。 最小化min的含义(此时判别器是固定的):此时与式中第一项没有关系,因此相当于让生成的样本越判断成1越好,即希望生成的样本\hat{x}被判别器判断为真样本。

image.png

训练GAN:两个玩家的游戏

  • 一般是先训练判别器,因为要判别器先具有一定能力。
  • 交替训练。

image.png
image.png

  • 因为存在上图的问题,因此真实中做的时候是两个最大化问题。

image.png

  • 训练好网络后,判别器就不要了,只要生成器,将来用z就可以生成图片。训练的时候用什么方式采样的z,生成的时候用一样的方式就好。

    GAN的工作过程(直观解释)

  • 最后真的和假的达到纳什均衡,判别器看什么概率都是0.5,分不出来真假,游戏结束。但很多时候是训练不到这样一个稳态的。

  • 学的实际上就是将z映射成x的分布。

image.png

产生的样本

image.png
可以看到生成的样本和数据库中找到的最近邻很像,但不一样。
在CIFAR10数据集上生成的效果不太好,因为数据太少。

GAN背后的数学故事

Generation

  • 我们的目标是找到数据分布《14 生成模型GAN》 - 图12,分布上的点都是高概率的点,分布上任何一个点采样一个点(高维空间中的图像),这个地方一定对应着一个有意义的图像;其他地方是低概率的点,在低概率的地方采样一个图像,长得和真实的图像就可能不太相似,产生不了真实的人脸。

image.png

极大似然估计

  • 给定数据分布P_{data}(x)(可以对其采样获得数据),这个分布是什么我们不知道。
  • 我们能够得到一个分布《14 生成模型GAN》 - 图14,其参数由\theta所决定(神经网络参数也好,其他参数也好),希望分布产生的x和真实分布的x很相似。
    • 目标:确定参数\theta,使得《14 生成模型GAN》 - 图15《14 生成模型GAN》 - 图16相似,这样就可以用这个分布来产生样本。
    • 比如《14 生成模型GAN》 - 图17为高斯混合模型,则\theta表示高斯分布的均值与协方差矩阵。

现在的任务是从《14 生成模型GAN》 - 图18采样样本《14 生成模型GAN》 - 图19,这件事情很容易,因为这就是训练样本集。我们其实不知道真实数据,但知道训练样本就是来自真实数据的。所谓从真实数据中采样样本,即从样本集找一堆样本,因为样本集就来自真实样本。
接下来,希望计算《14 生成模型GAN》 - 图20产生这些样本的似然:
《14 生成模型GAN》 - 图21
希望让这个概率越大越好,通过极大似然估计来求取《14 生成模型GAN》 - 图22
但很多时候《14 生成模型GAN》 - 图23是无法计算的,因为正态分布的假设在高维图像数据里基本不符合这个分布,因此很难直接用这个分布干这个事情。下面看看GAN是如何做这个事情的。

最大化似然=最小化KL散度

《14 生成模型GAN》 - 图24(即两个分布的KL距离),两个分布越接近,散度越小,反之越大。
image.png
对所有的样本求和这件事情就和期望一样,因此可以近似等于:
image.png
然后继续往下推,加一项于\theta无关的,推出结论。
image.png
如何定义一个通用的《14 生成模型GAN》 - 图28?不能用正态分布了,因为正态分布在真实空间不行,所以干脆用神经网络来学。

产生器(Generator)

  • 利用神经网络来构建产生器G,网络输出定义了一个密度分布《14 生成模型GAN》 - 图29
  • GAN要做的就是拉近两个分布,用两个分布的差异来调整生成器G。
    • 两个分布的差异如何表示:

image.png

判别器(Discriminator)

现在的困难是,不知道《14 生成模型GAN》 - 图31的分布,也不知道《14 生成模型GAN》 - 图32的分布,但是可以得到它们的采样数据。
image.png

  • GAN公式回顾:

image.png
image.png