作者:知乎—Curry

地址:https://www.zhihu.com/people/curry-5-28

一:白话GAN

本文尽量用少量的公式,浅显的语言来描述生成对抗网络,让未接触过GAN的人可以有个初步的认识,并且从理论和实现的角度初步分析了GAN网络来解决小样本问题的可能性,欢迎各位补充交流。

生成对抗网络Generative adversarial network, GAN,在14年被Goodfellow等提出后即热度不断,基于GAN的新模型论文更是层数不穷,有人将能叫得出名字的GAN模型都整理在了github上the-gan-zoo,比如常见的ACGAN、BiGAN、BEGAN、f-GANs、DCGAN、INFOGAN、SNGAN、WGAN等等。但由于模型数量众多,缩写的几乎都被占用了,导致新的GAN模型名字采用希腊字母命名,比如:α-GAN、β-GAN、Δ-GAN等等,足见GAN领域的火热。在今年CVPR2020 已经发现的GAN论文就已经接近50篇,可以看出GAN依旧是AI界的宠儿。

1)首先理解什么是生成对抗网络GAN?

生成对抗网络中的生成表示生成模型,这里表示给定一组随机数,根据随机数来生成服从训练数据分布的数据;对抗表示GAN中的生成器(Generator)和判别器(Discriminator)来往的博弈,最终达到纳什平衡;网络顾名思义指神经网络,这里的生成器和判别器都是利用神经网络来实现功能的。

纳什平衡(Nash equilibrium),又称为非合作博弈均衡,是博弈论的一个重要术语。
同样是生成模型,GAN与传统的概率生成模型马尔可夫随机场、贝叶斯网络等有何不同?答:传统概率生成模型要定义一个概率分布表达式P(X),通常是多变量联合密度分布函数,并基于此做最大似然估计,中间过程涉及到计算大量条件概率、边缘概率计算等,当变量数量增加,计算难度也随之增加;而GAN在描述概率生成模型时,并不对概率密度函数P(X)直接建模,而通过制造样本X来间接体现分布P(X)。注:此处部分描述来自《百面机器学习》

2)其次明白生成对抗网络GAN能做什么?

要想了解GAN,我们要明白其存在的意义,要解决什么样的问题。在一篇文章中看到这样一句话:如果神经网络不能生成图像,就不能算得上真正理解了图像。个人觉得这句话很有道理,最开始GAN也就是为能够生成图像这个目的而诞生的,随着发展,GAN的应用也越来越广泛,如:图像转换(修复、翻译、混合、产分辨率)、文字-图片转化、语义图像-图片转化、图像编辑、甚至3D打印等等。

3)接下来搞懂GAN是如何生成图像的?

首先我们手上有一定量的数据,我们称之为真实数据,真实数据会存在一个分布,比如:如高斯分布,均匀分布,或者更为复杂的分布形式,那么GAN的目的是通过生成器来生成一批与真实分布接近的数据。在我们的处理中,这个生成器趋向于使用神经网络,因为它能表示更为复杂的数据分布情况,生成器的输入通常是随机噪声。我们用θ来表示生成器神经网络的参数,我们的目标也就成了寻找最优参数θ*,使得目标分布和实际分布差异的最小化,即最小化生成器的损失。但是实际上我们没办法直接计算目标分布和实际分布的相似度,在这里便引入了判别器来计算两个分布的相似度(注意不是差异),同样的判别器也使用神经网络来搭建。

Gan的基本结构如下图所示:

Gan的基本结构图

其中,Random noise为随机噪声,Generator为生成器,Discriminator为判别器,Trainset为真实数据和生成器输出的fake Image一起做为判别器的输入,Real 和 Fake为判别器判定的结果。生成器的目标是生成判别器识别不出来Real or Fake的的图片,即使生成的图片尽量逼真;判别器的目标是尽可能的实现对真假图片的正确区分,理想情况下,即随着博弈进行,生成器和判别器都越来越完美,生成的图片也就越符合我们的需求。

生成器和判别器损失函数的代码形式如下(代码链接:https://github.com/eriklindernoren/PyTorch-GAN/tree/master/implementations/gan):

valid = Variable(Tensor(imgs.size(0), 1).fill_(1.0), requires_grad=False)fake = Variable(Tensor(imgs.size(0), 1).fill_(0.0), requires_grad=False)adversarial_loss = torch.nn.BCELoss()#生成损失Fake_imgs = generator(z)g_loss = adversarial_loss(discriminator(gen_imgs), valid)#判别损失real_loss = adversarial_loss(discriminator(real_imgs), valid)fake_loss = adversarial_loss(discriminator(gen_imgs.detach()), fake)d_loss = (real_loss + fake_loss) / 2

关于GAN背后的数学理论在此不做赘述,具体可参见:

https://zhuanlan.zhihu.com/p/54096381

4)最后讨论GAN训练中存在的问题?在GAN虽然很强大,但实现起来并不是我们想象的那么完美,训练过程中存在以下问题:

  • 首先,在实际训练过程中,由于生成器的输入是随机噪声,且早期生成器的能力比较差,使得生成的样本很容易被判别器识别,这就使得判别器回传给生成器的梯度很小,达不到训练的目的,这个现象称为优化饱和;
  • 此外,早期的GAN使用JS距离来度量生成数据分布和真实数据分布,但是在实际实验中发现生成器很不稳定,原理参见,导致反复生成一些同近或相同的图片,生成器和判别器陷入了一种自我欺骗的模式,导致生成的样本多样性差,这种情况为模式崩塌(Collapse Mode)。

随着GAN的发展,上面两种训练中存在的典型问题通过改进损失函数以及数据分布的度量方式等等,都有了很大的改善。

二:GAN用于解决小样本问题的探讨

小样本相关内容可以关注知乎专栏进行了解:小样本学习方法(FSL):https://www.zhihu.com/people/curry-5-28/columns在神经网络的实际使用过程中,我们经常要面对数据采集成本高,数据量少,以及获得的数据经常呈现长尾趋势等问题。随着GAN在AI领域居高不下的热度,人们自然而然的想使用GAN来生成一些以假乱真的样本用以扩充我们的样本集,从而解决小样本、long-tail等问题,但是面对样本数量有限的情况,利用GAN进行样本扩充真的有效果吗?从GAN的原理以及实际应用的角度出发探讨下可能性:1:上面提到过,GAN生成数据是从数据分布的角度来进行的,生成的是一个和真实数据分布相似的数据分布,先不说小样本情况下GAN网络训练的难度,当真实数据本少较少时,这个分布情况大概率也是不理想的,基于一个差的数据分布进行样本生成,生成的东西可能会不忍直视;2:GAN网络本身是一种吃数据的神经网络,也是需要足够的数据来支持网络训练收敛的,在数据量较少的情况下,则难以达到一个满意的纳什平衡,并且很容易陷入模式崩塌,一旦如此,生成的样本量虽然有了扩充,但是对于样本多样性并无明显帮助,近似于对样本简单的复制,对我们下游神经网络来说,会导致模型有偏,同时在划分训练、验证、测试集时,还会出现我们不愿意看到的数据泄露情况发生;3:当数据量较大时,对于我们下游神经网络而言,不在需要GAN扩充样本的情况下,也可以很好的支持网络训练,相比于使用GAN,还不如利用简单的数据增强方式(缩放、旋转、加噪声、遮挡等)来扩充样本量来的容易;当数据中等时,利用GAN进行生成样本,来扩充数据集,似乎可以有助于下游神经网络的训练收敛。总结:GAN是基真实数据分布来进行实现的,从原理以及实现的角度来看,利用GAN来解决小样本问题似乎机会渺茫,但并不完全否定,这也与我们面对的实际问题密切相关。以上内容仅代表个人观点,欢迎交流。

历史文章推荐

  • 太牛逼了!一位中国博士把整个CNN都给可视化了,每个细节看的清清楚楚!

  • Nature发表牛津博士建议:我希望在读博士之初时就能知道的20件事

  • 沈向洋、华刚:读科研论文的三个层次、四个阶段与十个问题

  • 如何看待2021年秋招算法岗灰飞烟灭?

  • 独家解读 | ExprGAN:基于强度可控的表情编辑

  • 独家解读 | 矩阵视角下的BP算法

  • 独家解读 | Capsule Network深度解读

  • 独家解读 | Fisher信息度量下的对抗攻击

  • 论文解读 | 知识图谱最新研究综述

  • 你的毕业论文过了吗?《如何撰写毕业论文?》

  • 卡尔曼滤波系列——经典卡尔曼滤波推导

  • 一代传奇 SIFT 算法 专利到期!

  • 人体姿态估计的过去,现在,未来

  • 2018-2019年度 Top10 综述

  • 给研究新生的建议,光看论文是学不好的,一定要看书,看书,看书!

分享、点赞、在看,给个三连击呗!

gan 总结 数据增强_白话GAN及其解决小样本问题的探讨相关推荐

  1. gan 总结 数据增强_吴恩达Deeplearning.ai国庆上新:GAN专项课程

    Coursera 刚刚上新了 GAN 的专项课程,或许在这个国庆假期,你应该学习一波了. 作者:蛋酱 生成对抗网络(Generative Adversarial Network,GAN)是当前功能最强 ...

  2. gan 总结 数据增强_[NLP]聊一聊,预处理和数据增强技术

    在基于margin-loss的句子相似度这个项目中,为了验证想法,找不到开放数据集,因此自己从新浪爱问爬取了数据.自己爬的数据和学界开放的数据对比,数据显得非常脏.这里有三个含义:第一:数据不规范,比 ...

  3. gan 总结 数据增强_深度学习中的数据增强(下)

    言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...

  4. cut out数据增强_常见的数据增强项目和论文介绍

    在机器学习项目中,数据集对算法模型的性能是有很大的影响的,特别是现在深度学习,对于数据集的要求就更高了,经常我们都可能会遇到数据集数量太少的情况,这时候除了再人工搜集新的数据,另外一个做法就是数据增强 ...

  5. nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集

    nlp文本数据增强 Natural Language Processing (NLP) is one of the most important fields of study and researc ...

  6. 数据增强_浅析数据增强

    与计算机视觉中使用图像进行数据增强不同,NLP中文本数据增强是非常罕见的.这是因为图像的一些简单操作,如将图像旋转或将其转换为灰度,并不会改变其语义.语义不变变换的存在使增强成为计算机视觉研究中 举个 ...

  7. python 图片数据增强_数据增强之批量修改图像尺寸大小(附Python实现)

    2019 is a new start! 很久没有更啦~希望不要懒惰.(虽然不努力真滴很舒服诶) 今天就来说一下之前在处理图片时候用到的一些知识. 数据增强 在接触Alexnet网络结构模型的时候,第 ...

  8. cut out数据增强_数据增强:Mixup,Cutout,CutMix | Mosaic

    1.几种数据增强的比较 Mixup:将随机的两张样本按比例混合,分类的结果按比例分配: Cutout:随机的将样本中的部分区域cut掉,并且填充0像素值,分类的结果不变: CutMix:就是将一部分区 ...

  9. cut out数据增强_谷歌大脑提出自动数据增强方法AutoAugment:可迁移至不同数据集...

    近日,来自谷歌大脑的研究者在 arXiv 上发表论文,提出一种自动搜索合适数据增强策略的方法 AutoAugment,该方法创建一个数据增强策略的搜索空间,利用搜索算法选取适合特定数据集的数据增强策略 ...

最新文章

  1. python官网 中文版 新闻-他说,懂中文就能学会Python,但需要这个工具
  2. nginx中的数组结构ngx_array_t
  3. Qt5.5.1移植到freescale imx6
  4. 深度学习的batch_size
  5. mysql数据库小系统_Mysql数据库基础小实例 学员管理系统菜单
  6. VTK:图表之EdgeListIterator
  7. 软件工程学习笔记《二》代码规范
  8. Number Sequence (KMP的应用)
  9. 线程池的各种使用场景
  10. 程序—java年月日转换
  11. 强化学习组队学习task01——基础
  12. python—csv模块处理单字符分隔符文件
  13. PHP实现倒计时插件代码
  14. win10专业版opnet安装及vs2010环境变量配置
  15. 搜索引擎优化的基本内容和方法
  16. OSG 集群渲染 cluster render 支持 Cave 和 powerwall 模式
  17. 基于ZYNQ的开源CANopen协议栈CANFestival移植
  18. Redis——有时候expire比exists更好用
  19. 堪称神级的Java技术栈手册火了!
  20. 真相的监控依赖 让监控规制更加凸显

热门文章

  1. 实战:基于OpenCV的人眼检测
  2. 推荐搜索系统论文干货集锦
  3. 计算机视觉训练模型效果不佳怎么破?
  4. 2018-2019-1 20165318 20165322 20165326 实验四 外设驱动程序设计
  5. LiFi会将大数据和物联网带到新高度吗?
  6. Python——eventlet.websocket
  7. 30道linux面试题与答案(21-30)
  8. vs发布免安装文件_戒掉PC,免pc开发,cloud ide and debug设想
  9. 假期怎么提升Python技能?100+编程题给你练~
  10. python程序员总结的一些基本语法