GAN性能评测:Inception Score

  最近在了解GAN的评测方法,读了一篇关于Inception Score方法的论文,“A Note on the Inception Score. Shane Barratt , Rishi Sharma.”。在此做个总结。
IS(Inception Score)是基于一个预训练好的Inception V3网络通过统计该网络的输出来计算生成网络的性能,其计算公式如下:
I S ( G ) = e x p ( E x ∼ p g [ D K L ( p ( y ∣ x ) ∣ ∣ p ( y ) ) ] ) IS(G) = exp(E_{x \sim p_g}[D_{KL}(p(y|x) || p(y))]) IS(G)=exp(Expg[DKL(p(yx)p(y))])
当我们丢给inception一张图片时,inception会输出各个分类(1000个)的概率,这样我们就得到一个分布。式子中 p ( y ∣ x ) p(y|x) p(yx)即由G生成的一张图片经过inception得到一个分布, p ( y ) p(y) p(y)是一个边缘分布可由 p ( y ) = ∫ x p ( y ∣ x ) p g ( x ) d x p(y)= \int _xp(y|x)p_g(x)dx p(y)=xp(yx)pg(x)dx式子计算而来,实践中可以用G产生一堆图片如5000张,丢给inception分类,然后统计下每张图片被inception分到各个类别中概率就可以得到p(y)
p ( y ) = 1 N ∑ i = 1 N p ( y ∣ x i )      ( N 可 取 5000 ) p(y) = \frac{1}{N}\sum_{i=1}^N p(y|x^i) \space \space \space _{(N可取5000)} p(y)=N1i=1Np(yxi)   (N5000)
然后计算两者得KL散度取期望再取指数就可以IS分数。

在论文中作者提出了IS得几个问题:

  1. IS 分数对inception网络权重轻微不同很敏感,如在pytorch、tensorflow、keras实现得inception网络尽管在对图片分类上达到很接近的精度。但这几个框架实现的inception网络计算得到的IS分数有些许差距,这些差距甚至可以比肩某些模型号称超过当前"state-of-the-art"模型的差距。
  2. 将IS应用与非ImageNet 训练的模型是不合理的,很多实验将IS应用CIFAR-10数据集训练的模型这是不合理的行为,CIFAR-10数据集跟ImageNet数据集本身类别差别就很大。
  3. 通常在算法实现中不会直接计算N,而是将N分成若干份主要计算,再合在一起算均值和方差,如 N n s p l i t s \frac{N}{n_{splits}} nsplitsN,典型的 n s p l i t s n_{splits} nsplits值为10,这样的话比如N=5000时,实际只有500个样本参与计算,这样会导致得不到好的 p ( y ) p(y) p(y)
  4. 生成模型将IS分数作为优化对象将会产生IS分数异常高但实际效果极差的图像,即对抗样本。

在论文中作者提出几个关于IS的建议:

  1. 去掉公式exp(公式提出者从美学角度将其引入),使式子更具解释性。
  2. 不使用 n s p i l i t s n_{spilits} nspilits
  3. 不将IS分数作为唯一的模型性能检验,或以IS分数为目标去训练模型

IS分数的深层意义

  对于一个生成模型来说,评价其图片生成质量有两个指标是”质量“和”多样性“。质量就是图片的是否接近接近真实图片,多样性是模型生成的图片不会固定只有一种。
  对”质量“和”多样性“,IS评价的指标是当一张图片质量好的话,其通过inception的分类结果将会是在某一个类别占有非常高的概率,其它类别的概率会非常小。也即是经过inception得到是一个非常尖锐的分布,即熵很低,也即 H ( y ∣ x ) H(y|x) H(yx)值很小。当生成的图片具有多样性时,经过inception后各种类的概率都差不多,分布趋于均匀分布,熵很高,也即 H ( y ) H(y) H(y)值很大(如当生成10000张图片经过inception分进行1000个分类时,每个类别有10张图片,多样性最高)。由此有以下的公式推导:
l n ( I S ( G ) ) = E x ∼ p g [ D K L ( p ( y ∣ x ) ∣ ∣ p ( y ) ] ] = ∑ x p g ( x ) D K L ( p ( y ∣ x ) ∣ ∣ p ( y ) ) = ∑ x p g ( x ) ) ∑ i p ( y = i ∣ x ) l n p ( y = i ∣ x p ( y = i ) = ∑ x ∑ i p ( x , y = i ) l n p ( x , y = i ) p ( x ) p ( y = i ) = I ( y ; x ) \begin{aligned} ln(IS(G))&=E_x\sim p_g[D_{KL}(p(y|x) || p(y)] ] \\ &=\sum_x p_g(x)D_{KL}(p(y|x) || p(y)) \\ &=\sum_x p_g(x)) \sum_i p(y=i|x)ln \frac{p(y=i|x}{p(y=i)} \\ &=\sum_x \sum_i p(x,y=i)ln \frac{p(x,y=i)}{p(x)p(y=i)} \\ &=I(y;x) \end{aligned} ln(IS(G))=Expg[DKL(p(yx)p(y)]]=xpg(x)DKL(p(yx)p(y))=xpg(x))ip(y=ix)lnp(y=i)p(y=ix=xip(x,y=i)lnp(x)p(y=i)p(x,y=i)=I(y;x)

由此可见 l i n ( I S ( G ) ) lin(IS(G)) lin(IS(G))是在求 y y y x x x的互信息 ,再由
I ( y ; x ) = H ( y ) − H ( y ∣ x ) I(y;x)=H(y)-H(y|x) I(y;x)=H(y)H(yx)
从此实在可知要IS分数增大,只需 H ( y ) H(y) H(y)增大或H(y|x)增大即可,也就时说IS分数越高,图片的生成质量和多样性会更好。
  再者我们还可推出 1 ≤ I S ( G ) ≤ 1000 1 \leq IS(G) \leq 1000 1IS(G)1000,因为
0 ≤ H ( y ) − H ( y ∣ x ) ≤ H ( y ) ≤ l n 10000 0 \leq H(y)-H(y|x) \leq H(y) \leq ln10000 0H(y)H(yx)H(y)ln10000
根据时熵大于0,而当分布为均匀分布熵最大,inception有1000个分类,所以有熵定义式可以容易得上面式子,再两边取 e x p exp exp可得 I S IS IS的上下界

你可能感兴趣的:(GAN)