生成对抗网络(GAN)

为什么生成器与判别器的交互可以产生人脸图 片。首先,我们需要了解训练的目标是什么。在训练网络时,我们要确定一个损失函数,然后 使梯度下降策略来调整网络参数,并使得设定的损失函数的数值最小或最大即可。生成器的输入是一系列的从分布中采样出的向量,生成器就会产生一个比较复杂 的分布,如图1所示,我们称之为PG。另外我们还有一系列的数据,这些原始的数据本身 会形成另外一个分布,我们称之为Pdata。训练的效果是希望PG 和Pdata 尽可能的相似。

图1 GAN 的训练目标

我们再举一个一维的简单例子说明PG和Pdata,我们假设生成器的输入是一个一维的向 量,如图1的橙色曲线,生成器的输出也是一维的向量,如图1的绿色曲线,真正的数 据同样是一个一维的向量,它的分布用蓝色曲线来表示。假设每次我们输入5个点,那每一 个点的位置就会随着训练次数而改变,就会产生一个新的分布。可能本来所有的点都集中在 中间,但是通过生成器,通过一个网络里面很复杂的训练后,这些点就分成两边,变成图片中 的分布的样子。而其中Pdata 就是指真正数据的分布,在实际应用中真正数据分布可能是更极 端的,比如左边的数据比较多,右边的数据比较少。我们训练的结果是希望两个分布PG 和Pdata 越接近越好,即图片中的公式所示,表达的是这两个分布之间的差异,我们可以将其视 为两个分布间的某种距离,如果这个距离越大,就代表这两个分布越不像;差异越小,代表这 两个分布越相近。所以差异就是衡量两个的分布相似度的一个指标。我们现在的目标就是训 练一组生成器模型中的网络参数,可以让生成的PG和Pdata之间的差异越小越好,这个最优 生成器称为G∗。

训练生成器的过程训练例如卷积神经网络等简单网络非常地像,相比于之前的找一组参 数最小化损失函数,我们现在其实也定义了生成器的损失函数,即PG 和Pdata 之间的差异。 对于一般的神经网络,其损失函数是可以计算的,但是对于生成器的差异,我们应该怎么处理 呢?对于连续的差异例如KL散度和JS散度是很复杂的,在实际离散的数据中,我们或许无 法计算其对应的积分。

对于GAN,只要我们知道怎样从PG 和Pdata 中采样,就可以计算得到差异,而不需要 知道实际的公式。例如,我们对于图库进行随机采样时,就会得到Pdata。对于生成器,我们 需要从正态分布中采样出来的向量通过生成器生成一系列的图片,这些图片就是PG 采样出 来的结果。所以我们有办法从PG采样,也可以从Pdata 进行采样。接下来,我们将介绍如何 只做以上采样的前提下,即不知道PG 和Pdata 的形式以及公式的情况下,如何估算得到差 异,这其中要依靠判别器的力量。

我们首先回顾下判别器的训练方式。首先,我们有一系列的真实数据,也就是从Pdata采 样得到的数据。同时,还有一系列的生成数据,从PG中采样出来的数据。根据真实数据和生成数据,我们会去训练一个判别器,其训练目标是看到真实数据就给它比较高的分数,看到 生成的数据就给它比较低的分数。我们可以把它当做是一个优化问题,具体来说,我们要训 练一个判别器,其可以最大化一个目标函数,当然如果我们最小化它就可以称它为损失函数。 这个目标函数如图8.16所示,其中有一些 y 是从 Pdata 中采样得到的,也就是真实的数据, 而我们把这个真正的数据输入到判别器中,得到一个分数。另一方面,我们还有一些y来源 于生成器,即从PG中采样出来的,将这些生成图片输入至判别器中同样得到一个分数,再取 Log(1 −D(Y))。

我们希望目标函数V 越大越好,其中y如果是从Pdata 中采样得到的真实数据,它就要 越大越好;如果是从PG 采样得到的生成数据,它就要越小越好。这个过程在GAN提出之 初,人们将其写为这样其实还有一个缘由,就是为了让判别器和二分类产生联系,因为这个 目标函数本身就是一个交叉熵乘上一个负号。训练一个分类器时的操作就是要最小化交叉熵, 所以当我们最大化目标函数的时候,其实等同于最小化交叉熵,也就是等同于是在训练一个 分类器。这个它做的事情就是把图2中蓝色点,从Pdata 采样出的真实数据当作类别1,把 从PG 采样出的这些假的数据当作类别2。有两个类别的数据,训练一个二分类的分类器,训 练后就等同于是解了这个优化问题。而图中红框里面的数值,它本身就和JS散度有关。或许 最原始的GAN 的文章,它的出发点是从二分类开始的,一开始是把判别器写成二分类的分 类器然后有了这样的目标函数,然后再经过一番推导后发现这个目标函数的最大值和JS散度 是相关的。

图2 GAN 中判别器目标函数和优化过程

当然我们还是要直观理解下为什么目标函数的值会和散度有关。这里我们假设 PG 和 Pdata 的差距很小,就如图8.16 所示蓝色的星星和红色的星星混在一起。这里,判别器就是在 训练一个0、1 分类的分类器,但是因为这两组数据差距很小,所以在解决这个优化问题时, 就很难让目标函数V 达到最大值。但是当两组数据差距很大时,也就是蓝色的星星和红色的 星星并没有混在一起,那么就可以轻易地把它们分开。当判别器可以轻易把它们分开的时候, 目标的函数就可以变得很大。所以当两组数据差距很大的时候,目标函数的最大值就可以很 大。当然这里面有很多的假设,例如判别器的分类能力无穷大。

我们再来看下计算生成器+判别器的过程,我们的目标是要找一个生成器去最小化两个 分布PG 和Pdata 的差异。这个差异就是使用训练好的判别器来最大化它的目标函数值来实 现。最小和最大的MinMax过程就像是生成器和判别器进行互动,互相"欺骗"的过程。注意, 这里的差异函数不一定使用KL或者JS等函数,可以尝试不同的函数来得到不同差异衡量指标。

相关推荐
SEVEN-YEARS4 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
世优科技虚拟人7 分钟前
AI、VR与空间计算:教育和文旅领域的数字转型力量
人工智能·vr·空间计算
cloud studio AI应用13 分钟前
腾讯云 AI 代码助手:产品研发过程的思考和方法论
人工智能·云计算·腾讯云
禁默24 分钟前
第六届机器人、智能控制与人工智能国际学术会议(RICAI 2024)
人工智能·机器人·智能控制
Robot25132 分钟前
浅谈,华为切入具身智能赛道
人工智能
只怕自己不够好37 分钟前
OpenCV 图像运算全解析:加法、位运算(与、异或)在图像处理中的奇妙应用
图像处理·人工智能·opencv
果冻人工智能2 小时前
2025 年将颠覆商业的 8 大 AI 应用场景
人工智能·ai员工
代码不行的搬运工2 小时前
神经网络12-Time-Series Transformer (TST)模型
人工智能·神经网络·transformer
石小石Orz2 小时前
Three.js + AI:AI 算法生成 3D 萤火虫飞舞效果~
javascript·人工智能·算法
罗小罗同学2 小时前
医工交叉入门书籍分享:Transformer模型在机器学习领域的应用|个人观点·24-11-22
深度学习·机器学习·transformer