论文精读《Generative Adversarial Nets》

  导言:生成模型是目前爆火的一个研究方向,据Microsoft对于ChatGPT-4的研究称“ChatGPT-4可以看成是通用型人工智能(AGI)的早期版本;其独特的推理能力和理解语义能力迅速在全球掀起了大模型研究的一股热潮。不仅仅是NLP领域,CV领域也有相应的工作,例如meta研究发布的《Segment Anything》这篇论文,也是图像分割领域的里程碑,可以做到不经过训练就能够对未知的样本达到非常好的语义分割的效果。日后的博客将会更新一些生成方向的论文和前沿的科技。”

  《Generative Adversarial Nets》。这是一篇由Ian Goodfellow等人于2014年提出的重要论文,提出了一种新颖的生成模型,称为生成对抗网络(GAN)。

  在这篇论文中,作者提出了一种通过对抗过程估计生成模型的框架,其中包含两个模型:一个生成模型G和一个判别模型D。生成模型G用来生成伪造数据,而判别模型D用来评估一个数据样本是真实数据还是伪造数据。这两个模型通过对抗过程相互训练,最终得到一个能够生成类似于真实数据的生成模型。

  GAN是一种非常有效的生成模型,已经在图像生成、语音合成、自然语言处理等领域取得了广泛应用。这篇论文对于深度学习和生成模型的发展具有重要意义,并且一直受到广泛的研究和引用。

  在此前的生成模型领域,一般都用的是基于概率的生成模型,例如自回归模型等;GAN的诞生开创了生成模型的一个全新的世界。其主要利用了博弈论的原理:训练两个神经网络分别是D和G,分别是判别网络D和生成模型G,生成模型是学习给定样本的数据分布,并尽可能的生成出符合给定样本数据分布的全新数据;判别器的作用是判断给定的样本是生成器生成出来的还是原始数据。我们期望于判别模型尽可能的能够分清给定数据到底是生成器生成的,还是原始数据分布;并且期望于生成器能够尽可能的逼近原始数据,做到以假乱真的效果。

  最终我们可以达到纳什平衡:判别器对于给定的数据有50%的概率认为是原始数据,有50%的概率认为是生成器生成的数据。这样就达到了我们GAN的收敛效果。事实上,可以用验钞机和罪犯的例子来理解:印假钞的罪犯期望于能够做出以假乱真的假币,在外人眼里与真钞毫无区别;而我们的验钞机则想要区分出一张钞票的真伪。通过这个小例子,对于GAN的基本原理就能了解的差不多了。

  说完了我们模型的最终效果,我们来考虑一些更加细节的东西,包括我们该如何训练这两个神经网络?他们的损失函数是什么样子的?

  上面的给出的公式就是我们GAN的损失函数,其中p_data是指x服从与给定的数据分布,D(x)指的是判别器将给定数据判定为真实数据的概率;与之类似的是,z~pz(z)是指随机噪声,G(z)是指生成器生成出的数据,D(G(z))意为判别器判定生成器生成出的数据为真实数据的概率即犯错的概率。事实上,我们的生成网络和判别网络共享一个损失函数即上面所提到的这个,我们在训练时,首先更新判别网络D的参数:我们考虑,最终的目的是想要让模型对于给定样本的判别能力尽可能的强,同时对于生成器生成的数据,我们期望犯错的概率尽可能的小,所以在更新D的参数时,我们首先需要最大化D(x),同时最最大化1-D(G(z)),值得注意的是,对于后面的1-D(G(z)),代表的是判别器成功将生成数据判定为生成数据的概率。同理,在更新生成器时,我们需要最小化1-D(G(z)),也就是说最大化D(G((z)),这与我们上面所讨论的原理是相一致的。

  接下来我们考虑一些更加细节的东西:事实上,对抗网络和生成网络的纳什平衡是50%时,也就是我们上面所讨论的情况,知晓这些,GAN的相关内容就没什么问题了。

  后面将更新的论文是《Auto-Encoding Variational Bayes》敬请期待!

《Generative Adversarial Nets》论文精读的更多相关文章

  1. 论文笔记之:Conditional Generative Adversarial Nets

    Conditional Generative Adversarial Nets arXiv 2014   本文是 GANs 的拓展,在产生 和 判别时,考虑到额外的条件 y,以进行更加"激烈 ...

  2. 论文笔记之:Generative Adversarial Nets

    Generative Adversarial Nets NIPS 2014  摘要:本文通过对抗过程,提出了一种新的框架来预测产生式模型,我们同时训练两个模型:一个产生式模型 G,该模型可以抓住数据分 ...

  3. 论文笔记之:SeqGAN: Sequence generative adversarial nets with policy gradient

    SeqGAN: Sequence generative adversarial nets with policy gradient  AAAI-2017 Introduction :  产生序列模拟数 ...

  4. Generative Adversarial Nets[content]

    0. Introduction 基于纳什平衡,零和游戏,最大最小策略等角度来作为GAN的引言 1. GAN GAN开山之作 图1.1 GAN的判别器和生成器的结构图及loss 2. Condition ...

  5. Generative Adversarial Nets[Wasserstein GAN]

    本文来自<Wasserstein GAN>,时间线为2017年1月,本文可以算得上是GAN发展的一个里程碑文献了,其解决了以往GAN训练困难,结果不稳定等问题. 1 引言 本文主要思考的是 ...

  6. Generative Adversarial Nets[Pre-WGAN]

    本文来自<towards principled methods for training generative adversarial networks>,时间线为2017年1月,第一作者 ...

  7. Generative Adversarial Nets(原生GAN学习)

    学习总结于国立台湾大学 :李宏毅老师 Author: Ian Goodfellow • Paper: https://arxiv.org/abs/1701.00160 • Video: https:/ ...

  8. GAN(Generative Adversarial Nets)的发展

    GAN(Generative Adversarial Nets),产生式对抗网络 存在问题: 1.无法表示数据分布 2.速度慢 3.resolution太小,大了无语义信息 4.无reference ...

  9. Generative Adversarial Nets(GAN Tensorflow)

    Generative Adversarial Nets(简称GAN)是一种非常流行的神经网络. 它最初是由Ian Goodfellow等人在NIPS 2014论文中介绍的. 这篇论文引发了很多关于神经 ...

  10. 一文读懂对抗生成学习(Generative Adversarial Nets)[GAN]

    一文读懂对抗生成学习(Generative Adversarial Nets)[GAN] 0x00 推荐论文 https://arxiv.org/pdf/1406.2661.pdf 0x01什么是ga ...

随机推荐

  1. python代码换行问题(用‘\’来达成)

    在 Python 中,可以使用反斜杠符号 '\' 来表示代码换行,从而实现在代码中进行换行,并保持语句的完整性.例如:. # 使用反斜杠符号进行换行 result = 10 + \ 20 + \ 30 ...

  2. Cesium官方教程——Fabric

    1.简介 Fabric 是Cesium中定义的描述材质Material的JSON 结构体.Material代表了一个物体的外观. 材质Material可以是比较简单的,比如直接将一张图片赋予表面,或者 ...

  3. 如何快速弄懂Java线程池

    Java线程池是一种高效的多线程编程技术,它可以帮助程序员有效地控制多线程的并发执行.它可以提高应用程序的性能.降低内存消耗和减少延迟. 线程池的原理是,程序员可以将每个任务放入线程池中,然后由线程池 ...

  4. window计时器函数

    // 定时器: // 计时器 // 开启:setInterval() // 参数1:回调函数 // 参数2:毫秒数 // 功能:每个指定的毫秒数执行一次回调函数 demo: var t = setIn ...

  5. python中socket使用UDP协议简单实现服务端与客户端通信

    UDP为不可靠传输,也就是发送方不关心对方是否收到消息,一般用于聊天软件.但现在的聊天软件虽然使用的是UDP协议,但已从代码层面上解决了丢失信息的问题. 下面使用python代码简单实现了服务端与客户 ...

  6. Python之八大数据类型

    数据类型之整型int 与浮点型 float 整型也就是int型 其实就是整数 如: print(type(10)) 浮点型就是float 其实就是小数 如: print(type(10.0)) # 这 ...

  7. [Java]排序算法>插入排序>【折半插入排序】(O(N*N)/稳定/N较大/无序/顺序存储)

    1 折半插入排序 1.1 算法思想 相比于[直接插入排序]:采用"顺序查找法"查找当前记录在已排好序的序列中的插入位置, 折半插入排序利用"折半查找法"快速查出 ...

  8. sync.Pool:提高Go语言程序性能的关键一步

    1. 简介 本文将介绍 Go 语言中的 sync.Pool并发原语,包括sync.Pool的基本使用方法.使用注意事项等的内容.能够更好得使用sync.Pool来减少对象的重复创建,最大限度实现对象的 ...

  9. kettle从入门到精通 第十一课 kettle javascript 解析json数组

    1.json步骤虽然可以解析json数组,但是不够灵活.通过javascript步骤来解析json数组比较灵活,且可以按照需要组装数据流转到下个步骤. 1)步骤名称:可以自定义 2)Transform ...

  10. 执行计划display_cursor函数

    问题描述:关于oracle查看真实的执行计划,使用select * from table(dbms_xplan.display_cursor(null,null));的方式来获取执行计划 参考文档:h ...