GAN Theory
Intuition
求解步骤
确定优化目标
求解目标
求解PG(X)
采样
求解D(XS)
注意:不一定要用交叉熵损失函数
Algorithm
Divergence impact
JS divergence is not suitable
分布的详细理论研究请见f-GAN
Estimation
介绍
前段时间 DeepMind 带来的 BigGAN 可谓轰动一时,生成了清晰且逼真的图片:
在各类生成模型中,GAN 是这几年比较突出的,18 年新出的 SNGAN、SAGAN 让 GAN 在 ImageNet 的生成上有了长足的进步,其中较好的 SAGAN 在 ImageNet 的128x128 图像生成上的 Inception Score (IS)达到了 52 分。BigGAN 在 SAGAN 的基础上一举将 IS 提高了 100 分,达到了166分(真实图片也才 233 分),在 FID 指标上也是有很大的超越。
丰富的背景和纹理的生成是各类生成模型追求的终极目标,对于GAN的评价指标,上面介绍到了各种论文中经常出现的IS和FID,下面就介绍一下这两种方法,以及一些其他的指标。
考虑因素
对于生成的图片,我们主要考虑两个因素:图片的清晰度;图片的多样性。
图片的清晰度不够一般是由于网络的表达能力不够,需要使用更好或者更复杂地网络结构;而图片地多样性不足则很有可能是损失函数地选取或者训练方法出了问题,常见的有mode collapsing和mode dropping。
mode collapsing: 在生成图片中会经常出现一些重复的结果,如下图红色框中的图片。
mode dropping: 某些mode丢失了,也导致缺乏多样性。
因此,我们对于GAN的评价指标一般都要综合评价图片的质量以及多样性,现有的方法大多都是基于样本的,即对生成样本与真实样本提取特征,然后在特征空间做距离度量。具体框架如下:
Inception Score (IS)
大多数关于 GAN 生成图片的论文中,作者评价其模型表现的一项重要指标是 Inception Score(IS)。其名字中 Inception 来源于 Google 的 Inception Net
基本原理
IS作用
清晰度: 把生成的图片 x 输入 Inception V3 中,得到输出 1000 维的向量 y ,向量的每个维度的值对应图片属于某类的概率。对于一个清晰的图片,它属于某一类的概率应该非常大,而属于其它类的概率应该很小。用专业术语说, p(y|x) 的熵应该很小(熵代表混乱度,均匀分布的混乱度最大,熵最大)。
多样性: 如果一个模型能生成足够多样的图片,那么它生成的图片在各个类别中的分布应该是平均的,假设生成了 10000 张图片,那么最理想的情况是,1000 类中每类生成了 10 张。转换成术语,就是生成图片在所有类别概率的边缘分布 p(y) 熵很大(均匀分布)。
因此,对于IS我们需要求的两个量就是p(y|x)和 p(y)。实际中,选取大量生成样本,用经验分布模拟 p(y):
而Inception Score的完整公式如下:
x~Pg :表示从生成器中生图片。
p(y|x) :把生成的图片 x 输入到 Inception V3,得到一个 1000 维的向量 y ,也就是该图片属于各个类别的概率分布。根据之前的假设,对于清晰的生成图片,这个向量的某个维度值格外大,而其余的维度值格外小(也就是概率密度图十分尖)。
p(y) :N 个生成的图片(N 通常取 5000),每个生成图片都输入到 Inception V3 中,各自得到一个自己的概率分布向量,把这些向量求一个平均,得到生成器生成的图片全体在所有类别上的边缘分布,如公式(1)。
其实是求p(y|x)对于p(y)的KL散度,KL散度的一般形式如下:
那么为什么选择KL散度,并且是求p(y|x)对p(y)的,而不是p(y)对于p(y|x)的?
KL 散度用以衡量两个概率分布的距离,它是非负的,值越大说明这两个概率分布越不像。但这个距离不是对称的,观察公式, P(i) 很大 Q(i) 很小的地方对 KL 距离贡献很大,而 P(i) 很小 Q(i) 很大的地方对 KL 距离的贡献很小。
我们预期的某个维度值很大,而 p(y) 总体均匀,因此需要把放在公式 (2) 中双竖线的前面。放到后面可能会造成的极端值被忽略,而正是这个极端值的存在告诉了我们这个生成的图片是否清晰。
综合起来,只要 p(y|x) 和 p(y) 的距离足够大,就能证明这个生成模型足够好。因为前者是一个很尖锐的分布,后者是一个均匀分布,这俩距离本就应该很大。
实际操作中,先用生成的大量样本代入公式 (1),求出经验分布p(y),然后再对每个样本求出p(y|xi),计算它和p(y)的KL 散度,最后求平均,再算一下指数即可。
附一个PyTorch实现的代码:https://github.com/sbarratt/inception-score-pytorch
局限性
虽然IS是GAN中使用最多的一种评价标准,但是这个计算方法本身就存在一些问题。
Inception Score 对神经网络内部权重十分敏感。不同框架预训练的网络达到同样的分类精度,但由于其内部权重微小的不同,导致了 Inception Score 很大的变化,在 ImageNet 上,Inception V3 Torch 和 Inception V3 Keras 算出的 IS 相差 3.5%;
通常计算 Inception Score 时,会生成 50000 个图片,然后把它分成 10 份,每份 5000 个,分别代入公式 (2) 计算 10 次 Inception Score,再计算均值和方差,作为最终的衡量指标(均值±方差)。但是 5000 个样本往往不足以得到准确的边缘分布p(y),尤其是像 ImageNet 这种包含 1000 个类的数据集;
如果某一个物体的类别本身就比较模糊,在几种类别会得到相近的分数,或者这个物体类别在ImageNet中不存在,那么p(y|x)的概率密度就不再是一个尖锐的分布;如果生成模型在每类上都生成了 50 个图片,那么生成的图片的类别边缘分布是严格均匀分布的,按照 Inception Score 的假设,这种模型不存在 mode collapse,但是,如果各类中的50个图片,都是一模一样的,仍然是 mode collapse。Inception Score 无法检测这种情况。
不能判别出网络是否过拟合。如果神经网络记住了所有的训练集图片,然后随机输出,那么它会得到一个很高的 Inception Score,但这明显不是我们希望的。
总结
Inception Score作为论文中最常出现的评价标准,在一定程度上可以反映出生成图片的质量以及多样性,但也存在一些问题:数值受样本选取的干扰较大,不适合在内部差异较大的数据集上使用,分类模型和生成模型应该在同一个数据集上训练,无法区分过拟合等等。
Fréchet Inception Distance(FID)
Inception Score存在上述问题的本质是: 计算 IS 时只考虑了生成样本,没有考虑真实数据,即 IS 无法反映真实数据和样本之间的距离,IS 判断数据真实性的依据,源于 Inception V3 的训练集 ------ ImageNet,在 Inception V3 的“世界观”下,凡是不像 ImageNet 的数据,都是不真实的,都不能保证输出一个 sharp 的 predition distribution。
因此,要想更好地评价生成网络,就要使用更加有效的方法计算真实分布与生成样本之间的距离。
基本原理
FID距离计算真实样本,生成样本在特征空间之间的距离。首先利用Inception网络来提取特征,然后使用高斯模型对特征空间进行建模,再去求解两个特征之间的距离,较低的FID意味着较高图片的质量和多样性。具体公式如下:
具体推导:The Fréchet distance between multivariate normal distributions
相比较IS来说,FID对噪声有更好的鲁棒性。因为FID只是把 Inception V3 作为特征提取器,并不依赖它判断图片的具体类别,因此不必担心 Inception V3 的训练数据和生成模型的训练数据不同。同时,由于直接衡量生成数据和真实数据的分布之间的距离,也不必担心每个类别内部只产生一模一样的图片这种形式的 mode collapse。
局限性
虽然相比IS,FID的方法有了很大改进,但是对于ImageNet这种大规模数据集上的过拟合问题,仍然没有解决。除此之外,FID基于特征提取,也就是依赖于某些特征的出现或者不出现,因此无法描述这些特征的空间关系。例如用GAN去生成人脸,如果嘴巴长在眼睛上面,FID可能也会认为它是一张较好地生成结果。
总结
同样是借助于Inception V3的结构提取特征,所以GAN的论文中经常使用FID作为IS的补充,特别是在多样性和mode collapse问题上,FID有更好地评价表现,但也有和IS同样的缺陷,比如不适合在内部差异较大的数据集上使用,无法区分过拟合等。
其它评价标准
Mode Score
Mode Score作为Inception Score的改进版本,添加了关于生成样本和真实样本预测的概率分布相似性度量一项。具体公式如下:
分数越高,效果越好。
可以看到,相比于IS的公式,多了后半部分p(y)和p(y)的KL散度计算,也就是说不单单只希望p(y)近似于均匀分布,而且希望对样本的估计p(y)以及真实样本的p(y)分布能够足够接近,即后半部分越小越好。
Kernel MMD (Maximum Mean Discrepancy)
计算公式如下:
对于Kernel MMD值的计算,首先需要选择一个核函数,这个核函数把样本映射到再生希尔伯特空间(Reproducing Kernel Hilbert Space, RKHS) ,RKHS相比于欧几里得空间有许多优点,对于函数内积的计算是完备的。将上述公式展开即可得到下面的计算公式:
MMD值越小,两个分布越接近。
特点: 可以一定程度上衡量模型生成图像的优劣性,计算代价小,效果好,推荐使用。
Wasserstein distance
这个距离的介绍在WGAN中有详细讨论:相比KL散度,当两个分布不相交,或者存在包含关系时,使用Wasserstein距离衡量两个分布之间的距离,优势较明显。公式如下:
距离越小,分布越接近,效果越好。
特点: 如果特征空间选择合适,会有一定的效果,但是计算复杂度为O(n^3)太高。
1-Nearest Neighbor classifier
如上图,Sr 从真实图片采样作为正样本,Sg 从生成图片采样作为负样本,用来训练 1-NN 分类器 。当GAN取得足够好的效果,且 |Sr|=|Sg| 都非常大时,类似于判别器的纳什均衡,1-NN 分类器应该服从约为 50% 的leave-one-out(LOO,留一验证)准确率,也就是说任取一个样本作为验证集,用其它样本训练1-NN分类器,都只有50%概率预测正确。
如果生成模型产生了过拟合,那么LOO准确率会低于50%。极端情况下,假如GAN记忆住Sr中的每一个样本,并精确地重新生成它,即在 Sr=Sg 时,准确率将为零。因为我们从真实图片中选取一个正样本作为验证集,那么在参与训练的负样本中会存在一个和它重合,即距离为0的生成图片,1-NN分类器就会把它判为负类别;同样从生成图片中选取一个负样本作为验证集,也会有一个真实图片与它重合,从而判为正类别,最终得到的LOO为0。理论上任意二元分类器都能采用这种方法。考虑 1-NN 分类器的原因是,它不需要特殊的训练并只需要少量超参数调整。
上面对LOO的分析是在整个样本上的,而实际上把真实样本和生成样本的LOO分开讨论,会获得更多的信息。比如对于mode collapse问题,这种情况下对真实样本作为验证集的LOO会较低:真实分布的模式通常可由生成模型捕捉,所以 Sr 中的大多数真实样本周围都充满着由 Sg生成的样本,这就导致了较低的 LOO 准确率;对生成样本作为验证集的LOO会较高:生成样本倾向于聚集到少量的模式中心,而这些模式由相同类别的生成样本包围(生成了很多一样的图片,对于他们各自作为验证集的时候,判别器都会做出负样本的正确判定),因此会产生较高的 LOO 准确率。
整体服从50%的LOO准确率时,GAN的效果最好。
特点: 理想的度量指标,且可以检测过拟合,mode collapse等问题。
分析总结
虽然目前GAN论文中用到的指标仍然是IS和FID偏多,但是MMD和1-Nearest Neighbor classifier是最为合适的评价指标,这两个指标可以较好的区分:真实样本和生成的样本,mode dropping, mode collapsing,且计算高效。
Inception Score 展示出生成图像的质量和多样性之间的合理关联,这解释了其在实践中广泛应用的原因。但是,它在大部分情况下并不合适,因为它仅评估 Pg(作为图像生成模型),而不是评估其与 Pr 的相似度。一些简单的扰动(如混入来自完全不同分布的自然图像)能够彻底欺骗 Inception Score。因此,它可能会鼓励模型只学习清晰和多样化图像(甚至一些对抗噪声),而不是 Pr。这也适用于 Mode Score。此外,IS 无法检测过拟合,因为它无法使用留出验证集。
Kernel MMD 在预训练 ResNet 的特征空间中运行时,性能惊人地好。它总是能够识别生成/噪声图像和真实图像,且它的样本复杂度和计算复杂度都比较低。
当距离在合适的特征空间中进行计算时,Wasserstein 距离的性能很好。但是,它的样本复杂度很高,另一个主要缺陷是计算 Wasserstein 距离所需的实践复杂度为 O(n^3),且随着样本数量的增加而更高。与其他方法相比,Wasserstein 距离在实践中作为评估指标的吸引力较差。
Fréchet Inception Distance 在判别力、鲁棒性和效率方面都表现良好。它是 GAN 的优秀评估指标,尽管也有一些和IS同样的缺陷存在。
1-NN 分类器几乎是评估 GAN 的完美指标。它不仅具备其他指标的所有优势,其输出分数还在 [0, 1] 区间中,类似于分类问题中的准确率/误差。当生成分布与真实分布完美匹配时,该指标可获取完美分数(即 50% 的准确率)。典型 GAN 模型对真实样本(1-NN accuracy (real))的 LOO 准确率较低,而对生成样本(1-NN accuracy (fake))的 LOO 准确率较高。这表明 GAN 能够从训练分布中捕捉模型,这样分布在模式中心周围的大部分训练样本的最近邻来自于生成图像集合,而大部分生成图像的周围仍然是生成图像,因为它们一起崩塌。该观测结果表明模式崩塌问题在典型 GAN 模型中很普遍。但是,我们还注意到这个问题无法通过人类评估或广泛使用的 Inception Score 评估指标来有效检测到。