深度学习(七)—— GAN
来源:互联网 发布:linux 安装eclipse 编辑:程序博客网 时间:2024/06/06 01:15
https://antkillerfarm.github.io/
GAN(续)
基本原理
上面的解释虽然通俗,却并未涉及算法的实现。要实现上述原理,至少要解决三个问题:
1.什么是伪造者。
2.什么是鉴别者。
3.如何对抗。
以下文章的组织顺序,主要参考下文:
http://kexue.fm/archives/4439/
互怼的艺术:从零直达WGAN-GP
老规矩,摘要+点评。
伪造者
伪造者在这里实际上是一种Generative算法。伪造的内容是:将随机噪声映射为我们所希望的正样本。
随机噪声我们一般定义为均匀分布,于是上面的问题可以转化为:如何将均匀分布X映射为正样本分布Y。
首先,我们思考一个简单的问题:如何将
理论上的做法是:将
即:
其中,
注意到累积分布函数是无法用初等函数显式表示出来的,更不用说它的逆函数了。说白了,
正态分布是常见的、相对简单的分布,但这个映射已经这么复杂了。如果换了任意分布,甚至概率密度函数都不能显式写出来,那么复杂度可想而知~
考虑到我们总可以用一个神经网络来拟合任意函数。这里不妨用一个带有多个参数的神经网络
正样本分布
如上所述,一般的正样本分布是很难给出概率密度函数的。然而,我们可以换个角度思考问题。
假设有一批服从某个指定分布的数据
那么接着就有另一个问题:如何评估
KL散度
比较两个分布的差异的最常用指标是KL散度。其定义参见《机器学习(八)》。
JS散度
因为KL散度不是对称的,有时候将它对称化,即得到JS散度(Jensen–Shannon divergence):
注:Claude Elwood Shannon,1916~2001,美国数学家,信息论之父。密歇根大学双学士+MIT博士。先后供职于贝尔实验室和MIT。
KL散度和JS散度,也是Ian Goodfellow在原始GAN论文中,给出的评价指标。
虽然KL散度和JS散度,在这里起着距离的作用,但它们不是距离,它们不满足距离的三角不等式,因此只能叫“散度”。
神经距离
假设我们可以将实数域分成若干个不相交的区间
其中
接着我们生成M个均匀随机数
现在有了
假如我们只研究单变量概率分布之间的变换,那上述过程完全够了。然而,很多真正有意义的事情都是多元的,比如在MNIST上做实验,想要将随机噪声变换成手写数字图像。要注意MNIST的图像是28*28=784像素的,假如每个像素都是随机的,那么这就是一个784元的概率分布。按照我们前面分区间来计算KL距离或者JS距离,哪怕每个像素只分两个区间,那么就有
为此,我们用神经网络L定义距离:
其中,
对于特定的任务来说,
通常,我们采用如下的L实现:
上式可以简单的理解为:分布之间的距离,等于单个样本的距离的平均。
这里的神经网络
如何对抗
因为
形式化的描述就是:
具体的做法是:
Step1
随机初始化
然而有两个目标并不容易平衡,所以干脆都取同样的样本数B(一个batch),然后一起训练就好:
Step2
- 深度学习(七)—— GAN
- 深度学习系列(1)——初探GAN和W-GAN
- GAN学习笔记(一)——初探GAN
- 【神经网络与深度学习】生成式对抗网络GAN研究进展(五)——Deep Convolutional Generative Adversarial Nerworks,DCGAN
- 李宏毅深度学习-Improved GAN
- 无监督学习之深度生成模型——生成对抗网络GAN
- 深度学习基础(七)—— Gibbs 采样
- 深度学习物体检测(七)——SSD
- 深度学习的三大生成模型:VAE、GAN、GAN
- GAN——LSGANs(最小二乘GAN)
- GAN——LSGANs(最小二乘GAN)
- 深度学习之生成对抗网络GAN
- 深度学习之生成对抗网络GAN
- GAN学习笔记(1):GAN综述
- tensorflow学习——GAN手写体生成
- GAN 学习 (1)
- GAN 学习 (二)
- 深度学习笔记——深度学习框架TensorFlow(七)[TensorFlow广度&深度教程]
- [golang]简单文件上传服务
- Python数据处理笔记——matplotlib篇(一)
- WOJ1419-无聊的游戏
- 八皇后问题(递归,回溯)
- Android 6.0 运行时权限处理完全解析
- 深度学习(七)—— GAN
- 51nod 1420 数袋鼠好有趣
- java中基础数据和引用类型对栈堆使用
- 图像识别 常用数据集
- Struts2-052漏洞分析
- 深入理解按位异或运算符
- String、StringBuffer和StringBuilder
- redis和kafka比较
- 挑战程序竞赛系列(56):4.4 双端队列(3)