wgan 不理解 损失函数_WGAN学习笔记

zz/2023/6/3 17:06:54

GAN自从被提出之后就受到了广泛的关注,GAN也被逐渐用于各种有趣的应用之中。虽然GAN的idea对研究者们有着巨大的吸引力,但是GAN的训练却不像普通DNN那样简单,generator和discriminator之间的平衡,训练过程中没有很好的指标度量训练效果成为了训练GAN的难点。WGAN的提出几乎完美解决了这两个问题。

参考文章:

原始GAN存在的问题

要想知道原始GAN存在什么问题,我们先看一下GAN的优化目标。

作者在原始论文中提到,在真正优化G的时候 $log(1-D(G(z))$ 可能无法给G提供足够的梯度,于是可以通过maxmize $log(D(G(z))$ 的方式来更新G。而在WGAN的前序论文中,证明了这两种优化G的方式都是有一定问题的。

优化准则$log(1-D(G(z))$ 带来的梯度消失

在论文中,作者也给出了相关的证明,通过一步步优化公式$ref{gan_target}$,最终的目标就是使得$p_{data}(x) = p_g(x)$ .优化D

由$cfrac{partial Loss}{partial D(x)} = 0$ 可以得到:

优化G

将公式$ref{d_res}$ 中的结果,带入公式$ref{gan_target}$ ,可以得到得到最优的D之后,优化G的目标

在此,介绍连个分布距离度量的指标:KL divergence: $KL(P_1||P_2) = mathbb{E}_{x sim P_1} logcfrac{P_1}{P_2} label{kl_div}tag{4}$

JS divergence: $JS(P_1||P_2)= cfrac{1}{2}KL(P_1||cfrac{P_1+P_2}{2})+cfrac{1}{2}KL(P_2||cfrac{P_1+P_2}{2}) label{js_div}tag{5}$

G的优化目标$ref{g_loss}$可以通过形式的变换转为JS的的形式:

虽然我们将G的loss转为了某种距离,即JS,但是这种距离是有点问题的。看下面两张图,假设p就是真实分布,q是我们生成的分布。可以清晰的看出,KL和JS散度在q的均值为零的时候都为0。但是随着q远离p,KL和JS逐渐趋于定值,而且JS趋于定值的速度更快。既然趋于定值了,那么相应的梯度就是0了。

7000be8f00416cda086fae5a31baa4dc.png

29b13c51283122a866c1de3830529f17.png

也就是说,两个分布越近,JS产生的梯度就越大。但是真实分布和生成的分布有一定重合的概率有多大呢?请看这篇知乎中关于高维空间的低维流形的介绍。结果就是,两个分布很可能是高维空间中的低维存在,两个低维物体在高维空间的交集仍是低维的,这个交集在高维空间的测度就基本为零(比如两个二维物体在三维空间的交集的体积怎么都是零)。

D在最优的时候,在优化G的时候就等同于优化JS散度,这样的话,我们就不能将D训练到比较好。但是,我们又不能将D训练到太差,太差的话,D就没法指导G进行更新了,更新G的时候梯度就不再准确。因此,怎样平衡每个stepG和D的训练程度是一个很令人头疼的问题。

WGAN的前序论文也通过实验验证了梯度消失的问题:

f015a6ec8e42a64b6f71a4c804c8710b.png1在分别训练了DCGAN 1,10,25个epoch之后,固定generator的参数,将discriminator随机初始化重新训练,generator梯度的变化。可以发现,随着discriminator的训练,generator的梯度会逐渐减小(指数减小)。

优化准则$-log(D(G(z))$ 带来的梯度不稳定和collapse mode

这时G的损失函数为$mathbb{E}_{x sim P_{g}}[-log D(x)]$

在前一部分我们知道,在判别器最优的情况下($D(x) = D^*(x)$):

通过对KL散度的形式变换可以得到:

由公式$ref{equation_6}$和$ref{equation_7}$可以得到:

去掉上面公式中不含G的项,最后的优化目标变为:

这个损失函数一方面想要最小化KL,一方面又想最大化JS, 在直观上难以理解。

此外,由于KL 散度非对称性,对于$K Lleft(P_{g} | P_{data}right)$$当 P_{data}(x) rightarrow 0 而 P_{g}(x) rightarrow 1 时,K Lleft(P_{g} | P_{data}right) rightarrow +infty$

$当 P_{data}(x) rightarrow 1 而 P_{g}(x) rightarrow 0 时,K Lleft(P_{g} | P_{data}right) rightarrow 0$

上面的两种情况对应了两种错误,第一种是生成了错误的样本,第二种是有些应该生成的样本没有生成,可以看出,根据第二种情况,G可以只去拟合真实分布的部分分布而不会受到惩罚,而生成错误的样本则会受到巨大的惩罚。如果G按照第二种情况的指示去生成样本就很可能导致collapse mode。

同样的,WGAN的前序论文也通过实验验证了梯度不稳定的问题:

3ff89ef2ded3f92865b91dcfa5a4090d.png1在分别训练了DCGAN 1,10,25个epoch之后,固定generator的参数,将discriminator随机初始化重新训练,generator梯度的变化。可以发现,随着discriminator的训练,generator的梯度会逐渐增大(指数增大)。

WGAN介绍

新的距离定义,Wasserstein距离

从上文可以看出,不管是JS还是KL距离,两者都有某种不连续性,也就是说当两个分布距离超过一定程度的时候,两者都将距离认为是定值。这对于优化两个分布是非常不利的,WGAN定义的距离则更加的合理。

WGAN使用的距离Wasserstein距离又被称为是Earth-Mover (EM) distance,中文称为搬土距离。可以进行这样简单的理解,A省有三个市A1、A2、A3,这三个市分别有5,2,3吨土,B省有四个市,B1、B2、B3、B4,分别需要1,6,2,1吨土,我们希望A省通过一定的策略将A省拥有的土送往B省,并希望A省制定一个比较好的方案,让A省运输过程消耗最少。

公式如下:

可能,有点复杂。其实和搬土是一样的,只不过我们将每个省需要和拥有土量的分布换为了连续的分布$mathbb{P}_{r}$ 和 $mathbb{P}_{g}$ 。将某个省某市将土运到另一个省某市这种情况的出现换为了两个分布某个值同时出现,即联合分布。运土的策略有很多,两个边缘分布的联合概率也有很多,在所有的联合概率中寻找使得方程$ref{equation_10}$值最小的那个,代表的就是Earth-Mover (EM) distance。

这个距离的度量相对于KL和JS到底好在哪里,我们可以假设这样一个分布:

P1在线段AB上均匀分布,P2在线段CD上均匀分布,CD的位置由$theta$来决定,

e1958a3ee734c61512b793be1cd2498c.png

a1b280da1e00a639ce03f112cb8bdc31.png

上图分别是,随着$theta$的变化,W距离和JS距离的变化,可以看出W距离是连续变化的,而JS距离只在$theta$为0的时候为0,在其他时候都是一个定值。也就是说W距离在这种情况下仍然可以为参数更新提供有用的梯度,而JS距离不行。

WGAN的具体实现

公式$ref{equation_10}$的距离固然优美,但公式中的便利联合分布求下界的部分$inf _{gamma in Pileft(mathbb{P}_{r}, mathbb{P}_{g}right)}$却无法求解。作者为了更好的求解,讲公式$ref{equation_10}$变换为了另一种形式:

公式$ref{equation_11}$中$|f|_{L} leq K$,是指函数f满足常数为K的Lipschitz限制,这要求对于定义域内的任意两个元素$x1$和$x2$满足:

也就是说,f的导数值有上界。这里W是要在所有的f中找到一个上界值。

遍历公式$ref{equation_10}$中的联合分布是一个很难的事,但是遍历公式$ref{equation_11}$中的f却很容易通过神经网络实现,每个神经网络都可以看作是一个映射函数,遍历神经网络的参数就相当于遍历所有可能的f。为了找到公式$ref{equation_11}$的上界,我们可以转换为下面的问题:

现在重要的问题是,我们遍历参数w的时候不应是随便遍历的,在遍历的时候f应满足Lipschitz连续条件,因为只有这个时候公式$ref{equation_11}$的上界才是W距离。

那么如何实现Lipschitz限制:Weight Clip(权重剪切)

作者在第一WGAN的论文中,介绍了通过梯度剪切的方式实现对f的Lipschitz限制的目的。也就是说,如果神经网路f的所有参数$w_i$都在某个范围$[-c,c]$内的话,那么f关于输入样本x的导数也会在某个范围里面,虽然我们无法确定导数的范围具体是多少,但是只要导数值是有上界的,目的也就达到了。

Gradient penalty(梯度惩罚)weight clipping的问题

虽然权重剪切确实可以解决Lipschitz限制的问题,但是会有些问题,因为在优化D的时候是在weight clipping的限制下进行的,优化D的目的是为了最大化公式$ref{equation_12}$,为了达到这个目的,函数可能会尽可能的将参数值推向参数范围的边界,也就是最大值或最小值。这样的话,就大大浪费了深度神经网络的拟合能力。而且如果网络参数都是范围边界值$c$或$-c$的话,$c$比较大的话梯度反传的时候会不断增大,很容易产生梯度爆炸的问题,$c$比较小怎会产生梯度消失的问题。作者也用实验验证了这两个问题:

2ca0c4a6c1ce4ca6a5fab3acceba0f87.png1注:左图是不同Weight clip权重情况下,梯度在反传过程中norm的变化。右图是weight clip和gradient penalty的参数的分布状况(图中weight clip的c设为了0.01)。gradient penalty的具体形式

既然Lipschitz限制是对导数的,Weight clip对权重限制可以说是走了一个更加曲折的路,gradient penalty则是直接对梯度进行限制。作者这里是对f对于x的梯度的norm做了一个限制,作者希望梯度的norm能够小于一个常数K,这里我们就不妨设K为1. 与上文想法一样,在最大化公式$ref{equation_12}$的时候,优化器会把f推向限制的边界,即f对x梯度的norm为1.(论文里也有一些证明),所以我们就不妨让梯度的norm为1:

但公式$ref{equation_13}$的第三部分有个问题,这里是说f对所有的x都满足梯度norm为1。但是我们是不可能遍历一个高维空间的,作者使用了一个比较有效的trick,就是我们只对$P_r$、$P_g$以及两个分布之间的区域做限制就好了。也就是说我们取 $hat{boldsymbol{x}} leftarrow epsilon boldsymbol{x}+(1-epsilon) tilde{boldsymbol{x}}, epsilon sim U[0,1]$ 。

WGAN的优势具体体现在哪里相对于其他结构更加稳定,对D和G的结构没有特别苛刻的限制,不需要刻意的去平衡D和G的训练(不存在G的梯度消失和不稳定)。作者在论文的附录给出了在不同结构的D、G情况下,很多GAN模型都无法维持一致较好的性能,但是WGAN-GP一直都保持着稳定的性能。

训练过程中,Wasserstein距离距离的值可以作为模型训练的好坏的一个判断标准,Wasserstein距离值越小,说明生成的分布和真实分布越近。(但实际训练过程中,公式$ref{equation_11}$ 应该是先上升后下降的,上升的过程是我们通过优化D使得公式$ref{equation_11}$ 逐渐能够代表W距离,下降的过程是我们通过D的指导下优化G从而使得生成分布与真实分布越来越接近)

http://www.ngui.cc/zz/2390074.html

相关文章

wgan 不理解 损失函数_WGAN

GAN-QP 写到一半发现关于 WGAN 以及它相关约束部分之前没有完全读懂,需要重读,那顺手也把笔记给谢了吧WGAN 在之前阅读的背景是 GAN 在许多条件下有比较严重的不稳定性,在寻找解决方案的过程中发现了 WGAN 的文章,当时对这篇文章的…

WGAN介绍

WGAN可谓是继原作GAN之后又一经典之作,本文将介绍一下WGAN WGAN的前作中对原始GAN存在的问题作了严谨的数学分析。原始GAN问题的根源可以归结为两点,一是等 价优化的距离衡量(KL散度、JS散度)不合理,二是生成器随机初始…

【深度学习2】基于Pytorch的WGAN理论和代码解析

目录 1 原始GAN存在问题 2 WGAN原理 3 代码理解 GitHub源码 参考文章:令人拍案叫绝的Wasserstein GAN - 知乎 (zhihu.com) 1 原始GAN存在问题 实际训练中,GAN存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。这…

WGAN(Wasserstein GAN)看这一篇就够啦,WGAN论文解读

WGAN论文地址:[1701.07875] Wasserstein GAN (arxiv.org) WGAN解决的问题 原始GAN训练过程中经常遇到的问题: 模式崩溃,生成器生成非常窄的分布,仅覆盖数据分 布中的单一模式。 模式崩溃的含义是生成器只能生成非常相似的样本&…

图文详解WGAN及其变体WGAN-GP并利用Tensorflow2实现WGAN与WGAN-GP

图文详解WGAN及其变体WGAN-GP并利用Tensorflow2实现WGAN与WGAN-GP构建WGAN(Wasserstein GAN)Wasserstein loss介绍1-Lipschitz约束的实现训练过程实现梯度惩罚(WGAN-GP)完整代码构建WGAN(Wasserstein GAN&a…

植物大战僵尸无尽模式最强阵容可以无限打

植物大战僵尸无尽模式最强阵容 话不多说直接上图: 这就是最终阵容,本人亲测可以打到200关不死,有毅力的话可以无限打下去,关键的关键是你必须能合理把控玉米加农炮的时机。 图片是之前打的图了,我给的阵容图比图中11…

关于前端配置微信重定向导致ios调用微信方法配置失败解决方案

1、背景 由于某些原因要前端来直接写微信重定向地址 2、隐患 微信ios传过去的地址不是后台appid配置的地址,导致签名出错,不能调用微信提供sdk 3、解决方案 获取url时不用 url window.location.href 改为: url window.location.origin win…

iOS微信小程序webview,ios内嵌H5页面左滑关闭视频或者音频还在播放

iOS微信小程序webview,ios内嵌H5页面左滑关闭视频或者音频还在播放 表现 iosAPP中的内嵌H5页面,点击返回按钮或者左滑,音频还在播放 解决办法 可在页面隐藏时,将视频或者音频暂停 var video document.querySelector(video);…

vue微信H5自定义分享兼容ios、PC、安卓

1.安装微信sdk yarn add weixin-js-sdk // 安装依赖 // 或者在index.html引入<script src"https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>// 用依赖包在main.js引入 import wx from weixin-js-sdk Vue.prototype.$wx wx 2.配置 &#xff…

ios微信公众号返回上一级页面的时候页面数据没有刷新

vue项目&#xff0c;运行在微信公众号&#xff0c;测试ios设备的时候发现从数据总览页点击一个新的页面&#xff0c;执行部分操作后&#xff0c;总览页面的数据应该被修改的&#xff0c;但是点击返回只会&#xff0c;总览页面还是旧数据&#xff0c;手动点击刷新之后数据才被修…