GAN和CGAN,如何构建生成模型?
摘要:GAN的定义 GAN是一个评估和学习生成模型的框架。生成模型的目标是学习到输入样本的分布,用来生成样本。GAN和传统的生成模型不同,使用两个内置模型以“对抗”的方式来使学习分布不断接近输入样本分布。两个模型一个是生成模型(Generativ
GAN的定义
GAN是一个评估和学习生成模型的框架。生成模型的目标是学习到输入样本的分布,用来生成样本。GAN和传统的生成模型不同,使用两个内置模型以“对抗”的方式来使学习分布不断接近输入样本分布。两个模型一个是生成模型(Generative model),用来生成样本;另一个是判别模型(Discriminative model),产生判断样本是真实而不是来自生成模型的概率。生成模型并不直接学习输入样本的分布,而是通过“欺骗”判别模型的方式提高输入分布的逼近程度;判别模型则是使用生成样本和真实样本来提高判别准确率。
对于生成模型$G$和判别模型$D$,GAN的优化式的如下:
$\min\limits_{G}\max\limits_{D} V(D,G)$
$ V(D,G) = E_{x\sim p_{data}}[\log_{}D(x)] + E_{z\sim p_z}[\log_{}(1-D(G(z)))]$
其中$p_{data}$是样本的真实分布。比如对于某个分辨率的图片来说,这个分布基于这个分辨率上的所有图片。注意!即使是乱码图片,它也是有概率密度的,只不过很小很小而已。$p_z$是随机数$z$的分布,通常用高斯分布(文章用的是均匀分布,这是最早的文章);$G(z)$就是生成器基于这个随机数生成的样本。$D(x)$是判别器判断样本$x$为真实样本的概率。
使用梯度下降法进行优化的过程如下:
每次分别随机拿到$m$个真实和生成样本用来对函数($\theta_d$、$\theta_g$分别包含在$D$和$G$中)
$\displaystyle f(\theta_d) = \frac{1}{m}\sum\limits_{i=1}^{m}[\log_{}D(x^{(i)})+\log_{}(1-D(G(z^{(i)})))]$
梯度上升,也就是优化判别模型;再生成$m$个样本用来对函数
$\displaystyle g(\theta_g)= \frac{1}{m}\sum\limits_{i=1}^{m}[\log_{}(1-D(G(z^{(i)})))]$
梯度下降也就是优化生成模型。最终二者都达到最优。
以下是拟合的过程图:
黑点线是样本$x$的真实分布,绿线是样本$x$的生成模型分布,蓝虚线是判别模型判断$x$属于真实的概率,下方的$z$是均匀分布随机数$z$到生成样本$x$的映射。
a图是初始化时,判别模型$D$和生成模型$G$都很差。
b图是取样本来更新$D$,$D$在此刻变为最优。也就是说,在当前的$G$下,对于每个$x$,都能正确得出它是真实样本的概率:
$\displaystyle D(x) = \frac{p_{data}(x)}{p_{data}(x)+p_g(x)}$,
证明在后面,不过想想也是这么一回事。比如看绿线和黑点线中间的交叉点,此时$x$的真实概率为0.5。
c图是更新$G$,$G$在此刻$D$的基础上变得不错了。
d图是一直迭代到最后,$G$和真实分布一模一样,而$D$的判断概率全是0.5。但是,一模一样也不是很好。因为样本集总是有限的,并不能完全契合样本全体的分布,所以如果生成分布和样本集分布一模一样的话可能会过拟合。
全局最优
对任意给定的$G$,最优的$D$对每个样本$x$,都有:
$D_G^*(x) = \displaystyle\frac{p_{data}(x)}{p_{data}(x)+p_g(x)}$
这是因为最优的$D$最大化关于$\theta_d$的函数:
$\displaystyle V(G,D) = \int_x p_{data}(x)\log_{}(D(x)) + p_g(x)\log_{}(1-D(x))dx$
也就是对于每个$x$,这个积分内部函数都取最大值。对于函数
$h(y) = a\log_{}(y)+b\log_{}(1-y),a\ge 0,b\ge 0$
在$0< y < y^*$时,$h'(y)$大于零;$y^*< y < 1$,$h'(y)$小于零。所以$h(y)$在
$\displaystyle y^*=\frac{a}{a+b}$
时最大。因此得证。
