生成对抗网络 GAN

54 阅读4分钟

Adversarial nets

  • z:随机噪声
  • Pz(z)P_z(z):随机噪声 z 服从的概率分布(1维均匀分布.一维高斯分布...n维)
  • G(z:θg)G(z:\theta_g) G 是生成器:输入 z,输出假图像,θg\theta_g 是多层感知机的权重参数
  • D(x:θd)D(x:\theta_d) D 是判别器:输入图像 x,输出标量(x是真实图像的概率,在0-1之间的标量),如果认为x比较真生成标量为 1,认为 x 比较假,那么生成的标量接近于 0
  • x 是真实数据的概率分布
  • PgP_g 是生成器生成的假图像服从的概率分布
  • D(x)D(x) 就是在判别输入的 x 是来自真实分布还是来自于生成器生成的假图像分布
  • D(G(z))D(G(z)) :判别器认为假图是真图的概率 image.png

为什么要同时训练 GG 去最小化函数log(1D(G(z)))log(1-D(G(z)))呢?

当函数D(G(z))D(G(z))输出为1时,也就是当判别器认为假图是真图的概率为1时,使得整个y=log(1D(G(z)))y=log(1-D(G(z)))最小,也就是生成器G想要达成的目的,欺骗了判别器D image.png 生成对抗网络 G 和 D 都是两个多层感知器(全连接神经网络)

首先该公式有两项:

  • 第一项:当输入图像满足原始数据分布,也就是说是真图像的时候,判别器输出的东西越大越好
  • 第二项:当输入假数据时,输出越小越好,也就是D(G(z))越小越好,也就是判别器认为假图像是真图像的概率越小越好 min右边:给定生成器的前提下,使得判别器的目标函数最大化 min:给定判别器,找到一个使得右边这个式子最小化的生成器

在一会的伪代码中,训练 k 次判别器,训练 1 次生成器,训练判别器的内层循环(伪代码中有一个内层循环)他的计算代码过于高昂,在有限的数据集上会导致过拟合,所以这里采用交替训练,他两就能一步步进步(周伯通左右互搏),最终都能达到最优

image.png 下方Z代表噪声空间(假设是均匀分布,也可以假设服从高斯分布),生成器G为了将随机数变成假图像,X 指的是图像空间,每一个噪声都被生成器变成了图像空间的一个点,有稀疏的部分也有密集的

  • 绿色线:生成器生成图像分布 PgP_g
  • 黑色线:真实图像分布 PxP_x
  • 蓝色线:判别器预测当前这个图像空间的样本是真实数据的概率,理想情况下应该在真实图像分布哪里给出高分,生成图像分布哪里给出低分
  • 因为生成器的任务是让判别器犯错,你哪里给了高分,我就将图像生成在哪里,可以看到图(c) 相较于 图(b)往左移了
  • 图(a)为初始图,图(b)为训练判别器,图(c)为训练生成器,图(d)为交替训练若干轮以后得到的分布,现在已经分辨不出来那个是真那个是假了,最后的结果为 Px=PgP_x = P_g 分布完全重合,全局最优解的公式为 D(x)=Pdata(x)Pdata(x)+Pg(x)D^*(x) = \frac{P_data(x)}{P_data(x)+P_g(x)}D(x)=12D(x)=\frac{1}{2}

image.png 通过 Minibatch随机梯度下降来优化网络,训练 k 次判别器,训练 1 次生成器

  • 训练 k 次判别器
    • 一步就是一个 Minibatch,在第一个 for 中,生成器是固定的
    • 采样 m 个噪声(随机数),生成 m 个假图像 G(zi)G(z^i)
    • 采样 m 个真图像
    • 用假图像和真图像去训练一个二分类模型,第一个公式就是交叉熵损失函数,里面的公式和上面一样,上面是期望形式,现在是均值
    • 此时要最大化这个函数,三角代表对这个函数求判别器网络中每个权重的梯度做优化更新
    • 生成器固定,只需要训练判别器的权重
  • 训练 1 次生成器
    • 采样 m 个噪声(随机数),生成 m 个假图像 G(zi)G(z^i),采样 m 个真图像
    • 要最小化这个函数
    • 判别器固定,只需要训练生成器的权重
    • 这里为什么只有一项?因为第一项是一个常数,枯叶蝶改变不了外物,枯叶蝶只能改变自己的样貌(为了让判别器真假难分)
    • 生成器不是直接拟合原始数据的分布,而是为了愚弄判别器,间接拟合分布

image.png

image.png image.png 期望的定义:Expf(x)=xP(x)f(x)]dxE_{x-p}f(x)=\int_xP(x)f(x)]dx 公式(4)代表:

  • 给定判别器D训练生成器G
  • 让判别器认为假图像更真
  • 最小化生成器价值函数 C(G)C(G)
  • maxDmax_D表示当前这个判别器D已经是最优的了

当且仅当pg=pdatap_g=p_data,最优的判别器DG(x)=12D_G^*(x) = \frac{1}{2},把12\frac{1}{2}代入上式(4)可以得出C(G)=log4C(G)=-log4,那么可以得到式(5) C(G)=log(4)+KL()+KLC(G)=-log(4)+KL()+KLKL散度一定大于等于0

积分是对连续变量,求和是对离散变量

本文参考了同济子豪兄李沐老师的教学视频