生成对抗网络(GAN, Generative adversarial network) 在 2014 年被 Ian Goodfellow 提出。
GAN 由 生成器 和 判别器 组成,生成器负责生成样本,判别器负责判断生成器生成的样本是否为真。生成器要尽可能迷惑判别器,而判别器要尽可能区分生成器生成的样本和真实样本。
在 GAN 的原作 《Generative Adversarial Networks》 中,作者将生成器比喻为印假抄票的犯罪分子,判别器则类比为警察。犯罪分子努力让钞票看起来逼真。警察则不断提升对于假仯的辨识能 力。二者互相博弈,随着时间的进行,都会越来越强。那么类比于图像生成任务,生成器不断生成尽可能逼真的假图像。判别器则判断图像是否是真实的图像还是生成的图像,二者不断博弈优化。最终生成器生成的图像使得判别器完全无法判别真假。
举例:

上述模型左边是生成器 $\mathrm{G}$ , 其输入是 $z$ , 对于原始的 $GAN$,$z$ 是由高斯分布随机采样得到的噪声。噪声 $z$ 通过生成器得到了生成的假样本。
生成的假样本与真实样本放到一起,被随机抽取送入到判别器 $D$,由判别器去区分输入的样本是生成的假样本还是真实的样本。整个过程简单明了, 生成对抗网络中的 “生成对抗” 主要体现在生成器和判别器之间的对抗。
对于上述神经网络模型,如果想要学习其参数,首先需要一个目标函数。
GAN 的目标函数定义如下:
$\underset{G}{min}\; \underset{D}{max}\; V(D, G)=\mathrm{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))] $
这个目标函数可以分为两个部分来理解:
判别器的优化通过 $\max _{D} V(D, G) $ 实现,$ V(D, G) $ 为判别器的目标函数,
生成器的优化通过 $ \underset{G}{min}\left( \underset{D}{max} V(D, G)\right) $ 实现。
回顾交叉熵:《损失函数|交叉熵损失函数》
$H(p, q)=-\sum\limits _{x} p(x) \log q(x)$
因为其中表示信息量的项来自于非真实分布 $q(x) $,而对其期望值的计算采用的是真实分布 $p(x)$ ,所以称其为交叉熵。
(1) 二分类交叉熵
在二分的情况下,模型最后需要预测的结果只有两种情况,对于每个类别我们的预测得到的概率为 $p$ 和 $1-p$ ,此时表达式为:
$L=\frac{1}{N} \sum \limits _{i} L_{i}=\frac{1}{N} \sum \limits_{i}-\left[y_{i} \cdot \log \left( \ p_{i}\right)+\left(1-y_{i}\right) \cdot \log \left(1-p_{i}\right)\right]$
其中:
(2) 多分类交叉熵
多分类的情况实际上就是对二分类的扩展:
$L=\frac{1}{N} \sum \limits _{i} L_{i}=\frac{1}{N} \sum \limits _{i}-\sum \limits _{c=1}^{M} y_{i c} \log \left(p_{i c}\right)$
其中:
言归正传:
判别器目标函数写成离散形式即为:
$V(D, G)=-\frac{1}{m} \sum\limits_{i=1}^{i=m} \log D\left(x^{i}\right)-\frac{1}{m} \sum\limits _{i=1}^{i=m} \log \left(1-D\left(\tilde{x}^{i}\right)\right)$
可以看出,这个目标函数和交叉熵是一致的,即判别器的目标是最小化交叉樀损失,生成器的目标是最小化生成数据分布和真实数据分布的JS散度。
对于很多 GAN 的初学者在实践过程中可能会纳闷,为什么GAN 的 Loss 一直降不下去。GAN到底什么时候才算收敛? 其实,作为一个训练良好的 GAN,其 Loss 就是降不下去的。衡量 GAN 是否训练好了, 只能由人肉眼去看生成的图片质量是否好。不过,对于没有一个很好的评价是否收敛指标的问,也有许多学者做了 一些研究,后文提及的 WGAN 就提出了一种新的 Loss 设计方式,较好的解决了难以判断收敛性的问题。
下面我们分析一下 GAN 的 Loss为什么降不下去?
对于判别器而言,GAN 的 Loss 如下:
$\underset{G}{min}\; \underset{D}{max}\; V(D, G)=\mathrm{E}_{x \sim p_{\text {data }}(x)}[\log D(x)]+\mathrm{E}_{z \sim p_{z}(z)}[\log (1-D(G(z)))] $
从 $\underset{G}{min}\; \underset{D}{max}\; V(D, G) $ 可以看出,生成器和判别器的目的相反,即生成器网络和判别器网络互为对抗,此消彼长。不可能Loss一直降到一个收敛的状态。
也就是说,无论是判别器,还是生成器。Loss 的高低不能代表生成器的好坏。一 个好的 GAN 网络,其 Loss 往往是不断波动的。看到这里可能有点让人绝 望,似乎判断模型是否收敛就只能看生成的图像质量了。实际上,后文探讨的 WGAN,提出了一种新的 Loss 度量方式,让我们可以通过一定的手段来判断模型是否收敛。
对于机器学习模型,我们可以根据模型对数据的建模方式将模型分为两大类,生成式模型和判别式模型。
具体而言:
对于上述两种模型,从文字上理解起来似乎不太直观。我们举个例子来阐述一 下:
$\begin{array}{|c|r|l|}\hline p(x, y) & y=-1 & y=1 \\\hline x=2 & 2 / 5 & 0 \\\hline x=3 & 1 / 5 & 2 / 5 \\\hline\end{array}$
$\begin{array}{|c|r|l|}\hline p(y \mid x) & y=-1 & y=1 \\\hline x=2 & 1 & 0 \\\hline x=3 & 1 / 3 & 2 / 3 \\\hline\end{array}$
即:某个模式(mode)出现大量重复样本, 例如:

上图左侧的蓝色五角星表示真实样本空间,黄色的是生成的。生成样本缺乏多样性,存在大量重复。比如上图右侧中,红框里面人物反复出现。
为了避免前面提到的由于优化 max min 导致 mode 跳来跳去的问题。

相比于普通GAN,多了几个生成器,且在 Loss 设计的时候,加入一个正则项。正则项使用余弦距离惩罚三个生成器生成样本的一致性。

输入样本 $x$ 通过一个 Encoder 编码为隐变量 $E(x) $,然后隐变量被 Generator 重构,训练时, Loss 有三个。 $D_{M}$ 和 $R$ (重构误差) 用于指导生成 real-like 的样本。而 $D_{D} $ 则对 $E(x)$ 和 $z$ 生成的样本进行判别,显然二者生成样本都是 fake samples,所以这个判别器主要用于判断生成的样本是否具有多样性,即是否出现 mode collapse。
Mini-batch discrimination 在判别器的中间层建立一个 mini-batch layer 用于计算基于 L1 距离的样本统计量,通过建立该统计量,实现了一个 batch 内某个样本与其他样本有多接近。这个信息可以被判别器利用到,从而甄别出哪些缺乏多样性的样本。对生成器而言,则要试图生成具有多样性的样本。
最常见评价 GAN 的方法就是主观评价。主观评价需要花费大量人力物力,且存在以下问题:
因此,就有许多学者提出了 GAN 的客观评价方法。
对于一个在 ImageNet 训练良好的 GAN,其生成的样本丢给 Inception 网络进行测试的时候,得到的判别概率应该具有如下特性:
因此,可以设计如下指标: $I S\left(P_{g}\right)=e^{E_{x \sim P_{g}}\left[K L\left(p_{M}(y \mid x) \| p_{M}(y)\right)\right]} $ 根据前面分析,如果是一个训练良好的 GAN,$p_{M}(y \mid x)$ 趋近于脉冲分布,$ p_{M}(y) $ 趋近于均匀分布。 二者 KL 散度会很大。Inception Score 自然就高。实际实验表明,Inception Score 和人的主观判别趋向一致。IS 的计算没有用到真实数据,具体值取决于模型 M 的选择。
特点: 可以一定程度上衡量生成样本的多样性和准确性,但是无法检测过拟合。 Mode Score也是如此。不推荐在和 ImageNet 数据集差别比较大的数据上使 用。
Mode Score 作为 Inception Score 的改进版本,添加了关于生成样本和真实样本预测的概率分布相似性度量一项。
具体公式如下:
$M S\left(P_{g}\right)=e^{E_{x \sim P_{g}}\left[K L\left(p_{M}(y \mid x) \| p_{M}(y)\right)-K L\left(p_{M}(y) \| p_{M}\left(y^{*}\right)\right)\right]}$
计算公式如下:
$M M D^{2}\left(P_{r}, P_{g}\right)=E_{x_{r} \sim P_{r}, x_{g} \sim P_{g}}\left[\left\|\sum_{i=1}^{n 1} k\left(x_{r}\right)-\sum_{i=1}^{n 2} k\left(x_{g}\right)\right\|\right] $
对于 Kernel MMD 值的计算,首先需要选择一个核函数 $k$ ,这个核函数把样本映射到再生希尔伯特空间(Reproducing Kernel Hilbert Space, RKHS), RKHS相比欧几里得空间有许多优点,对于函数内积的计算是完备的。将上述公式展开即可得到下面的计算公式:
$M M D^{2}\left(P_{r}, P_{g}\right)=E_{x_{r}, x_{r}^{\prime} \sim P_{r}, x_{g}, x_{g^{\prime}} \sim P_{g}}\left[k\left(x_{r}, x_{r}{ }^{\prime}\right)-2 k\left(x_{r}, x_{g}\right)+k\left(x_{g}, x_{g}{ }^{\prime}\right)\right] $
MMD值越小,两个分布越接近。
特点: 可以一定程度上衡量模型生成图像的优劣性,计算代价小。
Wasserstein distance 在最优传输问题中通常也叫做推土机距离。这个距离的介绍在 WGAN 中有详细讨论。
公式如下:
$\begin{array}{c} &W D\left(P_{r}, P_{g}\right)=\underset{\omega \in \mathbb{R}^{m \times n}}{min} \sum\limits _{i=1}^{n} \sum\limits_{i=1}^{m} \omega_{i j} d\left(x_{i}^{r}, x_{j}^{g}\right) \\s.t. &\Sigma_{i=1}^{m} w_{i, j}=p_{r}\left(x_{i}^{r}\right), \forall i ;\\&\Sigma_{j=1}^{n} w_{i, j}=p_{g}\left(x_{j}^{g}\right), \forall j\end{array}$
Wasserstein distance 可以衡 量两个分布之间的相似性。距离越小, 分布越相似。
特点: 如果特征空间选择合适,会有一定的效果。但是计算复杂度为 $O\left(n^{3}\right)$ 太高。
FID 距离计算真实样本,生成样本在特征空间之间的距离。首先利用 Inception 网络来提取特征,然后使用高斯模型对特征空间进行建模。根据高斯模型的均值和协方差来进行距离计算。
具体公式如下:
$F I D\left(\mathbb{P}_{r}, \mathbb{P}_{g}\right)=\left\|\mu_{r}-\mu_{g}\right\|+\operatorname{Tr}\left(C_{r}+C_{g}-2\left(C_{r} C_{g}\right)^{1 / 2}\right) $
$\mu$,$C$ 分别代表协方差和均值。
特点:尽管只计算了特征空间的前两阶矩,但是鲁棒,且计算高效。
使用留一法,结合1-NN分类器 (别的也行) 计算真实图片,生成图像的精度。 如果二者接近,则精度接近 50 % ,否则接近 0% 。对于 GAN的评价问题,作者分别用正样本的分类精度,生成样本的分类精度去衡量生成样本的真实性,多样性。
特点: 理想的度量指标, 且可以检测过拟合。
AIS,KDE方法也可以用于评价GAN,但这些方法不是 model agnostic metrics。 也就是说,这些评价指标的计算无法只利用: 生成的样本,真实样本来计算。
1 机器学习--判别式模型与生成式模型
2 GAN生成对抗网络
3 生成对抗网络(GAN)
因上求缘,果上努力~~~~ 作者:cute_Learner,转载请注明原文链接:https://www.cnblogs.com/BlairGrowing/p/15856610.html