论文阅读:Generative Adversarial Nets

病大虫
• 阅读 2499

引言

这篇论文是生成对抗(GAN)网络的奠基之作,它提出了一种全新生成的思想,时至今日都是深度学习中热门的一种模型。它的作者是Ian J.Goodfellow, Jean Pouget-Abadie*, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio

基本原理

GAN网络其实就是两个网络之间的博弈游戏,即网络和网络之间的对抗,其中一个网络G从随机噪声生成样本,而网络D则从来评判一个样本是真实数据的概率,即判别它是来自真实数据集的可能性大还是来自G生成的可能性大。

这样就形成了一个两个网络之间的博弈过程,那么理想状态下,G希望生成能以假乱真的样本,而D希望能有足够的能力分辨样本是生成的还是真实数据。这样的博弈最优的情况就是D(G(z))=0.5,这样就达到了一最优的状态。这样就说明D已经比较难以判断G生成的图片是否是真的。这样这个模型中的G网络就可以用来生成数据样本了,目的就达到了。用数学公式描述如下$$\underset Gmin\underset Dmax V(D,G)=E_{x_\tilde{} p_{data}}(x)[logD(x)]+E_{z\tilde{} p_z(z)}[log(1-D(G(z)))]$$我们可以简单解释下这个公式:

  • 首先x表示的就是真实样本,z表示随机生成的原始噪声,G(z)表示我们生成网络从噪声当中生成的图片,D(x)表示判别x是真实数据的概率(如果x就是真实的,那么我们希望D(x)接近1,反之希望接近0)。
  • G网络:它希望自己生成的样本越真实越好,即希望D(G(z))越大越好,那么上述公式的第二部分就会变小,整个式子V(D,G)也跟着变小。所以可以看到式子前面的符号为$\underset G min$。
  • D网络:它则是希望自己有足够强的能力能够有能力分辨真假样本,即D(x)应该大,D(G(z))应该小。那么log(D(x))会变大,log(1-D(G(z)))会变大,整个式子V(D,G)变大,所以式子前面符号为$\underset Dmax$

也可以把上面的式子拆成两部分,一部分是优化D的一部分是优化G的,则对于G网络$$min\log(1-D(G(z)))$$对于D网络$$max\ (logD(x)+log(1-D(G(z))))$$这两个部分交替优化最终达到平衡。作者指出在每遍循环中同时优化D和G有可能导致过拟合,所以建议在k轮的D优化后再优化一遍G。

同时对于上述的对G网络的优化,由于刚开始G网络还很弱,因此log(1-D(G(z)))会非常小造成溢出,则算法会变得不稳定。作者建议把最小化log(1-D(G(z)))改为最大化log(D(G(z)))会使得算法在刚开始G网络还不是很强时更加稳定(但作者在给出的算法流程中并没有使用)。

算法流程

论文阅读:Generative Adversarial Nets注意算法中第一个式子,即优化D的是ascending,因为要求最大化第一个式子,所以是加上梯度,而优化G的第二个式子就是一般的梯度下降,所以是减去梯度。

一点想法

  1. 其实本文从数学角度很详细的论证了该算法的正确性以及收敛性,证明了在生成的样本和真实样本分布相同时,上述算法能收敛到最优,此时D(x)=$\frac{1}{2}$,具体的推导参考另一篇博客
  2. 本文开创性的提出了一个新的思想,但没有给出具体的G网络和D网络的定义,文章中也指出虽然算法是可以收敛到嘴有点的,但是还取决于是否选取了合适的D和G。当然基于这个思想,已经有十分多的人提出了具体的D网络和G网络的实现并且有着很好的性能。
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
高耸入云 高耸入云
1年前
OJAC近屿智能带你解读:AIGC必备知识之GAN生成式对抗网络
📖更多AI资讯请👉🏾生成式对抗网络(GAN,英文全称GenerativeAdversarialNetwork)是一种深度学习模型,由于其生成高质量、真实数据的能力,近年来获得了极大的关注。GAN已被用于广泛的应用中,包括图像合成、⻛格转移和数据增强。
生成对抗网络GAN简介
生成对抗网络(GenerativeAdversarialNetworks,GAN)是一种深度敏感词模型,用于生成具有高度逼真度的新数据,如图像、音频、文本等。GAN是由IanGoodfellow等人在2014年提出的,其核心思想是通过两个神经网络,即生成器和判别器,相互竞争和协作来实现数据生成的目的。GAN的基本框架和训练过程如下图所示:
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
病大虫
病大虫
Lv1
望阙云遮眼,思乡雨滴心。
文章
4
粉丝
0
获赞
0