美文网首页
从GAN到WGAN再到WGAN-GP

从GAN到WGAN再到WGAN-GP

作者: 长安逸魂 | 来源:发表于2019-07-16 20:28 被阅读0次

从GAN到WGAN再到WGAN-GP

基本理论知识

  • KL散度:
    KL(p(x)|q(x))=\int p(x)\log \frac{p(x)}{q(x)}dx=E_{x \sim p(x)}\log\frac{p(x)}{q(x)} \tag{1}

  • JS散度:
    JS(P_r,P_g) = 0.5*KL(P_r||P_m)+0.5*KL(P_g||P_m) \tag{2}
    其中P_m = \frac{P_g+P_r}{2}

    • 性质:满足对称性;当两概率为0时,JS=0;当一个为0,另一个不为0时,JS=\log 2
  • Earth-Mover(EM)距离(Wasserstein-1距离)
    W(P_r,P_g)=\inf_{\gamma\in \Pi(P_r,P_g}E_{(x,y)\sim \gamma}[||x-y||] \tag{3}
    其中\Pi(P_r,P_g)表示P_r,P_g组合起来所有可能的联合分布的集合,也就是\Pi(P_r,P_g)中每一个分布的边缘分布都是P_rP_g,这个距离的意义是:(x,y)\sim \gamma中得到一个真实样本x和一个生成样本y,并计算两者之间的距离||x-y||,从而计算该联合分布下样本对距离的期望值E_{(x,y)\sim \gamma}[||x-y||],在所有可能的联合分布中对期望值取下界即为Wasserstein距离

GAN

  • 判别器(discriminator)判断一个样本是真实样本还是生成器生成样本

    生成器(generator)生成样本,并尽量让判别器无法判断是否是生成的

  • 假设:

    • 数据集X上生成器的分布p_g,噪声变量分布p_z(z),并定义将其映射到数据空间的函数G(z;\theta_g)
    • 定义D(x;\theta_d),表示样本x是真实数据,而不是生成样本的概率
  • 目标函数:为了使得D尽可能分离两种样本;同时,为使生成器样本更加无法识别;对于判别器,是一个二分类问题,下述表达就是一个交叉熵;对于生成器来说,要尽可能欺骗D,所以需要最大化D(G(z)),即最小化\log(1-D(G(z)))
    \min_{G}\max_{D}V(D,G) = E_{x\sim p_{data}(x)}[\log D(x)] + E_{z\sim p_z(z)}[\log (1-D(G(z)))] \tag{4}
    但实际中,在初始训练阶段,生成器产生的样本明显与训练集不同,在这种情况下,上述第二项由于内部趋于0会波动,因此,可以将上述版本改为
    \min_{G}\max_{D}V(D,G) = E_{x\sim p_{data}(x)}[\log D(x)] + E_{z\sim p_z(z)}[-\log D(G(z))]

  • 训练过程:

GAN

定理:上述训练过程存在全局最优,即 p_g = p_{data}

  • 首先计算对于任意给定生成器G,对应的最优判别器D

\begin{eqnarray*} V(G,D) &=& \int_xp_{data}(x)\log D(x)dx +\int_zp_z(z) \log(1-D(G(z)))dz\\ &=& \int_xp_{data}(x)\log D(x) + p_g(x) \log(1-D(x))dx \end{eqnarray*}

上式对于判别器D求导,可知当
D_G^{*}(x)=\frac{p_{data}}{p_{data}+p_g} \tag{6}
上式求得最大值。

此时(4)可以重新写为(因为对于任意给定G,均可求出对应的最优的D,因此(1)变为关于D求最大值)
\begin{eqnarray*} C(G) &=& \max_{D} V(G,D)\\ &=& E_{x\sim p_{data}}[\log D_G^{*}(x)] + E_{x\sim p_g}[1-\log D_G^{*}(x)]\\ &=& E_{x\sim p_{data}}[\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}] + E_{x\sim p_g}[\frac{p_{g}(x)}{p_{data}(x)+p_g(x)}]\\ &=& -\log 4 +KL(p_{data}||\frac{p_{data}+p_g}{2})+KL(p_g||\frac{p_{data}+p_g}{2})\\ &=& -\log 4 + 2 JS(p_{data}||p_g) \end{eqnarray*}
因此,只有当p_g=p_{data}时,此目标函数取得全局最优解

WGAN

本节先介绍GAN的不足之处,而后,WGAN的引入

GAN的问题

  • (4)式的问题:判别器越好,生成器梯度消失越严重

    在GAN中,对于(近似)最优判别器下,最终是要对C(G) = -\log 4+2JS(p_{data}||p_g)求最小,也就是最小化真实分布p_{data}p_g之间的JS散度,但是,求JS散度的话,是需要两个分布有所重叠的时候才能用的,对于两步重叠的分布,或者重叠部分可忽略,JS散度就只能等于\log 2,因为两个分布只有以下这四种情况
    \begin{eqnarray*} p_1(x)=0~~~p_2(x)=0\\ p_1(x)\neq0~~~p_2(x)=0\\ p_1(x)=0~~~p_2(x)\neq0\\ p_1(x)\neq0~~~p_2(x)\neq0\\ \end{eqnarray*}
    在上述情况下,只有第三种和第四种情况下值对JS散度第一项和第二项的对应贡献为\log 2, 第一种无贡献,第二种,由于重叠可忽略,也无贡献,此时,梯度为0!

    定理:p_{data}p_g的支撑集是高维空间的低维流形(manifold)时,p_{data}p_g重叠部分的测度(measure)为0的概率为1

    • 支撑集: 函数非零子集,概率分布的支撑集指所有概率密度非零部分的集合
    • 流形: 高维空间中曲线、曲面概念的拓展,如三维空间曲面是二维流形,因为他的本质维度只有2;同理三维空间或二维空间的曲线是一个一维流形
    • 测度:超体积

    由于p_g往往是从低维空间采样,而后产生一个高维样本,因此第一个条件成立;因此在高维空间两个低维空间"碰面”的概率为0,比如三维空间的两条曲线交叠的可能性为0,即使交叠了也只是一维的点,相对于曲线的概率为0

    从第二个角度论证:因为两个分布的测度为0的概率为1,因此可以找到一个最优分割曲面将其分离,二判别器作为神经网络可以无限拟合这个曲面,所以存在最优曲面,使得对几乎所有真实样本给出概率1,几乎所有生成样本给出概率0;而那些很难以分开的点,由于测度为0,可以忽略;因此,此时对于真实分布和生成分布的支撑集上给出的概率均为常数,因此梯度消失

  • (5)式问题:最小化第二种生成器的函数,等价于最小化一个不合理的距离衡量,会导致梯度不稳定,多样性不足
    \begin{eqnarray*} KL(p_g||p_{data})&=&E_{x\sim p_g}[\log\frac{p_g(x)}{p_{data}(x)}]\\ &=& E_{x\sim p_g}[\log \frac{1-D_G^{*}(x)}{D_{G}^{*}(x)}] \end{eqnarray*}
    因此
    \begin{eqnarray*} E_{x\sim p_g}[-\log D_{G}^{*}(x)] &=& KL(p_g||p_{data})-E_{x\sim p_g}\log[1-D^*_{G}(x)]\\ &=& KL(p_g||p_{data}) - 2 JS(p_{data}||p_g) + \log 4 + E_{x\sim p_{data}}[\log D_G^{*}(x)] \end{eqnarray*}
    由于后两项与生成器G无关,因此第二项等价于最小化
    KL(p_g||p_{data}) - 2 JS(p_{data}||p_g) \tag{7}
    这个表达存在两个问题

    • 两个散度都是衡量分布相似性的,一个要拉近,另一个却要推走,明显有矛盾,会导致梯度不稳定
    • KL散度是非对称的,当p_g\rightarrow 0,p_{data}\rightarrow 1时,KL(p_g||p_{data})\rightarrow 0,反过来却是KL(p_g||p_{data}) \rightarrow \infty,直观上理解就是,当生成错误样本时,惩罚是巨大的;但是没生成真实样本的惩罚却很小,这样会导致GAN会产生一些重复且惩罚低的样本,而不会产生多样性的样本,导致惩罚很高

综上,GAN存在两点不合理的地方

  • 生成器初始化的分布与真实分布重叠部分测度为0的概率为1,导致第一个生成器版本的梯度消失
  • 等价优化目标(第二个版本的目标函数)存在不合理的距离度量

解决方案

  • 第一种解决方案是针对重复几乎可以忽略而做的,强行为p_{data}对应的真实样本和p_{g}生成的样本加噪声,使得低维流形更加"扩散",从而产生重叠,此时JS散度不会是常数,于是第一个版本的目标函数梯度消失的问题就会解决;随着重叠程度的增大,JS就会变小,此过程可以对所加的噪声进行退火,当两个分布本体产生重叠时,即使拿掉噪声也可以进行迭代,但是JS散度会受到噪声影响,仍然效果不好。(待补充,文章没看完)

  • 第二种办法则是WGANE_{(x,y)\sim\gamma}[||x-y||]可以理解为\gamma在这个"路径规划"(联合分布)下将p_{data}"移动"到p_g的"消耗",W距离则是要找到最好的一个"路径规划"(联合分布)

    W距离相比于KL散度和JS散度的优越性在于,即使两个分布之间没有重叠,依然可以反映它们的远近

    而由于W距离无法直接求解,作者把他转化成如下形式
    W(p_{data},p_g)=\frac{1}{K}\sup_{||f||_L\leq K}E_{x\sim p_{data}}[f(x)]-E_{x\sim p_g}[f(x)] \tag{8}
    这对于函数f加了一个Lipschitz限制,即对于一个连续函数,存在K\geq 0,定义域内某个区间内导数绝对值的最大值是小于K的,此时K称为Lipschitz常数
    |f(x_1)-f(x_2)|\leq K|x_1-x_2| \tag{9}
    因此(8)指出,满足Lipschitz常数限制的函数f,对所有可能满足条件的f取到式中的上界,并除以此Lipschitz常数,如果将f表示为参数\omega的函数,则可知道
    K W(p_{data},p_g)\approx \sup_{\omega:||f_{\omega}||_L\leq K}E_{x\sim p_{data}}[f_{\omega}(x)]-E_{x\sim p_g}[f_{\omega}(x)] \tag{10}
    因此函数f完全可以用神经网络拟合!而对于K来说,其实他只是指引梯度的大小,并不指引方向,因此作者 直接限制神经网络中所有参数\omega_i不超过某个范围,从而使得K存在,拟合的神经网络可以使得
    L= E_{x\sim p_{data}}[f_{\omega}(x)]-E_{x\sim p_g}[f_{\omega}(x)] \tag{11}
    取得最大值。

    注意,此时,判别器虽然还叫判别器,但是他做的是拟合W距离,因此需要将原本的sigmoid层去掉

    由于第一项与生成器无关,因此,此时两个损失变为了
    \begin{eqnarray*} G\_loss &=& -E_{x\sim p_g}[f_{\omega}(x)]\\ D\_loss &=& E_{x\sim p_{data}}[f_{\omega}(x)]-E_{x\sim p_g}[f_{\omega}(x)] \end{eqnarray*}

    最终对应的算法为

    WGAN

总结下来,相比于GAN,WGAN的改进有以下几点

  • 判别器最后一层去掉sigmoid
  • 生成器和判别器中的loss不取对数
  • 每次更新判别器的参数,将他们的绝对值截断到不超过一个固定常数c
  • 不用基于动量的优化算法(momentum Adam),推荐采用RMSProp,SGD也可以(作者实验发现Adam等基于动量的优化算法梯度不稳定)

WGAN-GP

  • WGAN仍然weight clipping的实现方式存在两个严重的问题:

    • 判别器的loss希望尽可能拉大真假样本的分数差,实验发现基本上最终权重集中在两端,这样参数的多样性减少,会使判别器得到的神经网络学习一个简单的映射函数,是巨大的浪费
    • 很容易导致梯度消失或者梯度爆炸,若把clipping threshold设的较小,每经过一个网络,梯度就会变小,多级之后会成为指数衰减;反之,较大,则会使得指数爆炸.这个平衡区域可能很小
  • WGAN_GP引入了gradient penalty,WGAN的限制是让判别器的梯度不超过K, 作者通过下式中第二个来设置限制实现此点
    \begin{eqnarray*} ReLu([||\nabla_xD(x)||_p-K])\\ [||\nabla_xD(x)||_p-K]^2 \end{eqnarray*}
    接着把K简单设为1,再和WGAN原来的判别器loss进行加权合并,得到
    L(D) = -E_{x\sim p_{data}}[D(x)]+E_{x\sim p_g}[D(x)]+\lambda E_{x\sim \mathcal{X}}[||\nabla_x D(x)||_p-1]^2 \tag{12}
    (12)式中存在问题,因为从整个样本空间采样,这样高维空间采样所需数据十分庞大,因此作者的解决方案是,我只针对样本集中区域及夹在它们之间的区域就成了.
    \begin{eqnarray*} &&x_r\sim p_r\\ &&x_g\sim p_g\\ &&\epsilon \sim Uniform[0,1]\\ &&\hat x = \epsilon x_r + (1-\epsilon)x_g\\ \end{eqnarray*}
    假设上述得到的\hat x所得到的分布记为 P_{\hat x},就得到最终版本的判别器loss:
    L(D) = -E_{x\sim p_{data}}[D(x)]+E_{x\sim p_g}[D(x)]+\lambda E_{x\sim P_{\hat x}}[||\nabla_x D(x)||_p-1]^2 \tag{13}
    最终算法实现为

    WGAN-GP

本文主要参考 https://zhuanlan.zhihu.com/p/25071913
https://www.zhihu.com/question/52602529/answer/158727900

相关文章

  • 从GAN到WGAN再到WGAN-GP

    从GAN到WGAN再到WGAN-GP 基本理论知识 KL散度: JS散度:其中性质:满足对称性;当两概率为0时,J...

  • 一个比WGAN更优秀的模型(WGAN-GP)

    WGAN-GP (improved wgan) paper GitHub WGAN-GP是WGAN之后的改进版,主...

  • WGAN-GP有关

    help: 什么是gans: https://blog.csdn.net/u010089444/article/d...

  • 零样本图像识别 | Feature Generating Net

    创新:提出f-GAN 、 f-WGAN 和 f-CLSWGAN、将WGAN的loss和Classfication的...

  • 李宏毅 GAN lecture(2018)笔记_P6

    1. Tips for Improving GAN - WGAN, EBGAN 首先是JS divergence失...

  • GAN和WGAN

    1. GAN GAN有两个模型,分别是生成模型和判别模型。这两个模型进行博弈,先保持生成模型不变,优化判别模型(判...

  • GAN 生成对抗网络

    GAN网络可以说是近来最火的神经网络模型,其变种包括WGAN,WCGAN,WGAN-l,circleGAN等,被广...

  • WGAN-GP的Tensorflow实现

    相对于有监督学习来说,生成对抗网络是一个很酷的算法。它利用一个生成器和一个判别器来对数据集进行学习。拿生成图片的例...

  • 生成对抗网络训练心得

    训练WGAN的时候,有几个方面可以调参: a. 调节Generator loss中GAN loss的权重。 G...

  • 【GAN优化】详解对偶与WGAN

    越学习越发现自己知之甚少,道阻且长,还是认真看下这篇文章,好好琢磨琢磨GAN吧。 今天将和大家一起学习在GAN界占...

网友评论

      本文标题:从GAN到WGAN再到WGAN-GP

      本文链接:https://www.haomeiwen.com/subject/xxaclctx.html