能量视角下的GAN模型(二):GAN=“分析”+“采样”
By 苏剑林 | 2019-02-15 | 131953位读者 |在这个系列中,我们尝试从能量的视角理解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采样。
数学视角的能量 #
在这部分中,我们先来简单引入能量模型,并且推导了能量模型理论上的更新公式,指出它具有正相、负相对抗的特点。
能量分布模型 #
首先,我们有一批数据$x_1,x_2,\dots,x_n\sim p(x)$,我们希望用一个概率模型去拟合它,我们选取的模型为
\begin{equation}q_{\theta}(x) = \frac{e^{-U_{\theta}(x)}}{Z_{\theta}}\end{equation}
其中$U_{\theta}$是带参数$\theta$的未定函数,我们称为“能量函数”,而$Z_{\theta}$是归一化因子(配分函数)
\begin{equation}Z_{\theta} = \int e^{-U_{\theta}(x)}dx\label{eq:z}\end{equation}
这样的分布可以称为“能量分布”,在物理中也被称为“玻尔兹曼分布”。
至于为什么选择这样的能量分布,解释有很多,既可以说是从物理角度受到启发,也可以说是从最大熵原理中受到启发,甚至你也可以简单地认为只是因为这种分布相对容易处理而已。但不可否认,这种分布很常见、很实用,我们用得非常多的softmax激活,其实也就是假设了这种分布。
现在的困难是如何求出参数$\theta$来,而困难的来源则是配分函数$\eqref{eq:z}$通常难以显式地计算出来。当然,尽管实际计算存在困难,但不妨碍我们继续把推导进行下去。
正负相的对抗 #
为了求出参数$\theta$,我们先定义对数似然函数:
\begin{equation}\mathbb{E}_{x\sim p(x)} \big[\log q_{\theta}(x)\big]\end{equation}
我们希望它越大越好,也就是希望
\begin{equation}L_{\theta}=\mathbb{E}_{x\sim p(x)} \big[-\log q_{\theta}(x)\big]\end{equation}
越小越好,为此,我们对$L_{\theta}$使用梯度下降。我们有
\begin{equation}\begin{aligned}\nabla_{\theta}\log q_{\theta}(x)=&\nabla_{\theta}\log e^{-U_{\theta}(x)}-\nabla_{\theta}\log Z_{\theta}\\
=&-\nabla_{\theta} U_{\theta}(x)-\frac{1}{Z_{\theta}}\nabla_{\theta} Z_{\theta}\\
=&-\nabla_{\theta} U_{\theta}(x)-\frac{1}{Z_{\theta}}\nabla_{\theta} \int e^{-U_{\theta}(x)}dx\\
=&-\nabla_{\theta} U_{\theta}(x)+\frac{1}{Z_{\theta}} \int e^{-U_{\theta}(x)}\nabla_{\theta} U_{\theta}(x) dx\\
=&-\nabla_{\theta} U_{\theta}(x)+\int \frac{e^{-U_{\theta}(x)}}{Z_{\theta}}\nabla_{\theta} U_{\theta}(x) dx\\
=&-\nabla_{\theta} U_{\theta}(x)+\mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]
\end{aligned}\end{equation}
所以
\begin{equation}\nabla_{\theta} L_{\theta} = \mathbb{E}_{x\sim p(x)}\big[\nabla_{\theta} U_{\theta}(x)\big] - \mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]\label{eq:q-grad}\end{equation}
这意味着梯度下降的更新公式是
\begin{equation}\theta \leftarrow \theta - \varepsilon \Big(\mathbb{E}_{x\sim p(x)}\big[\nabla_{\theta} U_{\theta}(x)\big] - \mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]\Big)\label{eq:q-grad-gd}\end{equation}
注意到式$\eqref{eq:q-grad}$的特点,它是$\nabla_{\theta} U_{\theta}(x)$分别在真实分布下和拟合分布下的均值之差,这就是机器学习中著名的“正相”和“负相”的分解,式$\eqref{eq:q-grad}$体现了正负相之间的对抗,也有人将其对应为我们做梦的过程。
扬长避短 ⇒ GAN #
在这部分中,我们表明“容易分析”与“容易采样”是很难兼容的,容易理论分析的模型,在实验上难以采样计算,而容易采样计算的模型,难以进行简明的理论推导。而试图将两者的优点结合起来,就得到了GAN模型。
理论分析与实验采样 #
事实上,式$\eqref{eq:q-grad}$和式$\eqref{eq:q-grad-gd}$表明我们开始假设的能量分布模型的理论分析并不困难,但是落实到实验中,我们发现必须要完成从$q_{\theta}$中采样:$\mathbb{E}_{x\sim q_{\theta}(x)}$。也就是说,给定一个具体的$U_{\theta}(x)$,我们要想办法从$q_{\theta}(x)=e^{-U_{\theta}(x)}/Z_{\theta}$中采样出一批$x$出来。
然而,就目前而言,我们对从$q_{\theta}(x)=e^{-U_{\theta}(x)}/Z_{\theta}$中采样并没有任何经验。对于我们来说,方便采样的是如下的过程
\begin{equation}z\sim q(z),\quad x = G_{\varphi}(z)\end{equation}
这里的$q(z)$代表着标准正态分布。也就是说,我们可以从标准正态分布中采样出一个$z$出来,然后通过固定的模型$G_{\varphi}$变换为我们想要的$x$。这意味着这种分布的理论表达式是:
\begin{equation}q_{\varphi}(x) = \int \delta\big(x - G_{\varphi}(z)\big)q(z)dz\label{eq:q-varphi}\end{equation}
问题是,如果用$q_{\varphi}(x)$代替原来的$q_{\theta}(x)$,那么采样是方便了,但是类似的理论推导就困难了,换句话说,我们根本推导不出类似$\eqref{eq:q-grad-gd}$的结果来。
GAN诞生记 #
那么,一个异想天开的念头是:能不能把两者结合起来,在各自擅长的地方发挥各自的优势?
式$\eqref{eq:q-grad-gd}$中的$\mathbb{E}_{x\sim q_{\theta}(x)}$不是难以实现吗,那我只把这部分用$\mathbb{E}_{x\sim q_{\varphi}(x)}$代替好了:
\begin{equation}\theta \leftarrow \theta - \varepsilon \Big(\mathbb{E}_{x\sim p(x)}\big[\nabla_{\theta} U_{\theta}(x)\big] - \mathbb{E}_{x\sim q_{\varphi}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]\Big)\end{equation}
也就是
\begin{equation}\theta \leftarrow \theta - \varepsilon \Big(\mathbb{E}_{x\sim p(x)}\big[\nabla_{\theta} U_{\theta}(x)\big] - \mathbb{E}_{x=G_{\varphi}(z),z\sim q(z)}\big[\nabla_{\theta} U_{\theta}(x)\big]\Big)\label{eq:q-grad-gd-new}\end{equation}
现在采样是方便了,但前提是$q_{\varphi}(x)$跟$q_{\theta}(x)$足够接近才行呀(因为$q_{\theta}(x)$才是标准的、正确的),所以,我们用KL散度来度量两者的差异:
\begin{equation}\begin{aligned}KL\big(q_{\varphi}(x)\big\Vert q_{\theta}(x)\big)=&\int q_{\varphi}(x) \log \frac{q_{\varphi}(x)}{q_{\theta}(x)}dx \\
=& - H_{\varphi}(X) + \mathbb{E}_{x\sim q_{\varphi}(x)}\big[U_{\theta}(x)\big]+\log Z_{\theta}\end{aligned}\end{equation}
式$\eqref{eq:q-grad-gd-new}$有效的前提是$q_{\varphi}(x)$跟$q_{\theta}(x)$足够接近,也就是上式足够小,而对于固定的$q_{\theta}(x)$,$Z_{\theta}$是一个常数,所以$\varphi$的优化目标是:
\begin{equation}\varphi =\mathop{\text{argmin}}_{\varphi} - H_{\varphi}(X) + \mathbb{E}_{x\sim q_{\varphi}(x)}\big[U_{\theta}(x)\big]\label{eq:varphi-gd}\end{equation}
这里$H_{\varphi}(X) = - \int q_{\varphi}(x) \log q_{\varphi}(x) dx$代表$q_{\varphi}(x)$的熵。$- H_{\varphi}(X)$希望熵越大越好,这意味着多样性;$\mathbb{E}_{x\sim q_{\varphi}(x)}[U_{\theta}(x)]$希望图片势能越小越好,这意味着真实性。
另外一方面,注意到式$\eqref{eq:q-grad-gd-new}$实际上是目标
\begin{equation}\theta =\mathop{\text{argmin}}_{\theta} \mathbb{E}_{x\sim p(x)}\big[U_{\theta}(x)\big] - \mathbb{E}_{x=G_{\varphi}(z),z\sim q(z)}\big[U_{\theta}(x)\big]\label{eq:theta-gd}\end{equation}
的梯度下降公式。所以我们发现,整个过程实际上就是$\eqref{eq:theta-gd}$和$\eqref{eq:varphi-gd}$的交替梯度下降。而正如第一篇所说的,$\theta$的这个目标可能带来数值不稳定性,基于第一篇所说的理由,真样本应该在极小值点附近,所以我们可以把梯度惩罚项补充进$\eqref{eq:theta-gd}$,得到最终的流程是:
\begin{equation}\begin{aligned}\theta =&\,\mathop{\text{argmin}}_{\theta} \mathbb{E}_{x\sim p(x)}\big[U_{\theta}(x)\big] - \mathbb{E}_{x=G_{\varphi}(z),z\sim q(z)}\big[U_{\theta}(x)\big] + \lambda \mathbb{E}_{x\sim p(x)}\big[\Vert \nabla_x U_{\theta}(x)\Vert^2\big]\\
\varphi =&\,\mathop{\text{argmin}}_{\varphi} - H_{\varphi}(X) + \mathbb{E}_{x=G_{\varphi}(z),z\sim q(z)}\big[U_{\theta}(x)\big]
\end{aligned}\label{eq:gan-energy}\end{equation}
这便是基于梯度惩罚的GAN模型,我们在《能量视角下的GAN模型(一)》中已经把它“头脑风暴”出来了,而现在我们从能量模型的数学分析中把它推导出来了。
所以说,GAN实际上就是能量模型和采样模型各自扬长避短的结果。
直击$H(X)$! #
现在,距离完整地实现整个模型,就差$H_{\varphi}(X)$了。我们已经说过
\begin{equation}H_{\varphi}(X) = - \int q_{\varphi}(x) \log q_{\varphi}(x) dx\end{equation}
代表$q_{\varphi}(x)$的熵,而$q_{\varphi}(x)$的理论表达式是$\eqref{eq:q-varphi}$,积分难以计算,所以$H_{\varphi}(X)$也难以计算。
打破这一困境的思路是将熵转化为互信息,然后转化为互信息的估计,其估计方式有两种:通过f散度的方式(理论上精确)估计,或者通过信息下界的方式估计。
最大熵与互信息 #
首先,我们可以利用$x=G_{\varphi}(z)$这一点:$x=G_{\varphi}(z)$意味着条件概率$q_{\varphi}(x|z) = \delta\big(x - G(z)\big)$,即一个确定性的模型,也可以理解为均值为$G(z)$、方差为0的高斯分布$\mathcal{N}(x;G_{\varphi}(z),0)$。
然后我们去考虑互信息$I(X,Z)$:
\begin{equation}\begin{aligned}I_{\varphi}(X,Z)=&\iint q_{\varphi}(x|z)q(z)\log \frac{q_{\varphi}(x|z)}{q_{\varphi}(x)}dxdz\\
=&\iint q_{\varphi}(x|z)q(z)\log q_{\varphi}(x|z) dxdz - \iint q_{\varphi}(x|z)q(z) \log q_{\varphi}(x)dxdz\\
=&\int q(z)\left(\int q_{\varphi}(x|z)\log q_{\varphi}(x|z) dx\right)dz + H(X)
\end{aligned}\end{equation}
现在我们找出了$I_{\varphi}(X,Z)$和$H_{\varphi}(X)$的关系,它们的差是
\begin{equation}\int q(z)\left(\int q_{\varphi}(x|z)\log q_{\varphi}(x|z) dx\right)dz\triangleq -H_{\varphi}(X|Z)\end{equation}
事实上$H_{\varphi}(X|Z)$称为“条件熵”。
如果我们处理的是离散型分布,那么因为$x=G_{\varphi}(z)$是确定性的,所以$q_{\varphi}(x|z)\equiv 1$,那么$H_{\varphi}(X|Z)$为0,即$I_{\varphi}(X,Z)=H_{\varphi}(X)$;如果是连续型分布,前面说了可以理解为方差为0的高斯分布$\mathcal{N}(x;G_{\varphi}(z),0)$,我们可以先考虑常数方差的情况$\mathcal{N}(x;G(z),\sigma^2)$,计算发现$H_{\varphi}(X|Z)\sim \log \sigma^2 $是一个常数,然后$\sigma \to 0$,不过发现结果是无穷大。无穷大原则上是不能计算的,但事实上方差也不需要等于0,只要足够小,肉眼难以分辨即可。
所以,总的来说我们可以确定互信息$I_{\varphi}(X,Z)$与熵$H_{\varphi}(X)$只相差一个无关紧要的常数,所以在式$\eqref{eq:gan-energy}$中,可以将$H_{\varphi}(X)$替换为$I_{\varphi}(X,Z)$:
\begin{equation}\begin{aligned}\theta =&\,\mathop{\text{argmin}}_{\theta} \mathbb{E}_{x\sim p(x)}\big[U_{\theta}(x)\big] - \mathbb{E}_{x=G_{\varphi}(z),z\sim q(z)}\big[U_{\theta}(x)\big] + \lambda \mathbb{E}_{x\sim p(x)}\big[\Vert \nabla_x U_{\theta}(x)\Vert^2\big]\\
\varphi =&\,\mathop{\text{argmin}}_{\varphi} - I_{\varphi}(X,Z) + \mathbb{E}_{x=G_{\varphi}(z),z\sim q(z)}\big[U_{\theta}(x)\big]
\end{aligned}\label{eq:gan-energy-2}\end{equation}
现在我们要最小化$- I_{\varphi}(X,Z)$,也就是最大化互信息$I_{\varphi}(X,Z)$。直观上这也不难理解,因为这一项是用来防止mode callopse的,而如果一旦mode callopse,那么几乎任意的$z$都生成同一个$x$,$X,Z$的互信息一定不会大。
但是将目标从$H_{\varphi}(X)$改为$I_{\varphi}(X,Z)$,看起来只是形式上的转换,似乎依然还没有解决问题。但很幸运的是,我们已经做过最大化互信息的研究了,方法在《深度学习的互信息:无监督提取特征》的“互信息本质”一节,也就是说,直接估算互信息已经有解决方案了,读者直接看那篇文章即可,不再重复论述。
互信息与信息下界 #
如果不需要精确估计互信息,那么可以使用InfoGAN中的思路,得到互信息的一个下界,然后去优化这个下界。
从互信息定义出发:
\begin{equation}I_{\varphi}(X,Z)=\iint q_{\varphi}(x|z)q(z)\log \frac{q_{\varphi}(x|z)q(z)}{q_{\varphi}(x)q(z)}dxdz\end{equation}
记$q_{\varphi}(z|x) = q_{\varphi}(x|z)q(z)/q_{\varphi}(x)$,这代表精确的后验分布;然后对于任意近似的后验分布$p(z|x)$,我们有
\begin{equation}\begin{aligned}I_{\varphi}(X,Z)=&\iint q_{\varphi}(x|z)q(z)\log \frac{q_{\varphi}(z|x)}{q(z)}dxdz\\
=&\iint q_{\varphi}(x|z)q(z)\log \frac{p(z|x)}{q(z)}dxdz + \iint q_{\varphi}(x|z)q(z)\log \frac{q_{\varphi}(z|x)}{p(z|x)}dxdz\\
=&\iint q_{\varphi}(x|z)q(z)\log \frac{p(z|x)}{q(z)}dxdz + \int q_{\varphi}(x)KL\Big(q_{\varphi}(z|x) \Big\Vert p(z|x)\Big)dz\\
\geq &\iint q_{\varphi}(x|z)q(z)\log \frac{p(z|x)}{q(z)}dxdz\\
=& \iint q_{\varphi}(x|z)q(z)\log p(z|x) - \underbrace{\iint q_{\varphi}(x|z)q(z)\log q(z) dxdz}_{=\int q(z)\log q(z)dz\,\,\text{是一个常数}}
\end{aligned}\end{equation}
也就是说,互信息大于等于$\iint q_{\varphi}(x|z)q(z)\log p(z|x)$加上一个常数。如果最大化互信息,可以考虑最大化这个下界。由于$p(z|x)$是任意的,可以简单假设$p(z|x)=\mathcal{N}\left(z;E(x),\sigma^2\right)$,其中$E(x)$是一个带参数的编码器,代入计算并省去多余的常数,可以发现相当于在生成器加入一项loss:
\begin{equation}\mathbb{E}_{z\sim q(z)} \big[\Vert z - E(G(z))\Vert^2\big]\end{equation}
所以,基于InfoGAN的信息下界思路,式$\eqref{eq:gan-energy}$变为:
\begin{equation}\begin{aligned}\theta =&\,\mathop{\text{argmin}}_{\theta} \mathbb{E}_{x\sim p(x)}\big[U_{\theta}(x)\big] - \mathbb{E}_{z\sim q(z)}\big[U_{\theta}(G_{\varphi}(z))\big] + \lambda_1 \mathbb{E}_{x\sim p(x)}\big[\Vert \nabla_x U_{\theta}(x)\Vert^2\big]\\
\varphi,E =&\,\mathop{\text{argmin}}_{\varphi,E} \mathbb{E}_{z\sim q(z)}\big[U_{\theta}(G_{\varphi}(z)) + \lambda_2 \Vert z - E(G_{\varphi}(z))\Vert^2\big]
\end{aligned}\label{eq:gan-energy-3}\end{equation}
到这里,我们已经从两个角度完成了$H_{\varphi}(X)$的处理,从而完成了整个GAN和能量模型的推导。
MCMC提升效果 #
回顾开头,我们是从能量分布出发推导出了GAN模型,而能量函数$U(x)$也就是GAN模型中的判别器。既然$U(x)$具有能量函数的含义,那么训练完成后,我们可以利用能量函数的特性做更多有价值的事情,例如引入MCMC来提升效果。
MCMC的简介 #
其实对于MCMC,我只是略懂它的含义,并不懂它的方法和精髓,所谓“简介”,仅仅是对其概念做一些基本的介绍。MCMC是“马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo)”,在我的理解里,它大概是这么个东西:我们难以直接从某个给定的分布$q(x)$中采样出样本来,但是我们可以构造如下的随机过程:
\begin{equation}x_{n+1} = f(x_n, \alpha)\label{eq:suijidigui}\end{equation}
其中$\alpha$是一个便于实现的随机过程,比如从二元分布、正态分布采样等。这样一来,从某个$x_0$出发,得到的序列$\{x_1,x_2,\dots,x_n,\dots\}$是随机的。
如果进一步能证明式$\eqref{eq:suijidigui}$的静态分布正好是$q(x)$,那么就意味着序列$\{x_1,x_2,\dots,x_n,\dots\}$正是从$q(x)$中采样出来的一批样本,这样就实现了从$q(x)$中采样了,只不过采样的结果经过了一定的顺序排列。
Langevin方程 #
式$\eqref{eq:suijidigui}$的一个特例是Langevin方程:
\begin{equation}x_{t+1} = x_t - \frac{1}{2}\varepsilon \nabla_x U(x_t) + \sqrt{\varepsilon}\alpha,\quad \alpha \sim \mathcal{N}(\alpha;0,1)\label{eq:sde}\end{equation}
它也称为随机微分方程,当$\varepsilon\to 0$时,它的静态分布正好是能量分布
\begin{equation}p(x) = \frac{e^{-U(x)}}{Z}\end{equation}
也就是说,给定能量函数$U(x)$后,我们可以通过式$\eqref{eq:sde}$实现从能量分布中采样,这就是能量分布的MCMC采样的原始思想。
当然,直接从能量函数和式$\eqref{eq:sde}$中采样$x$可能不大现实,因为$x$维度(常见的情景下,$x$代表图片)过大,可控性难以保证。另一方面,式$\eqref{eq:sde}$最后一项是高斯噪声,所以只要$\varepsilon\neq 0$,那么结果必然是有噪声的,图片真实性也难以保证。
一个有趣的转化是:我们可以不直接考虑$x$的MCMC采样,而考虑$z$的采样。因为在前面的模型中,我们最后既得到了能量函数$U_{\theta}(x)$,也得到了生成模型$G_{\varphi}(z)$,这意味着$z$的能量函数为
\begin{equation}U_{\theta}(G_{\varphi}(z))\end{equation}
注:这个结果并不是严格成立的,只能算是一个经验公式,严格来讲只有当$G$的雅可比行列式为1时才成立。我也曾在github上跟作者讨论过,他也指出这没有什么严格的理论推导,只是凭直觉来的,详情可以参考:https://github.com/ritheshkumar95/energy_based_generative_models/issues/4
有了$z$的能量函数,我们可以通过式$\eqref{eq:sde}$实现$z$的MCMC采样:
\begin{equation}z_{t+1} = z_t - \frac{1}{2}\varepsilon \nabla_z U_{\theta}(G_{\varphi}(z_t)) + \sqrt{\varepsilon}\alpha,\quad \alpha \sim \mathcal{N}(\alpha;0,1)\label{eq:sde-2}\end{equation}
这样刚才说的问题全部都没有了,因为$z$的维度一般比$x$小得多,而且也不用担心$\varepsilon\neq 0$带来噪声,因为$z$本来就是噪声。
更好的截断技巧 #
到这里,如果头脑还没有混乱的读者也许会回过神来:$z$的分布不就是标准的正态分布吗?采样起来不是很容易吗?为啥还要折腾一套MCMC采样?
理想情况下,$z$的能量函数$U_{\theta}(G_{\varphi}(z))$所对应的能量分布
\begin{equation}q_{\theta,\varphi}(z)=\frac{e^{-U_{\theta}(G_{\varphi}(z))}}{Z}\end{equation}
确实应该就是我们原始传递给它的标准正态分布$q(z)$。但事实上,理想和现实总有些差距的,当我们用标准正态分布去训练好一个生成模型后,最后能产生真实的样本的噪声往往会更窄一些,这就需要一些截断技巧,或者说筛选技巧。
比如,基于flow的生成模型在训练完成后,往往使用“退火”技巧,也就是在生成时将噪声的方差设置小一些,这样能生成一些更稳妥的样本,可以参考《细水长flow之NICE:流模型的基本概念与实现》。而去年发布的BigGAN,也讨论了GAN中对噪声的截断技巧。
如果我们相信我们的模型,相信能量函数$U_{\theta}(x)$和生成模型$G_{\varphi}(z)$都是有价值的,那么我们有理由相信$e^{-U_{\theta}(G_{\varphi}(z))}/Z$会是一个比标准正态分布更好的$z$的分布(能生成更真实的$x$的$z$的分布,因为它将$G_{\varphi}(z)$也纳入了分布的定义中),所以从$e^{-U_{\theta}(G_{\varphi}(z))}/Z$采样会优于从$q(z)$采样,也就是说MCMC采样$\eqref{eq:sde-2}$能够提升采样后的生成质量,原论文已经验证了这一点。我们可以将它理解为一种更好的截断技巧。
更高效的MALA #
采样过程$\eqref{eq:sde-2}$其实依然会比较低效,原论文事实上用的是改进版本,称为MALA(Metropolis-adjusted Langevin algorithm),它在$\eqref{eq:sde-2}$的基础上进一步引入了一个筛选过程:
\begin{equation}\begin{aligned}\tilde{z}_{t+1} =& z_t - \frac{1}{2}\varepsilon \nabla_z U_{\theta}(G_{\varphi}(z_t)) + \sqrt{\varepsilon}\alpha,\quad \alpha \sim \mathcal{N}(\alpha;0,1)\\
\\
z_{t+1} =& \left\{\begin{aligned}&\tilde{z}_{t+1}, \quad \text{如果}\beta < \gamma\\ &z_t, \quad \text{其他情况}\end{aligned}\right.,\quad \beta \sim U[0,1]\\
\\
\gamma =& \min\left\{1, \frac{q(\tilde{z}_{t+1})q(z_t|\tilde{z}_{t+1})}{q(\tilde{z}_{t})q(\tilde{z}_{t+1}|z_t)}\right\}
\end{aligned}\end{equation}
这里
\begin{equation}\begin{aligned}q(z)\propto&\, \exp\Big(-U_{\theta}(G_{\varphi}(z))\Big)\\
q(z'|z)\propto&\, \exp\left(-\frac{1}{2\varepsilon}\Vert z' - z + \varepsilon \nabla_z U_{\theta}(G_{\varphi}(z))\Vert^2\right)
\end{aligned}\end{equation}
也就是说以概率$\gamma$接受$z_{t+1}=\tilde{z}_{t+1}$,以$1-\gamma$的概率保持不变。按照维基百科上的说法,这样的改进能够让采样过程更有机会采样到高概率的样本,这也就意味着能生成更多的真实样本。(笔者并不是很懂这一套理论,所以,只能照搬了~)
有力的能量视角 #
又是一篇公式长文,总算把能量分布下的GAN的数学推导捋清楚了,GAN是调和“理论分析”与“实验采样”矛盾的产物。总的来说,笔者觉得整个推导过程还是颇具启发性的,也能让我们明白GAN的关键之处和问题所在。
能量视角是一个偏向数学物理的视角,一旦能将机器学习和数学物理联系起来,还将可以很直接地从数学物理处获得启发,甚至使得对应的机器学习不再“黑箱”,这样的视角往往让人陶醉,给人一种有力的感觉。
转载到请包括本文地址:https://kexue.fm/archives/6331
更详细的转载事宜请参考:《科学空间FAQ》
如果您还有什么疑惑或建议,欢迎在下方评论区继续讨论。
如果您觉得本文还不错,欢迎分享/打赏本文。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!
如果您需要引用本文,请参考:
苏剑林. (Feb. 15, 2019). 《能量视角下的GAN模型(二):GAN=“分析”+“采样” 》[Blog post]. Retrieved from https://kexue.fm/archives/6331
@online{kexuefm-6331,
title={能量视角下的GAN模型(二):GAN=“分析”+“采样” },
author={苏剑林},
year={2019},
month={Feb},
url={\url{https://kexue.fm/archives/6331}},
}
February 21st, 2019
您实验过能量GAN的效率如何?
什么效率?能量GAN基本上就是普通的WGAN-div,能量只是一个诠释罢了。
请问一下,从公式上,两者基本一致,但是能量GAN比WGAN-div多了一项E(x)的编码器,并使用了MCMC采样,从图像质量来说,能量GAN是不是有不逊色于甚至强于WGAN-div的能力?
February 25th, 2019
请教一下公式5 是怎么推导到公式6的,能否说明一下?
$$\begin{aligned}\nabla_{\theta}L_{\theta}=&\mathbb{E}_{x\sim p(x)} \big[-\nabla_{\theta}\log q_{\theta}(x)\big]\\
=&\mathbb{E}_{x\sim p(x)} \big[\nabla_{\theta} U_{\theta}(x)-\mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big] \big]\\
=&\mathbb{E}_{x\sim p(x)} \big[\nabla_{\theta} U_{\theta}(x)\big]-\mathbb{E}_{x\sim p(x)}\big[\mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big] \big]
\end{aligned}$$
对于$\mathbb{E}_{x\sim p(x)}$来说,$\mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]$只是一个常数,所以加上$\mathbb{E}_{x\sim p(x)}$结果不变,即
$$\nabla_{\theta}L_{\theta}=\mathbb{E}_{x\sim p(x)} \big[\nabla_{\theta} U_{\theta}(x)\big]-\mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]$$
因为(5)中最后一项实际上是常数(不要被x误导了,严格来说前面一项和后面一项的x意义不同,后一项的x被积分掉了)。之后再对p(x)在求一次期望就得到了第(6)式,由于后一项是常数,求期望仍然不变。
其实也可以理解为$x$的含义是相同的,只不过$\mathbb{E}_{x\sim q_{\theta}(x)}\big[\nabla_{\theta} U_{\theta}(x)\big]$这个结果已经没有$x$了。
March 2nd, 2019
请问苏老师,这个代码是否有keras或者tensorflow版本?
没有~实现起来并不困难呀。你想要keras代码的话,把
https://github.com/bojone/gan-qp
和
https://github.com/bojone/infomax/blob/master/infomax_cifar10.py
结合起来就行了。
好的,我试试,谢谢
March 3rd, 2019
苏神,再请教一下公式25到公式26,有没有相关的推导公式说明?
这个你要知道SDE和FP方程的等价性:
https://en.wikipedia.org/wiki/Stochastic_differential_equation
https://en.wikipedia.org/wiki/Fokker%E2%80%93Planck_equation
然后将$(26)$代入,就会发现正好是$(25)$对应的FP方程的静态解。
March 25th, 2019
苏神,能否帮忙检查一下第四页右边的$L_H$是否和$-I^{JSD}(G(Z), Z)$对应上了,前几天我和作者讨论的时候发现伪代码中$L_H$右边的第一项应该是要加上个负号才对。
原文哪有$L_H$?
我只知道$H(G(Z))$确实相当于$I(G(Z),Z)$,而$I(X,Z)$确实相当于$I^{JSD}(G(Z), Z)$。只不过原文的$(7)$写错了,$I^{JSD}(G(Z), Z)$的不用加负号,两项都是正的。
March 26th, 2019
能谈谈最近新出的《Implicit Generation and Generalization in Energy-Based Models》这篇 paper 的能量的关系么?
April 6th, 2019
请问公式(22)怎么推出的?
“可以简单假设$p(z|x)=\mathcal{N}\left(z;E(x),\sigma^2\right)$,其中$E(x)$是一个带参数的编码器,代入计算并省去多余的常数”
请动手尝试。
May 23rd, 2019
请问,公式9这种理论表达式是怎么得来的
请看狄拉克delta函数的相关定义。
June 27th, 2019
您好,博主,本文中关于正负相对抗相关的理论太少,请问您有这方面相关的链接吗?
所谓正负相对抗,就是$(5)$或$(6)$的直观解释而已,你还要什么资料~
如果有更详细的理论分析或者实例当然最好不过了啊
August 15th, 2020
你好,我注意到在计算$H_\varphi(X|Z)$的时候,
对于离散变量值为0,而连续变量直接变为负无穷。
我知道这里是微分熵的原因,$H(X|Z)=H(X,Z)-H(Z)$
由于微观状态的可乘,联合分布的熵具有可加性。可能只减了一个无穷项?
我注意到博主用词是:‘我们可以确定互信息...’
想确认一下,这个无穷项是在理论上被证明在任意连续分布中都是一样的可以忽略的无关常数项吗?
上面说的好像错了,请忽略。
我疑惑为什么使用微分熵后,条件熵是无穷,而离散时是0。
微分熵与离散熵差了什么
好吧,我上面说的对了。我用$\sum p(x)dx log p(x) log \:p(x)dx$这样的形式算了一下。KL散度,互信息中,无穷项可以消掉。但相对熵差一个X的无穷项。
$-\sum\varphi (x) \Delta log \Delta$
抱歉,抱歉。
记离散熵的极限为$H(X)$,微分熵为$h(x)$
$\lim_{\sigma \rightarrow 0} H(X|Z)=h(x|z)-\sum \varphi (x) \Delta ln \Delta = 0$
$h(x|z) = ln(\sigma \sqrt {2\pi e})$
是不是得出
$\lim_{\sigma \rightarrow 0} \sum \varphi (x) \Delta ln \Delta = ln (\sigma \sqrt {2\pi e})$
?
另外还是想请教一下,这个无穷项是在理论上被证明在任意连续分布中都是一样的可以忽略的无关常数项吗?
差别就是$- log dx$
同 https://kexue.fm/archives/7615/comment-page-1#comment-14086 一样,接受熵的数值依赖于具体流形就不会有疑惑了。
感谢解惑