在这个系列中,我们尝试从能量的视角理解 GAN。我们会发现这个视角如此美妙和直观,甚至让人拍案叫绝。
上一篇文章里,我们给出了一个直白而用力的能量图景,这个图景可以让我们轻松理解 GAN 的很多内容,换句话说,通俗的解释已经能让我们完成大部分的理解了,并且把最终的结论都已经写了出来。
在这篇文章中,我们继续从能量的视角理解 GAN,这一次,我们争取把前面简单直白的描述,用相对严密的数学语言推导一遍。
跟第一篇文章一样,对于笔者来说,这个推导过程依然直接受启发于 Bengio 团队的新作Maximum Entropy Generators for Energy-Based Models。
原作者的开源实现:https://github.com/ritheshkumar95/energy_based_generative_models
本文的大致内容如下:
1. 推导了能量分布下的正负相对抗的更新公式;
2. 比较了理论分析与实验采样的区别,而将两者结合便得到了 GAN 框架;
3. 导出了生成器的补充 loss,理论上可以防止 mode collapse;
4. 简单提及了基于能量函数的 MCMC 采样。
数学视角的能量
在这部分中,我们先来简单引入能量模型,并且推导了能量模型理论上的更新公式,指出它具有正相、负相对抗的特点。
能量分布模型
首先,我们有一批数据 x1, x2, … , xn∼p(x),我们希望用一个概率模型去拟合它,我们选取的模型为:
其中 Uθ 是带参数 θ 的未定函数,我们称为“能量函数”,而 Zθ 是归一化因子(配分函数)。
这样的分布可以称为“能量分布”,在物理中也被称为“玻尔兹曼分布”。
至于为什么选择这样的能量分布,解释有很多,既可以说是从物理角度受到启发,也可以说是从最大熵原理中受到启发,甚至你也可以简单地认为只是因为这种分布相对容易处理而已。但不可否认,这种分布很常见、很实用,我们用得非常多的 softmax 激活,其实也就是假设了这种分布。
现在的困难是如何求出参数 θ 来,而困难的来源则是配分函数 (2) 通常难以显式地计算出来。当然,尽管实际计算存在困难,但不妨碍我们继续把推导进行下去。
正负相的对抗
为了求出参数 θ ,我们先定义对数似然函数:
我们希望它越大越好,也就是希望下式越小越好:
为此,我们对 Lθ 使用梯度下降。我们有:
所以:
这意味着梯度下降的更新公式是:
注意到式 (6) 的特点,它是分别在真实分布下和拟合分布下的均值之差,这就是机器学习中著名的“正相”和“负相”的分解,式 (6) 体现了正负相之间的对抗,也有人将其对应为我们做梦的过程。
扬长避短 ⇒ GAN
在这部分中,我们表明“容易分析”与“容易采样”是很难兼容的,容易理论分析的模型,在实验上难以采样计算,而容易采样计算的模型,难以进行简明的理论推导。而试图将两者的优点结合起来,就得到了 GAN 模型。
理论分析与实验采样
事实上,式 (6) 和式 (7) 表明我们开始假设的能量分布模型的理论分析并不困难,但是落实到实验中,我们发现必须要完成从 qθ 中采样:。也就是说,给定一个具体的,我们要想办法从中采样出一批 x 出来。
然而,就目前而言,我们对从中采样并没有任何经验。对于我们来说,方便采样的是如下的过程:
这里的 q(z) 代表着标准正态分布。也就是说,我们可以从标准正态分布中采样出一个 z 出来,然后通过固定的模型 Gφ 变换为我们想要的 x。这意味着这种分布的理论表达式是:
问题是,如果用 qφ(x) 代替原来的 qθ(x),那么采样是方便了,但是类似的理论推导就困难了,换句话说,我们根本推导不出类似 (7) 的结果来。
GAN诞生记
那么,一个异想天开的念头是:能不能把两者结合起来,在各自擅长的地方发挥各自的优势?
式 (7) 中的不是难以实现吗,那我只把这部分用代替好了:
也就是:
现在采样是方便了,但前提是 qφ(x) 跟 qθ(x) 足够接近才行呀(因为 qθ(x) 才是标准的、正确的),所以,我们用 KL 散度来度量两者的差异:
式 (11) 有效的前提是 qφ(x) 跟 qθ(x) 足够接近,也就是上式足够小,而对于固定的 qθ(x),Zθ 是一个常数,所以 φ 的优化目标是:
这里代表 qφ(x) 的熵。−Hφ(X) 希望熵越大越好,这意味着多样性;希望图片势能越小越好,这意味着真实性。
另外一方面,注意到式 (11) 实际上是目标的梯度下降公式。
所以我们发现,整个过程实际上就是 (14) 和 (13) 的交替梯度下降。而正如第一篇所说的,θ 的这个目标可能带来数值不稳定性,基于第一篇所说的理由,真样本应该在极小值点附近,所以我们可以把梯度惩罚项补充进 (14),得到最终的流程是:
这便是基于梯度惩罚的 GAN 模型,我们在能量视角下的GAN模型(一)中已经把它“头脑风暴”出来了,而现在我们从能量模型的数学分析中把它推导出来了。
所以说,GAN 实际上就是能量模型和采样模型各自扬长避短的结果。
直击H(X)!
现在,距离完整地实现整个模型,就差 Hφ(X) 了。我们已经说过:
代表 qφ(x) 的熵,而 qφ(x) 的理论表达式是 (9),积分难以计算,所以 Hφ(X) 也难以计算。
打破这一困境的思路是将熵转化为互信息,然后转化为互信息的估计,其估计方式有两种:通过 f 散度的方式(理论上精确)估计,或者通过信息下界的方式估计。
最大熵与互信息
首先,我们可以利用 x=Gφ(z) 这一点: x=Gφ(z) 意味着条件概率 qφ(x|z)=δ(x−G(z)),即一个确定性的模型,也可以理解为均值为 G(z) 、方差为 0 的高斯分布 N(x;Gφ(z),0)。
然后我们去考虑互信息 I(X,Z):
现在我们找出了 Iφ(X,Z) 和 Hφ(X) 的关系,它们的差是:
事实上 Hφ(X|Z) 称为“条件熵”。
如果我们处理的是离散型分布,那么因为 x=Gφ(z) 是确定性的,所以 qφ(x|z)≡1,那么 Hφ(X|Z) 为 0,即 Iφ(X,Z)=Hφ(X)。
如果是连续型分布,前面说了可以理解为方差为 0 的高斯分布 N(x;Gφ(z),0),我们可以先考虑常数方差的情况,计算发现是一个常数,然后 σ→0,不过发现结果是无穷大。无穷大原则上是不能计算的,但事实上方差也不需要等于 0,只要足够小,肉眼难以分辨即可。
所以,总的来说我们可以确定互信息 Iφ(X,Z) 与熵 Hφ(X) 只相差一个无关紧要的常数,所以在式 (15 )中,可以将 Hφ(X) 替换为 Iφ(X,Z):
现在我们要最小化 −Iφ(X,Z) ,也就是最大化互信息 Iφ(X,Z)。直观上这也不难理解,因为这一项是用来防止 mode callopse 的,而如果一旦 mode callopse,那么几乎任意的 z 都生成同一个 x,X,Z 的互信息一定不会大。
但是将目标从 Hφ(X) 改为 Iφ(X,Z) ,看起来只是形式上的转换,似乎依然还没有解决问题。但很幸运的是,我们已经做过最大化互信息的研究了,方法在深度学习的互信息:无监督提取特征的“互信息本质”一节,也就是说,直接估算互信息已经有解决方案了,读者直接看那篇文章即可,不再重复论述。
互信息与信息下界
如果不需要精确估计互信息,那么可以使用 InfoGAN 中的思路,得到互信息的一个下界,然后去优化这个下界。
从互信息定义出发:
记 qφ(z|x)=qφ(x|z)q(z)/qφ(x),这代表精确的后验分布;然后对于任意近似的后验分布 p(z|x),我们有:
也就是说,互信息大于等于∬qφ(x|z)q(z)logp(z|x) 加上一个常数。如果最大化互信息,可以考虑最大化这个下界。由于 p(z|x) 是任意的,可以简单假设,其中 E(x) 是一个带参数的编码器,代入计算并省去多余的常数,可以发现相当于在生成器加入一项 loss:
所以,基于 InfoGAN 的信息下界思路,式 (15) 变为:
到这里,我们已经从两个角度完成了 Hφ(X) 的处理,从而完成了整个 GAN 和能量模型的推导。
MCMC提升效果
回顾开头,我们是从能量分布出发推导出了 GAN 模型,而能量函数 U(x) 也就是 GAN 模型中的判别器。既然 U(x) 具有能量函数的含义,那么训练完成后,我们可以利用能量函数的特性做更多有价值的事情,例如引入 MCMC 来提升效果。
MCMC的简介
其实对于 MCMC,我只是略懂它的含义,并不懂它的方法和精髓,所谓“简介”,仅仅是对其概念做一些基本的介绍。MCMC 是“马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo)”,在我的理解里,它大概是这么个东西:我们难以直接从某个给定的分布 q(x) 中采样出样本来,但是我们可以构造如下的随机过程:
其中 α 是一个便于实现的随机过程,比如从二元分布、正态分布采样等。这样一来,从某个 x0 出发,得到的序列 {x1,x2,…,xn,…} 是随机的。
如果进一步能证明式 (24) 的静态分布正好是 q(x),那么就意味着序列 {x1,x2,…,xn,…} 正是从 q(x )中采样出来的一批样本,这样就实现了从 q(x) 中采样了,只不过采样的结果经过了一定的顺序排列。
Langevin方程
式 (24) 的一个特例是 Langevin 方程:
它也称为随机微分方程,当 ε→0 时,它的静态分布正好是能量分布:
也就是说,给定能量函数 U(x) 后,我们可以通过式 (25) 实现从能量分布中采样,这就是能量分布的 MCMC 采样的原始思想。
当然,直接从能量函数和式 (25) 中采样 x 可能不大现实,因为 x 维度(常见的情景下,x 代表图片)过大,可控性难以保证。另一方面,式 (25) 最后一项是高斯噪声,所以只要 ε≠0,那么结果必然是有噪声的,图片真实性也难以保证。
一个有趣的转化是:我们可以不直接考虑 x 的 MCMC 采样,而考虑 z 的采样。因为在前面的模型中,我们最后既得到了能量函数 Uθ(x),也得到了生成模型 Gφ(z),这意味着 z 的能量函数为:
有了 z 的能量函数,我们可以通过式 (25) 实现 z 的 MCMC 采样:
这样刚才说的问题全部都没有了,因为 z 的维度一般比 x 小得多,而且也不用担心 ε≠0 带来噪声,因为 z 本来就是噪声。
更好的截断技巧
到这里,如果头脑还没有混乱的读者也许会回过神来: z 的分布不就是标准的正态分布吗?采样起来不是很容易吗?为啥还要折腾一套 MCMC 采样?
理想情况下,z 的能量函数 Uθ(Gφ(z)) 所对应的能量分布:
确实应该就是我们原始传递给它的标准正态分布 q(z)。但事实上,理想和现实总有些差距的,当我们用标准正态分布去训练好一个生成模型后,最后能产生真实的样本的噪声往往会更窄一些,这就需要一些截断技巧,或者说筛选技巧。
比如,基于flow的生成模型在训练完成后,往往使用“退火”技巧,也就是在生成时将噪声的方差设置小一些,这样能生成一些更稳妥的样本,可以参考细水长flow之NICE:流模型的基本概念与实现。而去年发布的 BigGAN,也讨论了 GAN 中对噪声的截断技巧。
如果我们相信我们的模型,相信能量函数 Uθ(x) 和生成模型 Gφ(z) 都是有价值的,那么我们有理由相信会是一个比标准正态分布更好的 z 的分布(能生成更真实的 x 的 z 的分布,因为它将 Gφ(z) 也纳入了分布的定义中),所以从采样会优于从 q(z) 采样,也就是说 MCMC 采样 (28) 能够提升采样后的生成质量,原论文已经验证了这一点。我们可以将它理解为一种更好的截断技巧。
更高效的MALA
采样过程 (28) 其实依然会比较低效,原论文事实上用的是改进版本,称为 MALA(Metropolis-adjusted Langevin algorithm),它在 (28) 的基础上进一步引入了一个筛选过程:
这里:
也就是说以概率 γ 接受,以 1−γ 的概率保持不变。按照维基百科上的说法,这样的改进能够让采样过程更有机会采样到高概率的样本,这也就意味着能生成更多的真实样本(笔者并不是很懂这一套理论,所以,只能照搬了)。
有力的能量视角
又是一篇公式长文,总算把能量分布下的 GAN 的数学推导捋清楚了,GAN 是调和“理论分析”与“实验采样”矛盾的产物。总的来说,笔者觉得整个推导过程还是颇具启发性的,也能让我们明白 GAN 的关键之处和问题所在。
能量视角是一个偏向数学物理的视角,一旦能将机器学习和数学物理联系起来,还将可以很直接地从数学物理处获得启发,甚至使得对应的机器学习不再“黑箱”,这样的视角往往让人陶醉,给人一种有力的感觉。