深度学习深度学习·神经网络·计算机视觉机器学习与数据挖掘

2020机器学习GAN(5)

2020-02-28  本文已影响0人  zidea
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)

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

如何找到具有判别能力的 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) 越大越好这是我们目标,接下来内容会与这个目标紧密相关

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

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))]

\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)让这个式子最大。在李宏毅老师解说中把上面式子进行简化表示

\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)

上一篇下一篇

猜你喜欢

热点阅读