GAN介绍 - 介绍 https://blog.csdn.net/sean2100/article/details/83662975
GAN介绍 - 为什么学习生成式模型? https://blog.csdn.net/sean2100/article/details/83681043
GAN介绍 - 生成式模型是如何工作的? GAN与其他模型有什么区别?https://blog.csdn.net/sean2100/article/details/83907062
GAN介绍 - 提示与技巧 https://blog.csdn.net/sean2100/article/details/83964523
GAN介绍 - 相关研究课题 https://blog.csdn.net/sean2100/article/details/84010202
GAN介绍 - 即插即用生成网络(PPGN) https://blog.csdn.net/sean2100/article/details/84032930
GAN介绍 - 练习题 https://blog.csdn.net/sean2100/article/details/84037752
GAN介绍 - 练习题答案 https://blog.csdn.net/sean2100/article/details/84037768
GAN介绍 - 总结 https://blog.csdn.net/sean2100/article/details/84010467
Apr 29, 2017
我们已经了解了生成式模型的用途以及它值得去使用的原因。 现在我们可能要问, 它是如何工作的, 特别是GAN是如何工作的,以及GAN与其他生成式方法的区别?
为了简化讨论, 我们先分析使用最大似然原理的生成式模型。当然并不是所有的生成式模型都使用最大似然。 有些生成式模型默认不使用最大似然, 但是也可以做一些修改让其使用最大似然 (GAN就属于这一类)。 通过忽略不使用最大似然的模型,并且分析那些本来通常不使用最大似然的模型的最大似然版本,可以排除很多的干扰,让我们的分析变得简单。
最大似然估计是用来估计概率模型参数θθ的一种方法。 最大似然方法的基本思路是定义一个模型来对概率分布进行估计。 给定一个数据集包含mm个训练样本x(i)x(i), 然后使用似然(likelihood)表示模型在训练数据集上的概率, 也就是: ∏mi=1pmodel(x(i);θ)∏i=1mpmodel(x(i);θ)。
简单的说, 最大似然的原理是通过优化模型参数来最大化在训练数据上的预测概率。 在对数空间最容易达到此目的; 我们通常计算一个算术和,而不是针对每一个样本进行处理。 通过使用算术和使得对应模型的似然的导数的数学表达变得简单, 并且当在数字计算机上计算时, 其对数值问题不敏感, 比如说,当对几个很小的概率值进行相乘计算时会出现下溢(underflow)问题。
在方程式2中, 我们使用了以下特性: argmaxvf(v)=argmaxvlogf(v)argmaxvf(v)=argmaxvlogf(v), 对于正数vv, 对数函数可以保证对所有范围的值进行最大化,却不影响最大化的区域。
最大似然处理过程可以参考图8.
图8: 最大似然估计过程包含: 首先根据数据生成的分布来采样一些样本来构建训练数据集, 然后通过提高模型在这些数据上概率值,来最大化此训练数据上的似然。 这张图展示了一个针对一维数据的高斯模型, 我们可以看到不同的数据点会拉高密度函数的不同的部分。 由于这个密度函数的总和必须是1,所以不可能将所有点都拉高到最大的概率; 随着一个点被拉高将不可避免的使其他的地方被拉低。 最终的密度函数是所有局部点的向上力的一个平衡。
我们也可以认为最大似然估计是最小化数据生成分布(data generating distriution)与模型分布的KL散度:
理想情况下,如果pdatapdata是pmodel(x;θ)pmodel(x;θ)分布的一种分布, 那么模型就可以很好的覆盖pdatapdata。 在实际应用中, 我们无法获取pdatapdata本身, 只能使用包含有mm个样本的训练数据集。 使用这mm个样本可以定义一个经验性分布^pdatap^data来近似pdatapdata。 最小化^pdatap^data与pdatapdata的KL散度等价于在训练数据集上最大化对数似然(log-likelihood)。
关于更多的最大似然以及其他统计估计方法的内容, 请参考Goodfellow et al. (2016)的第五章。
如果我们只分析使用最大似然的深度生成模型, 那么我们可以通过计算其似然和梯度,或者对这些数值的近似计算的方式来比较几个模型。 正如我们前面提到过的,很多模型经常使用最大似然以外的原理, 为了降低比较的复杂度,我们可以评价他们的最大似然变量。 根据这种思路, 我们制作了图9的分类。 树中每一个叶子节点都有各自优点和缺点。 GAN被设计来避免以前存在的很多缺点, 当然GAN也有自身的一些新的缺点。
图9: 深度生成模型可以使用最大似然的原理进行训练,不同方法的差异在于如何表达或者近似似然。 在此分类树的左边的分支, 模型构建了一个显式的密度函数,pmodel(x;θ)pmodel(x;θ), 因此我们可以最大化一个显式的似然。 在这些使用显式密度的模型中, 密度函数的计算有的很容易,有的不容易, 这意味着,有时需要使用变分近似(variational approximations),或者Monte Carlo近似(或者两者)来最大化似然。 右边的分支,模型没有显式的表达一个数据空间的概率分布。 取而代之的是,模型提供一些方法来尽量少的直接的与概率分布打交道。 通常, 这种与概率分布交互的非直接方法提供了产生样本的能力。 有一些这种隐式的模型使用Markov chain来提供从数据分布中采样的能力,此类模型定义了一种通过随机转换一个已知的样本来得到属于同一个分布的另一个样本的方式。 有些方法可以在不需要任何输入情况下,通过一个简单的步骤产生一个样本。 尽管GAN使用的模型有时能被用来定义显式的密度, 但是GAN的训练算法仅仅使用模型的能力来产生样本。 因此, GAN使用最右边叶子的策略来训练的, 也就是使用一个隐式的模型通过此模型直接产生符合分布的样本。
图9的左边分支显示了使用显式密度函数的模型 pmodel(x;θ)pmodel(x;θ)。 对于这类模型, 可以直接最大化其似然: 我们可以简单的将模型的密度函数的定义加入到似然的表达式中, 然后使用梯度优化方法进行优化。
显式密度函数模型的主要的难点是要定义一个可以表达所有需要生成数据复杂度的显式密度模型,同时确保其可计算性。 有两种策略可以来处理此问题: (1) 仔细的构建一个可以保证易运算的模型结构, 如2.3.1章中介绍的内容, (2) 使用那些对似然以及其梯度容易进行近似处理的模型, 如2.3.2章中介绍的内容。
图9最左边的分支的模型是容易进行计算的显式密度模型。 这种模型目前有两种流行的方法: 完全可见置信网络(Fully visible belief network) 和 非线性独立成分分析(nonlinear independent components analysis)。
完全可见置信网络 Fully visible belief networks (FVBN)
FVBN(Frey et al., 1996, Frey, 1998)模型通过使用概率的链式规则来将一个nn维的向量xx的概率分布分解为一个一维的概率分布:
FVBNs与GAN以及变分autoencoder是当前三个最流行的生成式网络。 他们构成了DeepMind的复杂生产模型的基础, 比如WaveNet(Oord et al. 2016). WaveNet可以生成逼真的人的语音。 FVBNs的主要缺点是每一次计算只能生成一个条目(图像中,可以认为是一个点, WaveNet指一个frame): 首先 x1x1, 然后 x2x2, 所以一个样本的生成复杂度为 O(n)O(n)。 最新的FVBN,比如WaveNet, 每一个xixi的分布都使用深度神经网络来计算, 所以每一个nn步生成都意味着很大的计算量。 并且,这些步骤是不能并行计算的。 WaveNet计算1秒的语音需要两分钟的计算, 所以还不能被用于实际的交互对话系统中。 GAN被设计为能够并行的生成xx, 有很高的生成速度。
非线性独立成分分析
另一种显式密度模型的深度网络是基于对两个不同空间的连续的, 非线性转换。 假如, 如果有一个隐变量,向量zz,和一个连续, 可微(differentiable), 可逆的(invertible)转换矩阵gg, 可以让g(z)g(z)通过基于xx空间的模型来产生样本, 也就是指:
如果密度pzpz是和g−1g−1的雅可比行列式都是可计算的,那么密度pxpx也是可计算的。 换句话说, 一个简单的关于zz的分布与一个通过复杂的方式对空间进行变形(warp space)的gg相结合,可以产生一个关于xx的复杂分布。 如果gg经过仔细的设计, 那么密度也是可计算的。 使用非线性gg函数的模型可以追溯到至少Deco and Brauer (1995)。 最近的工作是Real NVP(Dinh et al., 2016). 图10展示了使用Real NVP产生的ImageNet样本。 非线性ICA模型的主要缺点是对函数gg的选择有很多的限制。 特别是因为有可逆的需求,所以隐变量zz必须和xx有相同的维数。 GAN被设计为对gg有很少的要求, 特别的是允许zz的维数高于xx。
图10: 使用Real NVP模型产生的样本, 模型使用64x64的ImageNet图像训练。
有关FVBN使用的基于链式规则的概率,以及非线性ICA模型中的确定性转换(Deterministic transformations)对概率密度的影响的更多内容请参考Goodfellow et al.(2016)的第3章。
总之, 显式的易计算机密度的模型是很有效的, 因为他们允许在训练数据上直接对对数似然进行优化。 但是, 这类模型很有限,并且每种模型都有一些缺点。
为了克服显式密度函数由于模型设计的需要带来的缺陷, 出现了另外一些模型, 这类模型仍然使用显式的密度函数,但是却不易计算, 需要使用近似的方式来优化最大似然。
这类方法可以分为两类: 决定式近似, 通常指变分方法(Variational methods), 以及随机近似, 通常指Markov Chain Monte Carlo 方法。
变分近似
变分方法定义一个下界
学习算法通过最大化LL至少可以保证得到一个与LL的同样高的对数似然值。 对于很多的模型来说, 即便是其对数似然不可计算,我们也可以设计一个易处理的LL。 当前,最流行的深度生成模型的变分方法是变分autoencoder(Kingma, 2013; Rezende et al., 2014) 或者被称为VAE(Variational autoencoder)。 VAE是当前最流行的三种生成模型之一。 主要的缺点是, 当使用很弱的一个近似的后验分布或者先验分布时[备注2], 即便是有大量的数据并进行了完美的优化, LL与真实似然的差距会导致pmodelpmodel无法表达真实的数据pdatapdata。 GAN属于没有偏差的设计, 当有足够大的模型以及充足的数据时,GAN的游戏的纳什平衡点对应着对pdatapdata表达的最优解。 在实际应用中, 变分方法可以得到很好的似然, 但是产生的样本质量很差 (因为没有好的办法去定量的评价样本的质量, 所以这个说法是一个主观的观点, 不是一个有事实根据的说法)。 图11给出了一些VAE生成的图像。 但是很难来说明是由于GAN那一点设计导致了更高质量的样本, 只是GAN通常被人们认为可以产生高质量的样本。 与FVBN比较, VAE被认为更难优化, 但是GAN并不是用来解决此问题的。 关于变分近似的更多的信息请参考Goodfellow et al. (2016) 第19章。
图11: VAE生成的样本(CIFAR-10数据集), 此图来源于Kingma et al. (2016)
备注2: 经验上来说, VAE使用很灵活的先验,或者很灵活的近似后验来更加靠近我们的对数似然LL(Kingma et al 2016; Chen et al., 2016b)。 当然, 关于目标函数边界和最大边界的差距的测试还在继续; 当然通过最大化目标函数来测度差距, 应该更好,却不可行。 VAE获得似然效果可以媲美其他的模型, 表明它也靠近最大的目标函数。 私下里, L. Dinh, D. Kingma猜想下面的这类模型(Dinh et al., 2014; Rezende and Mohamed, 2015; Kingma et al., 2016; Dinh et al., 2016)作为VAE的先验,或者近似后验,将会是全局优化器。 如果这些可以证明的话,那么VAE可以认为是渐近一致的。
马尔可夫链近似
多数的深度学习算法使用随机优化, 最终是通过随机选择少量的训练数据组成minibatch,在minibatch上来最小化期望误差。 通常,只要一个合理的样本可以被快速的生成 (比如,从训练集中选择一个样本是很简单的操作) 并且只要样本的方差不是太高, 基于采样的近似就会工作的很好。 有些模型需要使用马尔可夫链技术来生成更豪华的样本。 一个马尔可夫链通过不断的重复生成样本x′∼q(x′|x)x′∼q(x′|x)来学习生成样本。 通过使用转换操作器qq来不断的重复更新x′x′, 马尔可夫链方法有时可以保证x′x′可以完全的收敛到一个来自pmodel(x)pmodel(x)的样本。 不幸的是,这个收敛过程特别的慢, 并且没有好的办法去评价是否收敛, 因此实际应用中,经常使用一个没有很好收敛的x′x′. 在高维空间, 马尔可夫链效果会变差。 玻尔兹曼机(Boltzmann Machines)(Fahlman et al., 1983; Ackley et al., 1985; Hinton et al., 1984; Hinton and Sejnowski, 1986)属于生成式模型,它依赖马尔可夫链来训练模型或者使用模型生成样本。 玻尔兹曼机是深度学习复兴开始的一个很重要的部分(Hinton et al., 2006; Hinton, 2007), 但是现在已经很少被使用了, 很可能是因为马尔可夫链近似技术不能被适用于像ImageNet的生成问题。 并且,即便是马尔可夫链方法可以很好的用于训练, 但是使用一个基于马尔可夫链的模型生成样本是很不合算的。 相比单步生成方法, 多步的马尔可夫链方法有很大的计算量。 因为这些原因GAN被设计为避免使用马尔可夫链。 关于详细的马尔可夫链,蒙特卡罗近似请参考Goodfellow et al. (2016)第18章。 关于玻尔兹曼机请参考第20章。
有些模型同时使用变分和马尔可夫链近似。 比如深度玻尔兹曼机使用这两种近似(Salakhutdinov and Hinton, 2009)。
有一些模型不需要定义显式的密度函数就可以被训练。 这些模型提供了一种与pmodelpmodel间接的交互的方法, 通常是使用它们(也就是pmodelpmodel)的采样数据。 图9中的右边的分支就是这种情况。
有些隐式模型基于根据pmodelpmodel绘制样本的方法, 这种模型定义了一个马尔可夫链转换操作, 此种方法需要运行很多次来获得一个样本。 最主要的例子是生成随机网络(Bengio et al., 2014)。 正如2.3.2章提到的, 马尔可夫链无法处理高维空间问题,并且对于生成模型来说造成了计算量的提高。 GAN被设计为避免此问题。
最后, 图9最右边的分支是隐式模型, 此种模型通过一个步就可以生成样本。 在GAN提出的时候, GAN是属于此类的唯一方法, 但是从那以后, GAN和其他的基于Kernelized momentmatching方法被联合使用 (Li et al., 2015; Dziugaite et al., 2015)。
总而言之, GAN被设计为可以避免很多的其他生成模型的缺点:
它可以并行产生样本, 而不是使用运行时间与xx的维数成比例的方法。 这一点比FVBN有优势。
生成函数设计有很少的限制。 这一点是针对玻尔兹曼机的优势, 只有少数的概率分布能够被马尔可夫链来处理, 并且相比非线性ICA, 生成器必须是可逆的,并且隐变量编码zz必须与样本xx同维。
不需要马尔可夫链。 这一点比玻尔兹曼机和生成随机网络有优势。
不需要变分边界, 并且那些被用于GAN的模型是全局优化器, 所以GAN是渐近一致的(asymptotically consistent)。 一些VAE也可能是渐近一致,但是还没有被证明。
GAN通常被认为比其他方法可以产生更好的样本。
同时, GAN也有一些缺点: 训练需要找到纳什均衡, 这是一个比优化一个目标函数更难的问题。
[最终修改于: 2017年6月7日]
转自:https://sinpycn.github.io/2017/04/29/GAN-Tutorial-How-do-generative-models-work.html