Gan(Generative Adversarial Net)学习笔记(1)--- Gan的基础理论

注:参考自知乎用户 何之源的《GAN学习指南:从原理入门到制作生成Demo》以及

      ‘机器之心’的《独家 | GAN之父NIPS 2016演讲现场直击:全方位解读生成对抗网络的原理及未来》。

--------------------------------------------------------------------------------------------------------

一、Gan原理介绍:

  以生成图片为例,假设有两个网络:G(Generator)和D(Discriminator)。功能分别为:
  • G是生成器,用来生成图片,接收一个随机的噪声z,通过z生成图片,记作G(z)。
  • D是判别器,用来判断一张图片是不是“真实的”。输入x(代表一张图片),输出D(x),表示x为真实图片的概率。
 在训练过程中,G的目标是尽可能生成一张图片去欺骗D,使D将其判别为真实的;D的目标就是尽量把G生成的图片和真实的图片分别开。这样,就生成了一个“对抗过程”。

 在最理想的状态下,对抗的结果是,G生成足以以假乱真的图片G(z),D难以判定他究竟是不是真的,因此此时D(G(z)) = 0.5。

原理的数学公式表述:

  • 整个式子由两项构成。x表示真实图片,z表示输入G网络的噪声,而G(z)表示G网络生成的图片。
  • D(x)表示D网络判断真实图片是否真实的概率(因为x就是真实的,所以对于D来说,这个值越接近1越好)。而D(G(z))是D网络判断G生成的图片的是否真实的概率。
  • G的目的:上面提到过,D(G(z))是D网络判断G生成的图片是否真实的概率,G应该希望自己生成的图片“越接近真实越好”。也就是说,G希望D(G(z))尽可能得大,这时V(D, G)会变小。因此我们看到式子的最前面的记号是min_G。
  • D的目的:D的能力越强,D(x)应该越大,D(G(x))应该越小,这时V(D,G)会变大。因此式子对于D来说是求最大(max_D)

二、Gan的特点:

  • 使用了latent code(用以表达latent dimension、控制数据隐含关系等)
  • 数据会逐渐统一
  • 不需要马尔可夫链(GAN 是目前唯一一种直接从数据观测的一步到位的生成模型)
  • 被认为可以生成最好的样本(当然,GAN的创始人ian也说,没法衡量什么是‘好’或‘不好’的)

三、关于生成模型(Generator):

1、生成模型的两种方法:
  • 密度(概率)估计:就是说在不了解事件概率分布的情况下,先假设随机分布,然后通过数据观测来确定真正的概率密度是怎样的。
  • 样本生成:就是手上有一把训练样本数据,通过训练后的模型来生成类似的“样本”。
2、为什么需要生成模型:
  • 可以很好的检测处理高维数据和复杂概率分布的能力
  • 为未来的规划或模拟型强化学习做好理论准备(即所谓的 model-free RL)
  • 当然,更多的情况是,我们会面临缺乏数据的情况,我们可以通过生成模型来补足。比如,用在半监督学习中;
  • 可以输出多模结果(Multi-modal outouts)
  • 以及很多的一些现实的需要生成模型的问题(比如,看到一个美女的背影,猜她正面是否会让你失望……)

四、Gan面临的问题



  1、不收敛
 现在 GAN 面临的最大问题就是不稳定,很多情况下都无法收敛(non-convergence)。原因是我们使用的优化方法很容易只找到一个局部最优点,而不是全局最优点。或者,有些算法根本就没法收敛。
 模式崩溃(mode collapse)就是一种无法收敛的情况,这在 Ian 2014 年的首篇论文中就被提及了。比如,对于一个最小最大博弈的问题,我们把最小(min)还是最大(max)放在内循环?minmax V(G,D) 不等于 maxmin V(G,D)。如果 maxD 放在内圈,算法可以收敛到应该有的位置,如果 minG 放在内圈,算法就会一股脑地扑向其中一个聚集区,而不会看到全局分布。
 在最理想的状态下,对抗的结果是,G生成足以以假乱真的图片G(z),D难以判定他究竟是不是真的,因此此时D(G(z)) = 0.5。

2、无法科学的评估
 对于整个生成模型领域来说,另一个问题是没法科学地进行评估。比如你拿一堆图片生成另一堆图片,可是这两批图片其实可能看起来天差地别。人可以判断出生成的小狗照片对不对,机器却没法量化这个标准。

3、离散输出
 如果我们的 G 想要生成离散值,就会遇到一个数学问题:无法微分(differentiate)。当然,这个问题其实在 ANN 时代就被讨论过,并有很多解决方案,比如,Williams(1992) 经典的 REINFORCE、Jang et al.(2016) 的 Gumbel-softmax、以及最简单粗暴地用连续数值做训练,最后框个范围,再输出离散值。

4、强化学习的连接
 GAN 在给强化学习做加持的时候,也有点问题。

5、如果把 GAN 加持过的 RL 用在各种游戏的学习中,GAN 该有的问题其实还是会有:
  • 无法收敛;
  • 面对有限步数的游戏,穷举更加简单粗暴,并且效果好;
  • 如果游戏的出招是个连续值怎么办?(比如《英雄联盟》中,Q 下去还得选方向,R 起来还得点位置,等等);
  • 当然,可以用 unrolling(每一步并不把判别模型 D 这个学习的雪球给滚起来,而是把 K 次的 D 都存起来,然后根据loss来选择最好的那一个) 来探寻最优解,但是每一步都要记 K 个判别模型,代价太大。

五、总结:


  1. GAN 是一种用可以利用监督学习来估测复杂目标函数的生成模型(注:这里的监督学习是指 GAN 内部自己拿真假样本对照,并不是说 GAN 是监督学习)。
  2. GAN 可以估测很多目标函数,包括最大似然(Maximum likelihood)(因为这是生成模型大家族的标配)。
  3. 在高维度+连续+非凸的情况下找到纳什均衡依旧是一个有待研究的问题(可以重点关注)。
  4. GAN 自古以来便是 PPGN 不可分割的重要部分。
 在最理想的状态下,对抗的结果是,G生成足以以假乱真的图片G(z),D难以判定他究竟是不是真的,因此此时D(G(z)) = 0.5。

你可能感兴趣的:(机器学习)