Generative Adversarial Nets——解析

摘要

  本文提出了一个通过对抗过程来预测产生式模型的新框架。在新框架中我们同时训练两个模型:一个用来获得数据分布的生成模型G,和一个用来估计样本来自训练数据而不是G的概率的判别模型D,G的训练过程是最大化D产生错误的概率,让其无法判断一个图像是由生成模型产生的,还是来自训练样本.这个框架相当于一个极小化极大的双方博弈。在任意函数G 和D 的空间中存在唯一的解,其中G恢复训练数据分布,并且D处处都等于12。 在G和D 由多层感知器定义的情况下,整个系统可以用反向传播进行训练。在训练或生成样本期间不需要任何马尔科夫链或展开的近似推理网络。

介绍

  深度学习的任务是寻找丰富的层次模型,使其能够在人工智能领域里用来表达各种数据的概率分布,例如自然图像,包含语音的音频波形和自然语言语料库中的符号等。到目前为止,在深度学习领域最成功的的模型之一就是判别式模型,通常它们将高维的丰富的输入映射到类标签上,它主要是基于反向传播和丢弃算法来实现的。由于在最大似然估计和相关策略中出现的许多难以解决的概率计算的困难,以及很难利用在生成上下文时使用分段线性单元的好处,深度生成模型发展得并不是很好。因此,本文提出了一个新的生成模型克服了这些困难。

  本文的对抗生成网络框架中,生成式模型就像是罪犯,专门造假币,判别式模型就像是警察,专门辨别假币,那生成式模型就要努力提高自己的造假技术使造的假币不被发现,而判别式模型就要努力提高自己辨别假币的能力。最终的结果就是两人达到一个平衡的状态,这就是对抗。因为每个人的cost function都依赖于另一个人的参数,但是每个人都不能控制别人的参数,所以这个场景可以认为是一个带有博弈色彩的优化问题。

  这个框架可以针对多种模型和优化算法提供特定的训练算法。在这篇文章中,我们探讨了生成模型通过将随机噪声传输到多层感知机来生成样本的特例,同时判别模型也是通过多层感知机实现的。我们称这个特例为对抗网络。在这种情况下,我们可以仅使用非常成熟的反向传播和丢弃算法来训练两个模型。对于生成模型在生成样本时只使用前向传播算法即可。并且不需要近似推理和马尔可夫链作为前题。

对抗生成网络

先来看一个不太正式但是很直观的图:

上图中:

下面的水平线为均匀采样z(噪声数据)的区域,上面的水平线为数据x的部分区域。

蓝色的虚线 表示判别器D(x; Θd)产生的分布

黑色的点线 表示数据x的分布pdata

绿色的实线 表示生成器G(z; Θg),生成的分布pg

向上的箭头表示z通过G转化之后(x‘ = G(z))与分布pg的对应情况

a) 接近收敛的对抗模型对。pg接近于pdata,并且D具有较准确的判别能力

b) 在判别器算法的内部循环中,D收敛到pdata(x) / (pdata(x) +pg)

c) 在D的指导下,G生成的分布更加接近数据分布。

d) 经过几次训练之后D,G都具有不错的能力,并且都已经无法提升自己,此时pg = pdata,D(x) = 1/2

我们说过对于生成模型G,通过最大化D产生错误的概率来对它训练(让它骗过D)。对于判别模型D,通过最大化样本来自训练数据而不是G的概率来对它训练(尽可能的识别G)。

目标函数:

  

对于生成器G,我们训练后面一项,对于判别器D我们训练整个。

注:(1)优化D的过程在训练的内部所花费的代价是非常高的,并且对于是有限的数据集将会导致overfitting。因此,我们用 k steps来优化 D,one step 来优化 G 。这使得G改变的足够缓慢,那么D将保持在其最佳解附近。

  (2)算法早期G的效果差,D会以高置信值来拒绝生成样本。log(1?D(G(z)))将很快饱和(梯度),所以我们通过最大化log(D(G(z)))而不是最小化log(1?D(G(z))) 来训练G,这个函数在早期能提供非常强的梯度信息。

算法流程:

整个算法流程就结束了,接下来我们证明一下算法全局最优为pg = pdata,并且对算法的收敛情况进行讨论。

1. 全局最优为pg = pdata

命题1:固定G,判别器D的最优解为:

证明:

  给定G,我们需要最大化目标函数V (G;D)

这里x = g(z)是给定的G产生的z和x的映射关系,并且这里的x所在的分布为pg

对于任意不同时等于0的两个实数(a,b),函数当y∈(0,1),最大值在a / (a + b)处。证毕

由命题1,公式(1)公式1中的极小化极大问题可以变形为:

目标:最小化C(G),变量为pg

定理1:当且仅当pg = pdata时,C(G)达到最小,且值为-log4.

证明:

当pg = pdata时,由公式(2)可以得到DG*(x) = 1/2.

把它代入方程4得到:C(G) = log 1/2 + log 1/2 = -log 4,由此我们可以得到当pg = pdata时,C(G)的值为-log4。但是否为最小呢?我们看到:

      

用C(G) = V(DG*,G)减去上式我们得到:

  

其中,KL表示KL散度,也称为相对熵,是一个距离函数。有KL(p||q) = ∑plog(p / q)。

由公式(5)我们能够得到JS散度:

其中,JSD表示JS散度

由于两个分布之间的Jensen–Shannon散度总是非负的,并且当两个分布相等时,值为0。因此C*=?log(4)为C(G)的全局极小值,并且唯一解为pg=pdata,即生成模型能够完美的复制数据的生成过程。

至此,我们证明了算法的全局最优解为pg=pdata

2.证明Algorithm 1的收敛性

命题2:当G和D有足够的能力时。在算法1中,给定G,D总能达到它的最优值,并且通过更新pg来提高这个判别准则。

  最终pg收敛到pdata.

证明:

如上述准则,考虑V(G,D)=U(pg,D)为关于pg的函数。注意到U(pg,D) 为pg的凸函数。该凸函数上确界内的次导数一定包括该函数最大值处的导数。所以在给定最优的D时,通过梯度下降算法更新pg从而优化G时,pg一定会收敛到最优值。而定理1证明了目标函数只有唯一的全局最优解,所以pg会收敛到pdata。 证毕

实际上优化G时是更新Θg而不是pg本身。尽管缺乏理论证明,但是实践中感知机的优良性能表明这是个好的模型。

 

时间: 2024-08-29 05:17:28

Generative Adversarial Nets——解析的相关文章

Generative Adversarial Nets[pix2pix]

本文来自<Image-to-Image Translation with Conditional Adversarial Networks>,是Phillip Isola与朱俊彦等人的作品,时间线为2016年11月. 作者调研了条件对抗网络,将其作为一种通用的解决image-to-image变换方法.这些网络不止用来学习从输入图像到输出图像的映射,同时学习一个loss函数去训练这个映射.这让传统需要各种不同loss函数的问题变成了可以采用统一方法来解决成为可能.作者发现这种方法在基于标签map

论文笔记之:Generative Adversarial Nets

Generative Adversarial Nets NIPS 2014 本文通过对抗过程,提出了一种新的框架来预测产生式模型,我们同时训练两个模型:一个产生式模型 G,该模型可以抓住数据分布:还有一个判别式模型 D 可以预测来自训练样本 而不是 G 的样本的概率.训练 G 的目的是让 D 尽可能的犯错误,让其无法判断一个图像是产生的,还是来自训练样本.这个框架对应了

论文笔记之:Conditional Generative Adversarial Nets

Conditional Generative Adversarial Nets arXiv 2014   本文是 GANs 的拓展,在产生 和 判别时,考虑到额外的条件 y,以进行更加"激烈"的对抗,从而达到更好的结果. 众所周知,GANs 是一个 minmax 的过程: 而本文通过引入 条件 y,从而将优化的目标函数变成了: 下图给出了条件产生式对抗网络的结构示意图: 是的,整个过程就是看起来的这么简单,粗暴,有效. 实验部分,作者在 Mnist 数据集上进行了实验: 然后是,给图像

(转)Deep Learning Research Review Week 1: Generative Adversarial Nets

Adit Deshpande CS Undergrad at UCLA ('19) Blog About Resume Deep Learning Research Review Week 1: Generative Adversarial Nets Starting this week, I’ll be doing a new series called Deep Learning Research Review. Every couple weeks or so, I’ll be summa

Generative Adversarial Nets[Wasserstein GAN]

本文来自<Wasserstein GAN>,时间线为2017年1月,本文可以算得上是GAN发展的一个里程碑文献了,其解决了以往GAN训练困难,结果不稳定等问题. 1 引言 本文主要思考的是半监督学习.当我们说到学习一个概率分布,人们传统的意思是学习一个概率密度.这通常是通过定义一个参数化概率密度\((P_{\theta})_{\theta\in R^d}\)家族,然后基于收集的数据进行最大似然:如果当前有真实样本\(\{x^{(i)}\}_{i=1}^m\),那么是问题转换成: \[\unde

Generative Adversarial Nets[Vanilla]

引言中已经较为详细的介绍了GAN的理论基础和模型本身的原理.这里主要是研读Goodfellow的第一篇GAN论文. 0. 对抗网络 如引言中所述,对抗网络其实就是一个零和游戏中的2人最小最大游戏,主要就是为了处理下面的函数\(V(G,D)\): 在实现过程中,如果将D和G都写入同一个循环中,即迭代一次D,迭代一次G,这种情况会让在有限的数据集基础上会导致过拟合.所以Goodfellow推荐:先训练D模型K步,然后再训练G一步.这样可以让D很好的接近最优解,并且让G改变的足够慢. 图0.1 GAN

Generative Adversarial Nets[Improved GAN]

0.背景 Tim Salimans等人认为之前的GANs虽然可以生成很好的样本,然而训练GAN本质是找到一个基于连续的,高维参数空间上的非凸游戏上的纳什平衡.然而不幸的是,寻找纳什平衡是一个十分困难的问题.在现有的针对特定场景算法中,找不适合GAN游戏的算法,因为GAN的实现通常是使用梯度下降的方法去训练GAN网络的目标函数,而不是真的找零和游戏中的纳什平衡.且目标函数本身是非凸函数,其中是连续参数且参数空间维度很高,所以如果真的去搜寻纳什平衡,那么这些算法都是无法收敛的. 当游戏中每个人都认为

Generative Adversarial Nets[LSGAN]

0 背景 在这之前大家在训练GAN的时候,使用的loss函数都是sigmoid_cross_entropy_loss函数,然而xudon mao等人发现当使用伪造样本去更新生成器(且此时伪造样本也被判别器判为对的时候)会导致梯度消失的问题.虽然此时伪造样本仍然离真实样本分布距离还挺远.也就是之前的损失函数虽然可以判别是真假,可是对于人肉眼来说,还是违和感太强了,也就是生成的图像质量骗得过机器,却骗不过人. 图0.1 两种损失函数的不同行为 上图中加号表示假样本,圈表示真样本,五角星表示用于更新生

Generative Adversarial Nets[EBGAN]

0. 背景 Junbo Zhao等人提出的"基于能量的GAN"网络,其将判别器视为一个能量函数而不需要明显的概率解释,该函数可以是一个可训练的损失函数.能量函数是将靠近真实数据流形的区域视为低能量区域,而远离的视为高能量区域.和"概率GAN"相似,训练中,生成器会尽可能生成最小能量时候的伪造样本,而此时判别器会被赋值为高能量(因为是伪造的).通过将判别器看成一个能量函数,就可以使用更多更广泛的网络结构和损失函数,而不只是logistic输出的二值分类器.其中Junb