第五章:训练与普遍挑战:为成功而GAN
GAN在所有生成模式中的位置。
上图中两个关键要点:
(1)所有这些生成模型最终都源自最大似然(Maximum likelihood)
(2)变分自编码器VAE位于显示部分。
从图中可以看出,技术发展,正在从显示和易驾驭的方法转向隐式的方法。这样就会出现一个问题:如果没有显示的损失的函数,如何去评估GAN的效果?
一、评估
如何评估有一个生成方法是好是坏?如何量化生成的质量是好还是坏?
1、评估框架
书中拿仿造达·芬奇画作类比例子。
(1)首先解决方案:是拥有达芬奇用他的风格画出的所有可能的作品,然后看GAN生成图像是否在这个收藏集中。这个过程其实是一个最大化最大似然的非近似版本。意思是穷举,罗列所有。这不现实。
(2)次优解决方案:评估图像并指出对应要检查的地方,然后合计所有错误或伪造的画的数量(比例)。这样做的问题:始终需要人类评论家来审查作品。比如鉴别真假钞票时,需要检查的几个防伪标识。但因为需要鉴别专家,仍然不是一个可以大规模使用的。
(3)因此:要用一种统计方法来评估生成样本的质量,来扩大评估规模并可在实验中使用。如果没有一个易于计算的度量标准,也就无法监控进展。毕竟GAN对超参数非常敏感,因为GAN本身就难以训练又难以评估。
问题?为何不能直接使用已经了解的方法(如上文提到的:最大似然)作为指标呢?
答案:最大似然是统计的方法,可以度量一些模糊的期望,而且不管怎么样都能从中得到隐式的结果。
1、但是最大似然的使用,要对基础分布及其可能性进行正确的估计。(第二章中,我们讲过最大似然估计的缺陷:如果没有事先正确指定模型,估计偏差会非常大。而且很多数据分布会有比想象中更多的模式。最终要的是:有时候维度太高,无法估计。)
2、最大似然估计容易过度泛化,因此导致生成的样本由于太过多样化而显得不真实。(本质是约束条件不足,自由度太高。)。使用最大似然可能会生成现实世界中永远不会出现的样本。
所以需要使用损失函数和评估方法,来淘汰“过于泛化”的样本。
KL散度和JS散度也是基于最大似然的。
用于统计评估生成样本质量的两个最常用且公认的度量标准:Inception Score(IS)和Fréchet Inception Distance(FID)。
2、IS:Inception score
统计评估的要求:
(1)生成的样本要看起来像真实的可分辨的东西。不仅要看起来逼真,而且是数据集中的物品。分类器确信它看到的就是它识别成的物品,能够将图像分类为某个特定(目标类中)的类别。(分类器就是依据Inception网络命名的。)
(2)生成的样本是多种多样的,并且理想情况下应该包含原始数据集中表示的所有类别。否则就是类间模式崩溃(interclass mode collapse)。
计算IS的过程:
(1)采用真实分布和生成分布之间的Kullback-Leibler(KL)差异。
(2)对第1步的结果求指数。
3、FID:Fréchet Inception Distance
评估系统除了解决上面两个问题:逼真和全类别以外,还要解决的第三个问题:生成的样本缺乏多样性。通常,GAN只能学习到每个类别中的一小部分图像。Fréchet Inception Distance(FID)通过提高对噪声的鲁棒性并检测类内(interclass)样本遗漏来改进IS。
IS基准完成的是:能生成此类别的要求。
FID基准完成的是:生成样本的类内多样性。
但有时,我们希望GAN可以从不同的角度输出代表猫的样本,并且明显不同的图像。同时,我们也不希望GAN只是简单的记住图像(记忆,就可能导致没有泛化。)。
FID的技术实现很复杂:但背后的高级想法是:我们正在寻找一个样本的生成分布,为了确保生成分布与真实分布相似而必须进行的修改最小化。
We are looking for a generated distribution of samples that minimizes the number of modifications we have to make to ensure that the generated distribution looks like the distribution of the true data.
FID是通过Inception网络运行图像来计算的。实际中,比较的是中间表示(特征图或者Layer)而不是最终输出(比较的是插入值,而不是最终值。)。计算插入值的均值、方差和两个分布(真实图和生成图)的协方差。
FID是一种从人类评估者那里抽象出来的方法,他可以根据分布进行统计推理,甚至可以用于评估图像的真实度这样难以量化的事情。
二、训练中的挑战
GAN训练中主要问题:(速度和质量)
(1)模式崩溃。生成的样本中缺少某一类。比如生成MNIST中,没有生成数字8。
(2)收敛速度慢。监督学习中,可用标记数据是首要障碍;在GANs和无监督学习中,收敛速度和可用计算力是主要限制。
(3)过度泛化。生成现实生活中,并不存在的情况。当GAN过度泛化并学习到基于真实数据不应该存在的事物时,这种情况就会发生。
模式崩溃和过度泛化有时可以通过重新初始化算法简单地解决,但是这样的算法是脆弱的、不稳定的。
很多训练最终都专注于更快地消除真实分布和生成分布之间的差距。
改进GAN训练过程的几种方法:
(1)增加网络深度
(2)更改网络设置
-
原始论文(开山之作:Generative Adversarial Networks论文)提出的最小-最大(min-max)设计和停止判则。
-
原始论文(开山之作:Generative Adversarial Networks论文)提出的非饱和(Non-Saturating)设计和停止判则。
-
最近的改进——沃瑟斯坦生成对抗网络(Wasserstein GAN)。
(3)其他一些训练技巧
-
归一化输入。
-
梯度惩罚。
-
多训练鉴别器。
-
避免稀疏梯度。
-
使用平滑和带噪声的标签。
1、增加网络深度
最简单的使学习更稳定的方法是:降低复杂度。如果可以从最简单的算法开始逐步地增加复杂性,则训练过程可以更稳定,收敛更快。并且增加深度还有其他潜在的好处。
正在论文《Progressive Growing of GANs for Improved Quality, Stability, and Variation》NVIDIA的研究者:在每个训练周期结束时将生成器的输出大小加倍,将鉴别器的输入也加倍。。
![](https://img-blog.csdnimg.cn/20210521101906811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpYW95YW9sYW5nd2o=,size_16,color_FFFFFF,t_70)
2、游戏(博弈)设置
GAN博弈的设置,模仿围棋规则:策略网络和价值网络(policy and value network)。既要规则,也需要距离(胜利)指标。
GAN的胜利指标:距离或散度。
GAN的研究内容:分别研究每个损失函数(胜利指标)和玩家动态(博弈设置)。
3、Min-Max GAN
Min-Max这个理论需要补充学习一下:
(1)在数据处理领域有一个:Min-Max标准化(归一化)
Min-Max标准化是指对原始数据进行线性变换,将值映射到[0,1]之间。
(2)max-min准则(注意顺序相反哈。)
又称最大-最小准则、小中取大准则或悲观准则,为不确定型决策的决策准则之一,这种方法的基本态度是悲观与保守。它表明决策者应在各个方案中选择最坏的可能结果,然后择取提供最坏可能结果中的最佳者。
(3)两害相权取其轻,两利相权取其重。
GAN鉴别器的损失函数:二元分类问题的损失函数。
D代表鉴别器的函数(将图像映射到概率),G代表生成器的函数(将潜在向量映射到图像)。
上述方程简化写法:
因为只有两方起作用且彼此竞争:所以有理由认为生成器的损失对鉴别器来说是负损失。
有两个损失函数,一个是另一个的负值,对抗很明显。
前面几篇文章中提到因为维度太高,没法事先去评估数据分布情况,通常不用最大似然。为了理解真实分布与生成分布之间的差异:KL散度、JS散度、Earth Mover's distance(EM距离,也称为Wasserstein距离)。
JS散度度量了两个概率分布的相似度,它是基于KL散度的变体,解决了KL散度非对称的问题。一般认为JS散度时对称的。
KL散度和JS散度通常被视为GAN最终在试图最小化的东西。这两种东西都是距离指标,有助于理解高维度空间中两种分布的差异。
最小-最大GAN(MM-GAN)用于给出良好的理论解释,除此之外通常不再实际中使用。它是理解GAN的一个简洁的理论框架:既是一个博弈论的概念,又是一个信息论的概念。除此之外,MM-GAN通常没有任何优势,Next two setups更常用。
4、非饱和GAN(NS-GAN)
MM-GAN的问题:鉴别器收敛缓慢。梯度很容易饱和到接近0。反向传播的权重更新为0或很小,从而导致收敛缓慢。
替代方案:非饱和GAN(Non-Saturtating GAN, NS-GAN):没有让两个损失函数成为彼此的直接竞争对手,而是使两个损失函数相互独立。
这两个损失函数不再直接相互抵消。
NS-GAN的损失函数:
生成器:
鉴别器:
NS-GAN初始训练速度更快,而且由于生成器学习得更快,鉴别器也学习得更快。
5、何时停止训练
GAN的两个原始公式没有给出实际中完成训练的明确条件。原则上一旦达到纳什均衡训练就完成了,但实践中这很难验证。因为高维度使得均衡难以证明。
6、WGAN
Wasserstein GAN(WGAN):
(1)显著改进了损失函数,使得损失函数现在可以解释并提供了更清晰的停止标准。
(2)WGAN效果更好。
(3)WGAN理论支撑:表明了试图估计KL散度在理论上和实践上最终都是不合理的。在此基础上提出了一种更好的损失函数来解决这一问题。
WGAN使用推土机距离(Earth Mover's distance)作为损失函数,该函数与生成样本的视觉质量明显相关。
WGAN的鉴别器的Wasserstein损失函数:
函数
鉴别器。该鉴别器试图估计推土机距离(EM距离),上式中
的两个不同参数是为寻求真实分布(第一项)与生成分布(第二项)之间的最大差异。
鉴别器试图让生成器的初见变得最困难——通过查看在共享空间中使用
的不同投影,来最大化生成器必须移动的概率量。
生成器必须包括推土机距离(EM距离):
生成器试图最小化真实分布和生成分布的期望的距离。
一个最大化差异,一个最小化差异。差异:推土机距离。
生成器试图解决的问题:
(1)从真实分布()或生成分布[
,其中
]中提取x;
(2)生成样本是从z(潜在空间)中采样,通过进行变换以在同一空间中获得样本(
),然后使用
进行评估;
(3)试图最小化损失函数或距离函数(推土机距离)。
WGAN中必须设置一个裁剪常数(clipping constant),其作用类似与学习率。
WGAN的实际意义:
(1)WGAN有更清晰的停止标准。
(2)可以训练WGAN直至收敛。
三、总结游戏设置
上面介绍了GAN结构的3个核心版本:MM-GAN、NS-GAN、WGAN。
Name | Value function | Notes |
---|---|---|
NS-GAN | LDNS = E[log(D(x))] + E[log(1 – D(G(z)))] LGNS = E[log(D(G(z)))] | This is one of the original formulations. Typically not used in practice anymore, except as a foundational block or comparison. This is an equivalent formulation to the NS-GAN you have seen, just without the constants. But these are effectively equivalent.[b] |
WGAN | LDWGAN = E[D(x)] – E[D(G(z))] LGWGAN = E[D(G(z))] | This is the WGAN with somewhat simplified loss. This seems to be creating a new paradigm for GANs. We explained this equation previously as equation 5.5 in greater detail. |
WGAN-GP[c] (gradient penalties) | LDW – GP = E[D(x)] – E[D(G(z))] + GPterm LGW – GP = E[D(G(z))] | This is an example of a GAN with a gradient penalty (GP). WGAN-GP typically shows the best results. We have not discussed the WGAN-GP in this chapter in great detail; we include it here for completeness.WGAN-GP效果最好。 |
四、训练技巧
《How to Train a GAN: Tips and Tricks to Make GANs Work》github资源以上传,可以免费下载。
使用Adam优化器而不是SGD。
1、输入的归一化
几乎所有的机器学习资源,都将图像归一化在-1到1之间通常情况下是一个好主意。因为计算更容易处理。为此最好使用tanh激活函数来限制生成器的最终输出。
2、批归一化
3、梯度惩罚
4、对鉴别器进行更多的训练
(1)在生成器有机会生成任何样本之前对鉴别器进行预训练。
(2)每个训练周期更多次地更新鉴别器。鉴别器权重更新五次,生成器更新一次。
5、避免稀疏梯度
稀疏梯度会增加训练难度原因如下:
(1)如果使用最大池化:那么将会丢失卷积的感受视野中的最大值以外的所有值。这使得在DCGAN中使用转置卷积来恢复信息变得更加困难。使用平均池化至少可以知道平均值是多少,但仍在丢失信息,至少比最大池化要少。因为平均值比最大值更具有代表性。转置卷积(经典好文)
(2)使用ReLU激活函数时——信息损失。
解决方案:使用LeakyReLU激活函数。
6、平滑和带噪声的标签
给标签添加噪声或使其平滑。增加噪声、裁剪。而非典型的二分类标签。