近似推断（PRML 第10章）
为什么需要近似推断？很多模型都需要解决一个问题，给定观测变量  后，如何算隐变量的后验  ，以及后验的期望。一个例子就是，有个编码器，给它输入  想要得到对应的表征  的分布，实际上就是这个后验分布  。如果不想要分布，而只想要最具代表性的那个  ，那就是求该后验分布的期望。而大部分情况下，这个后验无法直接精确求解，所以需要找近似的方法来近似这个后验。这其实就是近似推断。近似推断可以分为哪几类？主要分为两类：确定性近似和随机近似。确定性近似方法也包括许多子类。但在此文中，主要考虑变分推断（也叫变分贝叶斯）这一类确定性近似方法。变分方法的核心就是，函数的函数的概念。也就是说，函数的自变量也是一个函数。一个很简单的例子是熵：我们通常说求一个分布的熵。也就是说，熵函数  的自变量实际上是一个分布  。给定这个分布后，熵的输出是一个实数。同理，函数导数的概念也可以推广至此，表示函数的输出如何随着输入函数的无限小变化而变化。我们经常说利用导数来梯度下降求一个优化问题，这个优化问题的变量一般是个向量。那假如，这个优化问题的变量就是一个函数呢？那整个优化问题实际上就是函数的函数，优化的目标就是找到使优化问题最优的那个函数。从这里也可以看出，我们在这里为什么要引入变分方法。因为后验分布就是一个函数，我们希望找到最优的分布来近似它，这个过程可以转化为一个优化问题。具体来说，如何将变分优化的概念给引入到近似推断中呢？其实根据上面一段的介绍，已经有个初步的目标了。我们希望定义一个优化问题，该优化问题的变量是一个分布（函数），该优化问题的目标是，尽可能缩小该分布与真实后验分布的距离。然后我们求解该优化问题，实际上就解决了近似推断。在这里，先给出一些定义。有  个样本，潜在变量（也包括一些参数）集合为  ，观测变量集合为  。我们的模型给出了联合分布  ，希望找到后验  的近似分布  。我们有一个公式：其中  实际上就是ELBO（证据下界）。这个公式揭示了似然、KL散度、ELBO三者之间的等式关系。这个公式太常见了，它的推导在任意一个关于VAE或者EM算法的博客中都可以找到，在这里就不介绍是怎么推导的了，你可以把它当成一个公理记死就行了，做到熟读背诵默写会推导。上式中，那个KL散度这一项，实际就是衡量  和真实后验分布  的距离的，我们肯定希望它越小越好，越小的话近似就越精确。因为已知联合分布  ，所以等价地，最小化KL散度那一项实际上就是优化  来使  （证据下界）最大。但是不好求啊，因为  可以是任意的分布，从一个无限庞大的分布集合中找到非常好的  可不容易。所以，我们可以限定  在一个给定的分布集合内，比如只允许它是指数族分布。同时，也需要说明，这个分布集合一定要足够广，表达能力够强，才能很好地进行近似。要是规定  属于一类均匀分布，那能近似好才怪了。于是，可以用由一组参数  控制的分布  ，然后求这个最优的参数  就可以了。所以，我们就把需要优化的量从一个分布（函数）变成了一组参数  。一个例子是，我们假设  是一个高斯分布，高斯分布由均值和方差这两种参数控制，那我们需要优化的量其实就是均值和方差了，这也是VAE干的事。我们可不可以不限制  属于某一类型的分布呢？当然可以，但是需要施加一些其他的限制。现在，我们考虑将  限制为可以分解的分布。  是隐变量集合，那我们就假设  是由多组隐变量  组成的，组与组之间是独立的，那么  可以分解为：注意，我们在这里并没有限制每一项  分布是什么类型的分布。这种分解的思路，也叫平均场论。那么分解后，该如何优化  使得  最大呢？这可以通过轮流依次优化每组隐变量分布  来实现。对特定组的隐变量分布  ，将上述  的分解式代入  的表达式中可得：其中为了方便表示，我们引入了一个新的分布  ：再看（10.6）式，去掉最后一个const常数项，剩下的其实就是  和  之间的KL散度的负数，所以，最优的  其实就等于  。所以，最优的  的解析解为：分布  的最优解的对数就是所有隐变量和观测变量的联合分布的对数关于其他组隐变量的期望。对每个  优化的时候，需要固定其他的  （  ）。所以，可以先初始化所有的  ，然后依次固定其他的来优化某一个。这样迭代地优化下去，最终的收敛性是有理论保证的。上面分解分布的方式看起来挺牛的，如果把  去掉，好像它就可以直接用于近似一个一般的分布  ，而不是局限于近似给定  之后  的后验分布  。现在从更高的角度来审视用分解分布来做变分推断这种方法，即，我们现在不近似后验，而是近似一个随便的一般分布。先举一个简单的例子，比如要近似一个给定参数的二元高斯分布  ，其中  ，这两个变量之间有相关性，因此协方差矩阵不是对角阵。现在，我们假设采用分解的方式（即，  ）来近似这个二元高斯分布。那么根据前面的推导，在优化  时最优解为：因为等式右边是关于  的二次函数，所以最优解  实际上就是一个高斯分布：同理优化  时也可以得到最优解  也是一个高斯分布：按照前文中的步骤，我们需要先固定  来优化  ，然后固定  来优化  ，就这样依次迭代优化下去直至收敛。但是在这个例子里，我们可以很容易看出来，这个优化问题实际上就有一个闭式解，即  ，可以发现这个均值是准的。所以，最终求出来的近似结果如下图（a），其中绿色的是真实分布  ，红色的我们用上述分解分布的方式求得的近似解析解。虽然均值准，但方差被明显估计低了。这是一个普遍的现象，即，使用分解方式来做变分推断倾向于把后验分布近似地“更紧”，近似分布相比于真实分布来说，分布范围更窄了。前面提到的都是最小化  来进行近似推断，如果反过来，最小化  情况会是怎么样呢？实际上，这种方式是另一种近似推断框架，被称为expectation propagation（期望传播）。此时，最优的  为（推导省略）：可以发现，最优解就是  的对应边际分布。而且，这是闭式解，因此不需要迭代了。使用这种方式，得到的近似解如上图（b）所示。均值是准的，但是方差被估计高了，这与上图（a）中的情况相反。发生这种现象的原因和此博客中提到的一致，比较简单，直接参考就行：给定观测样本集合  ，这些样本是从如下的单变量高斯分布中采样的。那么怎么求该单变量高斯分布的均值  和精度  （精度是方差的倒数）这两个隐变量的后验分布？这时就可以用到前面提到的变分推断的技术了。首先，引入两个参数的共轭先验分布（共轭是指先验分布和后验分布是同一类分布，在后面的推导中可以看见两个参数的后验也分别是高斯分布和Gamma分布）：这种情况比较简单，实际上后验可以直接精确求解。但是在这里我们用刚学的变分推断的技术来做。首先，将隐变量（在这里隐变量就是均值和精度这两个参数）分布分解为：然后代入前面推导的公式，可以求得  分布的最优解：右式是关于  的二次函数，所以最优的  是一个高斯分布，它的均值和精度如下：其中  是所有样本的均值。注意，当  时，  ，这和均值的最大似然解一致。同理，  分布的最优解：可以发现，最优的  是一个Gamma分布  ，参数为：然后，就可以迭代求解了。但是此处实际上可以直接找到显式解析解，考虑  ，此时可求得：可以发现，均值的期望就是所有样本的平均，方差（精度的倒数）的期望就是方差的无偏估计量。除了对隐变量  进行推断之外，我们还可能希望比较一组候选模型，模型的先验分布为  ，也就是说第  个候选模型出现的先验概率是  。我们的目标是，近似后验分布  ，也就是指，如果观测到  后，选择哪个候选模型比较合适。这个问题更加复杂，因为不同模型可能结构不同，而且隐变量  的维度不同，所以隐变量集合（包括模型索引以及其对应的隐变量）的分布不能简单的分解为  ，而是需要分解为  。此时，使用拉格朗日乘子法关于变量  最大化  ，可以得到：首先根据目标  分别独立优化每个  ，然后用上式来求得近似分布  ，这个  就可以作为模型选择的依据。