生成对抗网络

前言

本人对于深度学习算是小白一枚,之前有不懂的问题,时常会翻看大牛们的技术博客,看多了,自己心里也痒痒的,于是就有了把自己的学习和思考的结果写下来的想法。同时也希望能借此文章与深度学习的小白们共勉,你不是一个人在战斗。^_^

生成对抗网络

Goodfellow等人于2014年提出的模型,其特点是具有两个对立的网络,一个叫生成网络,另一个叫判别网络。
我们很容易顾名思义,简单来讲:

生成网络,就是一个从无到有的网络(当然也不绝对如此),把一些毫无规律的数据(我们称之为噪声)映射到和训练样本相同的空间,训练的目地就是学习两者之间的规则(我们称之为分布)。
判别网络,其输入既可以是训练样本,也可以是生成网络的输出(不如说必须如此),目的是区分数据是来自样本集还是来自生成网络,所以它的输出是表示输入是来自样本集的概率。


其实Goodfellow提出生成对抗网络的最初目的是为了得到一个好的生成模型,这个模型可以以真实数据的分布得出新的数据,当然要想得出真实数据分布这一点本身几乎不可能,更别说评判生成模型是否学到了真实的分布,所以才有了用另一个网络来评判的想法。

在这插一句,看过原文的思想之后觉得生成对抗网络其实原理和机器学习里的“EM算法”很相似,有兴趣的可以自学一下。

下面正式转述作者的想法
首先,一上来作者就对深度玻尔兹曼机一阵鄙视啊,原文是:This quantity (the partition function) and its gradient are intractable for all but the most trivial instances, although they can be estimated by Markov chain Monte Carlo (MCMC) methods.
就是说深度信念网络就是渣渣,在很小的数据上都能难训练了(它梯度有问题),就算能用马尔科夫链,也还是很渣渣。

然后接着再鄙视了深度信念网络(谁让它们是一窝的),然后总结了一下原因:这两个可以用得分匹配法和噪声收缩估计法训练的,都要求学习的概率密度被解析为正规化常数。不然你俩 根本 训练不起来。

原理

接下来就是证明生成对抗网络英明神武的时候了(当然是用公式)
x/z:真实/虚假样本
pz(z):噪声分布
pg:生成网络生成的分布
G(z;Wg):生成网络拟合得到的函数式,也就是用来生成假样本的。
D(x;Wd):判别网络拟合得到的函数式,也就是判断输入来自真样本的概率。

生成网络想要骗过判别网络,因此希望D(G(z))尽量接近1,而判别网络则极力提高自己的鉴别能力,希望D(x)接近1,同时D(G(z))接近0。取对数似然,数构造一个minimax问题:
minimax
上面的式子可以这样理解:希望找到一个D使得V(D,G)取最大值(希望D(x)接近1,同时D(G(z))接近0),同时希望找到一个G使得V(D,G)取到上面最大值时,能使V取最小值(D(G(z))尽量接近1)。

表面看起来很矛盾,因为D,G两个参变量,只有一个取定值了,才能确定另一个怎么取,但现在要求同时两者未知,所以我们只能用迭代的方法来求近似解。

迭代首先就要求式子是收敛的,而作者也给我们证明了上式不但收敛,而且收敛的最终结果一定是:生成网络找到了真实的分布,判别网络对真假样本,都输出概率0.5。

换句话说,生成网络达到了以假乱真的程度。


我们先不急着证明,先试着想像一下这个过程是怎么进行的,首先是从概率分布的变化过程看
训练过程

图上的是概率分布,蓝线是判别网络分布,黑线是真实样本分布,绿线是生成网络分布。底下两条水平线表示从噪声映射到样本空间的结果。
(a)图,先训练生成,再训练判别,此时判别占优(因为后手嘛),但因为首次生成的数据比较少,所以判别局部拿捏不准,出现局部峰值。
(b)图,在内循环(max的过程)里多次训练判别,这时判别比较准了。
(c)图,训了判别后,生成知道了哪些假样本会被识破,因此针对这些假样本再度改进(外循环,min的过程),于是又离真样本更进一步。
(d)图,多轮之后以假乱真

证明

作者给出的证明是这样的:
首先对于max问题,也就是让D(x)接近1,同时D(G(z))接近0这个问题,

对于固定的G(z),我们总可以直接写出D(x)的最佳值:
这里写图片描述

上面的式子既是一个直观的想法(参考古典概型),又是可以证明的,
回顾我们之前的minimax问题:
这里写图片描述

假使G固定,那么最大化V(G,D)就相当于下式积分取最大:

这里写图片描述

而可以证明,积分在满足下式时取最大,证毕。
这里写图片描述

然后对于min问题,既然找到了满足条件的D,那么G该怎么取能使得V(D,G)取最小值呢?
代入上面的max过程的结果
这里写图片描述
这时候的潜在变量只有pz,pdata可以说是固定的,pz是决定G(z),也就是生成网络分布的关键,要想min上面的式子,作者的原文给出了理论的证明,但还需要查看相关的参考文献(可以看我后面的补充文献),十分不方便。

所以我们这里只从直观上理解,根据我们上面给出的结论:最终的收敛结果是判别网络对真假样本,都输出概率0.5,也就是说判别网络没法区分真假了。

也就是说这里写图片描述
无论x取值,上式恒等于0.5,而这个结果就是唯有在pz=pdata的情况下才能满足。

算法

十分简单易懂,值得注意的是作者无论是写流程,还是证明,都是基于“多层感知器”,但生成对抗在深度卷积网络中也有应用。
伪算法

实验结果我就不放出来了,毕竟网上有很多,到此生成对抗网络的理论部分就介绍完了,不知道是否能写到位,有任何想法的不要吝啬,我们评论栏见。

原文链接
min过程证明的知识
min过程用到的熵

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值