扬州高端网站建设,成都装修设计培训,三门峡专业做网站公司,成都网站建设案例单招网本文后续#xff1a;Wasserstein GAN最新进展#xff1a;从weight clipping到gradient penalty#xff0c;更加先进的Lipschitz限制手法
在GAN的相关研究如火如荼甚至可以说是泛滥的今天#xff0c;一篇新鲜出炉的arXiv论文《Wasserstein GAN》却在Reddit的Machine Learnin…本文后续Wasserstein GAN最新进展从weight clipping到gradient penalty更加先进的Lipschitz限制手法
在GAN的相关研究如火如荼甚至可以说是泛滥的今天一篇新鲜出炉的arXiv论文《Wasserstein GAN》却在Reddit的Machine Learning频道火了连Goodfellow都在帖子里和大家热烈讨论这篇论文究竟有什么了不得的地方呢
要知道自从2014年Ian Goodfellow提出以来GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起很多论文都在尝试解决但是效果不尽人意比如最有名的一个改进DCGAN依靠的是对判别器和生成器的架构进行实验枚举最终找到一组比较好的网络架构设置但是实际上是治标不治本没有彻底解决问题。而今天的主角Wasserstein GAN下面简称WGAN成功地做到了以下爆炸性的几点
彻底解决GAN训练不稳定的问题不再需要小心平衡生成器和判别器的训练程度基本解决了collapse mode的问题确保了生成样本的多样性 训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程这个数值越小代表GAN训练得越好代表生成器产生的图像质量越高如题图所示以上一切好处不需要精心设计的网络架构最简单的多层全连接网络就可以做到
那以上好处来自哪里这就是令人拍案叫绝的部分了——实际上作者整整花了两篇论文在第一篇《Towards Principled Methods for Training Generative Adversarial Networks》里面推了一堆公式定理从理论上分析了原始GAN的问题所在从而针对性地给出了改进要点在这第二篇《Wasserstein GAN》里面又再从这个改进点出发推了一堆公式定理最终给出了改进的算法实现流程而改进后相比原始GAN的算法实现流程却只改了四点
判别器最后一层去掉sigmoid生成器和判别器的loss不取log每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c不要用基于动量的优化算法包括momentum和Adam推荐RMSPropSGD也行算法截图如下改动是如此简单效果却惊人地好以至于Reddit上不少人在感叹就这样没有别的了 太简单了吧这些反应让我想起了一个颇有年头的鸡汤段子说是一个工程师在电机外壳上用粉笔划了一条线排除了故障要价一万美元——画一条线1美元知道在哪画线9999美元。上面这四点改进就是作者Martin Arjovsky划的简简单单四条线对于工程实现便已足够但是知道在哪划线背后却是精巧的数学分析而这也是本文想要整理的内容。
本文内容分为五个部分
原始GAN究竟出了什么问题此部分较长WGAN之前的一个过渡解决方案 Wasserstein距离的优越性质从Wasserstein距离到WGAN总结理解原文的很多公式定理需要对测度论、 拓扑学等数学知识有所掌握本文会从直观的角度对每一个重要公式进行解读有时通过一些低维的例子帮助读者理解数学背后的思想所以不免会失于严谨如有引喻不当之处欢迎在评论中指出。
以下简称《Wassertein GAN》为“WGAN本作”简称《Towards Principled Methods for Training Generative Adversarial Networks》为“WGAN前作”。
WGAN源码实现martinarjovsky/WassersteinGAN
第一部分原始GAN究竟出了什么问题
回顾一下原始GAN中判别器要最小化如下损失函数尽可能把真实样本分为正例生成样本分为负例公式1
其中是真实样本分布是由生成器产生的样本分布。对于生成器Goodfellow一开始提出来一个损失函数后来又提出了一个改进的损失函数分别是公式2公式3
后者在WGAN两篇论文中称为“the - log D alternative”或“the - log D trick”。WGAN前作分别分析了这两种形式的原始GAN各自的问题所在下面分别说明。
第一种原始GAN形式的问题
一句话概括判别器越好生成器梯度消失越严重。WGAN前作从两个角度进行了论证第一个角度是从生成器的等价损失函数切入的。
首先从公式1可以得到在生成器G固定参数时最优的判别器D应该是什么。对于一个具体的样本它可能来自真实分布也可能来自生成分布它对公式1损失函数的贡献是令其关于的导数为0得化简得最优判别器为
公式4
这个结果从直观上很容易理解就是看一个样本来自真实分布和生成分布的可能性的相对比例。如果且最优判别器就应该非常自信地给出概率0如果说明该样本是真是假的可能性刚好一半一半此时最优判别器也应该给出概率0.5。
然而GAN训练有一个trick就是别把判别器训练得太好否则在实验中生成器会完全学不动loss降不下去为了探究背后的原因我们就可以看看在极端情况——判别器最优时生成器的损失函数变成什么。给公式2加上一个不依赖于生成器的项使之变成注意最小化这个损失函数等价于最小化公式2而且它刚好是判别器损失函数的反。代入最优判别器即公式4再进行简单的变换可以得到
公式5)
变换成这个样子是为了引入Kullback–Leibler divergence简称KL散度和Jensen-Shannon divergence简称JS散度这两个重要的相似度衡量指标后面的主角之一Wasserstein距离就是要来吊打它们两个的。所以接下来介绍这两个重要的配角——KL散度和JS散度
公式6
公式7
于是公式5就可以继续写成
公式8到这里读者可以先喘一口气看看目前得到了什么结论根据原始GAN定义的判别器loss我们可以得到最优判别器的形式而在最优判别器的下我们可以把原始GAN定义的生成器loss等价变换为最小化真实分布与生成分布之间的JS散度。我们越训练判别器它就越接近最优最小化生成器的loss也就会越近似于最小化和之间的JS散度。
问题就出在这个JS散度上。我们会希望如果两个分布之间越接近它们的JS散度越小我们通过优化JS散度就能将“拉向”最终以假乱真。这个希望在两个分布有所重叠的时候是成立的但是如果两个分布完全没有重叠的部分或者它们重叠的部分可忽略下面解释什么叫可忽略它们的JS散度是多少呢
答案是因为对于任意一个x只有四种可能
且
且
且
且
第一种对计算JS散度无贡献第二种情况由于重叠部分可忽略所以贡献也为0第三种情况对公式7右边第一个项的贡献是第四种情况与之类似所以最终。
换句话说无论跟是远在天边还是近在眼前只要它们俩没有一点重叠或者重叠部分可忽略JS散度就固定是常数而这对于梯度下降方法意味着——梯度为0此时对于最优判别器来说生成器肯定是得不到一丁点梯度信息的即使对于接近最优的判别器来说生成器也有很大机会面临梯度消失的问题。
但是与不重叠或重叠部分可忽略的可能性有多大不严谨的答案是非常大。比较严谨的答案是当与的支撑集support是高维空间中的低维流形manifold时与重叠部分测度measure为0的概率为1。
不用被奇怪的术语吓得关掉页面虽然论文给出的是严格的数学表述但是直观上其实很容易理解。首先简单介绍一下这几个概念
支撑集support其实就是函数的非零部分子集比如ReLU函数的支撑集就是一个概率分布的支撑集就是所有概率密度非零部分的集合。流形manifold是高维空间中曲线、曲面概念的拓广我们可以在低维上直观理解这个概念比如我们说三维空间中的一个曲面是一个二维流形因为它的本质维度intrinsic dimension只有2一个点在这个二维流形上移动只有两个方向的自由度。同理三维空间或者二维空间中的一条曲线都是一个一维流形。测度measure是高维空间中长度、面积、体积概念的拓广可以理解为“超体积”。
回过头来看第一句话“当与的支撑集是高维空间中的低维流形时”基本上是成立的。原因是GAN中的生成器一般是从某个低维比如100维的随机分布中采样出一个编码向量再经过一个神经网络生成出一个高维样本比如64x64的图片就有4096维。当生成器的参数固定时生成样本的概率分布虽然是定义在4096维的空间上但它本身所有可能产生的变化已经被那个100维的随机分布限定了其本质维度就是100再考虑到神经网络带来的映射降维最终可能比100还小所以生成样本分布的支撑集就在4096维空间中构成一个最多100维的低维流形“撑不满”整个高维空间。
“撑不满”就会导致真实分布与生成分布难以“碰到面”这很容易在二维空间中理解一方面二维平面中随机取两条曲线它们之间刚好存在重叠线段的概率为0另一方面虽然它们很大可能会存在交叉点但是相比于两条曲线而言交叉点比曲线低一个维度长度测度为0可忽略。三维空间中也是类似的随机取两个曲面它们之间最多就是比较有可能存在交叉线但是交叉线比曲面低一个维度面积测度是0可忽略。从低维空间拓展到高维空间就有了如下逻辑因为一开始生成器随机初始化所以几乎不可能与有什么关联所以它们的支撑集之间的重叠部分要么不存在要么就比和的最小维度还要低至少一个维度故而测度为0。所谓“重叠部分测度为0”就是上文所言“不重叠或者重叠部分可忽略”的意思。
我们就得到了WGAN前作中关于生成器梯度消失的第一个论证在近似最优判别器下最小化生成器的loss等价于最小化与之间的JS散度而由于与几乎不可能有不可忽略的重叠所以无论它们相距多远JS散度都是常数最终导致生成器的梯度近似为0梯度消失。
接着作者写了很多公式定理从第二个角度进行论证但是背后的思想也可以直观地解释
首先与之间几乎不可能有不可忽略的重叠所以无论它们之间的“缝隙”多狭小都肯定存在一个最优分割曲面把它们隔开最多就是在那些可忽略的重叠处隔不开而已。由于判别器作为一个神经网络可以无限拟合这个分隔曲面所以存在一个最优判别器对几乎所有真实样本给出概率1对几乎所有生成样本给出概率0而那些隔不开的部分就是难以被最优判别器分类的样本但是它们的测度为0可忽略。最优判别器在真实分布和生成分布的支撑集上给出的概率都是常数1和0导致生成器的loss梯度为0梯度消失。
有了这些理论分析原始GAN不稳定的原因就彻底清楚了判别器训练得太好生成器梯度消失生成器loss降不下去判别器训练得不好生成器梯度不准四处乱跑。只有判别器训练得不好不坏才行但是这个火候又很难把握甚至在同一轮训练的前后不同阶段这个火候都可能不一样所以GAN才那么难训练。
实验辅证如下WGAN前作Figure 2。先分别将DCGAN训练12025个epoch然后固定生成器不动判别器重新随机初始化从头开始训练对于第一种形式的生成器loss产生的梯度可以打印出其尺度的变化曲线可以看到随着判别器的训练生成器的梯度均迅速衰减。注意y轴是对数坐标轴。第二种原始GAN形式的问题
一句话概括最小化第二种生成器loss函数会等价于最小化一个不合理的距离衡量导致两个问题一是梯度不稳定二是collapse mode即多样性不足。WGAN前作又是从两个角度进行了论证下面只说第一个角度因为对于第二个角度我难以找到一个直观的解释方式感兴趣的读者还是去看论文吧逃。
如前文所说Ian Goodfellow提出的“- log D trick”是把生成器loss改成
公式3
上文推导已经得到在最优判别器下
公式9
我们可以把KL散度注意下面是先g后r变换成含的形式
公式10
由公式3910可得最小化目标的等价变形注意上式最后两项不依赖于生成器G最终得到最小化公式3等价于最小化
公式11
这个等价最小化目标存在两个严重的问题。第一是它同时要最小化生成分布与真实分布的KL散度却又要最大化两者的JS散度一个要拉近一个却要推远这在直观上非常荒谬在数值上则会导致梯度不稳定这是后面那个JS散度项的毛病。
第二即便是前面那个正常的KL散度项也有毛病。因为KL散度不是一个对称的衡量与是有差别的。以前者为例
当而时对贡献趋近0当而时对贡献趋近正无穷
换言之对于上面两种错误的惩罚是不一样的第一种错误对应的是“生成器没能生成真实的样本”惩罚微小第二种错误对应的是“生成器生成了不真实的样本” 惩罚巨大。第一种错误对应的是缺乏多样性第二种错误对应的是缺乏准确性。这一放一打之下生成器宁可多生成一些重复但是很“安全”的样本也不愿意去生成多样性的样本因为那样一不小心就会产生第二种错误得不偿失。这种现象就是大家常说的collapse mode。
第一部分小结在原始GAN的近似最优判别器下第一种生成器loss面临梯度消失问题第二种生成器loss面临优化目标荒谬、梯度不稳定、对多样性与准确性惩罚不平衡导致mode collapse这几个问题。
实验辅证如下WGAN前作Figure 3。先分别将DCGAN训练12025个epoch然后固定生成器不动判别器重新随机初始化从头开始训练对于第二种形式的生成器loss产生的梯度可以打印出其尺度的变化曲线可以看到随着判别器的训练蓝色和绿色曲线中生成器的梯度迅速增长说明梯度不稳定红线对应的是DCGAN相对收敛的状态梯度才比较稳定。第二部分WGAN之前的一个过渡解决方案
原始GAN问题的根源可以归结为两点一是等价优化的距离衡量KL散度、JS散度不合理二是生成器随机初始化后的生成分布很难与真实分布有不可忽略的重叠。
WGAN前作其实已经针对第二点提出了一个解决方案就是对生成样本和真实样本加噪声直观上说使得原本的两个低维流形“弥散”到整个高维空间强行让它们产生不可忽略的重叠。而一旦存在重叠JS散度就能真正发挥作用此时如果两个分布越靠近它们“弥散”出来的部分重叠得越多JS散度也会越小而不会一直是一个常数于是在第一种原始GAN形式下梯度消失的问题就解决了。在训练过程中我们可以对所加的噪声进行退火annealing慢慢减小其方差到后面两个低维流形“本体”都已经有重叠时就算把噪声完全拿掉JS散度也能照样发挥作用继续产生有意义的梯度把两个低维流形拉近直到它们接近完全重合。以上是对原文的直观解释。
在这个解决方案下我们可以放心地把判别器训练到接近最优不必担心梯度消失的问题。而当判别器最优时对公式9取反可得判别器的最小loss为其中和分别是加噪后的真实分布与生成分布。反过来说从最优判别器的loss可以反推出当前两个加噪分布的JS散度。两个加噪分布的JS散度可以在某种程度上代表两个原本分布的距离也就是说可以通过最优判别器的loss反映训练进程……真的有这样的好事吗
并没有因为加噪JS散度的具体数值受到噪声的方差影响随着噪声的退火前后的数值就没法比较了所以它不能成为和距离的本质性衡量。
因为本文的重点是WGAN本身所以WGAN前作的加噪方案简单介绍到这里感兴趣的读者可以阅读原文了解更多细节。加噪方案是针对原始GAN问题的第二点根源提出的解决了训练不稳定的问题不需要小心平衡判别器训练的火候可以放心地把判别器训练到接近最优但是仍然没能够提供一个衡量训练进程的数值指标。但是WGAN本作就从第一点根源出发用Wasserstein距离代替JS散度同时完成了稳定训练和进程指标的问题
作者未对此方案进行实验验证。
第三部分Wasserstein距离的优越性质
Wasserstein距离又叫Earth-MoverEM距离定义如下
公式12
解释如下是和组合起来的所有可能的联合分布的集合反过来说中每一个分布的边缘分布都是和。对于每一个可能的联合分布而言可以从中采样得到一个真实样本和一个生成样本并算出这对样本的距离所以可以计算该联合分布下样本对距离的期望值。在所有可能的联合分布中能够对这个期望值取到的下界就定义为Wasserstein距离。
直观上可以把理解为在这个“路径规划”下把这堆“沙土”挪到“位置”所需的“消耗”而就是“最优路径规划”下的“最小消耗”所以才叫Earth-Mover推土机距离。
Wasserstein距离相比KL散度、JS散度的优越性在于即便两个分布没有重叠Wasserstein距离仍然能够反映它们的远近。WGAN本作通过简单的例子展示了这一点。考虑如下二维空间中的两个分布和在线段AB上均匀分布在线段CD上均匀分布通过控制参数可以控制着两个分布的距离远近。此时容易得到读者可自行验证突变
突变
平滑
KL散度和JS散度是突变的要么最大要么最小Wasserstein距离却是平滑的如果我们要用梯度下降法优化这个参数前两者根本提供不了梯度Wasserstein距离却可以。类似地在高维空间中如果两个分布不重叠或者重叠部分可忽略则KL和JS既反映不了远近也提供不了梯度但是Wasserstein却可以提供有意义的梯度。
第四部分从Wasserstein距离到WGAN
既然Wasserstein距离有如此优越的性质如果我们能够把它定义为生成器的loss不就可以产生有意义的梯度来更新生成器使得生成分布被拉向真实分布吗
没那么简单因为Wasserstein距离定义公式12中的没法直接求解不过没关系作者用了一个已有的定理把它变换为如下形式
公式13
证明过程被作者丢到论文附录中了我们也姑且不管先看看上式究竟说了什么。
首先需要介绍一个概念——Lipschitz连续。它其实就是在一个连续函数上面额外施加了一个限制要求存在一个常数使得定义域内的任意两个元素和都满足此时称函数的Lipschitz常数为。
简单理解比如说的定义域是实数集合那上面的要求就等价于的导函数绝对值不超过。再比如说就不是Lipschitz连续因为它的导函数没有上界。Lipschitz连续条件限制了一个连续函数的最大局部变动幅度。
公式13的意思就是在要求函数的Lipschitz常数不超过的条件下对所有可能满足条件的取到的上界然后再除以。特别地我们可以用一组参数来定义一系列可能的函数此时求解公式13可以近似变成求解如下形式
公式14
再用上我们搞深度学习的人最熟悉的那一套不就可以把用一个带参数的神经网络来表示嘛由于神经网络的拟合能力足够强大我们有理由相信这样定义出来的一系列虽然无法囊括所有可能但是也足以高度近似公式13要求的那个了。
最后还不能忘了满足公式14中这个限制。我们其实不关心具体的K是多少只要它不是正无穷就行因为它只是会使得梯度变大倍并不会影响梯度的方向。所以作者采取了一个非常简单的做法就是限制神经网络的所有参数的不超过某个范围比如此时关于输入样本的导数也不会超过某个范围所以一定存在某个不知道的常数使得的局部变动幅度不会超过它Lipschitz连续条件得以满足。具体在算法实现中只需要每次更新完后把它clip回这个范围就可以了。
到此为止我们可以构造一个含参数、最后一层不是非线性激活层的判别器网络在限制不超过某个范围的条件下使得
公式15
尽可能取到最大此时就会近似真实分布与生成分布之间的Wasserstein距离忽略常数倍数。注意原始GAN的判别器做的是真假二分类任务所以最后一层是sigmoid但是现在WGAN中的判别器做的是近似拟合Wasserstein距离属于回归任务所以要把最后一层的sigmoid拿掉。
接下来生成器要近似地最小化Wasserstein距离可以最小化由于Wasserstein距离的优良性质我们不需要担心生成器梯度消失的问题。再考虑到的第一项与生成器无关就得到了WGAN的两个loss。
公式16WGAN生成器loss函数
公式17WGAN判别器loss函数
公式15是公式17的反可以指示训练进程其数值越小表示真实分布与生成分布的Wasserstein距离越小GAN训练得越好。
WGAN完整的算法流程已经贴过了为了方便读者此处再贴一遍上文说过WGAN与原始GAN第一种形式相比只改了四点判别器最后一层去掉sigmoid生成器和判别器的loss不取log每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c不要用基于动量的优化算法包括momentum和Adam推荐RMSPropSGD也行
前三点都是从理论分析中得到的已经介绍完毕第四点却是作者从实验中发现的属于trick相对比较“玄”。作者发现如果使用Adam判别器的loss有时候会崩掉当它崩掉时Adam给出的更新方向与梯度方向夹角的cos值就变成负数更新方向与梯度方向南辕北辙这意味着判别器的loss梯度是不稳定的所以不适合用Adam这类基于动量的优化算法。作者改用RMSProp之后问题就解决了因为RMSProp适合梯度不稳定的情况。
对WGAN作者做了不少实验验证本文只提比较重要的三点。第一判别器所近似的Wasserstein距离与生成器的生成图片质量高度相关如下所示此即题图第二WGAN如果用类似DCGAN架构生成图片的效果与DCGAN差不多但是厉害的地方在于WGAN不用DCGAN各种特殊的架构设计也能做到不错的效果比如如果大家一起拿掉Batch Normalization的话DCGAN就崩了如果WGAN和原始GAN都使用多层全连接网络MLP不用CNNWGAN质量会变差些但是原始GAN不仅质量变得更差而且还出现了collapse mode即多样性不足第三在所有WGAN的实验中未观察到collapse mode作者也只说应该是解决了
最后补充一点论文没提到但是我个人觉得比较微妙的问题。判别器所近似的Wasserstein距离能够用来指示单次训练中的训练进程这个没错接着作者又说它可以用于比较多次训练进程指引调参我倒是觉得需要小心些。比如说我下次训练时改了判别器的层数、节点数等超参判别器的拟合能力就必然有所波动再比如说我下次训练时改了生成器两次迭代之间判别器的迭代次数这两种常见的变动都会使得Wasserstein距离的拟合误差就与上次不一样。那么这个拟合误差的变动究竟有多大或者说不同的人做实验时判别器的拟合能力或迭代次数相差实在太大那它们之间还能不能直接比较上述指标我都是存疑的。
评论区的知友
Minjie Xu进一步指出相比于判别器迭代次数的改变
对判别器架构超参的改变会直接影响到对应的Lipschitz常数进而改变近似Wasserstein距离的倍数前后两轮训练的指标就肯定不能比较了这是需要在实际应用中注意的。对此我想到了一个工程化的解决方式不是很优雅取同样一对生成分布和真实分布让前后两个不同架构的判别器各自拟合到收敛看收敛到的指标差多少倍可以近似认为是后面的
相对前面
的变化倍数于是就可以用这个变化倍数校正前后两轮训练的指标。第五部分总结
WGAN前作分析了Ian Goodfellow提出的原始GAN两种形式各自的问题第一种形式等价在最优判别器下等价于最小化生成分布与真实分布之间的JS散度由于随机生成分布很难与真实分布有不可忽略的重叠以及JS散度的突变特性使得生成器面临梯度消失的问题第二种形式在最优判别器下等价于既要最小化生成分布与真实分布直接的KL散度又要最大化其JS散度相互矛盾导致梯度不稳定而且KL散度的不对称性使得生成器宁可丧失多样性也不愿丧失准确性导致collapse mode现象。
WGAN前作针对分布重叠问题提出了一个过渡解决方案通过对生成样本和真实样本加噪声使得两个分布产生重叠理论上可以解决训练不稳定的问题可以放心训练判别器到接近最优但是未能提供一个指示训练进程的可靠指标也未做实验验证。
WGAN本作引入了Wasserstein距离由于它相对KL散度与JS散度具有优越的平滑特性理论上可以解决梯度消失问题。接着通过数学变换将Wasserstein距离写成可求解的形式利用一个参数数值范围受限的判别器神经网络来最大化这个形式就可以近似Wasserstein距离。在此近似最优判别器下优化生成器使得Wasserstein距离缩小就能有效拉近生成分布与真实分布。WGAN既解决了训练不稳定的问题也提供了一个可靠的训练进程指标而且该指标确实与生成样本的质量高度相关。作者对WGAN进行了实验验证。
可自由转载注明来源和作者即可。
编辑于 2017-04-20原文地址https://zhuanlan.zhihu.com/p/25071913