前言
本人对于深度学习算是小白一枚,之前有不懂的问题,时常会翻看大牛们的技术博客,看多了,自己心里也痒痒的,于是就有了把自己的学习和思考的结果写下来的想法。同时也希望能借此文章与深度学习的小白们共勉,你不是一个人在战斗。^_^
生成对抗网络
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问题:
上面的式子可以这样理解:希望找到一个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的情况下才能满足。
算法
十分简单易懂,值得注意的是作者无论是写流程,还是证明,都是基于“多层感知器”,但生成对抗在深度卷积网络中也有应用。
实验结果我就不放出来了,毕竟网上有很多,到此生成对抗网络的理论部分就介绍完了,不知道是否能写到位,有任何想法的不要吝啬,我们评论栏见。