GANs:原始生成对抗网络论文分析及tensorflow、pytorch代码解析

本文详细分析了生成对抗网络(GANs)的基本原理,包括生成器与判别器的结构及其交互过程。通过数学推导解释了训练过程中D*G(x)的最优解,并介绍了Tensorflow和Pytorch的代码实现。GANs的训练目标是生成器产生的数据分布与真实数据分布一致,其应用在于处理复杂数据分布的样本生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先给出记录的原论文笔记。

- 生成式对抗网络 GAN (Generative adversarial networks):由一个生成器(generator)和一个判别器(discriminator)构成. 生成器捕捉真实数据样本的潜在分布(latent distribution), 并生成伪造的数据样本; 判别器是一个二分类器, 判别输入是真实数据还是生成的样本. 生成器和判别器在作者原文中使用得是多层感知机(multilayer perceptron).

- 训练的过程:判别器的目的是区分一个样本是来自模型分布(生成器产生)还是数据真实分布;生成器的目的是尽量模拟得到真实数据的分布,从而产生的数据可以让判别器误判为真实数据。原文已经说明这个模型的训练用后向传播完成,不需要用到马尔科夫链和近似推理。

如图

符号定义:

这里写图片描述

目标函数:

这里写图片描述

原文中用k步优化D之后一步优化G,其中k设置为1.

  • 训练过程如图:
    这里写图片描述

这里,z是噪声数据,从z中采样作为x,形成绿色的高耸的部分,原始数据Xdata是不变的。

蓝色虚线是分类器(sigmoid),黑色虚线是原始数据,绿色实线是生成数据。

最初的时候D可以很好的区分开真实数据和生成数据,看图(b),对于蓝色虚线而言,单纯的绿色部分可以很明确的划分为0,黑色虚线的部分可以很明确的划分成1,二者相交的部分划分不是很明确。

这里写图片描述

这张图形象的说明了一下G和D的优化方向。优化D的时候需要很好的画出黑色虚线,使它能够区分开真实数据和生成数据。优化G的时候,生成数据更加接近原始数据的样子,使得D难以区分数据真假。如此反复直到最后再也画不出区分的黑色虚线。

优化算法:

这里写图片描述

注:这里的动量(momentum)梯度下降是较为平凡的一种梯度优化方法。

这里写图片描述

红线处是积分换元。

1、证明D*G(x)是最优解

由于V是连续的所以可以写成积分的形式来表示期望:

这里写图片描述

通过假设x=G(z)可逆进行了变量替换,整理式子后得到:

这里写图片描述

然后对V(G,D)进行最大化:对D进行优化令V取最大:

这里写图片描述

取极值,对V进行求导并令导数等于0.求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值