GAN的实现和一些问题
GAN的学习是一个二人博弈问题,最终目标是达到纳什平衡。对抗指的是生成网络和判别网络的互相对抗。生成网络尽可能生成逼真样本,判别网络则尽可能去判别该样本是真实样本,还是生成的假样本。示意图如下:

生成器尽量去生成一种合理的数据分布,可以理解为真实的数据, 从而让判别器无法判别样本究竟来自何方, 两者的训练, 一般来说, 是交替进行的, 生成器的loss通过其生成的数据输入D来进行评估, 一般就是交叉熵 0or1, 0表示判别器识别出了这个样本来自假样本, 另一方面, 判别器也要尽量的去学习, 去分辨真假样本,GAN的目标也是优化2个分布的JS散度
原始GAN的目标优化函数如下:
\]
目标是最小化G,最大化D:
For D:
\]
D最大话意味着:D要尽可能的识别真样本D(X)和假样本D(G(z)), 即将真样本识别为1,假样本识别为0,否则第一部分的公式将趋于负无穷,第二部分也将趋于负无穷:
\]
\]
For G:
\]
因为第一项是没有用的(D部分),所以等价于
=>\(\max\limits_{G}=E_{z-p_{z}}[\log(D(G(z))]\)
GAN的最优情况:
For D:
\]
此处也解释了为什么当D的loss为0.5是认为是最优的D
For G:
G的目标就是生成和真实数据一样的分,故G的最优情况为:
\]
\]
GAN的一些问题
- GAN为什么难以训练?
大多深度模型的训练都使用优化算法寻找损失函数比较低的值。优化算法通常是个可靠的“下山”过程。生成对抗神经网络要求双方在博弈的过程中达到势均力敌(均衡)。每个模型在更新的过程中(比如生成器)成功的“下山”,但同样的更新可能会造成博弈的另一个模型(比如判别器)“上山”。甚至有时候博弈双方虽然最终达到了均衡,但双方在不断的抵消对方的进步并没有使双方同时达到一个有用的地方。对所有模型同时梯度下降使得某些模型收敛但不是所有模型都达到收敛最优。
- GAN为什么难以训练?
- 生成器梯度消失问题
生成器梯度消失问题:当判别器非常准确时,判别器的损失很快收敛到0,从而无法提供可靠的路径使生成器的梯度继续更新,造成生成器梯度消失。GAN的训练因为一开始随机噪声分布,与真实数据分布相差距离太远,两个分布之间几乎没有任何重叠的部分,这时候判别器能够很快的学习把真实数据和生成的假数据区分开来达到判别器的最优,造成生成器的梯度无法继续更新甚至梯度消失.
- 生成器梯度消失问题
- 模型坍塌
模型坍塌是指生成器坍塌到了一个极狭小的分布内,生成的样本不在变化。通俗来说就是生成器在某种情况下重复生成完全一致的图像。这就与博弈论中的启动相关了。如果在生成器最小化之前,判别器已经完全最大化(这里的最小化和最大化是指生成网络和鉴别网络是同一个损失函数,但是他们的目标不同,生成网络需要最小化损失函数,鉴别网络需要最大化损失函数),这样所有工作还能进行;但是如果先最小化了生成器,接下来再尝试最大化鉴别器,这样网络是训练不成功的。原因在于若刚开始变保持鉴别器落后于生成器,鉴别器会错误的将空间中某些点标记为最有可能是真的而不是 假的,这样生成器就会选择将所有噪声输入映射到最可能为真的点.
- 模型坍塌
GAN的实现和一些问题的更多相关文章
- (转) 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 ...
- 从一篇ICLR'2017被拒论文谈起:行走在GAN的Latent Space
同步自我的知乎专栏文章:https://zhuanlan.zhihu.com/p/32135185 从Slerp说起 ICLR'2017的投稿里,有一篇很有意思但被拒掉的投稿<Sampling ...
随机推荐
- C++ //list容器 构造函数 //list赋值和交换 //list容器大小操作 //list插入和删除,移除 //清空 //list数据存取back(); front() //list 反转和排序
1 //list容器 构造函数 //list赋值和交换 //list容器大小操作 2 //list插入和删除,移除 //清空 //list数据存取back(); front() 3 //list 反转 ...
- Java 辨析之实例化和初始化
在面向对象编程中,实例化和初始化是两个相关但不同的概念: 实例化(Instantiation): 实例化是指创建一个类的新的具体对象的过程.当程序运行时,通过 new 关键字调用类的构造函数来创建该类 ...
- 函数指针 int (*add)( )
原文 首先它是一个指针,一个指向函数的指针,在内存空间中存放的是函数的地址: int Add(int x,int y) { return x+y; } int main() { printf(&quo ...
- github git clone下载加速 && npm install 下载加速
git clone https://pd.zwc365.com/seturl/< https 开头的项目地址> npm install --registry=https://registr ...
- python 读取串口数据常用函数及实例分析
前记: 人生苦短,我用python,python在做一些算法验证和接口验证方面,的确是非常的好用.读取串口经常用到,这里就做个总结,给自己和周围的人做个备忘吧. 函数解析: 初始化串口数据: impo ...
- Tornadofx学习笔记(3)——使用Maven编译成jar包
之前我都是使用的IDEA自带的工具来编译jar包 但是增加了新的依赖,又得去修改project structure的依赖,过于麻烦 某天Android开发的时候,想到gradle可以一键打包,是不是m ...
- Android源码在线查看网站
一.aospxref http://aospxref.com/ 优点:更新速度快 缺点:历史版本较少 二.androidxref http://androidxref.com/ 优点:历史版本较多 缺 ...
- Ubuntu 的源相关介绍(最近在配gstreamer的时候,紧急补充的知识)
PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明 本文作为本人csdn blog的主站的备份.(Bl ...
- View之Canvas,Paint,Matrix,RectF等介绍
目录介绍 1.Paint画笔介绍 1.1 图形绘制 1.2 文本绘制 2.Canvas画布介绍 2.1 设置属性 2.2 画图[重点] 2.3 Canvas对象的获取方式 2.4 Canvas的作用 ...
- MySQL函数GROUP_CONCAT()函数简介
一.数据需求按id分组然后把name用英文逗号分隔开 id name countryid age 1 曹操 1 56 2 刘备 2 47 3 孙权 3 38 4 司马懿 1 61 5 诸葛亮 2 42 ...