【爱看论文】初识生成对抗网络(GANs)
导读
NO 12 初识生成对抗网络
GANs全称为生成式对抗网络,是一个训练生成模型的新框架。本文对GANs的基本理论、具体模型、实验设计分别做了解析。
来源/Hulu创新实验室
文章仅代表作者本人观点,如来源标注有误,我们及时予以更正/删除
2014年的一天,Goodfellow与好友相约到酒吧聊天。也许平日里工作压力太大,脑细胞已耗尽了创作的激情,在酒吧的片刻放松催生了一个绝妙的学术点子,然后就有了GANs的传说。GANs全称为生成式对抗网络,是一个训练生成模型的新框架。
GANs自提出之日起,就迅速风靡深度学习的各个角落,GANs的变种更是雨后春笋般进入人们的视野,诸如:WGAN、InfoGAN、f-GANs、BiGAN、DCGAN、IRGAN等等。
GANs之火,就连任何初入深度学习的新手都能略说一二。GANs刚提出时没有华丽的数学推演,描绘出的是一幅魅力感极强的故事画面,恰好契合了东方文化中太极图的深刻含义——万物在相生相克中演化,听起来很有意思。想象GANs框架是一幅太极图,“太极生两仪”,这里“两仪”就是生成器和判别器,生成器负责“生”,判别器负责“灭”,这一生一灭间有了万物。具体说来,生成器在初始混沌中孕育有形万物,判别器甄别过滤有形万物,扮演一种末日大审判的角色。回到严谨的学术语言上,生成器从一个先验分布中采得随机信号,经过神经网络的“妙手”转换,得到一个模拟真实数据的样本;判别器既接收来自生成器的模拟样本,也接收来自实际数据集的真实样本,我们不告诉判别器这个样本是哪里来的,需要它判断样本的来源。判别器试图区分这两类样本,生成器则试图造出迷惑判别器的模拟样本,两者自然构成一对“冤家”,置身于一种对抗的环境。然而,对抗不是目的,在对抗中让双方能力各有所长才是目的,理想情况下最终达到一种平衡,使得双方的能力以臻完美,彼此都没有了更进一步的空间。
问题描述
关于GANs,从基本理论到具体模型再到实验设计,我们依次思考三个问题:
1
GANs可看作一个双人minimax游戏,请给出游戏的value function。我们知道在理想情况下最终会达到一个纳什均衡点,此时生成器表示为G*,判别器表示为D*,请给出解(G*, D*)和value function的值;在未达到均衡时,我们将生成器G固定,去寻找当前下最优的判别器DG*,请给出DG*和此时的value function。至此的答案都很容易在原论文中找到,这里进一步发问,倘若固定D,我们将G优化到底,那么解GD*和此时的value function是什么?
2
发明GANs的初衷是为了更好地对概率生成模型作估计,我们知道在应用传统概率生成模型(如:马尔科夫场、贝叶斯网)时会涉及大量难以完成的概率推断计算,GANs是如何避开这类计算的?
3
实验中训练GANs的过程会如描述的那么完美吗,求解的最小化目标函数
在训练中会遇到什么问题,你有什么解决方案?
解答与分析
1
在minimax游戏里,判别器的目标是将来自实际数据集的样本识别为真实样本,同时将来自生成器的样本识别为模拟样本。简单地看,这是一个二分类问题,损失函数自然是negative log-likelihood,也称为categorical cross-entropy loss或cross-entropy loss,即:
其中,D(x)表示判别器D预测x为真实样本的概率,p(data|x)和p(g|x)分别表示x为真实样本和模拟样本的后验概率。另外,p(x) = Psrc(s = data)P(x|data) + Psrc(s = g)P(x|g), 这里的P(x|data)即pdata(x)表示从实际数据集获取样本x的概率,P(x|g)即pg(x)表示从生成器生成样本x的概率。由于假定实际数据集的和生成器的样本各占一半,即Psrc(s = data) = Psrc(s = g) = 1/2,我们可以得到
因此,判别器最小化L(D)的过程可以化作最大化如下value function:
同时,作为另一方的生成器G最小化该value function,故这个minimax游戏可表示为:
我们发现在优化G的过程中,最小化value function本质是在最小化生成器样本分布Pg与真实样本分布Pdata的Jensen-Shannon divergenceJSD(Pdata||Pg)。
进一步考虑最终达到的均衡点,JSD(pdata||pg)的最小值在Pdata = Pg取到零,故最优解G*满足x = G*(z)~Pdata(x),D*满足D*(x)≡1/2,此时value function的值为V(G*, D*) =﹣㏒4。
进一步,在训练时如果给定D求解当下最优的G,我们可以得到什么?
我们不妨假设G'表示前一步的生成器,给出的D是G'下的最优判别器,即
那么,当前G的最小化目标变为
2
传统概率生成模型要定义一个描述概率分布的表达式P(X),通常是一个联合概率分布的密度函数P(X1, X2,…, XN),然后基于此表达式做最大似然估计。这个过程少不了做概率推断计算,如:计算边缘概率P(Xi),计算条件概率P(Xi|Xj),计算作分母的partition function等。当随机变量很多时,概率模型会变得十分复杂,做概率计算变得非常困难,即使做大量近似计算,效果常不尽人意。而GANs在刻画概率生成模型时,并不对概率密度函数P(X)直接建模,而是通过直接制造样本X,间接地体现出分布P(X),就是说我们实际上看不到P(X)的一个表达式。那么怎么做呢?
我们知道,如果有两个随机变量Z和X,且它们之间存在某种映射关系,X =f(Z),那么它们各自的概率分布PX(X)和PZ(Z)也存在某种映射关系。当Z, X∈R都是一维随机变量时,
当Z, X是高维随机变量时,导数变成Jacobian矩阵,为PX = J PZ。因此,已知Z的分布,我们对随机变量之间的转换函数f直接建模,就唯一确定了X的分布。
这样,不仅避开了大量复杂的概率计算,而且给了f更大的发挥空间,我们可以用神经网络来刻画f。我们知道,近些年神经网络领域大踏步向前发展,涌现出一批新技术来优化网络结构,除了经典的CNN和RNN结构,ReLu激活函数、Batch Normalization、Dropout等,都可以自由地添加到生成器的网络中,大大增强了生成器的表达能力。
3
在实际训练中,早期阶段的生成器G很差,生成的模拟样本很容易被判别器D识别,使得D回传给的G梯度非常非常小,达不到训练G的目的,这个现象称为优化饱和。为什么会出现这种现象呢?回答这个问题前,我们将判别器D的sigmoid输出层的前一层记为o,那么D(x)可表示成D(x) = sigmod(o(x)),当输入的是一个真实样本时x~Pdata,当输入的是一个模拟样本时x =G(z;θg), z~pz。我们看判别器D的导数形式
训练生成器的loss项的导数形式为
此时生成器获得的导数基本为零,这说明判别器强大后对生成器的帮助反而变得微乎其微。怎么办呢?
推荐阅读
【深度】中国工程程院院士高文:从大数据科学到人工智能的迁移过程
【干货】新一代人工智能发展白皮书(2017)(附完整版PDF)
【爱看论文】BRAVE组系列研究进展之“视听模态的生成”(AAAI2018论文)【爱看论文】BRAVE组研究进展之三“智能体之间的知识迁移”(AAAI2018论文)【爱看论文】用CNN分类100,000类图片
【爱看论文】搞懂“学习率”,一篇就够了【爱看论文】详解深度学习中的Normalization,不只是BN
【爱看论文】不放过任何细节 “火眼金睛”Tiny Faces算法简介
GitHub上最好的30个开源机器学习项目【重磅】Facebook物体检测平台宣布开源! Mask R-CNN源代码终于来了!【业界】深度学习引擎的终极形态是什么?【业界】终于有人把激光雷达的原理聊透了!
【业界】斯坦福大学10张图剖析人工智能发展新趋势
【业界】硅谷银行2018创新经济与投资预测
我们是一家技术服务公司,汇集⼈⼯智能领域的智库资源,为各级政府和企业提供科技信息咨询、技术孵化、技术对接、⼈⼯智能技术培训、科技交流等服务。欢迎与我们联系,将您对技术的需求告诉我们。