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 ...
随机推荐
- 算法-java实现
1. 质因数分解 public static List<Integer> factorize(int n){ List<Integer> factors = new Array ...
- pwn学习日记Day17 《程序员的自我修养》读书笔记
静态链接章小结 本章首先学习了静态链接的第一步骤,即目标文件在被链接成最终可执行文件时,输入目标文件中的各段是如何被合并到输出文件中的,链接器如何为它们分配在输出文件中的空间和地址.一旦输入段中的最终 ...
- MATLAB实现模糊控制
一.简介 MATLAB软件有提供一个模糊推理系统编辑器,利用模糊工具箱在matlab命令窗口输入Fuzzy命令进入模糊控制编辑环境 二.主要步骤 1.接受输入变量 2.输入变量模糊化 3.利用模糊规则 ...
- Oracle JDBC 标准连接实例
Oracle JDBC 标准连接实例 // 创建一个数据库连接 Connection con = null; // 创建预编译语句对象,一般用PreparedStatement不用Statement ...
- 通过蓝牙共享网络设置Charles抓包
在办公室连接WiFi时,电脑和移动设备分配到的IP地址不在同一网段, 但是Android系统提供了一个非常方便的功能,可以搭建一个网络使得这两台设备处于同一网段,实现无障碍访问,使用Charles抓包 ...
- What do you do as a DevOps?
https://ilhicas.com/2019/08/11/What-you-as-a-Devops.html Introduction In this post I'll just explain ...
- mysql 远程登陆
1.查询mysql是否启动 netstat -lnp|grep 3306 ps -df |grep mysqld 2.通过TCPIP的方式测试连接 mysql -uqingjiao -padm ...
- RabbitMQ交换器的类型
RabbitMQ常用的交换器类型有:fanout,direct,topic,headers fanout它会把所有发送到该交换器的消息路由到所有与该交换器绑定的队列中. direct它会把消息路由到哪 ...
- numpy中flatten学习笔记
ndarray.flatten() 用法 用于返回一个折叠成一维的数组.该函数只能适用于numpy对象,即array或者mat,普通的list列表是不行的. 例子 # coding=utf-8 fro ...
- socket常见问题
socket编程中主动关闭VS被动关闭 tcp中server,client都可能是主动关闭方或者被动关闭方,现阐述下两者之间的关系: 客户端(client) ...