Generative Adversarial Networks 生成对抗网络的简单理解
1. 引言
在对抗网络中,生成模型与判别相竞争,判别模型通过学习确定样本是来自生成模型分布还是原始数据分布。生成模型可以被认为是类似于一组伪造者,试图产生假币并在没有检测的情况下使用它,而判别模型类似于警察,试图检测假币。 在这个游戏中的竞争驱动两个团队改进他们的方法,直到假冒与真正的物品难以分别。
生成模型和判别模型对抗的结果是,两者都提升了自己的能力。生成模型提高了模拟原始数据分布的能力,判别模型提高了分辨的能力。
GAN之所以叫生成对抗网络,是因为判别模型和生成模型都是用的神经网络模型,如果选择其他模型的话,可能就要叫GAXX了
2. 生成模型
2.1 GAN是生成模型的一种
“生成模型”表示任何一种可以接受训练集(从一个分布$$ p_{data} $$
采样的样本)学会表示该分布的估计的模型。其结果是一个概率分布$$p_{model}$$
。有些时候,模型会显式地估计$$p_{model}$$
,比如说图上半部分所示。还有些时候,模型只能从 $$p_{model}$$
中生成样本,比如说图下半部分。有些模型能够同时这两件事情。虽说 GANs 经过设计可以做到这两点,我们这里把精力放在 GANs 样本生成上。
- 作者虽然说GANs可以都做,但是现在的应用一般都是在样本生成上
- 关于判别模型和生成模型的区别,请参考《统计学习方法》第17-18页
2.2 GAN与其他生成模型的对比
上图是作者将要与GAN比较的集中生成模型
GANs是针对其他生成式模型的缺点进行设计的:
作者原话:GANs were designed to avoid many disadvantages associated with other generative models,相当直白,毫不客气
- 相对于FVBN,可以并行生成样本,而不是随 x 的维度变化的运行时间。
- 相对于玻尔茨曼机,生成器函数的设计只有很少的限制。在玻尔茨曼机中,只有很少概率分布能够给出易解的 Markov chain 采样。而非线性ICA中生成器必须是可逆的而且隐含编码 z 必须要和样本 x 有着同样的维度。
- 相对于玻尔茨曼机和GSNs,不需要 Markov chain。
- 不需要有变分界,在 GANs 框架中可用的特定模型族已经证实是通用近似子,所以 GANs 其实是渐进一致的。某些 VAEs 被猜想是渐进一致的,但还没有被证实。
- 主观上判断 GANs 能够产生比其他方法更好的样本。(仅仅是主观,ian 本人也说,这事儿没法衡量什么是「好」或「不好」)
- 同时,GANs 也有新的缺点,训练 GANs 需要找到博弈的 Nash 均衡,这个其实是一个比优化目标函数更加困难的问题。
3. 生成对抗网络
GANs 的基本思想是设置两个参与人的博弈。其中一个是生成器(generator)。生成器的目的产生来自和训练样本一样的分布的样本(制作跟真币一样的假币)。另外一个判别器(discriminator)。判别器检查这些样本来确定他们是真实的还是伪造的(识别真币和假币)。判别器使用传统的监督学习技术进行训练,将输入分成两类(真实的或者伪造的)。生成器训练的目标就是欺骗判别器。
博弈中的两个参与人由两个函数表示,每个都是关于输入和参数可微分的。判别器是一个以 x (真实数据)作为输入和使用
双方的
3.1 生成模型
生成器是一个可微分函数
3.2 训练过程
训练过程包含同时随机梯度下降 simultaneous SGD。在每一步,会采样两个 minibatch:一个来自数据集的
很多作者推荐其中某个参与人运行更多步骤(包括14年的文章上,算法过程在上图),但是在 2016 年的年末,观点是最好的机制就是同时梯度下降,每个参与人都是一步。
下面这张图可能更加容易理解训练过程
训练对抗的生成网络时,同时更新判别分布(D,蓝色虚线)使D能区分数据生成分布
3.3 cost function
目前为 GANs 设计的所有不同的博弈针对判别器
3.3.1 判别模型 cost function
其实就是标准的训练一个 sigmoid 输出的标准的二分类器交叉熵代价。唯一的不同就是分类器在两个 minibatch 的数据上进行训练;一个来自数据集(其中的标签均是 1),另一个来自生成器(其标签均是 0)。
GAN 博弈的所有版本都期望判别器能够最小化(8)式。所有情况下,判别器有同样最优策略。
3.3.2 生成模型 cost function
- Minimax
最简单的博弈版本是零和博弈,其中所有参与人的代价总是 0。在这个版本的博弈中
- 启发式,非饱和博弈
在 minimax 博弈中用在生成器上的代价对理论分析很有用但是在实践中表现很糟糕。
最小化目标类和分类器预测的分布的交叉熵是很高效的,因为代价不会在分类器有错误的输出的时候饱和。最终代价会饱和到
在 minimax 博弈中,判别器最小化交叉熵,但是生成器是最大化同一个交叉熵。这对于生成器是不利的,因为判别器成功地以高置信度反对生成器产生的样本时,生成器的梯度会消失。
为了解决这个问题,一种方式是继续使用交叉熵来最小化生成器。不过我们不是去改变判别器代价函数的正负号来获得生成器的代价。我们是将用来构造交叉熵代价的目标的正负号。所以,生成器的代价函数就是:
-最大似然博弈
我们可能能够使用 GANs 进行最大似然学习,这就意味着可以最小化数据和模型之间的 KL 散度
有很多中方式能够使用 GAN 框架来近似(4)式:
上述不同损失函数的比较:
3.4 缺点
最大的缺点就是训练困难,导致无法收敛和模式崩溃
现在 GAN 面临的最大问题就是不稳定,很多情况下都无法收敛(non-convergence)。原因是我们使用的优化方法很容易只找到一个局部最优点,而不是全局最优点。或者,有些算法根本就没法收敛。
模式崩溃(mode collapse)就是一种无法收敛的情况,这在 Ian 2014 年的首篇论文中就被提及了。比如,对于一个最小最大博弈的问题,我们把最小(min)还是最大(max)放在内循环?minmax V(G,D) 不等于 maxmin V(G,D)。如果 maxD 放在内圈,算法可以收敛到应该有的位置,如果 minG 放在内圈,算法就会一股脑地扑向其中一个聚集区,而不会看到全局分布
不过值得庆幸的是,现在已经有算法解决这些问题,这也是2016年GAN才火的一个原因吧
4. 后续发展
github上有人总结的GAN的文章:AdversarialNetsPapers