目录

初识GANs的秘密(MinMax游戏,值函数,JS距离,概率生成模型,优化饱和)

WGAN:抓住低维的幽灵(Collapse Mode坍缩, Wasserstein距离,1-Lipschitz函数)

DCGAN:当GANs遇上卷积

ALI:包揽推断业务

IRGAN:生成离散样本

SeqGAN:生成样本序列


初识GANs的秘密(MinMax游戏,值函数,JS距离,概率生成模型,优化饱和)

1. 简述GANs的基本思想和训练过程(1)

GANs的框架如下图,包括生成器(generator)和判别器(discriminator)两个部分。其中生成器用来合成“假”样本,判别器用于判断输入的样本是真实的还是合成的。具体来说,生成器从先验分布中采得随机信号,经过神经网络的变换,得到模拟样本;判别器既接收来自生成器的模拟样本,也接收来自实际数据集的真实样本,但我们并不告诉判别器样本来源,需要它自己判断。

生成器和判别器是一对“冤家’,置身于对抗环境中,生成器尽可能造出样本迷惑判别器,而判别器则尽可能识别出来自生成器的样本。然而,对抗不是目的,在对抗中让双方能力各高所长才是目的。 理想情况下,生成器和判别器最终能达到一种平衡,双方都臻于完美,彼此都没有更进一步的空间。

GANs具体训练时候采用生成器和判别器交替优化的方式。

当训练判别器时,先固定生成器,然后利用生成器随机模拟产生负样本,并从真实数据集中采样获得正样本,将这些正负样本送入判别器中,根据判别器的输出和样本标签来计算误差,利用误差反向传播算法来更新判别器的参数,如图13.2。

当训练生成器时,先固定判别器,然后利用当前生成器随机模拟产生样本,并输入到判别器中,根据判别器和样本标签来计算误差,最后利用反向传播算法来更新生成器的参数,如图13.3。

2. GANs的值函数(3)

GANs时一个双人MiniMax游戏,请给出游戏的值函数。理想情况下游戏最终会达到一个纳什均衡点,此时记生成器为G*,判别器为D*请给出此时的解(G*,D*),以及对应的值函数的取值。未达到均衡点时,将生成器G固定,寻找当下最优的判别器,请给出判别器和此时的值函数。

3. GANs如何避开大量概率推断计算?(2)

发明 GANs 的初衷是为了更好地解决概率生成模型的估计问题。传统概率生成模型方法(如:马尔可夫随机场、贝叶斯网络)会涉及大量难以完成的概率推断计算, GANs 是如何避开这类计算的?

传统概率生成模型要定义一个概率分布表达式 P(X) ,通常是一个多变量联合概率分布的密度函数p(X1,X2, ... ,XN),并基于此做最大似然估计,这过程少不了概率推断计算,比如边缘概率P(X i),条件概率以及作分母的Partition Function等。当随机变量很多时,概率模型会变得十分复杂,概率计算变得非常困难,即使做近似计算,效果常不尽人意。GANs 在刻画概率生成模型时,并不对概率密度函数p(X) 直接建模,而是通过制造样本 x,间接体现出分布p(X),就是说我们看不到 p(X) 的一个表达式。

4. GANs在实际训练中会遇到什么问题?(4)

在实际训练中,早期阶段生成器 G 很差,生成的模拟样本很容易被判别器D识别,使得 D 回传给 G 的梯度极其小,达不到训练目的,这个现象称为优化饱和。

解决方案:改变了优化函数,使其在形式上有一个负号的差别,两者在最优时解相同。

WGAN:抓住低维的幽灵(Collapse Mode坍缩, Wasserstein距离,1-Lipschitz函数)

1. GANs的陷阱:原GANs中存在的哪些问题制约模型训练效果?(3)

GANs 的判别器试图区分真实样本和生成的模拟样本。 Goodfellow在论文中指出,训练判别器,是在度量生成器分布和真实数据分布的JS 距离,训练生成器,是在减小这个 JS 距离。即使我们不清楚形成真实数据的背后机制,还是可以用一个模拟生成过程去替代之,只要它们的数据分布一致。

实验中发现,训练好生成器时一件困难的事,生成器很不稳定,常出现坍缩模式。什么时坍缩模式?拿图片举例,反复生成一些相近或相同的图片,多样性太差。生成器似乎将图片记下,没有泛化,更没有造新图的能力。

为什么会这样?既然训练生成器基于JS距离,猜测问题根源可能与JS距离有关。高维空间中不是每点都能表达一个样本(如一张图片),空间大部分时多余的,真实数据蜷缩在低维子空间的流行(即高维曲面)上,因为维度低,所占空间体积几乎为零,就像一张及其薄的纸飘在三维空间,不仔细看很难发现。考虑生成器分布与真实数据分布的 JS 距离,即两个 KL 距离的平均:

初始的生成器,由于参数随机初始化,与其说是一个样本生成器,不如说是高维空间点的生成器,点广泛分布在高维空间中。打个比万,生成器将一张大网布满整个空间, “兵力”有限,网布得越大,每个点附近的兵力就越少。想象一下,当这张网穿过低维子空间时,可看见的“兵”几乎为零,这片子空间成了一个“盲区“,如果真实数据全部分布在这,它们就对生成器”隐身“了,成了”漏网之鱼:。

2. 破解武器:WGAN针对前面问题做了哪些改进?什么是Wasserstein距离?(4)

直觉告诉我们不要让生成器在高维空间傻傻地布网,让它直接到低维空间 “抓”真实数据。 道理虽然是这样,但是在高维空间中藏着无数的低维子空间,如何找到目标子空间呢?站在大厦顶层,环眺四周,你可以迅速定位远处的山峦和高塔,却很难知晓一个个楼宇间办公室里的事情。你需要线索,而不是简单撒网。处在高维空间,对抗隐秘的低维空间,不能再用粗暴简陋的方法,需要有特殊武器,这就是 Wasserstein 距离,也称推土机距离( Earth Mover distance )

此处略去一些内容

为什么 Wasserstein 距离能克服 JS 距离解决不了的问题?理论上的解释很复杂,需要证明当生成器分布随参数θ变化而连续变化时,生成器分布与真实分布的 Wasserstein 距离也随 θ 变化而连续变化,并且几乎处处可导,而 JS距离不保证随θ变化而连续变化。

通俗的解释,接着“布网” 的比喻,现在生成器不再“布网“,改成”定位追踪“了,不管真实分布藏在哪个低维子空间里,生成器都能感知它在哪,因为生成器只要将自身分布稍做变化,就会改变它到真实分布的推土机距离;而 JS 距离是不敏感的,无论生成器怎么变化,JS 距离都是一个常数。因此,使用推土机距离,能有效锁定低维子空间中的真实数据分布。

3. WGAN之道:怎样具体应用Wasserstein距离实现WGAN算法?(5)

推土机的公式太难求解,借助Wasserstein距离的对偶式实现WGAN算法

DCGAN:当GANs遇上卷积

1. 在生成器和判别器中应该怎样设计深层卷积结构?(3)

为了生成高分辨率的优质图片,我们准备在GANs框架嵌入多层卷积神经网络。但是,一般的卷积结构达不到我们的期待。

生成器

生成器生成图片,可以看成图片分类的一个逆过程。图片分类器的输入是一张图片,输出是一个类别,图片生成器的输出是一张图片,但它的输入是什么呢?输入通常由一个随机向量,如高斯分布产生的100 维随机向量。这个随机向量有什么含义?在深度神经网络的黑盒子里,我们无从知道。 但是我们可以确定 100 维随机向量对比-张128× 128 小图片(扁平化后是 16384 维)是一个极低维的向量。

用随机向量的每维刻画不同的细节,然后生成一张图片。随机向量不含像素级别的位置信息,但是对于图片,每个像素都有它的位置,点构成了线,线组成了面,进而描绘出物体的形状。 如果这些位置信息不是从随机向量中产生,那么就应出自生成器的特殊网络结构。

那么,卷积神经网络能体现位置信息吗?最初设计卷积神经网络时,引入了感受野的概念,捕捉图片邻近区域的特征,只有位置靠近的像素点才能被感受野一次捕捉到。传统多层卷积结构中,越靠近输入端,包含的位置信息越明显,随着层层深入,感受野涵盖的区域扩大,过于细节的位置信息丢失,留下高级语义信息,更好地反映图片的类别。经典的卷积神经网络只是捕捉或识别位置信息,不负责产生位置信息,位置信息来源于输入的图片,当它们不能再放反映图片的高级语义(如类别)时,就会在逐层计算中被丢掉。

因此,从随机向量造出图片,要在造的过程中产生位置信息。这个生成过程需符合以下两点原则。

1)保证信息在逐层计算中逐渐增多。

2)不损失位置信息,并不断产生更细节的位置信息。

文献[37]给出了一套具体的做法

1)去掉-切会丢掉位置信息的结构,如池化层。因为这是一个降采样的过程,通过丢失细节信息来保留高级语义。

2)使用分数步进卷积层(类似反卷积)

3)去掉最后的全连接层。通常 CNN 最后接全连接层,是为了综合各维度做非线性变换,应对图片分类的目标。这里的任务是生成图片,用全连接层不仅没必要,还会打乱多层卷职建立的空间结构。

4)批量归一化和ReLU激活函数。生成模型越深,越需要 Batchnorm 层,否则训练不充分,极易出现模型坍塌问题,总生成相同的图片样本。 另外,为了避免梯度饱和,让学习更稳定,内部使用 ReLU 激活函数,只在图片输出层用Tanh激活函数。

判别器

判别器鉴别生成图片和实际图片。这是-个典型的图片分类任务,但是又不同于一般的图片分类。 真品和赝品的区别,往往是细节上的差异,而不是宏观层面的语义差异。判别器的多层卷积网络,依然抛弃池化层,将它替换成步长大于1的卷积层,虽然也是一个降采样的过程,但是没有池化层那样粗放。 判别器的最后一层不接全连接层,扁平化处理后直接送给 Sigmoid 输出层,最大限度地留住位置细节。另外,判别器的内部激活函数使用 LReLU,也是要最大限度地留住前层信息。判别器也用到 Batchnorm 层。

[37] Radford A, Metz L, Chintala S. Unsupervised representation learning with deep

convolutional generative adversarial networks[J]. Computer Science, 2015

ALI:包揽推断业务

1. 生成网络和推断网络的融合

请问如何把一个生成网络和一个推断网络融合在 GANs 框架下,借助来自判别器的指导,不仅让模拟样本的分布尽量逼近真实分布,而且让模拟样本的隐空间表示与真实样本的隐空间表示在分布上也尽量接近。

IRGAN:生成离散样本

Goodfellow在Reddit论坛上有一篇发表的帖子,大意是说,最初设计 GANs 是用来生成实值数据的,生成器输出一个实数向量。这样,判别器对实数向量每维都产生一个梯度,用作对模型参数的微小更新,持续的微小更新使得量变引起质变,最终达到一个非常好的解。可是,如果生成器输出离散数据,诸如:搜索引擎返回的链接,电商网站推荐的手机,那么梯度产生的微小更新就被打破了,因为离散样本的变化不是连续而是跳跃的。举个例子,灯光亮度是一种连续型数据,可以说把灯光调亮一些,也可以说把灯光调亮一点,还可以说把灯光调亮一点点,这都可操作;但是,从买苹果转到买橙子,你不能说买橙子一些,一点或者一点点。将 GANs用来生成离散数据,是一件简单的事情,但是生活中很多时候,我们遇到的就是各型各色的离散型数据。

1. 用GAN产生负样本(5)

SeqGAN:生成样本序列

1. 如何构建生成器,生成文字组成的序列来表示句子?(2)

2. 训练序列生成器的优化目标通常是什么?GANs框架下有何不同?(5)

3. 有了生成器的优化目标,怎样求解它对生成器参数的梯度?(5)

后记

从开始接触《百面机器学习》,当把全部章节看完,觉得这本书写的特别深入浅出,把很多机器学习的基础知识给串联起来了,虽然用电子书阅读完毕,仍然忍不住入手纸质版书本,好书就需要多看!

百面系列链接:

百面机器学习(2)——模型评估

百面机器学习(3)——经典算法

百面机器学习(4)——降维

百面机器学习(5)——非监督学习

百面机器学习(6)——概率图模型

百面机器学习(7)——优化算法

百面机器学习(8)——采样

百面机器学习(9)——前向神经网络

百面机器学习(10)——循环神经网络

百面机器学习(11)——强化学习

百面机器学习(12)——集成学习

百面机器学习(13)——生成式对抗网络

百面机器学习(13)——生成式对抗网络相关推荐

  1. 【学习笔记】李宏毅2021春机器学习课程第6.1节:生成式对抗网络 GAN(一)

    文章目录 1 能够作为生成器的神经网络 GAN 2 动漫人物头像生成 3 判别器(Discriminator) 4 从自然选择看GAN的基本思想 5 GAN 的具体实现过程 步骤一: 固定 gener ...

  2. 机器学习算法(二十八):Gan (生成式对抗网络)

    目录 1 发展历史 2 方法​​​​​​​​​​​​​​ 3 生成对抗网络 4 应用 4.1 图像生成 4.2 数据增强 5 GANs的改进 5.1 CGAN 5.2 DCGAN 6 Mode Col ...

  3. 王飞跃教授:生成式对抗网络GAN的研究进展与展望

    本次汇报的主要内容包括GAN的提出背景.GAN的理论与实现模型.发展以及我们所做的工作,即GAN与平行智能.  生成式对抗网络GAN GAN是Goodfellow在2014年提出来的一种思想,是一种比 ...

  4. 到底什么是生成式对抗网络GAN?

    男:哎,你看我给你拍的好不好? 女:这是什么鬼,你不能学学XXX的构图吗? 男:哦 -- 男:这次你看我拍的行不行? 女:你看看你的后期,再看看YYY的后期吧,呵呵 男:哦 -- 男:这次好点了吧? ...

  5. 如何用 TensorFlow 实现生成式对抗网络(GAN)

    我们来研究一下生成式对抗网络 GAN,并且用 TensorFlow 代码实现. 自从 Ian Goodfellow 在 14 年发表了 论文 Generative Adversarial Nets 以 ...

  6. 密歇根大学28页最新《GANs生成式对抗网络综述:算法、理论与应用》最新论文,带你全面了解GAN技术趋势...

    来源:专知 [导读]生成式对抗网络(Generative Adversarial Networks,GANs)作为近年来的研究热点之一,受到了广泛关注,每年在机器学习.计算机视觉.自然语言处理.语音识 ...

  7. 深度学习之生成式对抗网络 GAN(Generative Adversarial Networks)

    一.GAN介绍 生成式对抗网络GAN(Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.它源于2014年发表的论文:& ...

  8. Github | 深度神经网络(DNN)与生成式对抗网络(GAN)模型总览

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :https://githu ...

  9. 生成式对抗网络(GAN)简介

    原题:Understanding Generative Adversarial Networks (GANs)--Building, step by step, the reasoning that ...

最新文章

  1. Python快速学习09: 函数的参数
  2. Lua 脚本内部执行 Redis 命令
  3. JLOI2015 解题报告
  4. caffe训练过程中的可视化
  5. POJ 3740 Easy Finding (DLX模板)
  6. DataTable转成字符串复制到txt文本
  7. 计算机网络安全基础-网络监听基本概念
  8. 卡巴斯基密码管理器新版面世,再也不必担心账户安全
  9. 手机地理位置共享引发的不安全因素
  10. 外贸人如何快速学好英语
  11. 【餐厅点餐平台|一】项目描述+需求分析
  12. GC日志的查看(日志意思)
  13. Android异步消息处理机制之looper机制
  14. MySQL小的出库入库_根据出库、入库表,实现对库存的信息查询
  15. 计算机公共课5——演示文稿软件 PowerPoint 2010
  16. 第三方分享QQ QQZONE
  17. 计算机磁盘序列号是唯一的吗,磁盘id和硬盘序列号一样吗
  18. 比FFT还容易明白的NTT(快速数论变换)
  19. 源码安装ROS Melodic Python3 指南 (转) + 安装记录
  20. 信息传递趋势:未来将迈入信息视频化时代

热门文章

  1. 获取token的一些方法
  2. Microsoft Excel 单元格行高和列宽
  3. 数据库复习——关系数据理论中的几个重要概念(闭包,逻辑蕴含,覆盖...)
  4. StarUML3.0 的破解方法
  5. next()和nextLine()的区别
  6. python3 删除指定文件夹重复文件
  7. python获取网页数据判断并提交_【python爬虫网页结构分析】判断数据是在html的静态网页还是在动态网页;找对URL;豆瓣;QQ音乐...
  8. 物联网毕设 -- 人脸识别门禁系统(K210--HEX协议版本)
  9. 基于ONNX人脸识别实例(SCRFD/ArcFace)-C#版
  10. Linux-搭建web服务器