【论文精读】对Generative Adversarial Net的一点理解

本文介绍了生成对抗网络(Generative Adversarial Networks, GANs),这是一种用于评估生成模型的新框架。GANs包含两个模型:生成器G尝试模拟数据分布,而辨别器D则试图区分真实数据和生成数据。通过对抗训练,生成器的目标是使辨别器无法分辨其生成的样本。整个系统可以通过反向传播进行训练,无需马尔科夫链或近似推理网络。该方法提供了一种新颖的途径来训练深度生成模型,并已在多个领域如图像生成、自然语言处理等取得显著成果。

Generative Adversarial Net

摘要

​ 作者提出了一种新的框架,通过对抗来评估生成模型,通过同时训练两个模型:用来模拟数据分布生成模型G,以及辨别模型D,用来评估采样来自训练数据而非生成模型G的概率。

​ G的训练过程是将D犯错的概率最大化,也就是让D分辨不出训练数据和生成数据的区别。

​ 在任意函数G和D的的空间中存在一个独一无二的解,也就是G能够生成D无法分辨数据,以至于任意的数据被D认为是来自训练数据的概率的 12\frac{1}{2}21.

​ 在G和D被定义为多层感知机的情况下,整个系统可以通过反向传播进行训练。

​ 训练或生成样本期间都不需要任何马尔科夫链或者展开的近似推理网络。

1. 介绍

​ 目前为止,对辨别器(分类器)的研究取得了巨大的成功。但是深度生成模型的发展却没那么好,由于很难近似在极大概率估计和相关策略所引起的许多棘手的概率计算。作者提出了一种新的生成模型评估过程来回避这些问题。

​ 在提出的对抗网络框架中,一个辨别模型学着去分辨一个样本是来自于生成模型的分布还是训练数据的分布。

image-20211122103056104

​ 就好像一群造假币的罪犯试图造出能够以假乱真的假币,而警察需要辨别出收到的货币到底是真还是假。刚开始造出的假币质量非常差,警察一眼就能分辨出真假,后来经过一次次的技术升级,这群罪犯造出了能够以假乱真的假币。最后的结果是警察无法分辨收到的货币是真是假。

​ 在上面的例子中,造假币的罪犯就是生成器G,警察就是辨别器D,而造出的假币就是生成器生成的数据,真币就是训练集中的数据,最终训练的结果就是辨别器D无法分辨输入的数据是生成器G所产生的数据还是训练集中的数据。

​ 在本文中,作者让生成模型通过向多层感知机传入随机噪声来生成样本,而辨别模型同样也是一个多层感知机。作者将这种特殊情况定义为对抗网络,在这种情况下,可以通过反向传播和dropout算法,以及使用前向传播算法来从生成模型中采样来训练网络。

2. 对抗网络

​ 生成对抗网络的示意图如下:

image-20211123073254920

​ 整个网络的的训练目标:

image-20211122105510751

​ 接下来我们将从交叉熵函数开始推导此公式:

​ 首先我们知道对于二分类的交叉熵公式有:

L(p)=−(y⋅log⁡p+(1−y)log⁡(1−p))L(p)= -(y·\log p+(1-y)\log (1-p))L(p)=(ylogp+(1y)log(1p))

其中ppp是预测为样本模型为正例的概率,yyy是样本标签,正例取111,反例取000

上面是普通的二分类任务的交叉熵函数,那么对于生成对抗网络,则有:

V(D)=−(ylog⁡(D(x) +(1−y)log⁡(1−D(x)))V(D)=-(y\log(D(x)\space + (1-y)\log{(1-D(x))})V(D)=(ylog(D(x) +(1y)log(1D(x)))

其中D(x)D(x)D(x)为将样本判断为来自数据集的概率,自然1−D(x)1-D(x)1D(x)就是判断样本来自生成器的概率。

又因为来自生成器的样本x~G(z)x~G(z)xG(z),所以有:

V(G,D)=−(ylog⁡(D(x) +(1−y)log⁡(1−D(G(z)))V(G,D)=-(y\log(D(x)\space + (1-y)\log{(1-D(G(z))})V(G,D)=(ylog(D(x) +(1y)log(1D(G(z)))

推广到NNN个样本,则有:

V(G,D)=−(∑i=1Nyilog⁡(D(xi) +∑i=1N(1−yi)log⁡(1−D(G(zi)))V(G,D)=-(\sum_{i=1}^N y_i\log(D(x_i)\space +\sum_{i=1}^N(1-y_i)\log{(1-D(G(z_i))})V(G,D)=(i=1Nyilog(D(xi) +i=1N(1yi)log(1D(G(zi)))

为了表达无限个样本的情况,以期望的形式写出:

V(G,D)=−(Ex~pdatayilog⁡(D(x) +Ez~pz(z)(1−yi)log⁡(1−D(G(z)))V(G,D)=-(E_{x~p_{data}} y_i\log(D(x)\space +E_{z~p_z(z)}(1-y_i)\log{(1-D(G(z))})V(G,D)=(Expdatayilog(D(x) +Ezpz(z)(1yi)log(1D(G(z)))

最后另yi=12y_i=\frac{1}{2}yi=21,有:

V(G,D)=−12(Ex~pdatalog⁡(D(x) +Ez~pz(z)log⁡(1−D(G(z)))V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))})V(G,D)=21(Expdatalog(D(x) +Ezpz(z)log(1D(G(z)))

在训练过程中,我们应该首先训练辨别器,让辨别器具有足够好的分辨能力,所以我们应该保持GGG不变的情况下,将此损失函数最小化:

minD V(G,D)=−12(Ex~pdatalog⁡(D(x) +Ez~pz(z)log⁡(1−D(G(z)))min_D\space V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))})minD V(G,D)=21(Expdatalog(D(x) +Ezpz(z)log(1D(G(z)))

​ 然后紧接着训练生成器,让生成器能够生成足够逼真的数据,让之前训练好的训练器也无法辨别出端倪,因此我们在保持D不变的情况下,让此损失函数最大化:

​ 如果计L=minD V(G,D)=−12(Ex~pdatalog⁡(D(x) +Ez~pz(z)log⁡(1−D(G(z)))L=min_D\space V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))})L=minD V(G,D)=21(Expdatalog(D(x) +Ezpz(z)log(1D(G(z)))

​ 那么我们的目标应该是:

maxGminD V(G,D)=−12(Ex~pdatalog⁡(D(x) +Ez~pz(z)log⁡(1−D(G(z)))max_Gmin_D\space V(G,D)=-\frac{1}{2}(E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))})maxGminD V(G,D)=21(Expdatalog(D(x) +Ezpz(z)log(1D(G(z)))

​ 然后我们拿去整个式子中的因子 −12-\frac{1}{2}21,则最大最小化取反,有:

minGmaxD V(G,D)=Ex~pdatalog⁡(D(x) +Ez~pz(z)log⁡(1−D(G(z))min_Gmax_D\space V(G,D)=E_{x~p_{data}} \log(D(x)\space +E_{z~p_z(z)}\log{(1-D(G(z))}minGmaxD V(G,D)=Expdatalog(D(x) +Ezpz(z)log(1D(G(z))

​ 推理完毕。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值