贾浩楠发自凹非寺

  量子位报道公众号 QbitAI

  输出单一、调参麻烦、损失函数不能收敛、稳定性差。

  苏黎世理工大学的博士 Andreas Lugmayr 历数了各种 GAN 的“罪状”,说出了今后弃用 GAN的话。

我为什么弃用GAN?-编程之家

  说出“弃用”,当然是已经有了B计划。

  Andreas Lugmayr 博士和他的团队开发了一种新的标准化流(Normalizing Flow)模型,能够弥补 GAN 在生成任务中的的种种缺陷。

  这项研究成果“SRFlow”,还被 ECCV 2020 Spotlight 收录。

  那么 SRFlow 到底有多厉害?能在多大程度上替代 GAN 呢?

  SRFlow“又多又好”

  从肉眼可见的生成任务结果上,可以看出 SRFlow 至少在两个方面超越了 GAN,一是生成结果的多样性,二是提高图片分辨率后的保真度

  输入一个低分辨率马赛克图像,基于 GAN 的 ProgFSR 模型和 SRFlow 生成结果对比:

我为什么弃用GAN?-编程之家

  在提升 4 倍分辨率的任务中,SRFlow 的生成结果也比基于 GAN 的 ERSGAN 更加清晰真实。

我为什么弃用GAN?-编程之家

  对于众多的 GAN 变体来说,有一些缺陷是难以避免的,比如图像复原生成任务,生成器广泛忽略了随机向量,因此,大多数基于 GAN 的图像到图像映射都是单一确定的。

  GAN 训练中的损失函数,包括了生成器伪造图像,而鉴别器却无法知道哪些图像是假的。

  另一方面,鉴别器的职责就是确定一个图像是来自生成器还是来自训练集。

  这两个相互冲突的目标导致了学习参数的持续漂移,导致输出结果不同程度的失真。

  那么基于标准化流的 SRFlow,是如何弥补这些缺陷的呢?

  SRFlow 不会忽略随机向量

  对于 GAN 忽略输入的随机向量,导致输出单一的问题,传统的 GAN 策略是,在模型中增加一个控制信号,并抛弃重建损失函数。

我为什么弃用GAN?-编程之家

  放大 16 倍分辨率下的 SRFlow 输出结果

  而 SRFlow 在训练过程中,算法核心—标准化流模型将高分辨率图像转化为高斯分布。图像条件标准化流的情况并非如此。

  为了避免 GAN 的判别器损失通常会导致模式崩溃,SRFlow 采用单一损失进行训练的,并且对随机输出进行内采样。

我为什么弃用GAN?-编程之家

  模型稳定超参数少,调参方便

  条件 GAN 需要仔细的超参数调整。很多 GAN 的变体模型中,总损失由多个损失的加权和组成。

  所以降低失真需要很大的精力来调整不同的损失函数权重。

  此外还必须平衡生成器和判别器,使训练过程稳定。

  在图像生成任务中 SRFlow 使用最大似然策略(maximum likelihood),输入的图像被转化为一个高斯潜空间。通过简单的计算得到高斯向量的似然。然后使用现成的 Adam 优化器,这个损失函数会稳定地收敛。

我为什么弃用GAN?-编程之家

  △SRFlow 的单一损失稳定且可收敛

  Normalizing Flow 本质上是稳定的。因为模型只有一层网络和一个损失,超参数要少得多,训练起来也更容易。

  特别是对于开发新模型的研究人员来说,这一点非常实用。

  新手可以更容易地比较不同的架构的 Normalizing Flow 变体。

  输入输出保持高度稳定

  在没有进一步干预的情况下,有条件的 GAN 是不具备输入一致性的。对于提升分辨率任务,一个重要的问题是,高分辨率的图像是否与低分辨率的输入保持最大程度一致。

  如果不能,那么该方法到底是真的提高分辨率还是仅仅生成一个类似图片?这点十分值得怀疑。

  GAN 模型里有一个不受监督的损失函数,会导致模型自行生成图片像素。而标准化流模型避免了这种可能。它以且只以输入图像为条件,来模拟高分辨率图像的分布。

我为什么弃用GAN?-编程之家

  将 SRFlow 的输出与输入对比,可以看出与 GAN 的结果不同,具有高度一致性。

  生成任务只需 1 张 GPU 训练

  研究团队说,论文中的实验基于 GLOW 网络,使用多达 40 个 GPU 来训练图像生成。

  但如果只是应对简单的图片生成任务,只需要一块 GPU 就能完成对 SRFlow 的训练。

  什么是标准化流模型?

  机器学习中有一类是概率模型。训练一个模型时,常见的一种处理方法是调整参数以使得模型在训练数据集的概率最大。

  为了达到这个目的,需要假设模型满足一定的概率分布模式。

  那么到底需要什么样的分布,既具有接近真实样本的表达能力,又具有统计机器学习模型较好的解释性呢?

我为什么弃用GAN?-编程之家

  高斯分布可以基本满足:采样方便、解析的密度已知、KL 距离容易计算,还有中心极限定理的保证。最常使用的两种方法是用于分类的 Categorical 以及用于回归的 Gaussian。

  但这两种方法仍然有一些问题, 因为真实世界中样本的概率密度函数一般来说,与范畴分布以及高斯分布相差甚远。

  如果简单地使用高斯作为图像生成的似然函数,那最后得到的生成结果可能很糟糕。

  而标准化流(Normalizing Flow)可以把简单的概率密度(比如高斯分布)形式转化成某种更高级分布形式。

  Flow 指的是数据流经过一系列双射(可逆映射)。最终映射到合适的表征空间,normalizing 指的是表征空间的变量积分是1,满足概率分布函数的定义。

  标准化流这种工具,可以产生更强大的分布函数。

  从另一个视角来看,标准化流可以看作是一种参数化对先验概率q的逼近的方法,并且也可以用在其它似然函数方程场景下。

  与 GAN 不同,标准化流模型在采样、训练稳定性、损失函数收敛、和一致性方面具有优势。

  标准化流模型更加适合用在图像生成、强化学习、变分推断之类的任务。

  SRFlow 的团队,已经将这个基于标准化流的模型开源。

  那么你的下一个机器学习任务,会使用 SRFlow 吗?

  论文地址

  https://arxiv.org/abs/2006.14200

  开源地址

  https://github.com/andreas128/SRFlow?