zoukankan      html  css  js  c++  java
  • GAN Lecture 4 (2018)_Basic Theory

    视频主页:提供课程视频、PPT(推荐B站视频源

    课程主页:提供作业相关

    PS: 这里只是课程相关笔记

    前面三节我们直观滴感受了下 GAN 是什么,训练流程是咋样的。这一节我们要学习下 GAN 背后的理论。

    1. Basic Idea

    GAN 的目的是找到一个 Generator 使得生成的数据的分布 $P_G(x)$ 和真实数据的分布 $P_{data}(x)$ 的散度尽可能解决。但是我们不知道  $P_{data}(x)$ 和 $P_G(x)$ 的分布。。。

    GAN 通过 Discriminator 来衡量上面两个 distribution 的 divergence sampled $P_{data}$ and $P_G$ 

    这个 Discriminator 所做的事情其实就和一个 binary classifier 所做的事情是一模一样的,Loss Function 其实就是个 BCE Loss。

    直观来理解就是:当采样的 $P_{data}$ 和 $P_G$ 分布接近时,Discriminator 很难区分二者,意味着这两个 distribution 的 divergence 是小的;当采样的 $P_{data}$ 和 $P_G$ 分布差距很大时,Discriminator 很容易区分二者,意味着这两个 distribution 的 divergence 是大的。这样的话,衡量 $P_G(x)$ 和 $P_{data}(x)$ 的 divergence,其实就等价于衡量 $V(D, G)$.

    接下来一顿推导,其实是为了证明 $G^* = arg mathop{min}limits_{G} DIV(P_G, P_{data})$ 等价于 $G^* = arg mathop{min}limits_{G} mathop{max}limits_{D}  V(D, G)$ 

    接下来我们只需要求解下面这个式子就好了:

    egin{equation}
    label{a}
    mathop{min}limits_{G} mathop{max}limits_{D} V(D, G) \
    V(D, G) = E_{x sim p_{data}(x)} [logD(x)] + E_{z sim p_{z}(z)} [log(1-D(G(z))]
    end{equation}

    让我们来看图说话看看这个式子要怎么个解

    如左图所示,我们首先固定 G, 然后找一个 D 使得 $mathop{max}limits_{D}  V(D, G)$,也就是图中的红色点位置;随后我们固定 D, 找一个 G 使得 $mathop{min}limits_{G} mathop{max}limits_{D}  V(D, G)$。第一节课中说的训练 GAN 的流程就是在解这个 $min max$ problem。

    而由于我们一般使用 mini-batch gradient descent 方式来求解问题,那么一旦我们更新了 G, 那么原来的 D 是否还能代表 divergence between $P_G(x)$ 和 $P_{data}(x)$:

    因此,我们这里假设更新后的 G 和原来的差别不是很大,这就要求我们在训练 GAN 的时候,更新 G 的程度要小一点,更新 D 的程度要大一点!

    也有人会拿过去训练产生的 D 和现在产生的 D 一起生成样本来训练 G,而且这种方式训练的效果比正常训练要好!

    因此,最终的算法流程如下:

    而在训练 Generator 的时候,Goodfellow 考虑到模型初期 $D(x)$ 梯度较小,不方便优化,因此替换成求解下图下面那个式子,也就是把 $P_G$ 当成正样本来训练:

    当然,有好事者比较了上面两种训练方式,发现二者都可以 train 得起来,而且 performance 也是差不多。

    https://www.youtube.com/watch?v=ebMei6bYeWw

    上面这个动态图(需要翻墙),展示了 Discriminator 是如何指导 Generator 的训练的。 

    2. Problem

    2.1 Model Collapse

    Model Collapse 现象是,你训练时时 real data 的 distribution 是比较大的,但是你 generate 出来的 example 的 distribution 是非常小的,举例来说,如果你训练次数较多时,生成的数据可能是下图这样的,会生成很多相似的图片:

    2.2 Model Dropping

    还有一种现象叫 Model Dropping, 现象是你的 real data 有多重分布,但生成的 example 每次只是一种分布:

  • 相关阅读:
    layaAir引擎制作游戏的图集动画、时间轴动画、和骨骼动画总结二
    layaAir引擎制作游戏的图集动画、时间轴动画、和骨骼动画总结一
    Flask 生成验证码 支持干扰线、噪点
    数组操作
    css_权威指南_选择符
    css权威指南_特指度
    *arg **kwargs
    一日一库—importlib
    一日一库—itertools
    FLask 流程图、上下文、上下文隔离原理
  • 原文地址:https://www.cnblogs.com/xuanyuyt/p/12953112.html
Copyright © 2011-2022 走看看