生成对抗网络(GAN)
2017-02-28 09:31
465 查看
最新的文章从根本上论证了原本的loss function错在哪里,以及如何修改loss function
简单来说,gan包含一个生成器和一个判别器。
生成器用于生成与真实图片同类型的图片
判别器用于判断输入的图片是来自生成器还是真实图片,如果判断概率都是0.5,则说明区分不出,则生成器是好的
保持生成器不变,训练判别器。保持判别器不变,训练生成器。交替训练
我们的最终目的是留下生成器,用于生成一堆很真的假图片 -.-
网络架构如下图所示:
图片来自
http://www.tuicool.com/articles/6R3UJjQ
-----------------------------------------------
这篇文章找到了原始gan的缺点并对其改进。
https://zhuanlan.zhihu.com/p/25071913?from=timeline&isappinstalled=0
这是wgan的源码实现
https://github.com/martinarjovsky/WassersteinGAN
对原始gan的改进有以下4点,使得训练更为稳定,生成的图片种类更加多样,详细解释参见知乎文章:
判别器最后一层去掉sigmoid
生成器和判别器的loss不取log
每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
关于文章中提到的两种loss function,多解释几句:
问题1. 等价优化的距离衡量(KL散度、JS散度)不合理(不合理的方案本来就不对,我们就不讨论解决方案了,因为从根本上,公式就是错的)
问题2. 生成器随机初始化后的生成分布很难与真实分布有不可忽略的重叠。
解决方案,就是对生成样本和真实样本加噪声,直观上说,使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠。而一旦存在重叠,JS散度就能真正发挥作用,此时如果两个分布越靠近,它们“弥散”出来的部分重叠得越多,JS散度也会越小而不会一直是一个常数,于是(在第一种原始GAN形式下)梯度消失的问题就解决了。在训练过程中,我们可以对所加的噪声进行退火(annealing),慢慢减小其方差,到后面两个低维流形“本体”都已经有重叠时,就算把噪声完全拿掉,JS散度也能照样发挥作用,继续产生有意义的梯度把两个低维流形拉近,直到它们接近完全重合。以上是对原文的直观解释。
最后放一张看知乎上解释wgan的文章的笔记图,防止自己搞丢,以后有空可以看看,写得不好,建议看原文,思路更清晰
wgan文章链接:https://arxiv.org/pdf/1701.07875.pdf
早知道要上传就好好写了..哭晕T.T
简单来说,gan包含一个生成器和一个判别器。
生成器用于生成与真实图片同类型的图片
判别器用于判断输入的图片是来自生成器还是真实图片,如果判断概率都是0.5,则说明区分不出,则生成器是好的
保持生成器不变,训练判别器。保持判别器不变,训练生成器。交替训练
我们的最终目的是留下生成器,用于生成一堆很真的假图片 -.-
网络架构如下图所示:
图片来自
http://www.tuicool.com/articles/6R3UJjQ
-----------------------------------------------
这篇文章找到了原始gan的缺点并对其改进。
https://zhuanlan.zhihu.com/p/25071913?from=timeline&isappinstalled=0
这是wgan的源码实现
https://github.com/martinarjovsky/WassersteinGAN
对原始gan的改进有以下4点,使得训练更为稳定,生成的图片种类更加多样,详细解释参见知乎文章:
判别器最后一层去掉sigmoid
生成器和判别器的loss不取log
每次更新判别器的参数之后把它们的绝对值截断到不超过一个固定常数c
不要用基于动量的优化算法(包括momentum和Adam),推荐RMSProp,SGD也行
关于文章中提到的两种loss function,多解释几句:
问题1. 等价优化的距离衡量(KL散度、JS散度)不合理(不合理的方案本来就不对,我们就不讨论解决方案了,因为从根本上,公式就是错的)
问题2. 生成器随机初始化后的生成分布很难与真实分布有不可忽略的重叠。
解决方案,就是对生成样本和真实样本加噪声,直观上说,使得原本的两个低维流形“弥散”到整个高维空间,强行让它们产生不可忽略的重叠。而一旦存在重叠,JS散度就能真正发挥作用,此时如果两个分布越靠近,它们“弥散”出来的部分重叠得越多,JS散度也会越小而不会一直是一个常数,于是(在第一种原始GAN形式下)梯度消失的问题就解决了。在训练过程中,我们可以对所加的噪声进行退火(annealing),慢慢减小其方差,到后面两个低维流形“本体”都已经有重叠时,就算把噪声完全拿掉,JS散度也能照样发挥作用,继续产生有意义的梯度把两个低维流形拉近,直到它们接近完全重合。以上是对原文的直观解释。
最后放一张看知乎上解释wgan的文章的笔记图,防止自己搞丢,以后有空可以看看,写得不好,建议看原文,思路更清晰
wgan文章链接:https://arxiv.org/pdf/1701.07875.pdf
早知道要上传就好好写了..哭晕T.T
相关文章推荐
- [置顶] 浅析生成对抗网络(GAN)—— Generative Adversarial Nets
- GAN生成对抗网络发展史-文章整理
- 浅谈GAN生成对抗网络
- 生成对抗网络学习笔记4----GAN(Generative Adversarial Nets)的实现
- 不到 200 行代码,教你如何用 Keras 搭建生成对抗网络(GAN)
- 【GAN的魔法】生成对抗网络技术进展及论文笔记1
- 生成对抗网络GAN
- 深入浅出生成对抗网络1-GAN入门
- 简单理解与实验生成对抗网络GAN
- 生成对抗网络GAN的数学公式的前因后果
- 【GAN的魔法】生成对抗网络技术进展及论文笔记3
- <模型汇总_5>生成对抗网络GAN及其变体SGAN_WGAN_CGAN_DCGAN_InfoGAN_StackGAN
- tensorflow 1.01中GAN(生成对抗网络)手写字体生成例子(MINST)的测试
- GAN生成对抗网络
- 50行代码实现对抗生成网络GAN
- 论文阅读,GAN 生成对抗网络 2014 Goodfellow原文阅读笔记
- 深度学习之生成对抗网络GAN
- GAN|生成对抗网络的前沿进展(论文、框架&资源)全面总结
- 论文阅读,GAN 生成对抗网络 2014 Goodfellow原文阅读笔记
- 生成对抗网络(GAN:Generative Adversarial Networks)