AI机动队
首发于AI机动队
配分函数——深度学习第十八章

配分函数——深度学习第十八章

继续《深度学习》花书总结,本章主要介绍了各种求配分函数的方法,准备结合斯坦福cs228Learning in undirected models 这部分内容一起总结。

我们先来回顾一下川陀学者:结构化概率模型——深度学习第十六章中的配分函数(partition function)的定义: 无向概率图模型可由非归一化的概率分布 \tilde p(\vec{x};\theta) 来表示,为了使其归一化得到一个合理的概率分布,我们需要将其除以一个配分函数 Z(\theta) ,得到归一化后的概率分布 p(\vec{x};\theta) = \frac{1}{Z(\theta )} \tilde p(\vec{x};\theta) 。其中对于连续变量来说, Z(\theta)=\int \tilde p(\vec{x};\theta)d\vec{x} ,对于离散变量来说 Z(\theta)=\sum_{\vec{x}} \tilde p(\vec{x};\theta) 。对于许多模型来说,这个积分或者求和操作很难以处理,这一章就着重于如何有效的近似配分函数或如何绕过这一难题。


如果我们用最大似然法(可回顾 最大似然法与最大后验概率估计——深度学习花书第五章(三))来处理概率图问题,则我们需要求模型概率分布相对于参数 \theta 的对数似然梯度(log-likelihood)  \triangledown _{\theta}logp(\vec{x};\theta) =  \triangledown _{\theta}log \tilde p(\vec{x};\theta) -  \triangledown _{\theta}logZ(\theta) 。如此,我们将其分解为两项,分别称为正相(positive phase)与负相(negative phase)。通常,正相比较容易处理,而负相由于涉及到大量变量的求和或积分很难处理,但是利用 Z(\theta)=\sum_{\vec{x}} \tilde p(\vec{x};\theta) 的定义,我们可以将负相转化为期望形式  \triangledown _{\theta}logZ(\theta) = E_{\vec{x}\sim p(\vec{x})}\triangledown _{\theta}log\tilde p(\vec{x}) ,从而可以利用上一章中的蒙特卡洛方法(蒙特卡罗方法——深度学习第十七章)来近似这一项。

这种方法的基本思路是:

对于数据的每个minibatch,进行如下操作:

  • 用输入的minibatch中的数据样本计算正相 \triangledown _{\theta}log \tilde p(\vec{x};\theta)
  • 用Markov Chain生成一些模型样本,利用这些样本计算负相 E_{\vec{x}\sim p(\vec{x})}\triangledown _{\theta}log\tilde p(\vec{x})
  • 将正相负相结合,并利用梯度算法更新模型参数。

其中,正相和负相的关系如下图所示,正相是将模型的概率分布推向和真实数据分布一致的方向,负相是降低模型样本发生的分布,分别对应极大化 log \tilde p 与极小化 logZ


如果对于每个minibatch我们都重新随机初始化Markov Chain直至其达到平稳分布会需要花很长的时间,为了加快这一进程,我们可以采取如下方法:对比散度(contrastive divergence)方法不需要每个minibatch随机初始化Markov Chain,而是利用minibatch真实的数据样本来初始化Markov Chain,最初数据分布可能和模型分布有较大差异,因此负相计算有较大偏差,但正相可以逐渐的增加模型对应数据的概率分布,经过若干次后,模型分布逐渐趋于数据分布,负相也会更加准确。当然,如果模型分布过度偏离数据分布,则负相计算误差过大,这是该方法的一个缺点。一个改进方法是持续对比发散(persistent contrastive divergence,简称PCD),也叫做随机最大似然(stochastic maximum likelihood,简称SML),其基本思想是对于每个minibatch,Markov Chain不用重新初始化,而是延续上一个minibatch时Markov Chain的状态,其基本假定是两次步进间模型差异较小,所以可以利用前次模型分布近似当前模型分布,这样就节省了每次重新初始化并达到稳态的混合时间。


蒙特卡洛方法近似了最大似然估计中配分函数的梯度,而还有一类方法试图绕过配分函数的复杂的求值问题,主要有如下几种方法:

  • 伪似然(Pseudolikelihood) 利用条件概率分布来近似模型概率分布 p(\vec{x};\theta) \approx \prod_{i}p(x_{i}|x_{-i};\theta)= \prod_{i}p(x_{i}|x_{N(i)};\theta) ,其中 N(i) 代表了 x_i 在图中的所有邻居节点。其对数形式为 logp(\vec{x};\theta) \approx \sum_{i}logp(x_{i}|x_{N(i)};\theta) ,求和中的每一项只包含相应的一项变量,而不需要对全局的变量求配分函数。
  • 得分匹配(score matching)目的是使模型与数据分布相对于输入数据的梯度差异 L(\vec{x},\theta)=\frac{1}{2}||\triangledown _xlog p_{model}(\vec{x};\theta)-\triangledown _xlog p_{data}(\vec{x})||_2^2 极小化,它利用了模型对输入数据 \vec{x} 的梯度而不是参数 \theta 的梯度,由于 Z 仅是关于 \theta 的函数, \triangledown _xZ=0 ,所以绕过了对配分函数 Z 的求值。
  • 比率匹配(ratio matching)主要适用于二元数据,其目的是极小化如下的目标函数 L(\vec{x},\theta)=\sum_{j=1}^n(\frac{1}{1+\frac{p_{model}(\vec{x};\theta)}{p_{model}(f(\vec{x},j);\theta)}})^2 ,其中 f(\vec{x},j) 返回 \vec{x} 在第j个位置上比特翻转的结果。由于是求两个概率的比值,配分函数可以互相抵消掉,因此绕过了对配分函数的求值。


另外,噪声对比估计(Noise Contrastive Estimation, 简称NCE)提供了另外一种思路,即利用某个变量来近似配分函数  \triangledown _{\theta}logp_{model}(\vec{x}) =  \triangledown _{\theta}log \tilde p_{model}(\vec{x};\theta) + c ,其中 c 是用来近似 -logZ(\theta) 的参数,模型训练时同时学习参数 \thetac 。当转化这种形式后,我们无法再用最大似然估计方法,因为它会选择将 c 设置的无限大,而不是将其定为一个合理的概率分布。因此,NCE方法转而将无监督学习的估计 p(\vec{x}) 的问题转化为一个概率二分类器的监督学习问题,其中一类是模型产生的数据,另一类是一个新引入的噪声分布 p_{noise}(\vec{x}) ,该噪声分布易于评估与取样。现在,我们就可以构建一个新的分类模型,其输入为 \vec{x} ,二元分类标记为 y

对于这一模型,

p_{joint}(y=1)=\frac{1}{2} \\ p_{joint}(\vec{x}|y=1)=p_{model}(\vec{x}) \\ p_{joint}(\vec{x}|y=0)=p_{noise}(\vec{x})

我们因此可以将其转化为用 p_{joint} 拟合 p_{train} 的最大似然概率问题: \theta,c=argmax_{\theta,c}E_{\vec{x},y \sim p_{train}}logp_{joint}(y|x)

由此可得到 p_{joint} 实际上就是模型分布与噪声分布差异的逻辑回归模型 p_{joint}(y=1|\vec{x})=\sigma (logp_{model}(\vec{x})-logp_{noise}(\vec{x}))

可以看出,NCE的基本思想是好的模型可以分辨实际数据与噪声,在对抗生成网络中,好的生成模型可以产生使分类器无法分辨的样本,这一思想在第20章生成对抗模型GAN中会详述。


以上方法均是在模型训练时如何估计配分函数的梯度或者跳过配分函数的求值,那当我们直接需要配分函数来求得最终归一化的概率分布的时候,如模型效果评测时,我们如何得到配分函数的值呢?我们同样可以利用之前介绍的重要采样(importance sampling)方法。即假设我们要求的配分函数为 Z_1 = \int \tilde p_1(\vec{x})d\vec{x} ,这个配分函数难以处理,则我们可以转化为较易处理的且配分函数易求得的分布 p_0(\vec{x})=\frac{1}{Z_0}\tilde p_0(\vec{x}) 并利用重要采样有 Z_1 = \int \tilde p_1(\vec{x})d\vec{x} =  \int \frac{p_0(\vec{x})}{p_0(\vec{x})}\tilde p_1(\vec{x})d\vec{x} = Z_0\int{p_0(\vec{x})}\frac{\tilde p_1(\vec{x})}{\tilde p_0(\vec{x})}d\vec{x}

利用蒙特卡洛方法近似其期望有 \hat Z_1 = \frac{Z_0}{K}\sum_{k=1}^K\frac{\tilde p_1(\vec{x}^{(k)})}{\tilde p_0(\vec{x}^{(k)})}

当分布 p_0 接近于 p_1 时,上式可有效地估计配分函数,但实际情况中 p_1 通常是高维空间的复杂分布,很难找到一个简单的分布p_0既方便计算有能接近p_1分布,这个时候 Z_1 的方差很大,无法有效的近似。在这一基础上,有两种改进方法可以解决当p_0p_1的KL Divergence过大时出现的这一问题:

  • 退火重要采样(Annealed Importance Sampling)基本思想是用一系列接近的分布来连接 p_0p_1 间的差距,即用一系列分布 p_{\eta_0},...,p_{\eta_n} 其中 0=\eta_0 < \eta_1 < ... <\eta_{n-1}<\eta_n=1 ,其中第一个分布为p_0,最后一个分布为p_1。由此, Z_1Z_0 的比值可以表示为 \frac{Z_1}{Z_0}=\frac{Z_1}{Z_0}\frac{Z_{\eta_1}}{Z_{\eta_1}}...\frac{Z_{\eta_{n-1}}}{Z_{\eta_{n-1}}}=\frac{Z_{\eta_1}}{Z_0}\frac{Z_{\eta_2}}{Z_{\eta_1}}...\frac{Z_{\eta_{n-1}}}{Z_{\eta_{n-2}}}\frac{Z_1}{Z_{\eta_{n-1}}} = \prod_{j=0}^{n-1}\frac{Z_{\eta_{j+1}}}{Z_{\eta_j}} 。如果我们保证每个 p_{\eta_j}p_{\eta_{j+1}} 都足够接近,则我们可以用重要采样来近似每个 \frac{Z_{\eta_{j+1}}}{Z_{\eta_j}} ,最终可以得到 \frac{Z_1}{Z_0} 。实际操作中,通常用加权几何平均来得到中间的概率分布p_{\eta_j} \propto p_1^{\eta_j}p_0^{1-\eta_j}
  • 桥式采样(Bridge Sampling)与退火重要采样相比,它不是利用一系列的分布,而仅仅利用一个中间分布 p_* 来过渡p_0p_1,即 \frac{Z_1}{Z_0} = \sum_{k=1}^K\frac{\tilde p_*(\vec{x}_0^{(k)})}{\tilde p_0(\vec{x}_0^{(k)})}/ \sum_{k=1}^K\frac{\tilde p_*(\vec{x}_1^{(k)})}{\tilde p_1(\vec{x}_1^{(k)})} ,如果 p_* 选取的合适使得其同 p_0p_1均有较大的重合,则可以在p_0p_1分布间构建一个连通的桥梁, 最优的桥梁分布为p_*^{(opt)}(\vec{x}) \propto \frac{\tilde p_0(\vec{x})\tilde p_1(\vec{x})}{r\tilde p_0(\vec{x})+\tilde p_1(\vec{x})} ,其中 r=\frac{Z_1}{Z_0} 。但是实际上我们并不知道比率 r 且这正是我们要求的比值,实际操作中,通常我们猜测一个粗略的 r 值,并不断的迭代改进桥梁分布即相应的比率的估值。

总结一下,这一章主要讲了对于难以处理的配分函数的多种近似方法,下一章会处理概率模型中另一大难题——那以处理的预测问题(intractable inference),to be continued。


注:截图均来自Ian Goodfellow等合著的Deep Learning一书,推荐阅读原书。

编辑于 2018-11-05

文章被以下专栏收录