2020机器学习GAN(5)

作者: zidea | 来源:发表于2020-02-28 19:03 被阅读0次
    naruto_vs_sasuke.png

    参考李宏毅老师分享

    先解释一下根据样本进行生成图片,然后把图片每一个像素都看成其一个特征,那么图片就是存在一个高维特征空间的点,这个点对应一个图像。我们 GAN 要做的事就是在高维特征空间中找到这些点分布概率 P_{data}(x)

    样本都是从P_{data}(x)分布中得到的,我们起初可能想知道找到这个分布样子,我们就可以用这个分布来生成新的图片,那么就可以先假设P_G(x;\theta),可以将P_G(x;\theta)看成高斯混合模型,那么\theta 就是分布的均值方差

    具体怎么做,我想大家都会用极大似然值来估计P_{data}(x)的分布。

    1. 首先从P_{data}(x)抽取样本\{x^1,x^2,\dots,x^m\}
    2. 计算P_G(x^i;\theta) 的似然函数
      L = \prod_{i=1}^m P_G(x^i;\theta)
    3. 就是找出一组参数\theta,为什么是一组参数呢?因为是高斯混合模型所以需要一组均值和方差来表示模型。
      \theta^* = \arg \max_{\theta} \prod_{i=1}^m P_G(x^i;\theta)
      然后通过取 log 将连加变成连乘这个想必大家都很清楚
      \theta^* = \arg \max_{\theta} \sum_{i=1}^m P_G(x^i;\theta)
      \theta^* = E_{x \sim P_{data}}[\log P_G(x;\theta)]
      其实最大似然估计就是求最小 KL 距离(松散度),这个可能大家已经理解或者还没有理解为什么他们是同一个问题,这里我就给大家解释一下。
      \begin{aligned} = E_{x \sim P_{data}}[\log P_G(x;\theta)] \\ = \arg \max_{\theta} \int_x P_{data}(x) \log P_G(x;\theta)dx \\ = \arg \max_{\theta} \int_x P_{data}(x) \log P_G(x;\theta)dx - \int_x P_{data}(x) \log P_{data}(x)dx\\ = \arg \min_{\theta} KL(P_data||P_G) \end{aligned}

    不过现在是将P_{data}(x)的分布假设为高斯分布,这样就把问题限制,其实我们还不知道P_{data}(x)具体样子,我们应该将问题也就是分布泛化到一般分布而不是特指高斯分布。

    图像是高维空间流形,有关流形我们,其实他并不是我们能用高斯混合所能准确逼近的分布。

    noise \rightarrow Generator \rightarrow x = G(z)

    • noise 可以是从高斯分布(也叫正态分布)随机选取向量
    • Generator 是生成神经网网络,可以想象是复杂函数
    • noise 输入到 Generator 后,Generator 就会通过计算给我们一张图
      其实一个隐藏层就足够复杂来实现对多数函数的逼近,所以只要 Generator 叠几层就可以将我们输入noise变成想要复杂形状来逼近图片高维流形。

    G = \arg \min_G Div(P_G,P_{data})
    那么如何找到衡量P_GP_{data}距离(也就是相似度)的标准呢?这个成为,为什么成为问题,这是因为我们并不知道 P_GP_{data} 是什么样子的,也没法假设。
    但是在 GAN 设计就是回答上面问题。

    • 可以从P_{data}抽取一些图片样本
    • 也可以从P_G根据 noise 生成一些图片样本
      在 GAN 中用 Discriminator(判别)来通过计算这两个来自不同分布样本间差异,样本间差异也就是这两个分布间距离。我们通过减少这个距离就可以实现P_G来一步一步逼近P_{data}

    如何找到具有判别能力的 Discriminator,这个也是需要训练的,我们需要训练出一个 Discriminator。具体方法也就是,先定义目标函数,Discriminator 完成了这个目标函数也就是具有判别能力。
    V(G,D) = E_{x \sim P_{data}}[\log D(x)] + E_{x \sim P_G}[\log (1 - D(x))] \,(G is fixed)
    首先我们要明确我们是希望 V(G,D) 越大越好这是我们目标,接下来内容会与这个目标紧密相关

    • 先看右边前一项,也就是假设数据使用从P_{data}抽取的,我们就希望\log D(x) 越大越好
    • 那么假设数据是从P_G抽取的,我们就希望\log (D(x))越小越好

    其实就是训练二分类识别网络是一样,样本中有正样本和负样本,需要判别器对其进行分类。

    D = \arg \max_D V(V,G)
    \max_{D} V(V,G) 就是 JS 距离,假设我们生成数据

    生成器生成样本和真实样本靠的很近,也就是很难将他们进行分开,Discriminator 的V(G,D)就很难变得很大,因为他无法完成将他们分开任务。

    接下来我们用数学公式来推导一遍。
    V = E_{x \sim P_{data}}[\log D(x)] + E_{x \sim P_G}[\log (1 - D(x))]

    • 首先假定 G 是固定,也就是训练好的 G 来找到让下面式子值最大的 D

    \begin{aligned} V = E_{x \sim P_{data}}[\log D(x)] + E_{x \sim P_G}[\log (1 - D(x))]\\ = \int_x P_{data} \log D(x)dx + \int_x P_G(x) \log (1 - D(x))dx \\ = \int_x [P_{data} \log D(x)dx + P_G(x) \log (1 - D(x))]dx \\ \end{aligned}

    这里D(x)是神经网络学习的模型,理论上是可以模拟任意函数,但是实际上要是想模拟任意函数就需要有任意多参数,不过现在我们可以假设D(x)是可以模拟任意函数的。

    P_{data} \log D(x) + P_G(x) \log (1 - D(x))
    在这个式子中P_{data}P_G(x)都是固定,我们就是要找D(x)让这个式子最大。在李宏毅老师解说中把上面式子进行简化表示

    • P_{data} 用 a 表示
    • P_{G}(x) 用 b 表示
    • D(x) 用 D 来表示

    \frac{df(D)}{dD} = a \times \frac{1}{D} + b \times \frac{1}{1 - D} \times (-1) = 0
    我们对上式进行求导,在导数为 0 处有极值,然后对式子进行化简。

    a \times \frac{1}{D} = b \times \frac{1}{1 - D}

    a \times (1 - D) = b \times D
    D = \frac{a}{a + b}
    D(x) = \frac{P_{data}}{P_{data} + P_{G}(x)}
    我们将D(x)P_{data}P_G(x) 的表达式来表示后带回到上式
    E_{x \sim P_{data}}[\log \frac{P_{data}(x)}{P_{data}(x) + P_G(x)}] + E_{x \sim P_G}[\log \frac{P_{G}(x)}{P_{data}(x) + P_G(x)}]

    可以对表示的分子和分母同时乘以\frac{1}{2},这样做就是为了推导出 JS 散度表达式,
    E_{x \sim P_{data}}[\log \frac{ \frac{1}{2} P_{data}(x)}{\frac{1}{2}(P_{data}(x) + P_G(x))}] + E_{x \sim P_G}[\log \frac{\frac{1}{2} P_{G}(x)}{\frac{1}{2}( P_{data}(x) + P_G(x))}]

    2 \log \frac{1}{2} + KL(P_{data} || \frac{P_{data}+ P_G }{2}) + KL(P_{G} || \frac{P_{data}+ P_G }{2})
    最后我们就得到了 JS 散度的表示
    2 \log \frac{1}{2} + 2JSD(P_{data}||P_G)

    相关文章

      网友评论

        本文标题:2020机器学习GAN(5)

        本文链接:https://www.haomeiwen.com/subject/dmhrhhtx.html