本文转载的原文链接:变分法和变分贝叶斯推断
另一篇CSDN链接学习:变分贝叶斯推断(Variational Bayes Inference)简介
变分法是17世纪末发展起来的一门数学分支,是泛函分析里面的一个领域,在普通的最优化问题中,往往求解得到的是一个最优值解,而在一个变分问题中,求解得到的是一个最优函数解,因此变分问题可以看成是泛函的一个极值问题。最经典的一个变分问题就是最速下降曲线问题:在重力作用下一个粒子沿着该路径可以在最短时间从点A到达不直接在它底下的一点B。在所有从A到B的曲线中必须极小化代表下降时间的表达式。该问题由从约翰·伯努利(Johann Bernoulli)1696年提出,并由此发展成了变分法这门数学分支。在统计机器学习里变分法也起着至关重要的作用,比如在最大熵问题中,可以利用变分法推导出正态分布。在统计机器学习里面还有一个重要的概念叫做变分贝叶斯推断(Variational Bayesian Inference)。很多统计机器学习问题里面,往往需要去近似求解不可观测变量或者叫隐变量(latent variable)的后验概率分布,而变分贝叶斯推断关注的就是如何求解一个近似后验概率分布,因此在统计机器学习里面应用比较广泛。下面会首先介绍变分法的相关知识,然后再介绍变分贝叶斯推断的相关知识。
变分问题在数学上的定义通俗地可以理解为泛函的极值问题。通常函数可以表示成自变量到因变量的映射关系:y=f(x),泛函一般可以理解为函数的函数:J(f(x)),一般称J(f(x))为f(x)的泛函,但是泛函要求f(x)满足一定的边界条件,并且具有连续的二阶导数。这样的f(x)称为可取函数。通常一个最优化问题中,求解的是一个最优数值解,而在变分问题中,往往求解的是一个最优函数解。比如在求解最大熵的问题上,最终求解得到的就是一个概率分布,在该概率分布下使得熵最大,由于概率分布本身可以看成一个函数,因此可以把最大熵求解问题看成是一个变分求解问题。变分法相当于把微积分从变量推广到函数上。在普通的微积分中可以通过对变量求导数,然后令导数为0来求解一个极值问题,通过变分法一样可以通过导数为0的条件求解无约束极值问题,以及引入拉格朗日乘子来求解有约束极值问题。下面将通过一个求解最大熵分布的例子来展示,通过变分法是如何来求解一个函数的极值问题的。
首先给出一个概率质量分布函数f(x),定义该分布下的信息熵为:
由于是概率分布,因此可以加入一些约束条件:
由于有三个约束条件,因此可以引入三个拉格朗日乘子:,得到新的目标函数:
然后根据变分法原理,可以令:
定义被积函数:
可以把被积函数F(f(x),x)看成是函数f(x)的泛函,所以根据变分法有:
因此可以得到:
其中C是λ的待定系数。
然后运用约束条件(1),并令
再把f(x)代入约束条件(1)可以得到:
可以得到:
然后利用约束条件(2),又有:
再根据yf(y)是奇函数的性质,故:
再利用约束条件(3),有:
再把求解得到的代入f(x)的表达式得到:
可以看到f(x)就是一个正态分布的表达式,再考虑二阶变分:
因此可以得出当概率质量分布f(x)为正态分布时,信息熵最大。插一句题外话,大自然真的很神奇,我们初中就知道根据热力学第二定律,一切自然过程总是沿着无序性增大的方向进行的,而熵就是衡量无序性的一个标准,这也解释了为什么大自然偏爱正太分布的原因,因为在正太分布下无序性最大。大自然是懒惰的,它不想耗费更多的能量去构建一个更加有序的世界,所以就有了人类:)
变分贝叶斯推断
通常在研究贝叶斯模型中,需要去求解一个后验概率(Posterior)分布,但是由于求解过程的复杂性,因此很难根据贝叶斯理论求得后验概率分布的公式精确解,所以一种方法是用一个近似解来替代精确解,并使得近似解和精确解的差别不会特别大。一般求解近似解的方法有两种:第一种是基于随机采样的方法,比如用蒙特卡洛采样法去近似求解一个后验概率分布;第二种就是变分贝叶斯推断法。变分贝叶斯法是一类用于贝叶斯估计和机器学习领域中近似计算复杂积分的技术。它关注的是如何去求解一个近似后验概率分布。
通过变分贝叶斯推断可以求解得到一个近似的后验概率分布去逼近真实的后验概率分布。假设真实后验概率分布为:P(Z|X),我们希望用一个近似后验概率分布Q(Z):去逼近P(Z|X)。为了描述近似的后验概率分布和真实后验概率分布的逼近程度,引入KL散度(Kullback-Leibler Divergence),在概率论或信息论中,KL散度又称相对熵(relative entropy),是描述两个概率分布P和Q逼近程度的一种方法。但是KL散度并不是一种距离度量标准,因为它是非对称的。定义KL散度数学表达式为:
通过最小化KL散度值就可以推导出变分贝叶斯推断中的ELOB(Evidence Lower Bound)。具体过程如下:
令:
可以得到:
由于目标是最小化KL(Q||P),同时logP(X)是一个不依赖隐变量Z的常数,因此最小化KL(Q||P)等价于最大化L(Q)。由于KL散度值是大于等于0的(当且仅当Q分布和P分布相等时等于0),因此可以推得L(Q)是logP(X)的一个下界,其实还可以对L(Q)再做一个转变:
即得到通常意义上的ELOB(Evidence Lower Bound)。因此,可以通过最大这个下界来达到最小化KL(Q||P)的目的,这样做的一个好处在于,如果直接优化KL(Q||P),由于真实后验分布往往事先不知道,而且如果用贝叶斯公式来计算P(Z|X)的复杂度特别高,因此不好直接优化KL(Q||P)。为了优化L(Q),需要引入一种叫做平均场的方法(mean field theory),即假设每个隐变量之间服从独立同分布:
因此,L(Q)等式后半部分(针对L(Q)的原始公式表达式)可以表示为:
L(Q)的前半部分可以表示为:
最终得到L(Q)的表达式为:
其中为信息熵,由于
,并且KL散度值也总是大于等于0,因此要最大化L(Q),只需要令
,即:
至此,就得到了Q(Z)的分布形式。但是很多时候,我们不仅需要得到一个近似后验概率分布Q(Z),我们真正需要的是一个训练好的生成模型P(Z,X),特别是在深度学习里面,因此我们往往优化的是:
写在最后
虽然变分贝叶斯推断很美,所以很多人在遇到带隐变量的模型时都会下意识的去引入变分贝叶斯推断来求解模型参数,其实如果隐变量是低维并且离散的话,完全没有必要去引入变分贝叶斯推断去估计模型的参数。而且,在深度学习里面,变分贝叶斯的训练并不简单,需要花很多精力去调参数,所以在可以求精确解的条件下就没有必要去求一个下界解。这是最近做实验得到的一些结论。
References:
[1] http://blog.huajh7.com/2013/03/06/variational-bayes/
[2] http://blog.csdn.net/aws3217150/article/details/57072827