Press enter to see results or esc to cancel.

GAN

这些天看了点Paper,发现很多东西自己并不了解,或者了解的并不够透彻,所以打算再好好补一补基础知识,先拿GAN开头,毕竟这个还是一个比较有趣的模型。之前网站上有写过SVM的模型,不过自己写一半弃了,希望以后还是有机会再捡起来xixi,好了今天写的是GAN,全名叫做是Generative Adversarial Network

Introduction of Idea

听名字就知道是生成式模型了,生成式模型和判别式模型的最大的区别就在于生成式模型是的的确确可以自己去生成一些数据的,比如高斯混合模型(GMM)就可以生成一些概率分布,还有VAE,也是Auto Encoder,所谓的Auto Encoder就好比是过目不忘,你在人群中看了一眼,至今也忘记不了容颜,甚至可以画出来,那么你就是一个Auto Encoder,对于这个Auto Encoder的评估的方法就是看你们画的像不像。而GAN呢,与VAE的方法又不同了,在GAN之中有两个网络,第一个网络叫做是Generator,第二个网络叫做Discriminator,两个网络相互打架得到最后的生成效果。

举个例子的话,比如说六耳猕猴,六耳猕猴想要变成孙悟空去找紫霞妹妹,所以要苦练变身成孙悟空的能力,所以他找到了八戒,拿好吃的诱惑八戒说,八戒你来试试能不能分辨我和孙悟空,八戒欣然许之。之后,六耳猕猴变一次,八戒就判断一次与真的孙悟空的区别,在许许多多次之后,八戒(Discriminator)无法分辨六耳猕猴和孙悟空的差别的时候,这个网络就算是训练成功了。接下来我们搞点Mathematics的东西。

Math Part

所以我们有真实的孙悟空的特征分布,$P_{data}(x)$,以及现有的六耳猕猴可以变化的生成分布$P_{G}(x;\theta)$,这是一个通过$\theta$所控制的分布,其中的$\theta$是这个参数,假设从孙悟空身上取点特征出来,比如说眼睛,耳朵,鼻子,尾巴(孙悟空有尾巴吗?),记作$\{x^1,x^2,\cdots,x^m\}$,我们想要让Generator生成的特征与其尽量的相似就等价于最大化每一个似然$P_G(x^{i};\theta)$,对于所有的特征$m$就是

$$L = \prod_{i=1}^{m} P_{G}(x^{i};\theta) $$

而这就是个MLE的问题

$$\theta = \arg \max_{\theta}\prod_{i=1}^{m}P_{G}(x^{i};\theta) $$

经过一堆恶心的数学推导,可以变成最小化

$$\arg \min_{\theta } KL(P_{data}(x)|| P_{G}(x;\theta))$$

非常Make Sense,最小化两个分布之间的距离,自然就约等于是使得其可以尽量的拟合。所以最后的最后都归结于找到这样的$\theta$,怎么寻找呢?上大杀器,神经网络,假设$P_{G}(x;\theta)$是一个神经网络

首先对于生成器之中的$x$,假设其是由$z$所生成的,通过$G(z) =x$这样的一个神经网络,生成$x$,而将这个神经网络的输出与真实的$x$之间进行比较就OK了。但是咧,虽然用了神经网络可以得到任意的奇奇怪怪的分布,但是由于是用神经网络所整出来的东西,这个Likelihood是非常不好计算的,这个KL Divergence 也是非常难得到的,所以这时候就需要我们的八戒(Discriminator)出场了。

将Generator 记作G,将Discriminator 记作D,对于D来说,他的目标有两点,第一,如果是六耳猕猴,那么将其预测成为孙悟空的概率$D(G(z))$要尽量的小,而第二如果是真的孙悟空,将其预测为孙悟空的概率$D(x)$要尽量的大,写成数学的表达式就是

$$\max_{D} E_{x\sim P_{data}}[\log D(x)]+E_{z\sim P_{z}}[\log (1-D(G(z)))]$$

而对于六耳猕猴(G) 来说,目标很简单,只有变成孙悟空,也就是

$$\min_{G} E_{z\sim P_{z}} [\log (1-D(G(z)))]$$

所以总目标就是

$$\min_{G}\max_{D} E_{x\sim P_{data}}[\log D(x)]+E_{z\sim P_{z}}[\log (1-D(G(z)))]$$

把里面的目标函数提溜出来记作$V(D,G)$

$$V(D,G) = E_{x\sim P_{data}}[\log D(x)] + E_{x\sim P_{g}}[\log(1-D(x))]$$

显$x$太碍眼,把$x$用积分消掉

$$\begin{split}\max_{D} V(D,G) & = \int p_{data} \log D d x + \int p_{g} \log(1-D)dx\\ & =  \int [p_{data} \log D + p_{g} \log (1-D)]dx \end{split}$$

那么对于$D$求一下偏导数

$$\begin{split}\frac{\partial}{\partial D}(\max V(D,G))& =  \int \frac{\partial}{\partial D}[p_{data}\log D+ p_{g} \log (1-D)]d x \\ & = \int [p_{data}\frac{1}{D}+p_{g} \frac{-1}{1-D}]d x = 0\end{split}$$

解出来

$$D^*_G = \frac{p_{d}}{p_{d}+p_{g}}$$

现在有了最优的$D^*$之后就是去求$G$了,将上面的带入

$$\begin{split}\min_{G}\max_{D}  V(D,G)& = \min_{G} V(D_{G}^* , G) \\ & = \min_{G}E_{x\sim p_{data}}[\log \frac{p_{d}}{p_d+p_g}] + E_{x\sim p_{g}} [\log \frac{p_{d}}{p_d+p_g}] \\  & = \min_{G}E_{x\sim p_{data}}[\log \frac{p_{d}}{(p_d+p_g)/2}\cdot \frac{1}{2}] \\ & + E_{x\sim p_{g}} [\log \frac{p_{d}}{(p_d+p_g)/2}\cdot\frac{1}{2}] \\ & = \min_{G} KL(p_{d}|| \frac{p_{d}+p_{g}}{2} ) + KL(p_{g}||\frac{p_{d}+p_{g}}{2} ) – \log 4\end{split}$$

当$p_{d} = p_{g}$时,取到最小值。

也就是在最后的阶段,八戒没有把握分辨孙悟空和六耳猕猴了,其做决定的决策和瞎猜是一样的。所以可以说,我们这样的方法和之前的MLE的方法的结果是一致的,也就是说我们可以采用这样的方法进行优化。

然后下面就是优化的流程了

有点坐标轴下降法的意思。

这就是经典的GAN模型了,不过他还有其他的各种变种,这个可能会在论文里面介绍?或者看见有好的Survey我也会学习一下然后Post到这里,或者写自己的笔记希望可以解释的更加生动。

Tags

Comments

1 Comment

【Sentiment Analysis – Adversarial Learning/Others】 | Notebook of Lixuxin

[…] 这个是使用GAN来区分不同的Domain,GAN是一个无监督的学习算法,具体的细节可以看GAN 之中的内容,大概的意思就是存在一个Generator生成器G,还有一个Discriminator分辨器 D,分辨器通过分辨真实的数据和生成器获得到锻炼,整个的目标写成是 […]


Leave a Comment