【论文快读】GAN

标题:Generative Adversarial Nets
作者:Ian J. Goodfellow等
摘要:在这里插入图片描述
这里就不列直观解释了,直接看论文。

1.“最小最大“博弈问题

首先要知道作者的终极目的:已知 p g p_g pg p d p_d pd p z p_z pz,也可以通过采样 p d a t a p_{data} pdata获得一小部分数据 x x x,训练 p g 来 拟 合 p d a t a p_g来拟合p_{data} pgpdata
作者将两个模型抽象为一个minimax的优化问题:
在这里插入图片描述
作者证明了这一问题的全局优解是: p g = p d a t a p_g=p_{data} pg=pdata。所以问题转化为求解图中的最优化问题。然后作者提出了算法1来解这个最优化问题面,并证明了算法1的有效性。
在这里插入图片描述
其思路是:获得初始化的 p g p_g pg p d p_d pd->内循环通过minibatch对D做梯度下降->固定D重新采样对G做梯度下降->(反复以上梯度下降过程)->得到最优解 p g ≈ p d a t a p_g\approx p_{data} pgpdata
这四步也正好和文中给出的图匹配
在这里插入图片描述
这个图一猛地一看其实很难看懂,但是和算法1的步骤结合起来看就容易理解多了。几个要点:

  1. a)D是一个“partially accurate”的分类器,意思是性能可以差点,但是首先得是能称得上分类器,不能是天马行空随机输出的。
  2. a)->b)中开始按照内循环的说明训练D。b)图的左侧 p g ≈ p x p_g\approx p_x pgpx,所以 p d p_d pd较大,相应的右侧 p d p_d pd较小。
  3. b)->c)这里D完成了一歩梯度下降,固定下来,开始训练G,我们看到 p g p_g pg p x p_x px更加接近了。
Namespace(命名空间)是一种在编程中用来区分各种不同命名元素的机制。它可以将不同的程序元素(变量、函数、类等)进行分组,使得它们在同一个命名空间下能够互相区分。在不同的命名空间中,可以定义具有相同名称的元素,而不会产生冲突。 快读namespace可以理解为快速了解命名空间的意思。在当前广泛使用的编程语言中,命名空间是一种非常常见的概念,如C++中的命名空间、Python中的模块和包、Java中的包等。通过快速了解命名空间,我们可以更好地进行模块化的开发,避免命名冲突,提升代码的可读性、可维护性和可重用性。 了解命名空间的重要性在于,它可以分隔不同模块之间的代码,使得每个模块可以独立开发和测试。在大型项目中,各个模块的开发往往由不同的开发人员负责,通过使用命名空间,可以避免不同模块中的命名冲突,同时也方便了代码的组织和管理。 在编程中,通过使用命名空间,我们可以更好地控制程序的作用域,避免全局变量的滥用。命名空间可以使得变量和函数的作用范围被限制在一个特定的范围内,有利于代码的结构化和模块化。 总而言之,快读命名空间是指通过了解命名空间的概念和使用方法,可以更好地进行模块化开发,提升代码的可读性和可维护性。同时,对于从事软件开发的人来说,掌握命名空间的概念也是非常重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值