GAN——ModeCollapse
大部分内容来源于李宏毅的课程[1]
Example
先给一个直观的例子,这个是在我们训练GAN的时候经常出现的
这就是所谓的Mode Collapse
但是实际中ModeCollapse不能像这个一样这么容易被发现(sample中出现完全一模一样的图片)
例如训练集有很多种类别(如猫狗牛羊),但是我们只能生成狗(或猫或牛或羊),虽然生成的狗的图片质量特别好,但是!整个G就只能生成狗,根本没法生成猫牛羊,陷入一种训练结果不好的状态。这和我们对GAN的预期是相悖的。
Analysis
如上图。PdataPdata是八个高斯分布的点,也就是8个mode。
我们希望给定一个随机高斯分布(中间列中的最左图),我们希望这一个随机高斯分布经过G最后可以映射到这8个高斯分布的mode上面去
但是最下面一列的图表明,我们不能映射到这8个高斯分布的mode上面,整个G只能生成同一个mode,由于G和D的对抗关系,G不断切换mode
李宏毅原话:
- 在step10k的时候,G的位置在某一个 Gaussian所在位置,然后D发现G只是在这个Gaussian这里了,所以就把这个地方的所有data(无论real还是fake)都给判定为fake
- G发现在这个Gaussian待不下去了,只会被D永远判定为fake,所以就想着换到另一个地方。在step15k就跳到了另一个Gaussian上去
- 然后不断跳跳跳,不断重复上述两个过程,就像猫捉老鼠的过程一样,然后就没有办法停下来,没法达到我们理想中映射到8个不同的Gaussian上面去
对于左边的KL散度,出现无穷大的KL散度是因为PdataPdata有值而PGPG没有值
也就是说当我们PdataPdata有值的时候,我们必须保证PGPG也有值,这才能保证KL散度不会趋于无穷大。
假设我们的G的capacity不够,只能产生一个Gaussian的时候,那么这个时候的G就会倾向去覆盖所有PdataPdata存在的地方,PdataPdata有值的地方PGPG也要有。
当然,即使PdataPdata没有的地方,有PGPG也无所谓(毕竟这个时候KL散度趋于0,惩罚很小)
虽然这个时候基本上不会出现mode collapse的情况,但是会出现很多无意义的样本
对于右边的reverse KL散度,如果出现了PGPG在某一个没有PdataPdata(Pdata≈0Pdata≈0)的位置产生了值,那就会使得这个reverse KL散度变得特别大。
所以对于在minimize KL散度这个training过程中,就会出现很高的惩罚。为了安全起见,PGPG就会更加倾向于生成同一张安全的一定会被认为是real的image,也不冒险去产生一些不一样的image
而由于我们这里假设PGPG只是一个单一的Gaussian而不是多个Gaussian叠加(如图中的PdataPdata),所以就会趋向于去完全拟合其中一个真实的Gaussian,这样就出现了mode collapse
Reference
[1]Youtube-MLDS Lecture 9: Generative Adversarial Network
[2]知乎专栏——令人拍案叫绝的Wasserstein GAN
GAN——ModeCollapse的更多相关文章
- (转) How to Train a GAN? Tips and tricks to make GANs work
How to Train a GAN? Tips and tricks to make GANs work 转自:https://github.com/soumith/ganhacks While r ...
- 不要怂,就是GAN (生成式对抗网络) (一)
前面我们用 TensorFlow 写了简单的 cifar10 分类的代码,得到还不错的结果,下面我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodf ...
- GAN
GAN(Generative Adversarial Nets),产生式对抗网络 存在问题: 1.无法表示数据分布 2.速度 3.resolution太小,大了无语义信息 4.无reference 5 ...
- 不要怂,就是GAN (生成式对抗网络) (二)
前面我们了解了 GAN 的原理,下面我们就来用 TensorFlow 搭建 GAN(严格说来是 DCGAN,如无特别说明,本系列文章所说的 GAN 均指 DCGAN),如前面所说,GAN 分为有约束条 ...
- 不要怂,就是GAN (生成式对抗网络) (四):训练和测试 GAN
在 /home/your_name/TensorFlow/DCGAN/ 下新建文件 train.py,同时新建文件夹 logs 和文件夹 samples,前者用来保存训练过程中的日志和模型,后者用来保 ...
- 用GAN生成二维样本的小例子
同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27343585 本文完整代码地址:Generative Adversarial Networks (GANs) with ...
- 提高驾驶技术:用GAN去除(爱情)动作片中的马赛克和衣服
同步自我的知乎专栏:https://zhuanlan.zhihu.com/p/27199954 作为一名久经片场的老司机,早就想写一些探讨驾驶技术的文章.这篇就介绍利用生成式对抗网络(GAN)的两个基 ...
- 学习笔记GAN003:GAN、DCGAN、CGAN、InfoGAN
GAN应用集中在图像生成,NLP.Robt Learning也有拓展.类似于NLP中的Actor-Critic. https://arxiv.org/pdf/1610.01945.pdf . Gen ...
- 用MXNet实现mnist的生成对抗网络(GAN)
用MXNet实现mnist的生成对抗网络(GAN) 生成式对抗网络(Generative Adversarial Network,简称GAN)由一个生成网络与一个判别网络组成.生成网络从潜在空间(la ...
随机推荐
- CCF认证历年试题
CCF认证历年试题 不加索引整理会死星人orz 第一题: CCF201712-1 最小差值(100分) CCF201709-1 打酱油(100分) CCF201703-1 分蛋糕(100分) CCF2 ...
- Build Telemetry for Distributed Services之Elastic APM
官网地址:https://www.elastic.co/guide/en/apm/get-started/current/index.html Overview Elastic APM is an a ...
- Python xlwt 模块执行出错Exception: String longer than 32767 characters
使用Python搜集数据时用到xlwt保存到excel文件,但是数据量有点大时出现 Exception: String longer than 32767 characters 搜索类似的问题都是建议 ...
- python中关于with以及contextlib的使用
一般在coding时,经常使用with来打开文件进行文件处理,然后无需执行close方法进行文件关闭. with open('test.py','r' as f: print(f.readline() ...
- Android学习笔记之View
转载: 0.7562018.10.22 21:44:10字数 5,423阅读 189 导图 一.View事件体系 1.什么是 View 和 View的位置坐标 View是什么: View 是一种界 ...
- python基础----pymysql模块
安装pymysql ----pip install mysql 步骤: 1.建立连接 指定ip.端口号.密码.账号.数据库 2.建立游标 3.执行sql语句 4.获取结果或提交 5.关闭游标, ...
- qwt
一. 1.下载地址https://sourceforge.net/projects/qwt/ 2.注意:官方提供qt安装包creator都是用MSVC编译(包括mingW版)的,所以Creator的插 ...
- HANA到MySQL数据同步方法!
随着各行各业信息化建设的不断发展,异构数据库间的互通.汇聚,挖掘,分析逐渐被提上日程, TreeSoft数据库管理系统,实现了异构数据库的维护.监控.可视化.自动交换同步.目前支持MySQL,Orac ...
- 解决Linux:Too many levels of symbolic links
Too many levels of symbolic links 解决:创建链接时使用绝对路径
- mysql写存储过程根据时间变化增加工龄
在工作中遇到要程序根据时间自动增加工龄的需求. php没办法自己发起请求,又不想在服务器上写计划任务crontab,通过用户请求来更改又不能保证用户会去操作. 用数据库的存储过程和事件来完成. 数据库 ...