点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

前言

GAN模型相比较于其他网络一直受困于三个问题的掣肘:

1. 不收敛;模型训练不稳定,收敛的慢,甚至不收敛;

2. mode collapse; 生成器产生的结果模式较为单一;

3. 训练缓慢;出现这个原因大多是发生了梯度消失的问题;

本文主要以下几个方面入手,聚焦于解决以上三个问题的一些技巧:

  • 改变损失函数,更换更好的优化目标

  • 在损失函数中增加额外的惩罚机制或者正则手段

  • 避免过拟合

  • 更好的优化模型

  • 使用监督学习

01

特征匹配

生成器试图生成最好的图像来欺骗鉴别器。当两个网络不断对抗时,“最佳”图像会不断变化。然而,优化可能变得过于贪婪,并使其成为永无止境的猫捉老鼠游戏。这是模型未收敛且模式崩溃的情景之一。

特征匹配改变了生成器的损失函数,以最小化真实图像的特征与生成的图像之间的统计差异。通常,我们测量其特征向量均值之间的L2距离。因此,特征匹配将目标从零和博弈扩展到真实图像中的匹配特征。下面是特征匹配新的目标函数:

其中$f(x)$是一个从判别器D中提取出来的特征向量,如下图所示:

训练过程中,每个batch计算实际图像特征的平均值,每个batch都会有波动,可以减轻mode collapse,特征匹配它引入了随机性,使得鉴别器更难以过拟合。

当GAN的训练不稳定时,使用特征匹配是很有效的。

02

减小判别器的batch

出现mode collapse时,生成的图像看起来都差不多,为了缓解这个问题,我们将不同batch的实际图像和生成的图像分别送入判别器,并计算图像x与同一批次图像的相似度。我们在鉴别器的一个密集层中附加相似度,以分类该图像是真实的还是生成的。

如果出现了mode collapse,则生成的图像的相似性增加。如果模式崩溃,则鉴别器可以使用这个值来检测出生成的图像不够好进而给生成器更多的惩罚。

图像与同一批次中的其他图像之间的相似度由变换矩阵T计算。

在上图中,是输入的图像,是同一个batch里剩下的部分。使用变换阵T去转换特征(维度B*C):

进而,我们可以使用L1-norm得出图像i和图像j之间的相似度

图像和同一个batch里的图像的相似度是:

以下是公式总览:

引自paper:Improved Techniques for Training GANs

Minibatch的判别方法能够非常快速地生成视觉上较好的样本,并且在这方面它比特征匹配更好用。

03

标签平滑

深度网络可能会发生过拟合。例如,它使用很少的特征来对对象进行分类。为了缓解这个问题,深度学习使用正则话和dropout来避免过拟合。

在GAN中,如果鉴别器依赖于一小组特征来检测真实图像,则生成器可以仅生成这些特征以仅利用鉴别器。优化可能变得过于贪婪并且不会产生长期效益。在GAN中,过拟合受到严重伤害。为了避免这个问题,当任何真实图像的预测超过0.9(D(实际图像)> 0.9)时,我们会对鉴别器进行惩罚。这是通过将目标标签值设置为0.9而不是1.0来完成的。这是伪代码:

p = tf.placeholder(tf.float32, shape=[None, 10])
# Use 0.9 instead of 1.0.
feed_dict = {  p: [[0, 0, 0, 0.9, 0, 0, 0, 0, 0, 0]] # Image with label "3"}
# logits_real_image is the logits calculated by
# the discriminator for real images.
d_real_loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=p, logits=logits_real_image)

04

Historical averaging

此方法中,旨在对过去训练留下的t个参数求平均,以对当前模型的参数做正则。

对于使用非凸目标函数的GAN来说,历史平均可以使模型绕平衡点停止并充当阻尼力以收敛模型。(有点类似二阶优化方法)

05

使用标签

许多数据集都带有样本对象类型的标签。训练GAN已经很难了,因此,指导GAN训练的任何额外帮助都可以大大提高性能。将标签添加为潜在空间z的一部分有助于GAN训练。以下是CGAN中用于利用样本中标签的数据流。

06

损失函数

研究员们提出了很多的损失函数,见下图:

我们决定不在本文中详细介绍这些损失函数,详细的解释可以去参考相应论文。

以下是某些数据集中的一些FID分数(衡量图像质量,值越小越好)。这是一个参考点,但需要注意的是,对于哪些损失函数表现最佳还为时尚早。实际上,目前还没有单一的损失函数在所有不同数据集中表现最佳,所以,做实验的时候不妨多试几个损失函数,不要看网上传什么损失函数好就用哪个。

(MM GAN是原始论文中的GAN成本函数。NS GAN是解决同一篇论文中消失的渐变的替代损失函数。)

但是想训练好GAN,仍需要小心的去拟合和调参,在随意的更换损失函数之前,不妨先耐心地调调参。

07

一些小技巧

  • 将图像像素值缩放在-1和1之间。使用tanh作为生成器的输出层

  • 用高斯分布实验取样z

  • BN通常可以稳定训练

  • 使用PixelShuffle和转置卷积进行上采样

  • 避免最大化池用于下采样,使用带步长的卷积

  • Adam优化器通常比其他方法更好(在GAN中)

  • 在将图像输入鉴别器之前,将噪声添加到实际图像和生成的图像中

GAN模型的动态尚未得到很好的理解。所以一些提示只是建议,里程可能会有所不同。例如,LSGAN报告称RMSProp在他们的实验中有更稳定的训练,所以,调参很重要。

08

Virtual batch normalization (VBN)

BN成为许多深度网络设计中的必备项。BN的均值和方差来自当前的小批量。但是,它会在样本之间创建依赖关系,生成的图像不是彼此独立的。

下图的图像是训练失败的图像,也反映了在生成的图像显示同batch中的颜色色调相似。

最初,我们从随机分布中抽样z,为我们提供独立样本。但是,BN产生的偏差超过了z的随机性。

虚拟批量标准化(VBN)在训练之前对参考批次进行采样。在前向传递中,我们可以预先选择参考batch来计算BN的归一化参数(μ和σ)。但是,由于我们在整个训练中使用相同的batch,因此有可能使用此参考batch发生过拟合。为了缓解这种情况,我们可以将引用批处理与当前批处理相结合,以计算规范化参数。

09

随机种子(Random Seed)

用于初始化模型参数的随机种子影响GAN的性能。如下所示,测量GAN性能的FID分数在50次单独运行(训练)中有所不同。但是范围相对较小,可能仅在稍后的微调中完成。

10

Batch Normalization

DGCAN强烈建议将BN添加到网络设计中。BN的使用也成为许多深度网络模型的一般实践。但是,会有例外。下图演示了BN对不同数据集的影响。y轴是FID得分越低越好。正如WGAN-GP论文所建议的那样,BN最好不使用。我们建议读者检查BN上使用的损失函数和相应的FID性能,并通过实验验证来设置。

11

多重GAN

模式崩溃可能并不全是坏事。当模式崩溃时,图像的某些区域质量通常会提高。实际上,我们可能会为每种模式收集最佳模型,并使用它们来重建不同的图像模式(玄学调参)。

12

平衡生成器和判别器

判别器和生成器总是处博弈中以相互削弱。模式崩溃和梯度减小通常被解释为判别器和生成器之间的不平衡。我们可以通过关注平衡生成器和判别器之间的损耗来改进GAN。不幸的是,解决方案似乎难以捉摸。我们可以保持判别器和生成器上的梯度下降迭代次数之间的静态比率。即使这看起来很吸引人,但很多人怀疑它的好处。通常,我们保持一对一的比例。但是一些研究人员还测试了每个生成器更新的5个判别器迭代的比率。还提出了使用动态力学平衡两个网络。但直到最近几年,我们才对它有所了解。

另一方面,一些研究人员挑战平衡这些网络的可行性和可取性。一个训练有素的判别器无论如何都会给生成器提供高质量的反馈。而且,训练生成器总是赶上判别器并不容易。相反,我们可能会将注意力转向寻找在生成器性能不佳时不具有接近零梯度的损失函数。

13

生成器、判别器的容量

判别器的模型通常比生成器更复杂(更多的权重和更多的层),良好的判别器提供高质量的信息。在许多GAN应用中,我们可能遇到瓶颈,增加生成器容量(增加生成器的层数)显示没有质量改进。在我们确定瓶颈并解决它们之前,增加生成器容量似乎并不是调参的优先考虑项。

14

进一步阅读

本文中,我们没有对某一具体方向做深入的探讨,只是给出了一个大概的方向,GAN的训练仍是一个遗留问题,需要诸位亲自探究。

 

END

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

GAN--提升GAN训练的技巧汇总相关推荐

  1. 不服就GAN:GAN网络生成 cifar10 的图片实例(keras 详细实现步骤),GAN 的训练的各种技巧总结,GAN的注意事项和大坑汇总

    GAN 的调参技巧总结 生成器的最后一层不使用 sigmoid,使用 tanh 代替 使用噪声作为生成器的输入时,生成噪声的步骤使用 正态分布 的采样来产生,而不使用均匀分布 训练 discrimin ...

  2. 【GAN】GAN 也可以大幅压缩,来自MIT 韩松团队的最新研究!算力消耗不到1/9,现已开源!...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! GAN 也可以大幅压缩,MIT 韩松团队的最新研究让众多研究者们为之一振. 生成模 ...

  3. PyTorch训练加速技巧

    PyTorch训练加速技巧 由于最近的程序对速度要求比较高,想要快速出结果,因此特地学习了一下混合精度运算和并行化操作,由于已经有很多的文章介绍相关的原理,因此本篇只讲述如何应用PyTorch实现混合 ...

  4. 提升机器学习训练数据多样性,增加医学应用可训练数据量

    文 / Google Health 软件工程师 Timo Kohlberger 和 Yuan Liu 机器学习 (ML) 在医学成像方面的进步帮助医生可以给出更好的诊断,这在一定程度上得益于对详细标记 ...

  5. 移动平台WEB前端开发技巧汇总

    原名<移动平台3G手机网站前端开发布局技巧汇总>,由武方博整理的,让我们了解下移动设备上的WEB站点开发的基础知识,多些时间和精力去优化其他细节,我这里对原文的标签格式做了细微的调整,阅读 ...

  6. IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总

    IDA PRO 静态反汇编与OllyDbg动态调试实战技巧汇总 ********************************** 案例一: 使用IDA PRO+OllyDbg+PEview 追踪w ...

  7. 安卓和IOS推广技巧汇总,app安卓推广、ios推广aso优化

    现在很多产品都把时间和精力柚鸥在需求调研和产品研发上,却没有花时间去观察产品推广下的数据和用户反馈. 客观原因光在公司内部的需求任何就已经非常多了,产品经理难以顾及外部需求.同时还有许多产品还不知道在 ...

  8. 管理类联考•逻辑——解题技巧汇总

    管理类联考•逻辑--解题技巧汇总 第一部分 形式逻辑 第1章 复言命题 母题1 充分与必要 充分条件 A是B的充分条件,记作A→B,读作"A推B",是指假如事件A发生了,事件B一定 ...

  9. 弘辽科技:淘宝直通车出价的技巧汇总

    原标题<弘辽科技:淘宝直通车出价的技巧汇总> 在淘宝卖家日常的直通车推广中,出价影响着店铺商品的展现量,盲目的投放推广只会无形中增加我们的推广预算,很多商家都会忽视这个点.其次,让很多商家 ...

最新文章

  1. python便捷数据怎么获取_Python数据获取与表示基础编程练习
  2. SAP MM 物料库存转固定资产,报错:You cannot post to asset in company code 1900 fiscal year 2021
  3. 【BZOJ-1858】序列操作 线段树
  4. log4j 2.x 架构
  5. C++实现字符串的拼接
  6. salesforce 零基础学习(五十四)常见异常友好消息提示
  7. Integer缓存池
  8. BZOJ 1283 费用流
  9. Android开发里的自定义View的实现
  10. 编程基本功:不要患上词汇匮乏症
  11. Log4j.properties配置文件详解
  12. Code Review : Review Board + Svn
  13. eclipse设置背景色为豆沙绿
  14. python获取word页数_用程序获取word页码方法汇总
  15. linux 网站服务器优化 web server优化
  16. Java程序从编写到运行
  17. go 切片排序以及转为带间隔符的字符串
  18. 《OSPF和IS-IS详解》一1.7 独立且平等
  19. 不懂技术,自己如何做网站?
  20. linux 网络使用log,linux 网络命令last、lastlog、traceroute、netstat

热门文章

  1. ELECTRA:超越BERT,2019年最佳NLP预训练模型
  2. AI一分钟|特斯拉宣布裁员9%;Facebook启动隐私设计实验室;百度Apollo与宝马拜腾联姻...
  3. AI人才报告 | AI稳超互联网平均薪资,哪些细分领域最受追捧?
  4. 面试官:Java 到底是值传递还是引用传递?
  5. 大龄读博那几年,与君共勉
  6. ​机器学习中必要的数学基础!
  7. Science首发奥密克戎突刺蛋白分子水平分析,揭秘2大传染性增强原因,柳叶刀:全球大流行有望3月结束...
  8. 北大联合UCLA发表论文:9头以上Transformer就能模拟CNN!
  9. 哈工大导师禁止实验室硕士出去实习,称「实习就像和35岁渣男试婚」,你怎么看?...
  10. 深度学习检测小目标常用方法