【Large Scale Adversarial Representation Learning 大规模对抗学习(BigGAN) 】学习笔记

目录

1.背景

2.特点

3.BigGAN详细介绍

①Batch size的增大------以提升IS

②增加网络深度,即增加每层的通道数------以提升IS

③BatchNorm共享嵌入条件标签c------增加参数,提升训练速度

④将噪声向量 z 送到 G 的多个层而不仅仅是初始层-----提升适应性,提高训练速度

⑤“截断技巧”-----通过设置阈值的方式来截断 z 的采样,控制取样范围

⑥模型稳定性的控制

4.BigGAN实验

5.文章作者经验分享

6.必要的概念

7.参考网址


背景

图像生成在这几年是突飞猛进,14 年还在生成手写数字集,到 18 年已经将 ImageNet 生成的如此逼真了。这中间最大的贡献者应该就是 GAN 了,GAN 的对抗思想让生成器和判别器在博弈中互相进步,从而生成的图像清晰逼真。

在各类生成模型中,GAN 是这几年比较突出的,18 年新出的 SNGAN [1]、SAGAN [2] 让 GAN 在 ImageNet 的生成上有了长足的进步,其中较好的 SAGAN 在 ImageNet 的128x128 图像生成上的 Inception Score (IS) [3] 达到了 52 分。BigGAN 在 SAGAN 的基础上一举将 IS 提高了 100 分,达到了 166 分(真实图片也才 233 分),可以说 BigGAN 是太秀了,在 FID [4] 指标上也是有很大的超越。

文章的创新点是将正交正则化的思想引入 GAN,通过对输入先验分布 z 的适时截断大大提升了 GAN 的生成性能。

特点

  1.  大规模Batch:已经达到了 2048(我们平常训练 Batch 正常都是 64 居多)
  2. 卷积的通道上更大
  3. 网络的参数变多了,在 2048 的 Batch 下整个网络的参数达到了接近 16 亿
  4. 采用先验分布 z 的“截断技巧”,允许对样本多样性和保真度进行精细控制

BigGAN详细介绍

BigGAN 在 SAGAN 的基础上架构模型, 同样采用 Hinge Loss、BatchNorm 和 Spectral Norm 和一些其它技巧。新思路: Batch size 的增大、“截断技巧”和模型稳定性的控制。

1.Batch size的增大------以提升IS

SAGAN 中的 Batch size 为 256,作者发现简单地将 Batch size 增大就可以实现性能上较好的提升,文章做了实验验证:

可以看到,在 Batch size 增大到原来 8 倍的时候,生成性能上的 IS 提高了 46%。文章推测这可能是每批次覆盖更多模式的结果,为生成和判别两个网络提供更好的梯度。增大 Batch size 还会带来在更少的时间训练出更好性能的模型,但增大 Batch size 也会使得模型在训练上稳定性下降,后续再分析如何提高稳定性。

2.增加网络深度,即增加每层的通道数------以提升IS

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

3.BatchNorm共享嵌入条件标签c------增加参数,提升训练速度

由于 BigGAN 是训练 ImageNet 的各个类,所以通过加入条件标签 c 实现条件生成,如果在 (Batchnorm是深度网络中经常用到的加速神经网络训练,加速收敛速度及稳定性的算法) BatchNorm下嵌入条件标签 c 将会带来很多的参数增加,文章采用了共享嵌入,而不是为每个嵌入分别设置一个层,这个嵌入线性投影到每个层的 bias 和 weight,该思想借鉴自 SNGAN 和 SAGAN,降低了计算和内存成本,并将训练速度(达到给定性能所需的迭代次数)提高了 37%

4.将噪声向量 z 送到 G 的多个层而不仅仅是初始层-----提升适应性,提高训练速度

普遍的 GAN 都是将 先验分布z 作为输入直接嵌入生成网络,而 BigGAN 将噪声向量 z 送到 G 的多个层而不仅仅是初始层。文章认为潜在空间 z 可以直接影响不同分辨率和层次结构级别的特征,对于 BigGAN 的条件生成上通过将 z 分成每个分辨率的一个块,并将每个块连接到条件向量 c 来实现,这样提供约 4% 的适度性能提升,并将训练速度提高 18%。

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

5.“截断技巧”-----通过设置阈值的方式来截断 z 的采样,控制取样范围

对于先验分布z,一般情况下都是选用标准正态分布 N(0,I) 或者均匀分布 U[−1,1],本文采用z∼N(0,I)。“截断技巧”就是通过对从先验分布 z 采样,通过设置阈值的方式来截断 z 的采样,使超出范围的值被重新采样以落入该范围内。这个阈值可以根据生成质量指标 IS 和 FID 决定,随着阈值的下降生成的质量会越来越好,但是由于阈值的下降、采样的范围变窄,就会造成生成上取向单一化,造成生成的多样性不足的问题。

往往阈值的下降会带来 IS(更注重图片生成质量) 的一路上涨,但是 FID (更注重图片生成的多样性)会先变好后一路变差。

还有一些较大的模型不适合截断,在嵌入截断噪声时会产生饱和伪影,如上图 (b) 所示,为了抵消这种情况,通过将 G 调节为平滑来强制执行截断的适应性,以便 z 的整个空间将映射到良好的输出样本。为此,文章采用正交正则化 [6],它直接强制执行正交性条件:

其中 W 是权重矩阵,β 是超参数。这种正则化通常过于局限,文章为了放松约束,同时实现模型所需的平滑度,发现最好的版本是从正则化中删除对角项,并且旨在最小化滤波器之间的成对余弦相似性,但不限制它们的范数:

其中 1 表示一个矩阵,所有元素都设置为 1。通过上面的 Table1 中的 Hier. 代表直接截断,Ortho. 表示采用正则正交,可以看出来正则正交在性能上确实有所提升。

6.模型稳定性的控制

对于 G 的控制:

在训练时监测一系列权重、梯度和损失统计数据,以寻找可能预示训练崩溃开始的指标。实验发现每个权重矩阵的前三个奇异值 σ0,σ1,σ2 是最有用的,它们可以使用 Alrnoldi 迭代方法进行有效计算。

如下图 (a) 所示,对于奇异值 σ0,大多数 G 层具有良好的光谱规范,但有些层(通常是 G 中的第一层而非卷积)则表现不佳,光谱规范在整个训练过程中增长,在崩溃时爆炸。为解决 G 上的训练崩溃,通过适当固定奇异值 σ0 ,防止光谱突然爆炸,但无法避免训练崩溃。

对于 D 的控制:

也是考虑 D 网络的光谱,试图寻找额外的约束来寻求稳定的训练。如上图 3 中 (b) 所示,与 G 不同,可以看到光谱是有噪声的,但是整个过程是平稳增长在崩溃时不是一下爆炸,而是跳跃一下,这种行为的一种可能解释是 D 过度拟合训练集,记忆训练样本而不是学习真实图像和生成图像之间的一些有意义的边界。

对 D 的惩罚足够高,可以实现训练稳定性但是性能成本很高,在图像生成性能上也是下降的,而且降的有点多,这种权衡就是很纠结的。

模型稳定性不仅仅来自 G 或 D,而是来自他们通过对抗性训练过程的相互作用。虽然他们的不良调节症状可用于追踪和识别不稳定性,但确保合理的调节证明是训练所必需的,但不足以防止最终的训练崩溃。

可以通过约束 D 来强制执行稳定性,但这样做会导致性能上的巨大成本。使用现有技术,通过放松这种调节并允许在训练的后期阶段发生崩溃(人为把握训练实际),可以实现更好的最终性能,此时模型被充分训练以获得良好的结果。

BigGAN实验

数据集:ImageNet ILSVRC 2012(大家都在用的 ImageNet 的数据集)上 128×128,256×256 和 512×512 分辨率评估模型。在自设训练样本8500 类下 29 亿张图片下训练。

实验环境:整体是在 SAGAN 基础上架构,训练采用 Google 的 TPU。一块 TPU 的性能可以赶得上十几甚至更多 GPU 的性能。

实验效果:实验在定性上的效果简直让人折服,在定量上通过和最新的 SNGAN 和 SAGAN 在 IS 和 FID 做对比,也是碾压对方。

为了进一步说明 G 网络并非是记住训练集,在固定 z 下通过调节条件标签 c 做插值生成,通过下图的实验结果可以发现,整个插值过程是流畅的,也能说明 G 并非是记住训练集,而是真正做到了图像生成。

当然模型也有生成上不合理的图像,但是不像以前 GAN 一旦生成不合理的图像,往往是扭曲和透明化的图,BigGAN 训练不合理的图像也保留了一定的纹理和辨识度,确实可以算是很好的模型了。

生成效果:

文章作者经验分享:

  • 一味加深网络可能会妨碍生成的性能;
  • 共享类的思想在控制超参数上是很麻烦的,虽然可能会提高训练速度;
  • WeightNorm 替换 G 中的 BatchNorm 并没有达到好的效果;
  • 除了频谱规范化之外,尝试将 BatchNorm 添加到 D(包括类条件和无条件),但并未取的好的效果;
  • 在 G 或 D 或两者中使用 5 或 7 而不是 3 的滤波器大小,5 的滤波器可能会有些许提升,但是计算成本也上去了;
  • 尝试在 128×128 的 G 和 D 中改变卷积滤波器的扩张,但发现在任一网络中即使少量的扩张也会降低性能;
  • 尝试用 G 中的双线性上采样代替最近领近的上采样,但这降低了性能。

 必要的概念

  1. Epoch(时期):当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次epoch。(也就是说,所有训练样本在神经网络中都 进行了一次正向传播 和一次反向传播 )再通俗一点,一个Epoch就是将所有训练样本训练一次的过程。
  2. 然而,当一个Epoch的样本(也就是所有的训练样本)数量可能太过庞大,就需要把它分成多个小块,也就是就是分成多个Batch 来进行训练。
  3. Batch(批 / 一批样本):将整个训练样本分成若干个Batch。

  4. Batch_Size(批大小):每批样本的大小。

  5. Iteration(一次迭代):训练一个Batch就是一次Iteration。

  1. weight:权重比,和输入的形状强相关。

  2. bias:偏斜量,和输出的形状相关。

参考网址:

TF:CNN里面的weight,bias,shape,从形状的角度理解整个过程_云淡风清orz的博客-CSDN博客_bias cnn

(9条消息) 深度学习 | 三个概念:Epoch, Batch, Iteration_大西瓜不甜的博客-CSDN博客

深度解读DeepMind新作:史上最强GAN图像生成器—BigGAN - 知乎 (zhihu.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值