【GANs学习笔记】(十三)BIGGAN

article/2025/11/9 23:01:09

完整笔记:http://www.gwylab.com/note-gans.html
———————————————————————
原paper及译文:
http://www.gwylab.com/paper-biggan.html

 

4. BigGAN

4.1 BigGAN解决的问题

       我们知道,GANs的终极目标是生成让人无法辨别真伪的高清图片,如果用Inception Score来评价的话,我们希望生成图片的IS得分能逼近真实图片的IS值,也就是233分。但即便是之前效果最好的SAGANIS得分也只有52分。于是现在,我们要探索的就是,在好的硬件条件(TPU)和庞大的参数体系下 ,GANs生成的图片究竟能逼真、精细到什么程度,基于这样的好奇心,BigGAN被提出了。

4.2 BigGAN的大规模实现

       为了产生逼真、精细的图片,我们需要提升GANs的规模。首先我们想到的,就是增大BatchSize以及增大Chanel,以及我们可以不断尝试修改其他的参数和方法,在后文当中会逐一细述。我们先看一下实验结果(表中的各列内容会在后文一一解释):

      

       BatchBatchSize

       简单地增大BatchSize就可以实现性能上较好的提升,例如Batch size 256增大2048的时候,IS 提高了 46%,BigGAN推测这可能是每批次覆盖更多内容的结果,为生成和判别两个网络提供更好的梯度。增大 Batch size 还会带来在更少的时间训练出更好性能的模型,但增大 Batch size 也会使得模型在训练上稳定性下降,4.3节会分析如何提高稳定性。

 

       Ch.Channel

       在实验上,单单提高 Batch size 还受到限制,BigGAN在每层的通道数也做了相应的增加,当通道增加 50%,大约两倍于两个模型中的参数数量。这会导致 IS 进一步提高 21%。文章认为这是由于模型的容量相对于数据集的复杂性而增加。有趣的是,BigGAN在实验上发现一味地增加网络深度并不会带来更好的结果,反而在生成性能上会有一定的下降。

 

       Shared

       首先给出BigGAN生成网络的结构图,顺便能说明什么是Shared(共享嵌入)

       如左图所示将噪声向量 z 通过 split 等分成多块,然后和条件标签 c 连接后一起送入到生成网络的各个层中,对于生成网络的每一个残差块又可以进一步展开为右图的结构。可以看到噪声向量 z 的块和条件标签 c 在残差块下是通过 concat 操作后送入 BatchNorm 层,这种嵌入方式就是共享嵌入,线性投影到每个层的 bias weight。共享嵌入与传统嵌入的差别是,传统嵌入为每个嵌入分别设置一个层,而共享嵌入是将zc的连接一并传入所有BatchNorm

       再回到表1中的实验,BigGAN采用了共享嵌入后,降低了计算和内存成本,并将训练速度(达到给定性能所需的迭代次数)提高了 37%。

 

       Hier.Hierarchical Latent Space

       先解释一下潜在空间(Latent Space,它实际上指的就是噪声z的先验分布。BigGAN发现,虽然大多数以前的工作采用 N(0,I) U[-1,1]作为 z 的先验(输入到 G 的噪声),但实际上我们可以自由选择能够采样的任何潜在分布(详见paper附件E),譬如BigGAN发现效果更好的两个潜在分布是 Bernoulli{0,1} Censored Normal max(N(0,I),0),两者都提高了训练速度并轻微提高了最终性能,但是最终BigGAN没有考虑替换潜在分布的方案,因为BigGAN发现了比这更有用的截断技巧。

       截断技巧不需要替换潜在空间,我们依然使用N(0,I)的先验分布。截断技巧的做法是:在对先验分布 z 采样的过程中,通过设置阈值的方式来截断 z 的采样,其中超出范围的值被重新采样以落入该范围内。这个阈值可以根据生成质量指标 IS FID 决定。实验的结果是,随着阈值的下降生成的质量会越来越好,但是由于阈值的下降、采样的范围变窄,就会造成生成上取向单一化,造成生成的多样性不足的问题,数据上来说就是,IS (反应图像的生成质量)一路上涨,FID (注重生成的多样性)先变好然后一路变坏。

       BigGAN不仅对潜在空间内部作了处理,在潜在空间的处置上用到了分层潜在空间(Hierarchical Latent Space技术。分层潜在空间的意思是,传统的 GAN 都是将 z 作为输入直接嵌入生成网络,而 BigGAN 将噪声向量 z 送到 G 的多个层而不仅仅是初始层。BigGAN认为潜在空间 z 可以直接影响不同分辨率和层次结构级别的特征,所以对于 BigGAN 的条件生成模型,将 z 分成每个分辨率的一个块,并将每个块连接到条件向量 c 来实现,实验结果证明,这样做提供约 4% 的适度性能提升,并将训练速度提高 18%。

       Ortho.Orthogonal Regularization

       前面我们提到,使用截断技巧可以提升生成图片的质量,但是一些较大的模型不适合截断,因为在嵌入截断噪声时会产生饱和伪影,如下图所示:

       为了抵消这种情况,BigGAN通过将 G 调节为平滑来强制实现截断的适应性,以便 z 的整个空间能映射到良好的输出样本。为此,BigGAN采用正交正则化方法(Orthogonal Regularization)。 正交正则化,也就是说让W权重矩阵尽可能是一个正交矩阵,这样最大的好处是,权重系数彼此之间的干扰会非常低,受到截断之后消失的权重就不会对结果产生太大影响。

       为了实现正交化,一开始BigGAN想到了一个非常粗俗的方法,就是直接把正则项改为:

       其中 W 是权重矩阵,β 是超参数,I是单位矩阵,这基本上就等价于一个正交矩阵的定义式(若矩阵与自身转置的乘积为单位矩阵,则该矩阵是正交矩阵)。但是这种方法明显太过局限了,BigGAN为了放松约束,同时实现模型所需的平滑度,发现最好的版本是从正则化中删除对角项,并且旨在最小化卷积核之间的成对余弦相似性,但不限制它们的范数:

       实验结果证明,正交正则化的方法是非常有帮助的,在表 1 中,没有正交正则化时,只有 16%的模型适合截断,而有正交正则化训练时则有60%。

4.3 BigGAN的稳定性实现

       在前篇中,我们初步实现了BigGAN的大规模,并带来了实质的结果提升。但是,大规模BigGAN有一个最大的问题就是非常不稳定,在Batch很大的时候是非常容易崩溃的。在本节我们首先会分析产生崩溃的原因,然后探讨解决这一问题的方法。

      

       分析崩溃的原因

       BigGAN在实验中发现,每个权重矩阵中的前三个奇异值的影响最大(这三个奇异值可以使用Alrnoldi迭代方法进行有效计算)。我们以为例,我们先画出光谱归一化之前GD层中第一个奇异值的典型图如下(从红色到紫色的颜色表示增加深度):

       可以看出,左图中大多数G层具有良好的光谱范式,但有些层(通常是G中的第一层,过于完整且非卷积)表现不佳,光谱范式在整个训练过程中增长,在崩溃时爆炸。而对于右图,D的光谱噪声较大,但表现更好。

       因此,现在需要解决的问题是,对于G,适当调整奇异值以抵消光谱爆炸的影响;对于D,寻找更多的约束来抵消噪声的影响,实现训练的稳定性。

 

       对于G的控制

       为了将权重的第一个奇异值控制住,防止突然性的爆炸,BigGAN采用了两种方法:

       ? 第一种方法是,直接使每个权重的顶部奇异值正则化,朝向固定值或者以某个比率r朝向第二奇异值(其中为停止梯度操作,适时防止正则化增加)。

       ? 第二种方法是,使用部分奇异值分解来代替。给定权重W,其第一个奇异向量,以及将被值钳制,我们的权重变为:

       其中被设置为

       BigGAN观察到无论有无光谱归一化,这些技术都具有防止逐渐增加和爆炸的效果,但即使在某些情况下它们可以温和地提高性能,却依然没有任何组合可以防止训练崩溃。 这一证据表明,虽然调节G可能会改善稳定性,但它不足以确保稳定性。 因此,现在我们需要将注意力转向D

 

       对于D的控制

       在图(b)中,我们看到D的光谱是嘈杂的,但是表现良好,并且奇异值在整个训练过程中平稳增长,在崩溃时只是突然跳跃而不是爆炸。

       我们需要解决的问题有两个,第一个,嘈杂出现的原因是什么以及这种嘈杂与模型不稳定性之间是否有直接影响;第二个,奇异值在整个训练过程中平稳增长(D在训练期间的损失接近于零),但在崩溃时经历了急剧的向上跳跃,这是什么原因导致的。

       我们先考虑第一个问题,频谱噪声与模型不稳定性之间有什么样的影响。

       我们先分析一下出现嘈杂的原因,D光谱中的峰值可能表明它周期性地接收到非常大的梯度,但我们观察到Frobenius规范是平滑的(见paper附录F),表明这种效应主要集中在前几个奇异方向上。于是我们认为这种噪声是通过对抗训练过程进行优化的结果,其中G定期产生强烈干扰Dbatch,进而导致出现光谱嘈杂。

       如果这种频谱噪声与不稳定性有因果关系,我们该采用的反制措施自然是梯度惩罚,因为这明显地规范了D的雅可比行列式的变化。BigGAN探索了零中心梯度罚分:

       实验结果证明,在 γ 为 10 的情况下,训练变得稳定并且改善了 G D 中光谱的平滑度和有界性,但是性能严重降低,导致 IS 减少45%。减少惩罚可以部分缓解这种恶化,但会导致频谱越来越不良。即使惩罚强度降低到1(没有发生突然崩溃的最低强度),IS也减少了 20%。

       BigGAN还采用了很多其他正则化策略进行比较,得到的结论就是:频谱噪声确实会对模型的不稳定性产生影响,我们可以通过对D施加惩罚去解决。当对D的惩罚足够高时,可以实现训练的稳定性提升但是图像的生成质量会下降比较多。

       下面来考虑第二个问题,奇异值在崩溃时的向上跳跃是什么原因导致的。

       首先我们直观上猜测,出现这种现象很有可能是D 过度拟合训练集,从而记忆训练样本而不是学习真实图像和生成图像之间的一些有意义的边界,所以在训练D时损失接近0但在崩溃时就会出现突然的跳跃。为了评估这一猜测,BigGAN ImageNet 训练和验证集上评估判别器,并测量样本分类为真实或生成的百分比。虽然在训练集下精度始终高于 98%,但验证准确度在 50-55% 的范围内,这并不比随机猜测更好(无论正则化策略如何)。这证实了 D 确实记住了训练集。

       但事实上我们不需要对此感到意外,因为这符合 D 的角色:不断提炼训练数据并为 G 提供有用的学习信号。因此针对第二个问题我们不需要做过多的调整,因为D过拟合对模型稳定性影响不大,我们只需要保证G能接受到正确的学习信号即可。

 

       总结

       我们发现稳定性不仅仅来自GD,而是来自他们通过对抗性训练过程的相互作用。 虽然他们的不良症状调节可用于追踪和识别不稳定性,但确保合理的调节是训练所必需的,但不足以防止最终的训练崩溃。可以通过强烈约束D来强制实现稳定性,但这样做会导致性能上的巨大成本。使用现有技术,可以通过放松这种调节并允许在训练的后期阶段发生塌陷来实现更好的最终性能,此时模型经过充分训练以获得良好的结果。

      

       最终的BigGAN,将IS得分提升到了惊人的166分,可以说,BigGAN是迄今为止(截至写稿日181014日)细节效果处理得最好的生成模型,它将GANs的大规模与稳定性实现了较大的提升与平衡,产生让人惊叹的结果。最后用几张BigGAN的生成范例来结束这一章的学习:


http://chatgpt.dhexx.cn/article/cZogFeuT.shtml

相关文章

Paper Reading:BigGAN

URL: https://arxiv.org/pdf/1809.11096.pdf code: https://github.com/AaronLeong/BigGAN-pytorch https://tfhub.dev/s?qbiggan TL;DR 号称具有划时代意义的BigGAN,由DeepMind团队在ICLR2019上发表,将精度作出了跨越式提升。 将Inception Score (IS…

BigGAN论文解读

论文:https://arxiv.org/pdf/1809.11096.pdf 源码:https://github.com/ajbrock/BigGAN-PyTorch 用于高保真自然图像合成的大规模GAN训练 摘要 尽管最近在生成图像建模方面取得了进展,但是从像ImageNet这样的复杂数据集中成功生成高分辨率、…

Big GAN

参考文献: •https://github.com/kayamin/DR-GAN •https://www.jianshu.com/p/4ee8f9284b81 •http://cvlab.cse.msu.edu/pdfs/Tran_Yin_Liu_CVPR2017.pdf •https://arxiv.org/abs/1809.11096 •https://juejin.im/entry/5c05e76c51882539c60cf2d5 •https:…

BigGAN

1、BIGGAN 解读 1.1、作者 Andrew Brock、Jeff Donahue、Karen Simonyan 1.2、摘要 尽管最近在生成图像建模方面取得了进展,但从 ImageNet 等复杂数据集中 成功生成高分辨率、多样化的样本仍然是一个难以实现的目标。为此,我们以迄 今为止最大的规模训…

BigGAN(2019)

论文引入 我们来看一下由 BigGAN 生成的图像: 随着 GAN、VAE 等一众生成模型的发展,图像生成在这几年是突飞猛进,14 年还在生成手写数字集,到 18 年已经将 ImageNet 生成的如此逼真了。 这中间最大的贡献者应该就是 GAN 了&…

BigGAN_用于高保真自然图像合成的大规模 GAN 训练

【飞桨】【Paddlepaddle】【论文复现】BigGAN 用于高保真自然图像合成的大规模 GAN 训练LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS1、BiagGAN的贡献2.1背景2.2具体措施与改变2.2.1规模(scaling up)2.2.2截断技巧(…

环形链表之快慢指针

环形链表 前言一、案例1、环形链表2、环形链表II 二、题解1、环形链表2、环形链表II3、源码4、寻找入环点的数学解法 总结参考文献 前言 对于环形链表,通过快慢指针,如果存在环,这这两个指针一定会相遇,这是一种经典的判断环或是应…

快慢指针判断链表中是否存在环以及查找环的起始位置

判断链表中是否有环? 使用快慢指针, 慢指针一次走一步, 快指针一次走两步, 当快慢指针相遇时,说明链表存在环 为什么快指针每次走两步而慢指针每次走一步呢? 因为slow指针和fast指针都会进入环内, 就像在环形跑道内不同位置的两个人;slow指针在后面, fast指针在前面, 但…

链表-快慢指针(C++)

一、链表 链表是由一组在内存中不必相连(不必相连:可以连续也可以不连续)的内存结构Node,按特定的顺序链接在一起的抽象数据类型。 我们常见的链表结构有单链表和双向链表。 单链表,保存了下一个结点的指针&#xf…

面试题 02.08. 环路检测-快慢指针+如何找到环的入口?(证明)Java

1.题目 2.思路 方法一——哈希表记录节点 思路很简单,记录一下每个节点出现的次数,如果某个节点出现了两次,代表此时有环,并且是环的入口,直接返回即可。 时间复杂度O(N) 空间复杂度O(N) public class Solution {…

链表中快慢指针的应用

目录 一、链表的中间结点 二、回文链表 三、链表中倒数第K个结点 四、删除链表的倒数第n个结点 五、环形链表 六、环形链表Ⅱ 一、链表的中间结点 给定一个头结点为 head 的非空单链表,返回链表的中间结点。 如果有两个中间结点,则返回第二个中间…

快慢指针思想

快慢指针思想 在做题当中经常会用到快慢指针,快慢指针就是定义两根指针,移动的速度一快一慢,从而创造出自己想要指针的差值。这个差值可以让我们找到链表上相应的节点。 参考链接:https://www.jianshu.com/p/21b4b8d7d31b 应用 …

指针的运用——快慢指针

快慢指针是指针的一种类型,在这里我们来了解下快慢指针 让我们来看一道题 一、题目 876. 链表的中间结点 首先我们对这道题进行分析,最容易让人想到的方法是直接使用n/2找到中点,如果我们不对链表进行遍历,我们该怎么做呢&…

浅谈快慢指针

快慢指针 快慢指针 快慢指针1.快慢指针的概念:2.快慢指针的应用:1. 判断单链表是否为循环链表2. 在有序链表中寻找中位数3.链表中倒数第k个节点 1.快慢指针的概念: 快慢指针就是存在两个指针,一个快指针,一个慢指针&a…

快慢指针应用总结

快慢指针 快慢指针中的快慢指的是移动的步长,即每次向前移动速度的快慢。例如可以让快指针每次沿链表向前移动2,慢指针每次向前移动1次。 快慢指针的应用 (1)判断单链表是否存在环 如果链表存在环,就好像操场的跑道是…

十大常用经典排序算法总结!!!

爆肝整理!堪称全网最详细的十大常用经典排序算法总结!!! 写在开头,本文经过参考多方资料整理而成,全部参考目录会附在文章末尾。很多略有争议性的细节都是在不断查阅相关资料后总结的,具有一定…

经典五大算法思想-------入门浅析

算法:求解具体问题的步骤描述,代码上表现出来是解决特定问题的一组有限的指令序列。 1、分治: 算法思想:规模为n的原问题的解无法直接求出,进行问题规模缩减,划分子问题(这里子问题相互独立而且…

算法设计经典算法

一、贪婪算法 1、概述 贪婪法又称贪心算法,是当追求的目标是一个问题的最优解时,设法把对整个问题的求解工作分成若干步骤来完成,是寻找最优解问题的常用方法。 贪婪法的特点是一般可以快速得到满意的解,因为它省去了为找最优解…

算法之经典图算法

图介绍表示图的数据结构图的两种搜索方式DFS可以处理问题BFS可以处理问题有向图最小生成树最短路径 图介绍 图:是一个顶点集合加上一个连接不同顶点对的边的集合组成。定义规定不允许出现重复边(平行边)、连接到顶点自身的边(自环…

计算机10大经典算法

算法一:快速排序法 快速排序是由东尼霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其…