zoukankan      html  css  js  c++  java
  • Wasserstein GAN

      WGAN论文指出,原始GAN以JS、KL散度作为损失容易导致生成器梯度消失,他们提出了一种新的损失函数——Wasserstein 距离,很大程度上解决了GAN训练难的问题。

    原始GAN的损失函数的缺陷

      当两个分布之间重叠很小,或者说,两个分布的概率密度同时大于0的区域在整个分布的占比几乎为0时(无穷小,但还不是0),随着分布之间的靠拢,用于衡量分布之间差异的KL、JS散度几乎没有变化,也就是梯度十分小。而真实分布与生成分布在训练开始时的重叠就是十分小的(证明要用到拓扑学和测度论,直观理解请看后面的知乎链接),并且由于我们只能用部分样本代替真实分布与生成分布来训练,这种情况就更加严重了,从而解释了生成器训练时梯度消失的问题。

      论文举了个简单的例子用于理解。如下图所示,$P_1,P_2$表示两个二维空间中的均匀分布:

      如果我们要将$P_1$移动到$P_2$,就要计算两个分布之间的差异,然后再计算梯度来减小差异。下面分别以KL散度、JS散度和Wasserstein 距离作为差异指标,计算得到:

    egin{equation*} egin{aligned} &KL(P_1||P_2) = KL(P_2||P_1) = left{ egin{aligned} &+infty,& heta e 0\ &0,& heta = 0 end{aligned} ight.\ &JS(P_1||P_2) = left{ egin{aligned} &log 2,& heta e 0\ &0,& heta = 0 end{aligned} ight. \ &W(P_1,P_2) = | heta| end{aligned} end{equation*}

      看得出,KL、JS散度的梯度是0,没法训练。而Wasserstein距离则计算出一个符合常识的距离指标,可以计算梯度控制$P_1$向$P_2$靠近。

      当然以上只是简单的举例,你一眼就能看出$P_1,P_2$之间的距离用$ heta$表示更合理。下面开始具体介绍Wasserstein 距离,以及以它为损失函数的WGAN。

    Wasserstein距离与WGAN

      Wasserstein距离又叫Earth-Mover(EM)距离。对于真实分布$P_r$和生成分布$P_g$,Wasserstein距离$W(P_r,P_g)$定义如下:

    egin{equation} egin{aligned} W(P_r,P_g) = inflimits_{gammasimPi(P_r,P_g)}mathbb{E}_{(x,y)simgamma}left(||x-y|| ight) end{aligned} end{equation}

      其中$Pi(P_r,P_g)$表示$P_r$和$P_g$组合起来的所有可能的联合分布的集合,集合中的每个联合分布的边缘分布都为$P_r$和$P_g$。对于每一个可能的联合分布$gamma$而言,可以从中采样$(x,y)sim gamma$得到一个真实样本$x$和一个生成样本$y$,并算出这对样本的距离$||x-y||$,所以可以计算该联合分布$gamma$下样本对距离的期望值$mathbb{E}_{(x,y)simgamma}left(||x-y|| ight)$。而在所有可能的联合分布中能够对这个期望值取到的下界$inflimits_{gammasimPi(P_r,P_g)}mathbb{E}_{(x,y)simgamma}left(||x-y|| ight)$,就定义为Wasserstein距离。

      Wasserstein距离是比JS、KL散度在定义上更弱的差异评估标准,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近。但是上面的定义是不能用作GAN的损失的,于是论文用了一个已有的定理把它变换为如下形式(推导过程用到了拓扑学和测度论,先挖个坑,以后学了再回来填):

    egin{equation} egin{aligned} W(P_r,P_g) =  frac{1}{K}suplimits_{|f|_Lle K}mathbb{E}_{xsim P_r}[f(x)] -mathbb{E}_{xsim P_g}[f(x)] end{aligned} end{equation}

      其中$|f|_Lle K$表示,对于常数$K$,连续函数$f$定义域内的任意两个元素$x_1$和$x_2$都应满足

    egin{equation} egin{aligned}|f(x_1)-f(x_2)|le K|x_1-x_2|end{aligned} end{equation}

      定义域为实数域时,上式所表达的就是$|f'(x)|le K$。这个限制叫Lipschitz连续。为了可以在神经网络中应用,进一步近似变换$(2)$式为如下形式

    egin{equation} egin{aligned} K cdot W(P_r,P_g) approx maxlimits_{w:|f_w|_Lle K}mathbb{E}_{xsim P_r}[f_w(x)] -mathbb{E}_{xsim P_g}[f_w(x)] end{aligned} end{equation}

      将所有可能的函数,用一个带参数的函数来表示,通过改变参数来表示这些可能的函数。虽然不能囊括所有可能,但也足以高度近似$(2)$式了。这样一来,判别器就可以定义为$f_w$。而对于公式中的Lipschitz连续限制,论文则是直接将判别器的所有参数$w_i$限制在某个范围$[-c,c]$内。因为我们其实无需关心具体的K是多少,它只是会使得梯度变大$K$倍,并不影响梯度的方向。

      综上,判别器做的事就是优化判别器参数,来计算真实分布与生成分布之间的Wasserstein距离,也就是最大化$(4)$式。损失函数如下:

    egin{equation} egin{aligned}L(w)= -mathbb{E}_{xsim P_r}[f_w(x)] +mathbb{E}_{xsim P_g}[f_w(x)] end{aligned} end{equation}

      而生成器做的事则是优化生成器的参数,最小化真实分布与生成分布之间的Wasserstein距离,也就是最小化$(4)$式。忽略生成器参数的无关项,损失函数如下:

    egin{equation} egin{aligned}L( heta)= -mathbb{E}_{xsim P_g}[f_w(x)] end{aligned} end{equation}

      生成器参数$ heta$控制生成分布$P_g$。

      WGAN优化式写成最小最大的形式如下:

    egin{equation} egin{aligned}   minlimits_{ heta:P_g}maxlimits_{w:|f_w|_Lle K}mathbb{E}_{xsim P_r}[f_w(x)] -mathbb{E}_{xsim P_g}[f_w(x)] end{aligned} end{equation}

      论文中训练WGAN的算法如下:

      总的来说,尽管上面写了一大通,WGAN对原始GAN做出的实际改进十分简洁,只有四点:

      1、判别器输出层去掉sigmoid。

      2、生成器和判别器的loss不取log

      3、将判别器参数的绝对值截断在常数$c$以内。

      4、不要用基于动量的优化算法,推荐RMSProp,SGD也行(这是实验得出的结论)。

    参考资料

      Wasserstein GAN

      令人拍案叫绝的Wasserstein GAN - 知乎 

  • 相关阅读:
    使用KRPano资源分析工具一键下载全景网站切片图
    使用KRPano资源分析工具解密被加密的XML
    数据库---表---增删改与权限
    数据库---表---表操作练习
    数据库---表---完整性约束
    数据库---表---数据类型
    数据库---表操作---增删改查
    数据库---库操作---表操作
    数据库---初识sql语句
    数据库---mysql的介绍和安装
  • 原文地址:https://www.cnblogs.com/qizhou/p/13547202.html
Copyright © 2011-2022 走看看