D810中d5600图像品质质中NORM 是什么

尼康D810传感器是什么?尼康D810传感器尺寸是多少?
尼康D810传感器是什么  尼康D810采用全新FX格式CMOS图像传感器,无光学低通设计,拥有极高的清晰度和图像品质,有效像素高达约3638万像素。  尼康D810的&优化校准&系统新增了&平面&选项,与使用&优化校准&的&自然&设定相比,使用&平面&设定能获得拍摄对象更多的信息。此外,每种&优化校准&选项都添加了调整&清晰度&的设定,用户能够让图像变得更锐利或更柔和,却不会过分强调图像的轮廓和边缘,并且每种设定都能以0.25级的增量进行调节,让用户能够更准确地表达出拍摄意图。那么尼康D810传感器是什么?  亮部重是尼康D810新增的测光模式,与不同的是,在测光的时候会顾及画面中的亮部,以不过曝为原则,在明暗曝光差距大的场景下拍摄,可以更好地保护亮部细节,当然这在半自动或自动下使用才能起到保证抓拍照片细节保留的作用,手动曝光的话则佐曝光值的参考作用。尼康D810传感器尺寸是多少  尼康D810传感器尺寸是35.9&24.0mm。  尼康D810重点加强了对角性能,它引入了与D4s同级别的Multi-CAM 3500FX系统,支持全新的Group-area AF mode,用户可在51个对焦点中任选出5个作为主对区域,其RGB测光传感器也升级至9.1万像素,能提供更为精准的自动测光效果。  针对尼康D810传感器是什么的问题,尼康D810采用3.2英寸122.9万像素RGBW液晶,所提供的&显示屏色彩平衡&功能可调节显示屏色彩。尼康D810具有约100%画面覆盖率的提供更佳的光透过率和颜色,使用大镜头时可轻松实现优化对焦。机身采用镁合金机身设计,坚固可靠,并且可有效抵御恶劣天气。
最新更新栏目
您可能喜欢
大家都在搜@尼康D810相机的二次曝光与图像合成有区别吗?_百度知道
@尼康D810相机的二次曝光与图像合成有区别吗?
我有更好的答案
二次曝光是相机提供的,在感光元件上,基于同一张数字影像文件的再次实景拍摄,完成第二次再创作的功能;而图像合成则是二张及多张以上已经完成拍摄的摄影作品,在电脑上完成再创作的一种手段。
尼康D810本身就有图像合成功能,我的问题是用D810进行二次曝光摄影与用D810拍摄两张照片后再在机内合成的区别是什么?谢谢!
D810本身并不能完成把两张照片在相机内合成一张的工作,所以其实还是又回到我给的答案上了。
采纳率:88%
来自团队:
引用arlong13的回答:二次曝光是相机提供的,在感光元件上,基于同一张数字影像文件的再次实景拍摄,完成第二次再创作的功能;而图像合成则是二张及多张以上已经完成拍摄的摄影作品,在电脑上完成再创作的一种手段。
尼康D7000也有这个功能,我实验过,好像区别不大。影像合成好像感光度变了。比二次曝光灵活,没有时间限制,拍摄要用NEF格式拍摄才可以合成,什么时候拍摄的都可以合成,注意感光度,试试吧,可玩。
1条折叠回答
为您推荐:
其他类似问题
您可能关注的内容
图像合成的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。&figure&&img src=&https://pic2.zhimg.com/v2-d90c9dd5e5f1a0c2eaad_b.jpg& data-rawwidth=&1280& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&1280& data-original=&https://pic2.zhimg.com/v2-d90c9dd5e5f1a0c2eaad_r.jpg&&&/figure&&p&最近在整理一些之前看tensorflow API的记在onenote中的笔记,然后发现在刚开始入门conv2d和conv2d_transpose两个API的时候,有点偏差,经过 &a class=&member_mention& href=&https://www.zhihu.com/people/990ace6ee& data-hash=&990ace6ee& data-hovercard=&p$b$990ace6ee&&@山隹木又&/a& 的指点得到最终的修正,在此感谢这位大佬的帮助。&/p&&figure&&img src=&https://pic2.zhimg.com/v2-f95e948cb1adf519dd91_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&989& data-rawheight=&568& class=&origin_image zh-lightbox-thumb& width=&989& data-original=&https://pic2.zhimg.com/v2-f95e948cb1adf519dd91_r.jpg&&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-e4ee04f7f11b0cc01fadf36_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1053& data-rawheight=&680& class=&origin_image zh-lightbox-thumb& width=&1053& data-original=&https://pic1.zhimg.com/v2-e4ee04f7f11b0cc01fadf36_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-480642aaf589f921d1e03_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1093& data-rawheight=&561& class=&origin_image zh-lightbox-thumb& width=&1093& data-original=&https://pic4.zhimg.com/v2-480642aaf589f921d1e03_r.jpg&&&/figure&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-209f16b0dcbd1017119cba60af009529_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&970& data-rawheight=&353& class=&origin_image zh-lightbox-thumb& width=&970& data-original=&https://pic3.zhimg.com/v2-209f16b0dcbd1017119cba60af009529_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-ffceebd2ec70982dae43c44c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&863& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&863& data-original=&https://pic3.zhimg.com/v2-ffceebd2ec70982dae43c44c_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-286ac2cfb69abf4d8aa06b8eeb39ced3_b.jpg& data-size=&normal& data-rawwidth=&344& data-rawheight=&386& data-thumbnail=&https://pic4.zhimg.com/v2-286ac2cfb69abf4d8aa06b8eeb39ced3_b.jpg& class=&content_image& width=&344&&&figcaption&反卷积示例一&/figcaption&&/figure&&figure&&img src=&https://pic1.zhimg.com/v2-bc898990f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&743& data-rawheight=&243& class=&origin_image zh-lightbox-thumb& width=&743& data-original=&https://pic1.zhimg.com/v2-bc898990f_r.jpg&&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-2e99f89da83fcfa_b.jpg& data-size=&normal& data-rawwidth=&395& data-rawheight=&449& data-thumbnail=&https://pic3.zhimg.com/v2-2e99f89da83fcfa_b.jpg& class=&content_image& width=&395&&&figcaption&反卷积示例2&/figcaption&&/figure&&figure&&img src=&https://pic3.zhimg.com/v2-59f66aebc337e2ac41c41e7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&941& data-rawheight=&140& class=&origin_image zh-lightbox-thumb& width=&941& data-original=&https://pic3.zhimg.com/v2-59f66aebc337e2ac41c41e7_r.jpg&&&/figure&&p&动图来源:&/p&&a href=&https://link.zhihu.com/?target=https%3A//github.com/vdumoulin/conv_arithmetic& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-36e16c3b514f2c21d810b_ipico.jpg& data-image-width=&400& data-image-height=&400& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&vdumoulin/conv_arithmetic&/a&&p&希望对大家有用~~加油!&/p&
最近在整理一些之前看tensorflow API的记在onenote中的笔记,然后发现在刚开始入门conv2d和conv2d_transpose两个API的时候,有点偏差,经过
的指点得到最终的修正,在此感谢这位大佬的帮助。 动图来源:希望对大家有用~…
&p&正好这两天在读这篇论文&/p&&p&&br&&/p&&p&&br&&/p&&p&如果之前了解过Spectral Norm [&a href=&//link.zhihu.com/?target=https%3A//arxiv.org/pdf/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&1&/span&&span class=&ellipsis&&&/span&&/a&]的话,这篇论文的思想很容易理解。&b&Spectral Norm是deep model的正则手段,为了让模型对输入的细微变化不敏感(insensitive to input perturbation,说的更浅显一点就是f(x)在x这一点的导数很小)&/b&我们需要最小化&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-892de4749ccd227eee5e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1027& data-rawheight=&91& class=&origin_image zh-lightbox-thumb& width=&1027& data-original=&https://pic1.zhimg.com/50/v2-892de4749ccd227eee5e_r.jpg&&&/figure&&p&深度模型f在文中用affine map来表示了,理论上是不严谨的,忽略之即可。。。&/p&&p&然后有 &img src=&//www.zhihu.com/equation?tex=%5Cfrac%7B%5Cleft+%5C%7C+W_%7B%5CTheta+%2Cx+%7D%5Cxi+%5Cright+%5C%7C_%7B2%7D%7D%7B%5Cleft+%5C%7C+%5Cxi+%5Cright+%5C%7C_%7B2%7D+%7D%5Cleq+%5Csigma+%28W_%7B%5CTheta+%2Cx+%7D%29& alt=&\frac{\left \| W_{\Theta ,x }\xi \right \|_{2}}{\left \| \xi \right \|_{2} }\leq \sigma (W_{\Theta ,x })& eeimg=&1&& , &img src=&//www.zhihu.com/equation?tex=+%5Csigma+%28W_%7B%5CTheta+%2Cx+%7D%29& alt=& \sigma (W_{\Theta ,x })& eeimg=&1&&就是矩阵的spectral norm,也叫L2 norm,数值上等于矩阵的最大奇异值。这个公式在p范数下都成立,最小化 &img src=&//www.zhihu.com/equation?tex=%5Cfrac%7B%5Cleft+%5C%7C+W_%7B%5CTheta+%2Cx+%7D%5Cxi+%5Cright+%5C%7C_%7B2%7D%7D%7B%5Cleft+%5C%7C+%5Cxi+%5Cright+%5C%7C_%7B2%7D+%7D& alt=&\frac{\left \| W_{\Theta ,x }\xi \right \|_{2}}{\left \| \xi \right \|_{2} }& eeimg=&1&& 则转化成最小化其上界 &img src=&//www.zhihu.com/equation?tex=+%5Csigma+%28W_%7B%5CTheta+%2Cx+%7D%29& alt=& \sigma (W_{\Theta ,x })& eeimg=&1&& 。&/p&&p&讲到这里一定不少人问L2 norm不是 &img src=&//www.zhihu.com/equation?tex=%5Csqrt%7Bx_%7B1%7D%5E%7B2%7D%2Bx_%7B2%7D%5E%7B2%7D%2B...%2Bx_%7Bn%7D%5E%7B2%7D%7D& alt=&\sqrt{x_{1}^{2}+x_{2}^{2}+...+x_{n}^{2}}& eeimg=&1&& 吗?很久前我也被这个绕晕过,但Matrix norm和Vector norm确实不是一个东西:&a href=&//link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Matrix_norm& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Matrix norm - Wikipedia&/a&和&a href=&//link.zhihu.com/?target=https%3A//en.wikipedia.org/wiki/Norm_%28mathematics%29& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Norm (mathematics)&/a&&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&说说SN-GAN,为什么要在GAN这个背景下再讨论Spectral Norm,原因是GAN中的判别器D遵循Lipschitz连续性假设,而普通的deep model则没有这个要求。换言之,我们不希望D的函数空间太广阔以至于它能鉴别所有生成的样本,而是将其约束到K-Lipschitz函数族中,即&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-604aad4cd1e2b096b1a190_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&261& data-rawheight=&42& class=&content_image& width=&261&&&/figure&&p&&b&符合K-Lipschitz的模型可以保证足够平坦,泛化能力也足够强。&/b&&/p&&p&从公式看,K等于梯度的最大范数。对于一个线性层,Lipschitz常数K就等于权值W的L2 norm:&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-5a826b882f04f3fdfe3c2f5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&592& data-rawheight=&32& class=&origin_image zh-lightbox-thumb& width=&592& data-original=&https://pic4.zhimg.com/50/v2-5a826b882f04f3fdfe3c2f5_r.jpg&&&/figure&&p&SN-GAN就是控制 &img src=&//www.zhihu.com/equation?tex=%5Csigma+%28W%29%3D1& alt=&\sigma (W)=1& eeimg=&1&& ,从而使得D符合1-Lipschitz正则。不过SN-GAN区别于传统Spectral Norm,有两点:&/p&&p&1. &img src=&//www.zhihu.com/equation?tex=%5Csigma+%28W%29+& alt=&\sigma (W) & eeimg=&1&& 不是被最小化,而是设置成一个常数(这个理由感觉有点牵强。。)&/p&&p&2.GAN在加入SN正则后,损失函数又增加了依赖样本的正则,而Spectral Norm则完全独立于训练样本&/p&&p&&br&&/p&&p&&br&&/p&&p&&b&然后再来看看,控制Lipschitz常数的另外几种方法:&/b&&/p&&p&&br&&/p&&p&首先是weight norm,它对矩阵的行向量做L2 norm,本质是规范化矩阵所有奇异值的总和。理论上weight norm也确实可以让D符合K-Lipschitz,可是模型训练时,一旦与目标函数结合,weight norm会优先抛弃特征。Frobenius norm也类似。&b&其实只要是对整体奇异值做优化,毫无例外都会破坏奇异值结构,导致信息损失。&/b&&/p&&p&&br&&/p&&p&然后是WGAN,最简单粗暴的方式,权值太大?剪!&b&所以Weight clipping把权值矩阵的元素都截断到一个常数[-c,c]之间,说说简单,Weight clipping的实现过程很繁琐而且低效,有致命的缺点。&/b&如WGAN-GP [&a href=&//link.zhihu.com/?target=https%3A//arxiv.org/pdf/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&arxiv.org/pdf/&/span&&span class=&invisible&&8&/span&&span class=&ellipsis&&&/span&&/a&]中阐述的capacity underuse问题:&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-9fe2b742cae2f09ad89bed7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&493& data-rawheight=&261& class=&origin_image zh-lightbox-thumb& width=&493& data-original=&https://pic1.zhimg.com/50/v2-9fe2b742cae2f09ad89bed7_r.jpg&&&/figure&&p&Weight clipping(上)让模型仅学到了简单的分布,另一张图是Weight clipping训练的权值分布:&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-f9dbdce803ca66f18a42cc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&210& data-rawheight=&193& class=&content_image& width=&210&&&/figure&&p&可以看出很单一,基本都在边界点&/p&&p&&b&所以WGAN还是避免不了信息损耗,因为Weight clipping本质上也可以看做对奇异值整体的改动。&/b&&/p&&p&&br&&/p&&p&&b&这时候Spectral Norm的优势就体现出来了,它只改变矩阵的最大奇异值,因此可以最大程度保留权值矩阵的原始信息,并且还可以做到K-Lipschitz正则,在regularization和discrimination之间做最佳的平衡。&/b&&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&&p&&/p&
正好这两天在读这篇论文 如果之前了解过Spectral Norm []的话,这篇论文的思想很容易理解。Spectral Norm是deep model的正则手段,为了让模型对输入的细微变化不敏感(insensitive to input perturbation,说的更浅显一点就是f(x)在x这…
&figure&&img src=&https://pic1.zhimg.com/v2-3cfe84e6b6b58c00e9398e_b.jpg& data-rawwidth=&1172& data-rawheight=&757& class=&origin_image zh-lightbox-thumb& width=&1172& data-original=&https://pic1.zhimg.com/v2-3cfe84e6b6b58c00e9398e_r.jpg&&&/figure&&blockquote&&p&本文后续:&a href=&https://www.zhihu.com/question//answer/& class=&internal&&Wasserstein GAN最新进展:从weight clipping到gradient penalty,更加先进的Lipschitz限制手法&/a&&/p&&/blockquote&&p&在GAN的相关研究如火如荼甚至可以说是泛滥的今天,一篇新鲜出炉的arXiv论文《&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Wasserstein GAN&/a&》却在Reddit的Machine Learning频道火了,连Goodfellow都&a href=&https://link.zhihu.com/?target=https%3A//www.reddit.com/r/MachineLearning/comments/5qxoaz/r__wasserstein_gan/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&在帖子里和大家热烈讨论&/a&,这篇论文究竟有什么了不得的地方呢? &br&&/p&&p&要知道自从&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&2014年Ian Goodfellow提出&/a&以来,GAN就存在着训练困难、生成器和判别器的loss无法指示训练进程、生成样本缺乏多样性等问题。从那时起,很多论文都在尝试解决,但是效果不尽人意,比如最有名的一个改进&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&DCGAN&/a&依靠的是对判别器和生成器的架构进行实验枚举,最终找到一组比较好的网络架构设置,但是实际上是治标不治本,没有彻底解决问题。而今天的主角Wasserstein GAN(下面简称WGAN)成功地做到了以下爆炸性的几点:&/p&&ul&&li&彻底解决GAN训练不稳定的问题,不再需要小心平衡生成器和判别器的训练程度&/li&&li&基本解决了collapse mode的问题,确保了生成样本的多样性 &br&&/li&&li&训练过程中终于有一个像交叉熵、准确率这样的数值来指示训练的进程,这个数值越小代表GAN训练得越好,代表生成器产生的图像质量越高(如题图所示)&/li&&li&以上一切好处不需要精心设计的网络架构,最简单的多层全连接网络就可以做到&/li&&/ul&&p&那以上好处来自哪里?这就是令人拍案叫绝的部分了——实际上作者整整花了两篇论文,在第一篇《&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Towards Principled Methods for Training Generative Adversarial Networks&/a&》里面推了一堆公式定理,从理论上分析了原始GAN的问题所在,从而针对性地给出了改进要点;在这第二篇《&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Wasserstein GAN&/a&》里面,又再从这个改进点出发推了一堆公式定理,最终给出了改进的算法实现流程,&b&而改进后相比原始GAN的算法实现流程却只改了四点&/b&:&/p&&ul&&li&判别器最后一层去掉sigmoid&/li&&li&生成器和判别器的loss不取log&/li&&li&每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c&/li&&li&不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行&/li&&/ul&&p& 算法截图如下:&figure&&img src=&https://pic1.zhimg.com/v2-6be6e2ef3d15c4b10c2a943e9bf4db70_b.jpg& data-rawwidth=&1169& data-rawheight=&681& class=&origin_image zh-lightbox-thumb& width=&1169& data-original=&https://pic1.zhimg.com/v2-6be6e2ef3d15c4b10c2a943e9bf4db70_r.jpg&&&/figure&&/p&&p& 改动是如此简单,效果却惊人地好,以至于Reddit上不少人在感叹:就这样?没有别的了? 太简单了吧!这些反应让我想起了一个颇有年头的鸡汤段子,说是一个工程师在电机外壳上用粉笔划了一条线排除了故障,要价一万美元——画一条线,1美元;知道在哪画线,9999美元。上面这四点改进就是作者Martin Arjovsky划的简简单单四条线,对于工程实现便已足够,但是知道在哪划线,背后却是精巧的数学分析,而这也是本文想要整理的内容。&/p&&p&本文内容分为五个部分:&/p&&ul&&li&原始GAN究竟出了什么问题?(此部分较长)&/li&&li&WGAN之前的一个过渡解决方案 &br&&/li&&li&Wasserstein距离的优越性质&/li&&li&从Wasserstein距离到WGAN&/li&&li&总结&br&&/li&&/ul&&br&&p&&i&理解原文的很多公式定理需要对测度论、 拓扑学等数学知识有所掌握,本文会从直观的角度对每一个重要公式进行解读,有时通过一些低维的例子帮助读者理解数学背后的思想,所以不免会失于严谨,如有引喻不当之处,欢迎在评论中指出。 &/i&&/p&&p&&i&以下简称《&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Wassertein GAN&/a&》为“WGAN本作”,简称《&a href=&https://link.zhihu.com/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Towards Principled Methods for Training Generative Adversarial Networks&/a&》为“WGAN前作”。&/i&&/p&&p&&i&WGAN源码实现:&a href=&https://link.zhihu.com/?target=https%3A//github.com/martinarjovsky/WassersteinGAN& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&martinarjovsky/WassersteinGAN&/a&&/i&&br&&/p&&h2&&u&第一部分:原始GAN究竟出了什么问题?&/u&&/h2&&p&回顾一下,原始GAN中判别器要最小化如下损失函数,尽可能把真实样本分为正例,生成样本分为负例:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=-%5Cmathbb%7BE%7D_%7Bx%5Csim+P_r%7D%5B%5Clog+D%28x%29%5D+-+%5Cmathbb%7BE%7D_%7Bx%5Csim+P_g%7D%5B%5Clog%281-D%28x%29%29%5D& alt=&-\mathbb{E}_{x\sim P_r}[\log D(x)] - \mathbb{E}_{x\sim P_g}[\log(1-D(x))]& eeimg=&1&& (公式1 )&br&&/p&&p&其中&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&是真实样本分布,&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&是由生成器产生的样本分布。对于生成器,Goodfellow一开始提出来一个损失函数,后来又提出了一个改进的损失函数,分别是&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx%5Csim+P_g%7D%5B%5Clog%281-D%28x%29%29%5D& alt=&\mathbb{E}_{x\sim P_g}[\log(1-D(x))]& eeimg=&1&& (公式2)&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx%5Csim+P_g%7D%5B-+%5Clog+D%28x%29%5D& alt=&\mathbb{E}_{x\sim P_g}[- \log D(x)]& eeimg=&1&& (公式3)&/p&&p&后者在WGAN两篇论文中称为“the - log D alternative”或“the - log D trick”。WGAN前作分别分析了这两种形式的原始GAN各自的问题所在,下面分别说明。&/p&&h2&&u&第一种原始GAN形式的问题&/u&&/h2&&p&&b&一句话概括:判别器越好,生成器梯度消失越严重。&/b&WGAN前作从两个角度进行了论证,第一个角度是从生成器的等价损失函数切入的。&br&&/p&&p&首先从公式1可以得到,在生成器G固定参数时最优的判别器D应该是什么。对于一个具体的样本&img src=&https://www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&,它可能来自真实分布也可能来自生成分布,它对公式1损失函数的贡献是&/p&&img src=&https://www.zhihu.com/equation?tex=-+P_r%28x%29+%5Clog+D%28x%29+-+P_g%28x%29+%5Clog+%5B1+-+D%28x%29%5D& alt=&- P_r(x) \log D(x) - P_g(x) \log [1 - D(x)]& eeimg=&1&&&p&令其关于&img src=&https://www.zhihu.com/equation?tex=D%28x%29& alt=&D(x)& eeimg=&1&&的导数为0,得&/p&&img src=&https://www.zhihu.com/equation?tex=-+%5Cfrac%7BP_r%28x%29%7D%7BD%28x%29%7D+%2B+%5Cfrac%7BP_g%28x%29%7D%7B1+-+D%28x%29%7D+%3D+0& alt=&- \frac{P_r(x)}{D(x)} + \frac{P_g(x)}{1 - D(x)} = 0& eeimg=&1&&&p&化简得最优判别器为:&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=D%5E%2A%28x%29+%3D+%5Cfrac%7BP_r%28x%29%7D%7BP_r%28x%29+%2B+P_g%28x%29%7D& alt=&D^*(x) = \frac{P_r(x)}{P_r(x) + P_g(x)}& eeimg=&1&&(公式4)&/p&&p&这个结果从直观上很容易理解,就是看一个样本&img src=&https://www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&来自真实分布和生成分布的可能性的相对比例。如果&img src=&https://www.zhihu.com/equation?tex=P_r%28x%29+%3D+0& alt=&P_r(x) = 0& eeimg=&1&&且&img src=&https://www.zhihu.com/equation?tex=P_g%28x%29+%5Cneq+0& alt=&P_g(x) \neq 0& eeimg=&1&&,最优判别器就应该非常自信地给出概率0;如果&img src=&https://www.zhihu.com/equation?tex=P_r%28x%29+%3D+P_g%28x%29& alt=&P_r(x) = P_g(x)& eeimg=&1&&,说明该样本是真是假的可能性刚好一半一半,此时最优判别器也应该给出概率0.5。&/p&&p&然而GAN训练有一个trick,就是别把判别器训练得太好,否则在实验中生成器会完全学不动(loss降不下去),为了探究背后的原因,我们就可以看看在极端情况——判别器最优时,生成器的损失函数变成什么。给公式2加上一个不依赖于生成器的项,使之变成&/p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx%5Csim+P_r%7D%5B%5Clog+D%28x%29%5D+%2B+%5Cmathbb%7BE%7D_%7Bx%5Csim+P_g%7D%5B%5Clog%281-D%28x%29%29%5D& alt=&\mathbb{E}_{x\sim P_r}[\log D(x)] + \mathbb{E}_{x\sim P_g}[\log(1-D(x))]& eeimg=&1&&&p&注意,最小化这个损失函数等价于最小化公式2,而且它刚好是判别器损失函数的反。代入最优判别器即公式4,再进行简单的变换可以得到&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_r%7D+%5Clog+%5Cfrac%7BP_r%28x%29%7D%7B%5Cfrac%7B1%7D%7B2%7D%5BP_r%28x%29+%2B+P_g%28x%29%5D%7D+%2B+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Clog+%5Cfrac%7BP_g%28x%29%7D%7B%5Cfrac%7B1%7D%7B2%7D%5BP_r%28x%29+%2B+P_g%28x%29%5D%7D+-+2%5Clog+2& alt=&\mathbb{E}_{x \sim P_r} \log \frac{P_r(x)}{\frac{1}{2}[P_r(x) + P_g(x)]} + \mathbb{E}_{x \sim P_g} \log \frac{P_g(x)}{\frac{1}{2}[P_r(x) + P_g(x)]} - 2\log 2& eeimg=&1&&(公式5)&/p&&p&变换成这个样子是为了引入Kullback–Leibler divergence(简称KL散度)和Jensen-Shannon divergence(简称JS散度)这两个重要的相似度衡量指标,后面的主角之一Wasserstein距离,就是要来吊打它们两个的。所以接下来介绍这两个重要的配角——KL散度和JS散度:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=KL%28P_1%7C%7CP_2%29+%3D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_1%7D+%5Clog+%5Cfrac%7BP_1%7D%7BP_2%7D& alt=&KL(P_1||P_2) = \mathbb{E}_{x \sim P_1} \log \frac{P_1}{P_2}& eeimg=&1&&(公式6)&/p&&p&&img src=&https://www.zhihu.com/equation?tex=JS%28P_1+%7C%7C+P_2%29+%3D+%5Cfrac%7B1%7D%7B2%7DKL%28P_1%7C%7C%5Cfrac%7BP_1+%2B+P_2%7D%7B2%7D%29+%2B+%5Cfrac%7B1%7D%7B2%7DKL%28P_2%7C%7C%5Cfrac%7BP_1+%2B+P_2%7D%7B2%7D%29& alt=&JS(P_1 || P_2) = \frac{1}{2}KL(P_1||\frac{P_1 + P_2}{2}) + \frac{1}{2}KL(P_2||\frac{P_1 + P_2}{2})& eeimg=&1&&(公式7)&/p&&p&于是公式5就可以继续写成&/p&&img src=&https://www.zhihu.com/equation?tex=2JS%28P_r+%7C%7C+P_g%29+-+2%5Clog+2& alt=&2JS(P_r || P_g) - 2\log 2& eeimg=&1&&(公式8)&br&&p&到这里读者可以先喘一口气,看看目前得到了什么结论:&b&根据原始GAN定义的判别器loss,我们可以得到最优判别器的形式;而在最优判别器的下,我们可以把原始GAN定义的生成器loss等价变换为最小化真实分布&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与生成分布&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&之间的JS散度。我们越训练判别器,它就越接近最优,最小化生成器的loss也就会越近似于最小化&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&之间的JS散度。&/b&&/p&&p&问题就出在这个JS散度上。我们会希望如果两个分布之间越接近它们的JS散度越小,我们通过优化JS散度就能将&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&“拉向”&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&,最终以假乱真。这个希望在两个分布有所重叠的时候是成立的,但是如果两个分布完全没有重叠的部分,或者它们重叠的部分可忽略(下面解释什么叫可忽略),它们的JS散度是多少呢?&/p&&p&答案是&img src=&https://www.zhihu.com/equation?tex=%5Clog+2& alt=&\log 2& eeimg=&1&&,因为对于任意一个x只有四种可能:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=P_1%28x%29+%3D+0& alt=&P_1(x) = 0& eeimg=&1&&且&img src=&https://www.zhihu.com/equation?tex=P_2%28x%29+%3D+0& alt=&P_2(x) = 0& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=P_1%28x%29+%5Cneq+0& alt=&P_1(x) \neq 0& eeimg=&1&&且&img src=&https://www.zhihu.com/equation?tex=P_2%28x%29+%5Cneq+0& alt=&P_2(x) \neq 0& eeimg=&1&&&br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=P_1%28x%29+%3D+0& alt=&P_1(x) = 0& eeimg=&1&&且&img src=&https://www.zhihu.com/equation?tex=P_2%28x%29+%5Cneq+0& alt=&P_2(x) \neq 0& eeimg=&1&&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=P_1%28x%29+%5Cneq+0& alt=&P_1(x) \neq 0& eeimg=&1&&且&img src=&https://www.zhihu.com/equation?tex=P_2%28x%29+%3D+0& alt=&P_2(x) = 0& eeimg=&1&&&/p&&p&第一种对计算JS散度无贡献,第二种情况由于重叠部分可忽略所以贡献也为0,第三种情况对公式7右边第一个项的贡献是&img src=&https://www.zhihu.com/equation?tex=%5Clog+%5Cfrac%7BP_2%7D%7B%5Cfrac%7B1%7D%7B2%7D%28P_2+%2B+0%29%7D+%3D+%5Clog+2& alt=&\log \frac{P_2}{\frac{1}{2}(P_2 + 0)} = \log 2& eeimg=&1&&,第四种情况与之类似,所以最终&img src=&https://www.zhihu.com/equation?tex=JS%28P_1%7C%7CP_2%29+%3D+%5Clog+2& alt=&JS(P_1||P_2) = \log 2& eeimg=&1&&。&/p&&p&换句话说,无论&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&跟&img src=&https://www.zhihu.com/equation?tex=P_g%0A& alt=&P_g
& eeimg=&1&&是远在天边,还是近在眼前,只要它们俩没有一点重叠或者重叠部分可忽略,JS散度就固定是常数&img src=&https://www.zhihu.com/equation?tex=%5Clog+2& alt=&\log 2& eeimg=&1&&,&b&而这对于梯度下降方法意味着——梯度为0&/b&!此时对于最优判别器来说,生成器肯定是得不到一丁点梯度信息的;即使对于接近最优的判别器来说,生成器也有很大机会面临梯度消失的问题。 &/p&&p&但是&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&不重叠或重叠部分可忽略的可能性有多大?不严谨的答案是:非常大。比较严谨的答案是:&b&当&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&的支撑集(support)是高维空间中的低维流形(manifold)时,&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&重叠部分测度(measure)为0的概率为1。&/b&&/p&&p&不用被奇怪的术语吓得关掉页面,虽然论文给出的是严格的数学表述,但是直观上其实很容易理解。首先简单介绍一下这几个概念:&/p&&ul&&li&支撑集(support)其实就是函数的非零部分子集,比如ReLU函数的支撑集就是&img src=&https://www.zhihu.com/equation?tex=%280%2C+%2B%5Cinfty%29& alt=&(0, +\infty)& eeimg=&1&&,一个概率分布的支撑集就是所有概率密度非零部分的集合。&/li&&li&流形(manifold)是高维空间中曲线、曲面概念的拓广,我们可以在低维上直观理解这个概念,比如我们说三维空间中的一个曲面是一个二维流形,因为它的本质维度(intrinsic dimension)只有2,一个点在这个二维流形上移动只有两个方向的自由度。同理,三维空间或者二维空间中的一条曲线都是一个一维流形。&/li&&li&测度(measure)是高维空间中长度、面积、体积概念的拓广,可以理解为“超体积”。&/li&&/ul&&p&回过头来看第一句话,“当&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&的支撑集是高维空间中的低维流形时”,基本上是成立的。原因是GAN中的生成器一般是从某个低维(比如100维)的随机分布中采样出一个编码向量,再经过一个神经网络生成出一个高维样本(比如64x64的图片就有4096维)。当生成器的参数固定时,生成样本的概率分布虽然是定义在4096维的空间上,但它本身所有可能产生的变化已经被那个100维的随机分布限定了,其本质维度就是100,再考虑到神经网络带来的映射降维,最终可能比100还小,所以生成样本分布的支撑集就在4096维空间中构成一个最多100维的低维流形,“撑不满”整个高维空间。&/p&&p&“撑不满”就会导致真实分布与生成分布难以“碰到面”,这很容易在二维空间中理解:一方面,二维平面中随机取两条曲线,它们之间刚好存在重叠线段的概率为0;另一方面,虽然它们很大可能会存在交叉点,但是相比于两条曲线而言,交叉点比曲线低一个维度,长度(测度)为0,可忽略。三维空间中也是类似的,随机取两个曲面,它们之间最多就是比较有可能存在交叉线,但是交叉线比曲面低一个维度,面积(测度)是0,可忽略。从低维空间拓展到高维空间,就有了如下逻辑:因为一开始生成器随机初始化,所以&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&几乎不可能与&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&有什么关联,所以它们的支撑集之间的重叠部分要么不存在,要么就比&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&的最小维度还要低至少一个维度,故而测度为0。所谓“重叠部分测度为0”,就是上文所言“不重叠或者重叠部分可忽略”的意思。 &/p&&p&我们就得到了WGAN前作中关于生成器梯度消失的第一个论证:&b&在(近似)最优判别器下,最小化生成器的loss等价于最小化&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&之间的JS散度,而由于&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&几乎不可能有不可忽略的重叠,所以无论它们相距多远JS散度都是常数&img src=&https://www.zhihu.com/equation?tex=%5Clog+2& alt=&\log 2& eeimg=&1&&,最终导致生成器的梯度(近似)为0,梯度消失。&/b&&/p&&p&接着作者写了很多公式定理从第二个角度进行论证,但是背后的思想也可以直观地解释:&/p&&ul&&li&首先,&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&之间几乎不可能有不可忽略的重叠,所以无论它们之间的“缝隙”多狭小,都肯定存在一个最优分割曲面把它们隔开,最多就是在那些可忽略的重叠处隔不开而已。&/li&&li&由于判别器作为一个神经网络可以无限拟合这个分隔曲面,所以存在一个最优判别器,对几乎所有真实样本给出概率1,对几乎所有生成样本给出概率0,而那些隔不开的部分就是难以被最优判别器分类的样本,但是它们的测度为0,可忽略。&/li&&li&最优判别器在真实分布和生成分布的支撑集上给出的概率都是常数(1和0),导致生成器的loss梯度为0,梯度消失。&/li&&/ul&&p&有了这些理论分析,原始GAN不稳定的原因就彻底清楚了:判别器训练得太好,生成器梯度消失,生成器loss降不下去;判别器训练得不好,生成器梯度不准,四处乱跑。只有判别器训练得不好不坏才行,但是这个火候又很难把握,甚至在同一轮训练的前后不同阶段这个火候都可能不一样,所以GAN才那么难训练。&/p&&p&实验辅证如下:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-ae_b.jpg& data-rawwidth=&1008& data-rawheight=&786& class=&origin_image zh-lightbox-thumb& width=&1008& data-original=&https://pic3.zhimg.com/v2-ae_r.jpg&&&/figure&&blockquote&&p&WGAN前作Figure 2。先分别将DCGAN训练1,20,25个epoch,然后固定生成器不动,判别器重新随机初始化从头开始训练,对于第一种形式的生成器loss产生的梯度可以打印出其尺度的变化曲线,可以看到随着判别器的训练,生成器的梯度均迅速衰减。注意y轴是对数坐标轴。&br&&/p&&/blockquote&&h2&&u&第二种原始GAN形式的问题&/u&&/h2&&p&&b&一句话概括:最小化第二种生成器loss函数,会等价于最小化一个不合理的距离衡量,导致两个问题,一是梯度不稳定,二是collapse mode即多样性不足。&/b&WGAN前作又是从两个角度进行了论证,下面只说第一个角度,因为对于第二个角度我难以找到一个直观的解释方式,感兴趣的读者还是去看论文吧(逃)。&/p&&p&如前文所说,Ian Goodfellow提出的“- log D trick”是把生成器loss改成&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx%5Csim+P_g%7D%5B-+%5Clog+D%28x%29%5D& alt=&\mathbb{E}_{x\sim P_g}[- \log D(x)]& eeimg=&1&&(公式3) &br&&/p&&p&上文推导已经得到在最优判别器&img src=&https://www.zhihu.com/equation?tex=D%5E%2A& alt=&D^*& eeimg=&1&&下&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx%5Csim+P_r%7D%5B%5Clog+D%5E%2A%28x%29%5D+%2B+%5Cmathbb%7BE%7D_%7Bx%5Csim+P_g%7D%5B%5Clog%281-D%5E%2A%28x%29%29%5D+%3D+2JS%28P_r+%7C%7C+P_g%29+-+2%5Clog+2& alt=&\mathbb{E}_{x\sim P_r}[\log D^*(x)] + \mathbb{E}_{x\sim P_g}[\log(1-D^*(x))] = 2JS(P_r || P_g) - 2\log 2& eeimg=&1&&(公式9)&/p&&p&我们可以把KL散度(注意下面是先g后r)变换成含&img src=&https://www.zhihu.com/equation?tex=D%5E%2A& alt=&D^*& eeimg=&1&&的形式:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D%0AKL%28P_g+%7C%7C+P_r%29+%26%3D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5B%5Clog+%5Cfrac%7BP_g%28x%29%7D%7BP_r%28x%29%7D%5D+%5C%5C%0A%26%3D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5B%5Clog+%5Cfrac%7BP_g%28x%29+%2F+%28P_r%28x%29+%2B+P_g%28x%29%29%7D%7BP_r%28x%29+%2F+%28P_r%28x%29+%2B+P_g%28x%29%29%7D%5D+%5C%5C%0A%26%3D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5B%5Clog+%5Cfrac%7B1+-+D%5E%2A%28x%29%7D%7BD%5E%2A%28x%29%7D%5D+%5C%5C%0A%26%3D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Clog+%5B1+-+D%5E%2A%28x%29%5D+-++%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Clog+D%5E%2A%28x%29%0A%5Cend%7Balign%7D+%5C%5C& alt=&\begin{align}
KL(P_g || P_r) &= \mathbb{E}_{x \sim P_g} [\log \frac{P_g(x)}{P_r(x)}] \\
&= \mathbb{E}_{x \sim P_g} [\log \frac{P_g(x) / (P_r(x) + P_g(x))}{P_r(x) / (P_r(x) + P_g(x))}] \\
&= \mathbb{E}_{x \sim P_g} [\log \frac{1 - D^*(x)}{D^*(x)}] \\
&= \mathbb{E}_{x \sim P_g} \log [1 - D^*(x)] -
\mathbb{E}_{x \sim P_g} \log D^*(x)
\end{align} \\& eeimg=&1&&(公式10)&/p&&p&由公式3,9,10可得最小化目标的等价变形&/p&&img src=&https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D%0A%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5B-%5Clog+D%5E%2A%28x%29%5D+%26%3D++KL%28P_g+%7C%7C+P_r%29+-++%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Clog+%5B1+-+D%5E%2A%28x%29%5D+%5C%5C%0A%26%3D+KL%28P_g+%7C%7C+P_r%29+-+2JS%28P_r+%7C%7C+P_g%29+%2B+2%5Clog+2+%2B+%5Cmathbb%7BE%7D_%7Bx%5Csim+P_r%7D%5B%5Clog+D%5E%2A%28x%29%5D%0A%5Cend%7Balign%7D& alt=&\begin{align}
\mathbb{E}_{x \sim P_g} [-\log D^*(x)] &=
KL(P_g || P_r) -
\mathbb{E}_{x \sim P_g} \log [1 - D^*(x)] \\
&= KL(P_g || P_r) - 2JS(P_r || P_g) + 2\log 2 + \mathbb{E}_{x\sim P_r}[\log D^*(x)]
\end{align}& eeimg=&1&&&p&注意上式最后两项不依赖于生成器G,最终得到最小化公式3等价于最小化&/p&&p&&img src=&https://www.zhihu.com/equation?tex=KL%28P_g+%7C%7C+P_r%29+-+2JS%28P_r+%7C%7C+P_g%29& alt=&KL(P_g || P_r) - 2JS(P_r || P_g)& eeimg=&1&&(公式11)&/p&&p&这个等价最小化目标存在两个严重的问题。第一是它同时要最小化生成分布与真实分布的KL散度,却又要最大化两者的JS散度,一个要拉近,一个却要推远!这在直观上非常荒谬,在数值上则会导致梯度不稳定,这是后面那个JS散度项的毛病。&/p&&p&第二,即便是前面那个正常的KL散度项也有毛病。因为KL散度不是一个对称的衡量,&img src=&https://www.zhihu.com/equation?tex=KL%28P_g+%7C%7C+P_r%29& alt=&KL(P_g || P_r)& eeimg=&1&&与&img src=&https://www.zhihu.com/equation?tex=KL%28P_r+%7C%7C+P_g%29& alt=&KL(P_r || P_g)& eeimg=&1&&是有差别的。以前者为例&/p&&ul&&li&当&img src=&https://www.zhihu.com/equation?tex=P_g%28x%29%5Crightarrow+0& alt=&P_g(x)\rightarrow 0& eeimg=&1&&而&img src=&https://www.zhihu.com/equation?tex=P_r%28x%29%5Crightarrow+1& alt=&P_r(x)\rightarrow 1& eeimg=&1&&时,&img src=&https://www.zhihu.com/equation?tex=P_g%28x%29+%5Clog+%5Cfrac%7BP_g%28x%29%7D%7BP_r%28x%29%7D+%5Crightarrow+0& alt=&P_g(x) \log \frac{P_g(x)}{P_r(x)} \rightarrow 0& eeimg=&1&&,对&img src=&https://www.zhihu.com/equation?tex=KL%28P_g+%7C%7C+P_r%29& alt=&KL(P_g || P_r)& eeimg=&1&&贡献趋近0&/li&&li&当&img src=&https://www.zhihu.com/equation?tex=P_g%28x%29%5Crightarrow+1& alt=&P_g(x)\rightarrow 1& eeimg=&1&&而&img src=&https://www.zhihu.com/equation?tex=P_r%28x%29%5Crightarrow+0& alt=&P_r(x)\rightarrow 0& eeimg=&1&&时,&img src=&https://www.zhihu.com/equation?tex=P_g%28x%29+%5Clog+%5Cfrac%7BP_g%28x%29%7D%7BP_r%28x%29%7D+%5Crightarrow+%2B%5Cinfty& alt=&P_g(x) \log \frac{P_g(x)}{P_r(x)} \rightarrow +\infty& eeimg=&1&&,对&img src=&https://www.zhihu.com/equation?tex=KL%28P_g+%7C%7C+P_r%29& alt=&KL(P_g || P_r)& eeimg=&1&&贡献趋近正无穷&/li&&/ul&&p&换言之,&img src=&https://www.zhihu.com/equation?tex=KL%28P_g+%7C%7C+P_r%29& alt=&KL(P_g || P_r)& eeimg=&1&&对于上面两种错误的惩罚是不一样的,第一种错误对应的是“生成器没能生成真实的样本”,惩罚微小;第二种错误对应的是“生成器生成了不真实的样本” ,惩罚巨大。第一种错误对应的是缺乏多样性,第二种错误对应的是缺乏准确性。&b&这一放一打之下,生成器宁可多生成一些重复但是很“安全”的样本,也不愿意去生成多样性的样本,因为那样一不小心就会产生第二种错误,得不偿失。这种现象就是大家常说的collapse mode。&/b&&/p&&p&&b&第一部分小结:在原始GAN的(近似)最优判别器下,第一种生成器loss面临梯度消失问题,第二种生成器loss面临优化目标荒谬、梯度不稳定、对多样性与准确性惩罚不平衡导致mode collapse这几个问题。&/b&&/p&&p&实验辅证如下:&figure&&img src=&https://pic3.zhimg.com/v2-b85cdb4d79dcfb3a6d4bf_b.jpg& data-rawwidth=&1016& data-rawheight=&801& class=&origin_image zh-lightbox-thumb& width=&1016& data-original=&https://pic3.zhimg.com/v2-b85cdb4d79dcfb3a6d4bf_r.jpg&&&/figure&&/p&&blockquote&&p&WGAN前作Figure 3。先分别将DCGAN训练1,20,25个epoch,然后固定生成器不动,判别器重新随机初始化从头开始训练,对于第二种形式的生成器loss产生的梯度可以打印出其尺度的变化曲线,可以看到随着判别器的训练,蓝色和绿色曲线中生成器的梯度迅速增长,说明梯度不稳定,红线对应的是DCGAN相对收敛的状态,梯度才比较稳定。&/p&&/blockquote&&h2&&u&第二部分:WGAN之前的一个过渡解决方案 &/u&&br&&/h2&&p&原始GAN问题的根源可以归结为两点,一是等价优化的距离衡量(KL散度、JS散度)不合理,二是生成器随机初始化后的生成分布很难与真实分布有不可忽略的重叠。&/p&&p&WGAN前作其实已经针对第二点提出了一个解决方案,就是对生成样本和真实样本加噪声,直观上说,使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠。而一旦存在重叠,JS散度就能真正发挥作用,此时如果两个分布越靠近,它们“弥散”出来的部分重叠得越多,JS散度也会越小而不会一直是一个常数,于是(在第一种原始GAN形式下)梯度消失的问题就解决了。在训练过程中,我们可以对所加的噪声进行退火(annealing),慢慢减小其方差,到后面两个低维流形“本体”都已经有重叠时,就算把噪声完全拿掉,JS散度也能照样发挥作用,继续产生有意义的梯度把两个低维流形拉近,直到它们接近完全重合。以上是对原文的直观解释。&/p&&p&在这个解决方案下我们可以放心地把判别器训练到接近最优,不必担心梯度消失的问题。而当判别器最优时,对公式9取反可得判别器的最小loss为&/p&&img src=&https://www.zhihu.com/equation?tex=%5Cbegin%7Balign%7D%0A%5Cmin+L_D%28P_%7Br%2B%5Cepsilon%7D%2C+P_%7Bg%2B%5Cepsilon%7D%29+%26%3D+-+%5Cmathbb%7BE%7D_%7Bx%5Csim+P_%7Br%2B%5Cepsilon%7D%7D%5B%5Clog+D%5E%2A%28x%29%5D+-+%5Cmathbb%7BE%7D_%7Bx%5Csim+P_%7Bg%2B%5Cepsilon%7D%7D%5B%5Clog%281-D%5E%2A%28x%29%29%5D+%5C%5C%0A%26%3D+2%5Clog+2+-+2JS%28P_%7Br%2B%5Cepsilon%7D+%7C%7C+P_%7Bg%2B%5Cepsilon%7D%29%0A%5Cend%7Balign%7D& alt=&\begin{align}
\min L_D(P_{r+\epsilon}, P_{g+\epsilon}) &= - \mathbb{E}_{x\sim P_{r+\epsilon}}[\log D^*(x)] - \mathbb{E}_{x\sim P_{g+\epsilon}}[\log(1-D^*(x))] \\
&= 2\log 2 - 2JS(P_{r+\epsilon} || P_{g+\epsilon})
\end{align}& eeimg=&1&&&p&其中&img src=&https://www.zhihu.com/equation?tex=P_%7Br%2B%5Cepsilon%7D& alt=&P_{r+\epsilon}& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_%7Bg%2B%5Cepsilon%7D& alt=&P_{g+\epsilon}& eeimg=&1&&分别是加噪后的真实分布与生成分布。反过来说,从最优判别器的loss可以反推出当前两个加噪分布的JS散度。两个加噪分布的JS散度可以在某种程度上代表两个原本分布的距离,也就是说可以通过最优判别器的loss反映训练进程!……真的有这样的好事吗?&/p&&p&并没有,因为加噪JS散度的具体数值受到噪声的方差影响,随着噪声的退火,前后的数值就没法比较了,所以它不能成为&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&距离的本质性衡量。&/p&&p&因为本文的重点是WGAN本身,所以WGAN前作的加噪方案简单介绍到这里,感兴趣的读者可以阅读原文了解更多细节。&b&加噪方案是针对原始GAN问题的第二点根源提出的,解决了训练不稳定的问题,不需要小心平衡判别器训练的火候,可以放心地把判别器训练到接近最优,但是仍然没能够提供一个衡量训练进程的数值指标。但是WGAN本作就从第一点根源出发,用Wasserstein距离代替JS散度,同时完成了稳定训练和进程指标的问题!&/b&&/p&&p&作者未对此方案进行实验验证。 &br&&/p&&h2&&u&第三部分:Wasserstein距离的优越性质&/u&&/h2&&p&Wasserstein距离又叫Earth-Mover(EM)距离,定义如下:&/p&&p&&img src=&https://www.zhihu.com/equation?tex=W%28P_r%2C+P_g%29+%3D+%5Cinf_%7B%5Cgamma+%5Csim+%5CPi+%28P_r%2C+P_g%29%7D+%5Cmathbb%7BE%7D_%7B%28x%2C+y%29+%5Csim+%5Cgamma%7D+%5B%7C%7Cx+-+y%7C%7C%5D& alt=&W(P_r, P_g) = \inf_{\gamma \sim \Pi (P_r, P_g)} \mathbb{E}_{(x, y) \sim \gamma} [||x - y||]& eeimg=&1&&(公式12)&/p&&p&解释如下:&img src=&https://www.zhihu.com/equation?tex=%5CPi+%28P_r%2C+P_g%29& alt=&\Pi (P_r, P_g)& eeimg=&1&&是&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&组合起来的所有可能的联合分布的集合,反过来说,&img src=&https://www.zhihu.com/equation?tex=%5CPi+%28P_r%2C+P_g%29& alt=&\Pi (P_r, P_g)& eeimg=&1&&中每一个分布的边缘分布都是&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&。对于每一个可能的联合分布&img src=&https://www.zhihu.com/equation?tex=%5Cgamma& alt=&\gamma& eeimg=&1&&而言,可以从中采样&img src=&https://www.zhihu.com/equation?tex=%28x%2C+y%29+%5Csim+%5Cgamma& alt=&(x, y) \sim \gamma& eeimg=&1&&得到一个真实样本&img src=&https://www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&和一个生成样本&img src=&https://www.zhihu.com/equation?tex=y& alt=&y& eeimg=&1&&,并算出这对样本的距离&img src=&https://www.zhihu.com/equation?tex=%7C%7Cx-y%7C%7C& alt=&||x-y||& eeimg=&1&&,所以可以计算该联合分布&img src=&https://www.zhihu.com/equation?tex=%5Cgamma& alt=&\gamma& eeimg=&1&&下样本对距离的期望值&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7B%28x%2C+y%29+%5Csim+%5Cgamma%7D+%5B%7C%7Cx+-+y%7C%7C%5D& alt=&\mathbb{E}_{(x, y) \sim \gamma} [||x - y||]& eeimg=&1&&。在所有可能的联合分布中能够对这个期望值取到的下界&img src=&https://www.zhihu.com/equation?tex=%5Cinf_%7B%5Cgamma+%5Csim+%5CPi+%28P_r%2C+P_g%29%7D+%5Cmathbb%7BE%7D_%7B%28x%2C+y%29+%5Csim+%5Cgamma%7D+%5B%7C%7Cx+-+y%7C%7C%5D& alt=&\inf_{\gamma \sim \Pi (P_r, P_g)} \mathbb{E}_{(x, y) \sim \gamma} [||x - y||]& eeimg=&1&&,就定义为Wasserstein距离。&/p&&p&直观上可以把&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7B%28x%2C+y%29+%5Csim+%5Cgamma%7D+%5B%7C%7Cx+-+y%7C%7C%5D& alt=&\mathbb{E}_{(x, y) \sim \gamma} [||x - y||]& eeimg=&1&&理解为在&img src=&https://www.zhihu.com/equation?tex=%5Cgamma& alt=&\gamma& eeimg=&1&&这个“路径规划”下把&img src=&https://www.zhihu.com/equation?tex=P_r& alt=&P_r& eeimg=&1&&这堆“沙土”挪到&img src=&https://www.zhihu.com/equation?tex=P_g& alt=&P_g& eeimg=&1&&“位置”所需的“消耗”,而&img src=&https://www.zhihu.com/equation?tex=W%28P_r%2C+P_g%29& alt=&W(P_r, P_g)& eeimg=&1&&就是“最优路径规划”下的“最小消耗”,所以才叫Earth-Mover(推土机)距离。&/p&&p&&b&Wasserstein距离相比KL散度、JS散度的优越性在于,即便两个分布没有重叠,Wasserstein距离仍然能够反映它们的远近。&/b&WGAN本作通过简单的例子展示了这一点。考虑如下二维空间中的两个分布&img src=&https://www.zhihu.com/equation?tex=P_1& alt=&P_1& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=P_2& alt=&P_2& eeimg=&1&&,&img src=&https://www.zhihu.com/equation?tex=P_1& alt=&P_1& eeimg=&1&&在线段AB上均匀分布,&img src=&https://www.zhihu.com/equation?tex=P_2& alt=&P_2& eeimg=&1&&在线段CD上均匀分布,通过控制参数&img src=&https://www.zhihu.com/equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&&可以控制着两个分布的距离远近。&/p&&p&&figure&&img src=&https://pic3.zhimg.com/v2-c9cc9f8c879e7fe93d6e3bfafd41bd8a_b.jpg& data-rawwidth=&632& data-rawheight=&585& class=&origin_image zh-lightbox-thumb& width=&632& data-original=&https://pic3.zhimg.com/v2-c9cc9f8c879e7fe93d6e3bfafd41bd8a_r.jpg&&&/figure& 此时容易得到(读者可自行验证)&/p&&p&&img src=&https://www.zhihu.com/equation?tex=KL%28P_1+%7C%7C+P_2%29+%3D+KL%28P_1+%7C%7C+P_2%29+%3D%0A%5Cbegin%7Bcases%7D%0A%2B%5Cinfty+%26+%5Ctext%7Bif+%24%5Ctheta+%5Cneq+0%24%7D+%5C%5C%0A0+%26+%5Ctext%7Bif+%24%5Ctheta+%3D+0%24%7D%0A%5Cend%7Bcases%7D& alt=&KL(P_1 || P_2) = KL(P_1 || P_2) =
\begin{cases}
+\infty & \text{if $\theta \neq 0$} \\
0 & \text{if $\theta = 0$}
\end{cases}& eeimg=&1&&(突变)&/p&&p&&img src=&https://www.zhihu.com/equation?tex=JS%28P_1%7C%7CP_2%29%3D%0A%5Cbegin%7Bcases%7D%0A%5Clog+2+%26+%5Ctext%7Bif+%24%5Ctheta+%5Cneq+0%24%7D+%5C%5C%0A0+%26+%5Ctext%7Bif+%24%5Ctheta+-+0%24%7D%0A%5Cend%7Bcases%7D& alt=&JS(P_1||P_2)=
\begin{cases}
\log 2 & \text{if $\theta \neq 0$} \\
0 & \text{if $\theta - 0$}
\end{cases}& eeimg=&1&&(突变)&/p&&p&&img src=&https://www.zhihu.com/equation?tex=W%28P_0%2C+P_1%29+%3D+%7C%5Ctheta%7C& alt=&W(P_0, P_1) = |\theta|& eeimg=&1&&(平滑)&/p&&p&KL散度和JS散度是突变的,要么最大要么最小,&b&Wasserstein距离却是平滑的&/b&,如果我们要用梯度下降法优化&img src=&https://www.zhihu.com/equation?tex=%5Ctheta& alt=&\theta& eeimg=&1&&这个参数,前两者根本提供不了梯度,Wasserstein距离却可以。类似地,在高维空间中如果两个分布不重叠或者重叠部分可忽略,则KL和JS既反映不了远近,也提供不了梯度,&b&但是Wasserstein却可以提供有意义的梯度&/b&。&/p&&h2&&u&第四部分:从Wasserstein距离到WGAN&/u&&/h2&&p&既然Wasserstein距离有如此优越的性质,如果我们能够把它定义为生成器的loss,不就可以产生有意义的梯度来更新生成器,使得生成分布被拉向真实分布吗?&/p&&p&没那么简单,因为Wasserstein距离定义(公式12)中的&img src=&https://www.zhihu.com/equation?tex=%5Cinf_%7B%5Cgamma+%5Csim+%5CPi+%28P_r%2C+P_g%29%7D& alt=&\inf_{\gamma \sim \Pi (P_r, P_g)}& eeimg=&1&&没法直接求解,不过没关系,作者用了一个已有的定理把它变换为如下形式&/p&&p&&img src=&https://www.zhihu.com/equation?tex=W%28P_r%2C+P_g%29+%3D+%5Cfrac%7B1%7D%7BK%7D+%5Csup_%7B%7C%7Cf%7C%7C_L+%5Cleq+K%7D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_r%7D+%5Bf%28x%29%5D+-+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Bf%28x%29%5D& alt=&W(P_r, P_g) = \frac{1}{K} \sup_{||f||_L \leq K} \mathbb{E}_{x \sim P_r} [f(x)] - \mathbb{E}_{x \sim P_g} [f(x)]& eeimg=&1&&(公式13)&/p&&p&证明过程被作者丢到论文附录中了,我们也姑且不管,先看看上式究竟说了什么。&/p&&p&首先需要介绍一个概念——Lipschitz连续。它其实就是在一个连续函数&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&上面额外施加了一个限制,要求存在一个常数&img src=&https://www.zhihu.com/equation?tex=K%5Cgeq+0& alt=&K\geq 0& eeimg=&1&&使得定义域内的任意两个元素&img src=&https://www.zhihu.com/equation?tex=x_1& alt=&x_1& eeimg=&1&&和&img src=&https://www.zhihu.com/equation?tex=x_2& alt=&x_2& eeimg=&1&&都满足&/p&&img src=&https://www.zhihu.com/equation?tex=%7Cf%28x_1%29+-+f%28x_2%29%7C+%5Cleq+K+%7Cx_1+-+x_2%7C& alt=&|f(x_1) - f(x_2)| \leq K |x_1 - x_2|& eeimg=&1&&&p&此时称函数&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&的Lipschitz常数为&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&。&/p&&p&简单理解,比如说&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&的定义域是实数集合,那上面的要求就等价于&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&的导函数绝对值不超过&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&。再比如说&img src=&https://www.zhihu.com/equation?tex=%5Clog+%28x%29& alt=&\log (x)& eeimg=&1&&就不是Lipschitz连续,因为它的导函数没有上界。Lipschitz连续条件限制了一个连续函数的最大局部变动幅度。&/p&&p&公式13的意思就是在要求函数&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&的Lipschitz常数&img src=&https://www.zhihu.com/equation?tex=%7C%7Cf%7C%7C_L& alt=&||f||_L& eeimg=&1&&不超过&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&的条件下,对所有可能满足条件的&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&取到&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_r%7D+%5Bf%28x%29%5D+-+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Bf%28x%29%5D& alt=&\mathbb{E}_{x \sim P_r} [f(x)] - \mathbb{E}_{x \sim P_g} [f(x)]& eeimg=&1&&的上界,然后再除以&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&。特别地,我们可以用一组参数&img src=&https://www.zhihu.com/equation?tex=w& alt=&w& eeimg=&1&&来定义一系列可能的函数&img src=&https://www.zhihu.com/equation?tex=f_w& alt=&f_w& eeimg=&1&&,此时求解公式13可以近似变成求解如下形式&/p&&p&&img src=&https://www.zhihu.com/equation?tex=K+%5Ccdot+W%28P_r%2C+P_g%29+%5Capprox+%5Cmax_%7Bw%3A+%7Cf_w%7C_L+%5Cleq+K%7D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_r%7D+%5Bf_w%28x%29%5D+-+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Bf_w%28x%29%5D& alt=&K \cdot W(P_r, P_g) \approx \max_{w: |f_w|_L \leq K} \mathbb{E}_{x \sim P_r} [f_w(x)] - \mathbb{E}_{x \sim P_g} [f_w(x)]& eeimg=&1&&(公式14)&/p&&p&再用上我们搞深度学习的人最熟悉的那一套,不就可以把&img src=&https://www.zhihu.com/equation?tex=f& alt=&f& eeimg=&1&&用一个带参数&img src=&https://www.zhihu.com/equation?tex=w& alt=&w& eeimg=&1&&的神经网络来表示嘛!由于神经网络的拟合能力足够强大,我们有理由相信,这样定义出来的一系列&img src=&https://www.zhihu.com/equation?tex=f_w& alt=&f_w& eeimg=&1&&虽然无法囊括所有可能,但是也足以高度近似公式13要求的那个&img src=&https://www.zhihu.com/equation?tex=sup_%7B%7C%7Cf%7C%7C_L+%5Cleq+K%7D+& alt=&sup_{||f||_L \leq K} & eeimg=&1&&了。&/p&&p&最后,还不能忘了满足公式14中&img src=&https://www.zhihu.com/equation?tex=%7C%7Cf_w%7C%7C_L+%5Cleq+K& alt=&||f_w||_L \leq K& eeimg=&1&&这个限制。我们其实不关心具体的K是多少,只要它不是正无穷就行,因为它只是会使得梯度变大&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&倍,并不会影响梯度的方向。所以作者采取了一个非常简单的做法,就是限制神经网络&img src=&https://www.zhihu.com/equation?tex=f_%5Ctheta& alt=&f_\theta& eeimg=&1&&的所有参数&img src=&https://www.zhihu.com/equation?tex=w_i& alt=&w_i& eeimg=&1&&的不超过某个范围&img src=&https://www.zhihu.com/equation?tex=%5B-c%2C+c%5D& alt=&[-c, c]& eeimg=&1&&,比如&img src=&https://www.zhihu.com/equation?tex=w_i+%5Cin+%5B-+0.01%2C+0.01%5D& alt=&w_i \in [- 0.01, 0.01]& eeimg=&1&&,此时关于输入样本&img src=&https://www.zhihu.com/equation?tex=x& alt=&x& eeimg=&1&&的导数&img src=&https://www.zhihu.com/equation?tex=%5Cfrac%7B%5Cpartial+f_w%7D%7B%5Cpartial+x%7D& alt=&\frac{\partial f_w}{\partial x}& eeimg=&1&&也不会超过某个范围,所以一定存在某个不知道的常数&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&使得&img src=&https://www.zhihu.com/equation?tex=f_w& alt=&f_w& eeimg=&1&&的局部变动幅度不会超过它,Lipschitz连续条件得以满足。具体在算法实现中,只需要每次更新完&img src=&https://www.zhihu.com/equation?tex=w& alt=&w& eeimg=&1&&后把它clip回这个范围就可以了。&/p&&p&&b&到此为止,我们可以构造一个含参数&img src=&https://www.zhihu.com/equation?tex=w& alt=&w& eeimg=&1&&、最后一层不是非线性激活层的判别器网络&img src=&https://www.zhihu.com/equation?tex=f_w& alt=&f_w& eeimg=&1&&,在限制&img src=&https://www.zhihu.com/equation?tex=w& alt=&w& eeimg=&1&&不超过某个范围的条件下,使得&/b&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=L+%3D+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_r%7D+%5Bf_w%28x%29%5D+-+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Bf_w%28x%29%5D& alt=&L = \mathbb{E}_{x \sim P_r} [f_w(x)] - \mathbb{E}_{x \sim P_g} [f_w(x)]& eeimg=&1&&(公式15)&/p&&p&&b&尽可能取到最大,此时&img src=&https://www.zhihu.com/equation?tex=L& alt=&L& eeimg=&1&&就会近似真实分布与生成分布之间的Wasserstein距离(忽略常数倍数&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&)。注意原始GAN的判别器做的是真假二分类任务,所以最后一层是sigmoid,但是现在WGAN中的判别器&img src=&https://www.zhihu.com/equation?tex=f_w& alt=&f_w& eeimg=&1&&做的是近似拟合Wasserstein距离,属于回归任务,所以要把最后一层的sigmoid拿掉。&/b&&/p&&p&&b&接下来生成器要近似地最小化Wasserstein距离,可以最小化&img src=&https://www.zhihu.com/equation?tex=L& alt=&L& eeimg=&1&&,由于Wasserstein距离的优良性质,我们不需要担心生成器梯度消失的问题。再考虑到&img src=&https://www.zhihu.com/equation?tex=L& alt=&L& eeimg=&1&&的第一项与生成器无关,就得到了WGAN的两个loss。&/b&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=-+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Bf_w%28x%29%5D& alt=&- \mathbb{E}_{x \sim P_g} [f_w(x)]& eeimg=&1&&(公式16,WGAN生成器loss函数) &br&&/p&&p&&img src=&https://www.zhihu.com/equation?tex=%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_g%7D+%5Bf_w%28x%29%5D-+%5Cmathbb%7BE%7D_%7Bx+%5Csim+P_r%7D+%5Bf_w%28x%29%5D& alt=&\mathbb{E}_{x \sim P_g} [f_w(x)]- \mathbb{E}_{x \sim P_r} [f_w(x)]& eeimg=&1&&(公式17,WGAN判别器loss函数)&/p&&p&&b&公式15是公式17的反,可以指示训练进程,其数值越小,表示真实分布与生成分布的Wasserstein距离越小,GAN训练得越好。&/b&&/p&&p&WGAN完整的算法流程已经贴过了,为了方便读者此处再贴一遍:&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-6be6e2ef3d15c4b10c2a943e9bf4db70_b.jpg& data-rawwidth=&1169& data-rawheight=&681& class=&origin_image zh-lightbox-thumb& width=&1169& data-original=&https://pic1.zhimg.com/v2-6be6e2ef3d15c4b10c2a943e9bf4db70_r.jpg&&&/figure&上文说过,WGAN与原始GAN第一种形式相比,只改了四点:&/p&&ul&&li&判别器最后一层去掉sigmoid&/li&&li&生成器和判别器的loss不取log&/li&&li&每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c&/li&&li&不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行&/li&&/ul&&p&前三点都是从理论分析中得到的,已经介绍完毕;第四点却是作者从实验中发现的,属于trick,相对比较“玄”。作者发现如果使用Adam,判别器的loss有时候会崩掉,当它崩掉时,Adam给出的更新方向与梯度方向夹角的cos值就变成负数,更新方向与梯度方向南辕北辙,这意味着判别器的loss梯度是不稳定的,所以不适合用Adam这类基于动量的优化算法。作者改用RMSProp之后,问题就解决了,因为RMSProp适合梯度不稳定的情况。&/p&&p&对WGAN作者做了不少实验验证,本文只提比较重要的三点。第一,判别器所近似的Wasserstein距离与生成器的生成图片质量高度相关,如下所示(此即题图):&/p&&p&&figure&&img src=&https://pic1.zhimg.com/v2-3cfe84e6b6b58c00e9398e_b.jpg& data-rawwidth=&1172& data-rawheight=&757& class=&origin_image zh-lightbox-thumb& width=&1172& data-original=&https://pic1.zhimg.com/v2-3cfe84e6b6b58c00e9398e_r.jpg&&&/figure&第二,WGAN如果用类似DCGAN架构,生成图片的效果与DCGAN差不多:&figure&&img src=&https://pic4.zhimg.com/v2-5fdccfd580ea6f98a831_b.jpg& data-rawwidth=&1181& data-rawheight=&152& class=&origin_image zh-lightbox-thumb& width=&1181& data-original=&https://pic4.zhimg.com/v2-5fdccfd580ea6f98a831_r.jpg&&&/figure& 但是厉害的地方在于WGAN不用DCGAN各种特殊的架构设计也能做到不错的效果,比如如果大家一起拿掉Batch Normalization的话,DCGAN就崩了:&figure&&img src=&https://pic2.zhimg.com/v2-8adc9f92a9c6d5a43c00da_b.jpg& data-rawwidth=&1286& data-rawheight=&160& class=&origin_image zh-lightbox-thumb& width=&1286& data-original=&https://pic2.zhimg.com/v2-8adc9f92a9c6d5a43c00da_r.jpg&&&/figure&&/p&&p&如果WGAN和原始GAN都使用多层全连接网络(MLP),不用CNN,WGAN质量会变差些,但是原始GAN不仅质量变得更差,而且还出现了collapse mode,即多样性不足:&figure&&img src=&https://pic2.zhimg.com/v2-972ac8f5edba9ee7a252152_b.jpg& data-rawwidth=&1273& data-rawheight=&160& class=&origin_image zh-lightbox-thumb& width=&1273& data-original=&https://pic2.zhimg.com/v2-972ac8f5edba9ee7a252152_r.jpg&&&/figure&&/p&&p&第三,在所有WGAN的实验中未观察到collapse mode,作者也只说应该是解决了,&br&&/p&&p&最后补充一点论文没提到,但是我个人觉得比较微妙的问题。判别器所近似的Wasserstein距离能够用来指示单次训练中的训练进程,这个没错;接着作者又说它可以用于比较多次训练进程,指引调参,我倒是觉得需要小心些。比如说我下次训练时改了判别器的层数、节点数等超参,判别器的拟合能力就必然有所波动,再比如说我下次训练时改了生成器两次迭代之间,判别器的迭代次数,这两种常见的变动都会使得Wasserstein距离的拟合误差就与上次不一样。&b&那么这个拟合误差的变动究竟有多大,或者说不同的人做实验时判别器的拟合能力或迭代次数相差实在太大,那它们之间还能不能直接比较上述指标,我都是存疑的。&/b&&br&&/p&&p&评论区的知友&a href=&https://www.zhihu.com/people/822cec1db8e7ff62aaef23& data-hash=&822cec1db8e7ff62aaef23& class=&member_mention& data-hovercard=&p$b$822cec1db8e7ff62aaef23& data-editable=&true& data-title=&@Minjie Xu&&@Minjie Xu&/a& 进一步指出,相比于判别器迭代次数的改变,&b&对判别器架构超参的改变会直接影响到对应的Lipschitz常数&img src=&https://www.zhihu.com/equation?tex=K& alt=&K& eeimg=&1&&,进而改变近似Wasserstein距离的倍数,前后两轮训练的指标就肯定不能比较了,&/b&这是需要在实际应用中注意的。对此我想到了一个工程化的解决方式,不是很优雅:取同样一对生成分布和真实分布,让前后两个不同架构的判别器各自拟合到收敛,看收敛到的指标差多少倍,可以近似认为是后面的&img src=&https://www.zhihu.com/equation?tex=K_2& alt=&K_2& eeimg=&1&&相对前面&img src=&https://www.zhihu.com/equation?tex=K_1& alt=&K_1& eeimg=&1&&的变化倍数,于是就可以用这个变化倍数校正前后两轮训练的指标。&/p&&h2&&u&第五部分:总结&/u&&/h2&&p&WGAN前作分析了Ian Goodfellow提出的原始GAN两种形式各自的问题,第一种形式等价在最优判别器下等价于最小化生成分布与真实分布之间的JS散度,由于随机生成分布很难与真实分布有不可忽略的重叠以及JS散度的突变特性,使得生成器面临梯度消失的问题;第二种形式在最优判别器下等价于既要最小化生成分布与真实分布直接的KL散度,又要最大化其JS散度,相互矛盾,导致梯度不稳定,而且KL散度的不对称性使得生成器宁可丧失多样性也不愿丧失准确性,导致collapse mode现象。&br&&/p&&p&WGAN前作针对分布重叠问题提出了一个过渡解决方案,通过对生成样本和真实样本加噪声使得两个分布产生重叠,理论上可以解决训练不稳定的问题,可以放心训练判别器到接近最优,但是未能提供一个指示训练进程的可靠指标,也未做实验验证。&/p&&p&WGAN本作引入了Wasserstein距离,由于它相对KL散度与JS散度具有优越的平滑特性,理论上可以解决梯度消失问题。接着通过数学变换将Wasserstein距离写成可求解的形式,利用一个参数数值范围受限的判别器神经网络来最大化这个形式,就可以近似Wasserstein距离。在此近似最优判别器下优化生成器使得Wasserstein距离缩小,就能有效拉近生成分布与真实分布。WGAN既解决了训练不稳定的问题,也提供了一个可靠的训练进程指标,而且该指标确实与生成样本的质量高度相关。作者对WGAN进行了实验验证。&/p&&p&&i&(可自由转载,注明来源和作者即可。 )&/i&&/p&
本文后续:在GAN的相关研究如火如荼甚至可以说是泛滥的今天,一篇新鲜出炉的arXiv论文《》却在Reddit的Machine Learning频道火了,连Goodfellow都
&p&谢邀,不多说,上干货!!!&/p&&p&很多人推荐OpenCV的Python教程,这时候我就呵呵呵....题主明明说的是C++,有木有啊,好了,废话有点多,直接丢干货。&/p&&p&&br&&/p&&h2&&b&1.《Learning OpenCV3》&/b&&/h2&&figure&&img src=&https://pic3.zhimg.com/50/v2-ff124edffe21f6dd67e264_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&586& data-rawheight=&751& class=&origin_image zh-lightbox-thumb& width=&586& data-original=&https://pic3.zhimg.com/50/v2-ff124edffe21f6dd67e264_r.jpg&&&/figure&&p&咦,你可能会问:一本书有什么好推荐的?答:当你打开第一页的时候,你会发现它无与伦比的美腻。不信,来瞧瞧:&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-5b928a76f995bff46a56752eaa24f051_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&411& data-rawheight=&595& class=&content_image& width=&411&&&/figure&&p&你或许会问,这有啥?&/p&&p&答:&b&有理论、有代码、有图示和tips&/b&&/p&&p&注:不是装逼,因为首推的一定也必须是英文版的书,而且这是经典爆款书籍,为什么一定是英文?!不多说,只表示,英语再难也要咬牙啃下来。《Learning OpenCV3》是经典款《Learning OpenCV》的升级版,全面支持OpenCV3....各种API和小Demo&/p&&p&&br&&/p&&p&你以为我只是推荐吗?&/p&&p&不好意思,这里附上&b&《Learning OpenCV 3》中的源代码&/b&:&/p&&a href=&//link.zhihu.com/?target=https%3A//github.com/oreillymedia/Learning-OpenCV-3_examples& data-draft-node=&block& data-draft-type=&link-card& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/oreillymedia&/span&&span class=&invisible&&/Learning-OpenCV-3_examples&/span&&span class=&ellipsis&&&/span&&/a&&a href=&//link.zhihu.com/?target=https%3A//github.com/oreillymedia/Learning-OpenCV-3_examples& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&oreillymedia/Learning-OpenCV-3_examples&/a&&a href=&//link.zhihu.com/?target=https%3A//github.com/oreillymedia/Learning-OpenCV-3_examples& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&oreillymedia/Learning-OpenCV-3_examples&/a&&p&你问我,书哪里可以下?&/p&&p&答:Google/Baidu一下,你就知道&/p&&p&&br&&/p&&h2&&b&2.OpenCV Samples&/b&&/h2&&a href=&//link.zhihu.com/?target=https%3A//github.com/opencv/opencv/tree/master/samples/cpp& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic4.zhimg.com/v2-87fbd58dff_ipico.jpg& data-image-width=&256& data-image-height=&256& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&opencv/opencv&/a&&p&你学习的是OpenCV,官方提供的示例,你会拒绝吗?&/p&&p&你可以拒绝,但这样你就拒绝了成长...手动滑稽&/p&&p&每年OpenCV一般会release两次新版本,每次release都会添加新的算法,如何快速使用这些算法,最简单最粗暴的方法就是看Demo。而OpenCV的Demo,简直良心到...来看一下&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-c39f8cb887b0f84d514f1c4e1b6a26ab_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&994& data-rawheight=&688& class=&origin_image zh-lightbox-thumb& width=&994& data-original=&https://pic3.zhimg.com/50/v2-c39f8cb887b0f84d514f1c4e1b6a26ab_r.jpg&&&/figure&&p&是不是感动哭?&/p&&p&你说缺少项目,我丢这么多项目,你还会觉得没有项目做?&/p&&p&你会说,咦这不都是小demo吗?我跑跑很快的&/p&&p&答:不敲代码,你跟说你想做项目?这里不是建议你把这些小demo都敲一遍,而是可以粗略地选择一些,了解基础的OpenCV算法,如Canny、Sobel、findHomography、cvtColor等,并深入了解Mat等常用类型的使用技巧。这里声明一下,小demo只是调侃的说,拿stitching_detailed.cpp举例,898行的code你不兴奋吗?&a href=&//link.zhihu.com/?target=https%3A//github.com/opencv/opencv/blob/master/samples/cpp/stitching_detailed.cpp& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/opencv/openc&/span&&span class=&invisible&&v/blob/master/samples/cpp/stitching_detailed.cpp&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&如果你坚持看到这里,可能会疑问:上面两个资源是不是太简单了&/p&&p&答:我这么ying,&b&一定能满足你&/b&&/p&&p&&br&&/p&&h2&&b&&a href=&//link.zhihu.com/?target=http%3A//3.LearnOpenCV.com& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&3.LearnOpenCV.com&/span&&span class=&invisible&&&/span&&/a&&/b&&/h2&&a href=&//link.zhihu.com/?target=https%3A//www.learnopencv.com/& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-8ec8ca3e3fc34c_ipico.jpg& data-image-width=&125& data-image-height=&125& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Learn OpenCV ( C++&/a&&p&你没看错,这是一个网站(很牛逼),打开上述链接,可以看到&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-5d947d36bdcfdecd80fc1b8d212a608d_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&682& data-rawheight=&418& class=&origin_image zh-lightbox-thumb& width=&682& data-original=&https://pic1.zhimg.com/50/v2-5d947d36bdcfdecd80fc1b8d212a608d_r.jpg&&&/figure&&p&咦,这不是....嗯,人脸识别...&b&人脸关键点检测(LandMark&/b&)...&/p&&p&&br&&/p&&p&&b&拖着鼠标往下滑:&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-ad16aef3221c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&599& data-rawheight=&288& class=&origin_image zh-lightbox-thumb& width=&599& data-original=&https://pic3.zhimg.com/50/v2-ad16aef3221c_r.jpg&&&/figure&&p&咦,这不是....嗯,二维码(QR Code)检测...条形码(Barcode)检测... + 识别&/p&&p&&br&&/p&&p&&b&拖着鼠标再往下滑:&/b&&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-90a3cdc3fe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&761& data-rawheight=&267& class=&origin_image zh-lightbox-thumb& width=&761& data-original=&https://pic2.zhimg.com/50/v2-90a3cdc3fe_r.jpg&&&/figure&&p&咦,这不是....嗯,图像分类...没错,是它,很diao的图像分类&/p&&p&&br&&/p&&p&等等,你以为就介绍到这了么,不好意思,我很ying的&/p&&p&&b&附上learnopencv源码&/b&&/p&&a href=&//link.zhihu.com/?target=https%3A//github.com/spmallick/learnopencv& data-draft-node=&block& data-draft-type=&link-card& data-image=&https://pic2.zhimg.com/v2-2f9b48adc8edcc2656d2d_ipico.jpg& data-image-width=&400& data-image-height=&400& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&spmallick/learnopencv&/a&&p&随便打开一个demo,如ImageAlignment-FeatureBased&/p&&p&咦,这不是...没错,C++与Python双版本...简直良心到...看什么,鼓掌啊&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-ca69d61d348cecb93f269_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&633& data-rawheight=&252& class=&origin_image zh-lightbox-thumb& width=&633& data-original=&https://pic4.zhimg.com/50/v2-ca69d61d348cecb93f269_r.jpg&&&/figure&&p&&br&&/p&&p&&b&------我是可爱的分哥哥哥哥线------&/b&&/p&&p&到这里,你以为我ruan了么?&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-e8c83a9e324b59f37e8ff46717bfaf72_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&700& data-rawheight=&700& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&https://pic2.zhimg.com/50/v2-e8c83a9e324b59f37e8ff46717bfaf72_r.jpg&&&/figure&&p&&br&&/p&&p&不好意思...&/p&&p&&br&&/p&&p&我确实没那么ying了&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-94f2cd82ba_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&289& data-rawheight=&300& class=&content_image& width=&289&&&/figure&&p&&br&&/p&&p&&b&题外话:&/b&上述都是针对题主所述的OpenCV/C++来重点介绍的,其实不否认当前Python很火,特别因为Deep Leaning的缘故。我这里也有一些OpenCV Python相关的资源(书、项目代码),但就不展开介绍了,哈哈,如果遇到OpenCV Python练手项目的知乎问题,倒是可以厚着脸皮答上一波。&/p&&p&&br&&/p&&p&&b&------我还是可爱的分哥哥哥哥线------&/b&&/p&&p&学习OpenCV,一个很重要的步骤是学习使用API,这里附上OpenCV官方的API查询链接(用了就爱不释手)&/p&&a href=&//link.zhihu.com/?target=https%3A//docs.opencv.org/master/& data-draft-node=&block& data-draft-type=&link-card& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&OpenCV: OpenCV modules&/a&&p&&/p&
谢邀,不多说,上干货!!!很多人推荐OpenCV的Python教程,这时候我就呵呵呵....题主明明说的是C++,有木有啊,好了,废话有点多,直接丢干货。 1.《Learning OpenCV3》咦,你可能会问:一本书有什么好推荐的?答:当你打开第一页的时候,你会发现它无与伦…
&figure&&img src=&https://pic2.zhimg.com/v2-8b15acaa446aeb59b435e20e28b86508_b.jpg& data-rawwidth=&814& data-rawheight=&364& class=&origin_image zh-lightbox-thumb& width=&814& data-original=&https://pic2.zhimg.com/v2-8b15acaa446aeb59b435e20e28b86508_r.jpg&&&/figure&&blockquote&通知:这篇文章有8篇论文速递信息,涉及目标识别、SLAM、3D Model、密集点集配准、立体匹配等方向(含6篇CVPR论文)&/blockquote&&p&&br&&/p&&h2&&b&目标识别&/b&&/h2&&p&&b&[1]《Hierarchical Novelty Detection for Visual Object Recognition》&/b&&/p&&p&CVPR 2018&/p&&p&&br&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-d98cfd388a1dec9e185bd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&965& data-rawheight=&608& class=&origin_image zh-lightbox-thumb& width=&965& data-original=&https://pic3.zhimg.com/v2-d98cfd388a1dec9e185bd_r.jpg&&&/figure&&p&Abstract:深度神经网络在具有预定义类别的大规模视觉对象识别任务中取得了令人瞩目的成功。然而,在训练期间识别新类(即未被看见的对象)仍然具有挑战性。在文献中已经讨论了检测这种新

我要回帖

更多关于 图像品质 的文章

 

随机推荐