作者 | 小米粥

编辑 | 言有三

1. 模式崩溃的原因

当模式崩溃发生时,生成器 G(z)往往会把很多不同的z均映射成某个x,(更确切地说,指x以及其附近的点,用A表示),接下来更新判别器D(x)后,判别器会很快发现这个病态的mode A从而降低了对这个mode A的信任程度(信任程度即该样本点来源于训练数据集的概率),而信任mode B,那么生成器就会把很多不同的z均映射成x',其中x'及其附近的点表示一个新的mode B,如下图所示。接着,判别器发现这个新的的病态mode B.....

生成器和判别器陷入这样没有意义的循环。我们梳理一下上面的环节,首先生成器 G(z)把很多不同的z均映射成某个x,而不是将部分z映射到mode A,部分z映射到mode B,但这不应该引起担忧,因为可以训练判别器来识别这个不好的mode A再改进G(z)即可;接着,训练判别器环节也没有问题,实践中甚至担忧判别器训练得过好了而产生梯度消失;那么问题应该出在最后一步:生成器把生成样本全部都转移放置到新的mode B下!显然,生成器的改进是“过分”的,理想上生成器应该将部分生成样本都转移放置到 mode B下,保留部分生成样本在mode A下,如下图所示。

其实这并不奇怪,因为在训练生成器时,目标函数为:

其过程为:生成器G(z)生成m个样本{x1,x2,...,xi,...,xm},然后将m个x分别独立送给判别器D(x)判定获得梯度信息。在上面的例子中,由于判别器不信任mode A而非常信任mode B,故对于任意生成样本x,判别器都将指引其接近mode B:G(z)→B,也就是说对于任意x,判别器传递给生成器G(z)得到的梯度的方向是相同的,生成器按着该梯度方向更新参数极易把所有的生成样本转移到mode B下。

2.mini-batch discriminator

根据第一节的讨论,认为原因还是出现在判别器上,因为判别器每次只能独立处理一个样本,生成器在每个样本上获得的梯度信息缺乏“统一协调”,都指向了同一个方向,而且也不存在任何机制要求生成器的输出结果彼此有较大差异。

小批量判别器给出的解决方案是:让判别器不再独立考虑一个样本,而是同时考虑一个小批量的所有样本。具体办法如下:对于一个小批量的每个样本{x1,x2,...,xi,...,xm},将判别器的某个中间层f(xi)的结果引出,其为一n维向量,将该向量与一个可学习的n x p x q维张量T相乘,得到样本xi的p x q维的特征矩阵Mi,可视为得到了p个q维特征。

接着,计算每一个样本xi与小批量中其他样本的第r个特征的差异和:

其中,Mi,r表示矩阵Mi的第r行,并使用L1范数表示两个向量的差异。

那么每个样本都将会计算得到一个对应的向量:

最后将o(xi)也接引出的中间层的下一层L+1即可,也就是说在原来判别器L层的基础上加了一个mini-batch层,其输入是f(xi),而输出是o(xi),中间还包含一个可学习参数T。相比较,原始的判别器要求给出样本来源于训练数据集的概率,而小批量判别器的任务仍然是输出样本来源于训练数据集的概率,只不过它能力更强,因为它能利用批量样本中的其他样本作为附加信息。

还是在第一节的例子中,使用小批量判别器,当发生模式崩溃的生成器需要更新时,G(z)先生成一个批量的样本{G(z1),G(z2),...G(zm)},由于这些样本都在mode A下,则计算得到的mini-batch层结果必然与训练数据集的计算得到的mini-batch层结果有很大差异,捕捉到的差异信息会使小批量判别器D(G(zi))值不会太低,小批量判别器不会简单地认为对所有样本给出相同的梯度方向。

3. 一个简化版本

在Progressive GAN中,给出了一个简化版本的小批量判别器,其思想与上述相同,只是计算方式比较简单,对于判别器的输入样本{x1,x2,...,xm},抽取某中间层作为n维特征有{f(x1),f(x2),...,f(xm)},计算每个维度的标准差并求均值,即:

其中

最后将o作为特征图与中间层的输出拼接到一起。Progressive GAN的小批量判别器中不含有需要学习的参数,而是直接计算批量样本的统计特征,更为简洁。

[1]Tim Salimans , et al. Improved Techniques for Training GANs. 2016.

[2]Karras, Tero, Aila, Timo, Laine, Samuli,等. Progressive Growing of GANs for Improved Quality, Stability, and Variation[J].

总结

今天首先将说明模式崩溃问题的本质,分析了产生模式崩溃的原因,并针对该问题给出了小批量判别器技巧,并在最后给出了一个更简单的版本。

「GAN优化」小批量判别器如何解决模式崩溃问题相关推荐

  1. 【GAN优化】小批量判别器如何解决模式崩溃问题

    GAN的第二季开始更新了,还是熟悉的配方,还是熟悉的味道.第一季更新了12篇小文,只解读了GAN的冰山一角,第二季将作为第一季的"零零星星"的补充,讲解包括其他的损失函数.训练算法 ...

  2. 「GAN优化」如何学会以正确的姿势定量评价你的GAN

    作者 | 小米粥 编辑 | 言有三 在机器学习中,训练完成的模型要在测试集上进行性能测试,然后使用一个可以量化的指标来表明模型训练的好坏,例如最简单的,使用分类准确率评价分类模型的性能,使用均方误差评 ...

  3. 三星oneui主屏幕费电_都 9012 年了,三星系统还「负优化」吗?

    近日,三星正式向国内 Galaxy S9 系列.Note9 系列推送了 Android 9 正式版.此次除了系统版本的重大升级外,三星还为用户带来全新设计的用户界面:One UI. 在宣传中,三星称 ...

  4. 「极点日历」小程序插件

    上期,我们在<「wxParser」小程序插件>一文中介绍了知晓云团队出品的「wxParser」小程序插件,对其意义.作用以及应用作出了说明.而在此之前,我们还介绍过「腾讯地图」.「腾讯视频 ...

  5. 「Excel技巧」Excel批量提取当前工作簿下的所有工作表名称

    摘自:「Excel技巧」Excel批量提取当前工作簿下的所有工作表名称 (baidu.com) 一个工作簿里有很多工作表,想要提取当前工作簿的所有工作表名称,你会怎么操作? 过去的我,可能会一个个手动 ...

  6. 【DIY】FFmpeg Joiner – 多段视频「无损合并」小工具 [Windows]

    http://subscribe.mail.10086.cn/subscribe/readAll.do?columnId=280&itemId=6082779 FFmpeg Joiner – ...

  7. 【GAN优化】解决模式崩溃的两条思路:改进优化和网络架构

    今天讲述的内容仍然是GAN中的模式崩溃问题,首先将说明模式崩溃问题的本质,并介绍两种解决模式崩溃问题的思路,然后将介绍一种简单而有效的解决方案MAD-GAN,最后一部分将给出MAD-GAN的强化版本M ...

  8. 「性能优化」首屏时间从12.67s到1.06s,我是如何做到的?

    --本文是对之前同名文章的修正,将所有webpack3的内容更新为webpack4,以及加入了笔者近期在公司工作中学习到的自动化思想,对文章内容作了进一步提升. 0.引言 作为互联网项目,最重要的便是 ...

  9. Yoshua Bengio团队通过在网络「隐藏空间」中使用降噪器以提高深度神经网络的「鲁棒性」...

    原文来源:arXiv 作者:Alex Lamb.Jonathan Binas.Anirudh Goyal.Dmitriy Serdyuk.Sandeep Subramanian.Ioannis Mit ...

最新文章

  1. python引用numpy出错_引用numpy出错详解及解决方法
  2. 存储虚拟化之带内设备与基于存储控制器的虚拟化
  3. HDFS多用户管理ACL机制other权限访问控制的理解
  4. 救援模式下更改用户密码
  5. 老王讲设计模式(一)——策略模式
  6. Android P Beta!您想要知道的所有更新内容都在这里
  7. html盒子中盒子排列,解析CSS的box model盒模型及其内的子元素布局控制
  8. python web环境傻瓜搭建_工具赋能Python环境搭建
  9. 【校招VIP】测试脚本语言之系统状态(内存、网络)
  10. SpringBoot文件上传文件大小限制The field file exceeds its maximum permitted size of 1048576 bytes.
  11. [noip2011]铺地毯(carpet)解题报告
  12. BUUCTF持续更新中
  13. 微信聊天记录删除了怎么恢复?最简单快捷的恢复方式看这里
  14. 启动电脑时出现0xc000000f错误的解决办法
  15. UI设计教程分享:PS故障风海报制作教程
  16. Linux-Samba文件共享服务
  17. 江西自考 计算机及应用,江西自考专科本科计算机抵免政策解读
  18. ## 大一java课程设计_航班查询系统(我是小白)
  19. DL4J的神经网络输入处理DataSet介绍
  20. tkinter之字体(无废话的那种)

热门文章

  1. 当了十年 IT 程序员,我转型做自动驾驶开发的这五年”_《新程序员》编辑部的博客-CSDN博客
  2. Python 字符串前面加u,r,b的含义
  3. Transformers包tokenizer.encode()方法源码阅读笔记
  4. Attention机制总结 看明白了的
  5. JAXB 转 XML乱码
  6. AI 创业周报第4期:AI芯片创企重磅发力,左手医生完成亿元 B 轮融资
  7. 线上会议丨中国中文信息学会2020学术年会将于12月27日举行
  8. 裁员大潮来袭,程序员面试的这些技巧收藏好!
  9. Coda, 去中心化的简洁(succint)的可拓展的加密货币
  10. 安装Anaconda创建虚拟环境以及在pycharm中使用虚拟环境