Generative Adversarial Nets (GAN)解读
来源:互联网 发布:默沙东临床数据管理员 编辑:程序博客网 时间:2024/05/18 00:41
会议:NIPS 2014
Introduction
GAN,生成对抗式网络是是Ian Goodfellow经典的大作,引起了很大的轰动,后面的各种GAN也层出不穷。追根溯源,为了了解GAN,需要从这篇开山之作说起。那GAN到底是什么?简单来说,GAN由两个模型组成,一个是生成模型G,一个是判别模型D,G负责从给定训练数据中学习数据的概率分布而D负责判别G生成出来的数据是不是符合真实数据的样本概率分布。两个网络是非合作关系,对于D来说,是要最大化能够判别出G生成的数据是假的的概率,而对于G来说,是要最小化被D判别出来的概率,在这个不断博弈的过程中,两个模型的能力都在变强,最后得到一个均衡。
首先要明确生成模型和判别模型的区别:
生成模型:学习到的是时联合概率密度分布P(X,Y),从统计的角度来说就是学习数据的分布情况,反映同类数据之间的相似性;
判别模型:学习一个判别函数Y = f(x)或者条件概率P(Y|X),并不能反映数据本身的特性,考虑的是异类数据之间的差异性,找到一个 最佳分类面;
因此由生成模型可以到判别模型而判别模型不能到生成模型。
为了更好的理解GAN,可以类比警察与造假币商人,生成模型就类似于造假币的商人,试着造出被检测不出来的假币,而判别模型类比于警察,尝试检测出假币。在这个对抗过程中,两边的方法和水平都提高了,直到警察已经没有办法判别出假币,而某种程度上来说假币就是真的了。
Adversarial nets
文中生成网络和对抗网络都是用的多层感知机(multilayer perceptrons)。
优化的目标函数为:
其中,D(x)表示D判断x来自真实数据的概率,D(G(z))表示D判断G(z)为真实数据的概率,z表示随机噪声,G(z)为生成数据,也就是说D判断错了的概率,1-D(G(z))就是D判断对的概率;因为对于D来讲,需要把他判断对的概率最大化,而对于G来讲,需要把这个目标函数最小化。
训练的算法为:
可以通过SGD 来训练网络,D 和 G是分开训练的,首先外层循环式训练的迭代次数,内层循环是先训练D,在经过k步之后开始训练G,K是一个超参数,得靠经验来定,玄学。。。一直训练直到模型收敛,达到平衡,理论上的全局最优解是:
原论文有详细的数学证明。
下面用一个图来说明训练的过程:
黑色表示真实数据分布p(data),蓝色表示判别网络分布,绿色表示生成数据分布p(g);
(a)最初始阶段,生成数据分布p(g)和正式数据分布相差较大,由于两个网络都没有学的很好,判别网络不是很稳定;
(b)随着D的训练过程,D判别趋于稳定,偏左边判定为正确而偏右边判定为错误;
(c)接着开始训练G,G发现了D判定的规律,分布往左移,更加靠近真实数据分布;
(d)最终得到平衡,D和G都没有办法进行更新,模型收敛;
生成实例:
Disadvantages
问题:
(1)D 和G 训练同步的问题;
(2)生成数据不可控;
(3)产生一些垃圾图片或者一些和真实数据很相似的图片;
未来的很多GAN都是针对这些存在的问题做更新和研究的,比如DCGAN,,WGAN,VAEGAN等。
- Generative Adversarial Nets (GAN)解读
- GAN: Generative Adversarial Nets
- GAN(Generative Adversarial Nets)研究进展
- Generative Adversarial Nets(GAN) Tensorflow实现
- Generative Adversarial Nets (GAN) 阅读笔记
- Generative Adversarial Nets
- Generative Adversarial Nets
- Generative Adversarial Nets
- Generative Adversarial Nets
- Triple Generative Adversarial Nets
- Conditional Generative Adversarial Nets
- Generative Adversarial Nets
- GAN: Generative Adversarial Network
- 阅读小结:Generative Adversarial Nets
- Generative adversarial nets 论文笔记
- 汇总Generative Adversarial Nets资料
- Generative Adversarial Nets(译)
- Generative Adversarial Nets(译)
- 动态规划实例(十四):划分问题
- Unity3D之第一人称第三人称角色控制组件修改C#版本
- Spring NamedParameterJdbcTemplate
- Hadoop搭建并执行MapReduce
- java回忆篇
- Generative Adversarial Nets (GAN)解读
- maven项目,本项目中增加jar包并引用
- unity3d实现视频播放
- BZOJ 4080 [Wf2014]Sensor Network 随机化
- fragment中有高德地图,点击按钮切换fragment,出现黑屏闪过。
- 2016~2017下学年总结
- 理解深层神经网络中的迁移学习及TensorFlow实现
- 动态规划实例(十五):最短路径Floyd
- 【图论】[SDOI2008]Cave 洞穴勘测