第一篇,入坑GAN~
前置知识
一个论文比较重要的前置知识,就是对「如何表示一个分布」的理解,对于一个离散的分布来说,我们通常的表示方法是这样,P(A)=0.1,P(B)=0.2,P(C)=0.7; 但是还有另外一种方法,在LDA( latent Dirichlet allocation)模型和强化学习中,引入了一种通过「状态转移」矩阵表示分布的方式,这也啥论文中一直提到的马尔可夫链。建议通过阅读「LDA数学八卦」了解这个重要的知识。
基本思想
GAN中有两个角色,一个分类器,一个生成器.分类器要区分样本是真实的还是假的, 生成器想要尽可能生成可以欺骗分类器的样本;如何设置目标函数和训练逻辑,从而 保证最后收敛到我们期望的状态是需要重点考虑的.
生成器
首先我们知道,样本是可以生成的,例如有一个神经网络,里面的参数都是确定的,经过多层的前向传播,可以看做输入从一个空间映射到另外一个空间(从一个分布映射到另外一个分布)。所以理论上(生成器容量足够大)应该存在这样一个映射,输入是服从正态分布的噪声图片 \(z\) ,输出是0或1的图片。如下图:
分类器
分类器就很好理解了,就是对输入的图像进行分类。这里的分类器要区分出来输入的是上面的生成器生成的样本 \(X'\) 还是真实的样本 \(X\) 。两者之间形成了「对抗」,具体为:生成器G想生成可以骗过分类器D的样本,分类器想区分出来假样本。
接下来需要构造一个目标函数:
下图是一个完整的表述:
图片来源此处
训练过程
- 训练前期由于G性能差,为了加快速度,对于明显很差的样本D可以直接reject。
- 每一次迭代训练一轮G,训练多轮D,要保持D一直是最优的
- 最终收敛条件是D的准确率为1/2
下图为对过程的形象介绍
demo代码
https://zhuanlan.zhihu.com/p/24767059
文献
Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks
OpenAI的博客:https://blog.openai.com/generative-models/
https://tryolabs.com/blog/2016/12/06/major-advancements-deep-learning-2016/
未经允许不得转载:大数据算法 » Generative Adversarial Nets 原理