深度学习(三):推断问题(精确推断、近似推断、采样方法)

一、引入

       之前说过推断问题主要是已知一些变量求别的变量的概率,在图模型中主要是求隐变量的后验概率会用到。

       有一些隐变量之间的关系没那么复杂,可以精确计算出来,虽然麻烦,但是好歹是可计算的,这种方法就是精确推断,精确推断比较简单,不会多写;还有的是真的没法算出来的,又不可缺,就只能近似推断,而近似推断又主要有环路信念传播引入变分分布的变分推断通过模拟来采样符合某个分布的样本的采样方法。采样方法又有直接采样间接采样,如果能直接采样,说明概率分布比较简单;这里主要讨论间接采样,就是通过采样一个比较简单的分布,然后加上一些条件来采样的过程。

二、精确推断

(一)变量消除法

       这种就是变量消除法求边际概率的一种方式,可以看见,我们把条件较多的,比如上图的x1,先进行计算,然后再计算x2的和,x3的和,保证了当我们算到比较高级的部分的时候,涉及的算式较少

(二)信念传播法

        信念传播(Belief Propagation,BP)算法,也称为和积(Sum-Product)算法或消息传递(Message Passing)算法,是将变量消除法中的和积(Sum-Product)操作看作是消息(Message),并保存起来,这样可以节省大量的计算资源。

        通俗来说,变量消除法的缺点是,当我们计算X3的边际概率$P(x_{3})$和X4的边际概率$P(x_{4})$时,很有可能出现一些式子的重复计算。

        按上一个截图的式子来说,我们至少需要在分别计算$P(x_{3})$和$P(x_{4})$时重复计算$P(x_{2}\mid x_{1})$和$P(x_{1})$,聪明的人就会心想,如果我把每个用到的式子都先计算出来,放进我的表格里,然后要算什么,就按需拿出来合并计算就好了。

        下图就展示了链式无向图上,信念传播方法。

       链式无向图的最大团中节点数目为2,也就是每相邻两个节点构成一个最大团,一共有T-1个团,即T-1个势能函数。

       可以看到,$P(x_{t})$的计算可以分为前一个变量$X_{t-1}$传来的’消息’和后一个变量$X_{t+1}$传来的’消息’的乘积,具体这个消息指的是【对前一个变量进行边际求和】,它们之间是有一个嵌套的关系。

三、近似推断

       近似推断解决一些精确推断无法解决的问题,当图结构中变量的局部关系比较复杂的时候,就会采用近似推断。主要有三种:

  • 环路信念传播,是相对于上面的链式信念传播方法,消息会在环路里一直流动,没法收敛计算,环路信念传播就是把信念传播方法用在有环路的图模型中,得到一个近似解;
  • 变分推断,是引入一个简单的分布称为变分分布,用来近似模型中难以计算的条件概率分布,然后通过迭代的方法进行计算;
  • 采样法,是通过模拟的方法采样一些样本,用于期望计算等。

(一)变分推断

       在包含有观测变量和隐变量的图模型中,一个困难就来自于计算隐变量的后验$P(z\mid x)$.。为什么要算后验?首先不管是机器学习模型还是其他的模型,主要就是通过让模型学习一些样本,然后给个新的样本,模型也能很好的处理,如果目前给了一些已知样本X,然后让我们预测新样本x的概率,可以写成如下形式:

$P(x\mid X)=\int_{\theta }^{ }P(x,\theta \mid X)d\theta =\int_{\theta }^{ }P(x\mid\theta, X)P(\theta \mid X)d\theta =E_{\theta \mid X}\left [ P(x\mid \theta ) \right ]$

所以最关键的步骤就是求出后验概率$P(\theta \mid X)$,而且上式写成了期望的形式,所以后面我们可以直接用采样法来近似这个期望,在变分推断里主要就是想办法求解这个复杂的后验概率。

      我们的目标是求解$P(x;\theta )$,然而通常的似然函数求导的方法无法执行,因为我们无法计算$\sum_{z}^{ }P(z,x;\theta )$。

      于是想了一个办法,把原似然函数转化成ELBO和KL散度的和,虽然转化后最终的式子依然含有隐变量z和可观测变量x的联合概率分布,但是这时候计算theta已经不需要用到联合概率$P(x,z;\theta )$了。

      可以由最后一段话看出,现在的任务就是找到一个q(z),这个分布要等于z的后验$P(z\mid x;\theta )$,其实这个转化就把求联合概率分布的问题转化成了求z的后验而已,这么做之后,求原似然函数最值问题就可以转换为求ELBO最大值的问题,因为ELBO是原似然函数的下界,只要ELBO不断增大,就会推着原函数增大。

       现在的问题就是求$P(z\mid x;\theta )$,在上一篇博客里,用EM算法来迭代计算上述最大化问题的时候,是默认$P(z\mid x;\theta )$是可以被精确的用数学式子表达出来;这里变分推断就要解决那些【不能被精确表达的$P(z\mid x;\theta )$】,由于无法精确表达,就要思考两个问题:

  • 如何衡量我找到的q(z),和$P(z\mid x;\theta )$的差异,也就是确定我找的这个分布很像?
  • 如何找到一个简单的q(z)?

      首先,KL散度可以衡量两个分布之间的差异性,所以只要KL散度最小即可,反应到11.49式子中就是让ELBO最大即可。当然肯定ELBO需要进行一些转化,不然问题又会绕回去求联合概率分布$P(x,z;\theta )$(这个没法求),问题就绕回去了。

      要对ELBO做如下处理:

       这个假设先把Z内部拆分,我们要求解其中单个的$q_{i}(z_{i})$,到时候再合并就可以了。

      截至11.89以上都是在简单的套用,从11.90开始,因为只关心$q_{j}(z_{j})$,只有它才是变量,所以积分也之用对$z_{j}$积分。

      11.94说明了如果要找到一个最优的$q_{j}(z_{j})$,那么我们就让原联合概率分布$P(x,z;\theta )$在除了$q_{j}(z_{j})$外的$q_{m}(z_{m})$联合概率分布中的期望最大即可,因为$q_{j}(z_{j})$相互依赖,所以可以用迭代的方法来计算。

      也可以用神经网络的拟合能力来拟合这个后验,后面会写变分自编码器就是用来做这个的。

(二)基于采样的推断

     我们有时候做推断,并不是为了知道这个后验分布本身,有时候是为了求复杂分布下的期望。采样是为了评估一个函数在某个分布上的期望值。

       上图我们做4次随机采样,得到样本$x_{1}$,$x_{2}$,$x_{3}$,$x_{4}$,每个样本都是对原函数值的一种近似。然后我们计算一下曲线和x轴围成的面积,还是用这四个样本点来近似:

$S=\frac{1}{4}\left [ f(x_{1})(b-a)+f(x_{2})(b-a)+f(x_{3})(b-a)+f(x_{4})(b-a) \right ]=\frac{1}{4}(b-a)\sum_{i=1}^{4}f(x_{i})\approx \int_{a}^{b}f(x)dx$

       这就像最开始学积分一样,把面积分割成n个长方形,宽为1/n,高为函数值,所以0-1之间的定积分可以计算为:$lim\frac{1}{n}\sum_{i=1}^{n}f(x_{i})= \int_{0}^{1}f(x)dx$

       只不过这里的采样,n=4而已,且区间长度不是1。在积分的定义中,n是趋于无穷的。

       回想一下期望公式,这里讨论连续随机变量的求期望,因为离散的太容易了,连续变量的求期望就是求积分,比如,当X服从取值在c~d上的分布q(x)时,求$E(f(x))$:

$E(f(x))=\int_{c}^{d}q(x)f(x)dx$

       在上面4次随机采样的例子中,我们是默认x服从均匀分布,因为我们在[a,b]上的各个点采样机会都均等,在不做任何前提条件假设的情况下,都认为是服从均匀分布的。就像老师上课点名回答问题,如果事先不知道老师的偏好或者老师是公平的,那么在座所有学生被点名的概率是一样的;然而如果老师有偏好,比如老师更喜欢点男生,那么男同学就会更紧张一点,因为他们被点到的概率更大。

      按照上述连续变量求积分的公式,我们现在取X服从取值在a~b上的分布q(x)为均匀分布,求$E(f(x))$:

$E_{x\sim q(x)}(f(x))=\int_{a}^{b}q(x)f(x)dx=\int_{a}^{b}\frac{1}{a-b}f(x)dx$

      会发现这个式子跟求f(x)在[a,b]上的积分只差了一个均匀分布的概率密度函数,我们既然可以通过$S=\frac{1}{4}\left [ f(x_{1})(b-a)+f(x_{2})(b-a)+f(x_{3})(b-a)+f(x_{4})(b-a) \right ]=\frac{1}{4}(b-a)\sum_{i=1}^{4}f(x_{i})\approx \int_{a}^{b}f(x)dx$来采样近似计算得$\int_{a}^{b}f(x)dx$,那么只要再加上一个$\frac{1}{a-b}$就可以得到$E_{x\sim q(x)}(f(x))$了,这个就提供了一种思想:如果是均匀分布下采样(任何点采样机会均等),那么$E_{x\sim q(x)}(f(x))\frac{1}{m}\sum_{i=1}^{m}f(x_{i})$,其中m是采样的样本数。

      另一种解释角度就是根据大数定律,样本均值收敛于期望值:

      采样法的一个最简单的应用例子是计算圆周率𝜋. 我们知道半径为𝑟的圆的面积为$𝜋𝑟^{2}$,而直径为2𝑟的正方形的面积为$4𝑟^{2}$.当我们用正方形去嵌套一个相切的圆时,它们的面积之比是𝜋/4。 当不知道𝜋时,我们无法计算圆的面积。但是我们可以计算正方形的面积,通过二者之比来得到圆的面积,进而反推π的值。因此,需要通过模拟的方法来进行近似估计。首先在正方形内部按均值采样的方式随机生成若干点,计算它们与圆心点的距离,从而判断它们是否落在圆的内部。这些点落在圆内还是圆外取决于正方形和圆形的面积之比, 然后去统计落在圆内部的点占到所有点的比例。当有足够的点时,这个比例应该接近于𝜋/4,从而近似估算出𝜋的值,接下来是一个代码实现:

 

def calpai():
    n = 100000
    r = 1.0
    a, b = (0.0, 0.0)
    x_neg, x_pos = a - r, a + r
    y_neg, y_pos = b - r, b + r

    count = 0
    for i in range(0, n):
        x = random.uniform(x_neg, x_pos)
        y = random.uniform(y_neg, y_pos)
        if x*x + y*y <= 1.0:
            count += 1
        if n%200==0:
          print ((count / float(n)) * 4)

    
##如果均匀的向正方形内撒点,那么落入圆心在正方形中心,半径为1的圆内的点数与全部点数的比例应该为PI/4,根据概率统计的规律,只要撒的点足够多,那么便会得到圆周率PI的非常近似的值。

运行结果为:

 四、采样方法

(一)采样原理

       就像前面说的,采样主要是为了求期望,前面讲的用大量样本均值去模拟期望叫蒙特卡洛方法。求期望这个用的比较多,期望是一种统计量,如果问题还可以表述成求X的某个统计量,也可以用这种大量采集样本来估计的方法。蒙特卡洛的关键是要得到x的概率分布,基于这个概率分布去采样n个样本集,还有个难点就是这么样让计算机去基于这个特定的概率采样,计算机可以简单的生成服从均匀分布的样本,如果要得到服从非均匀分布的样本,就需要一些间接采样的方法,如拒绝采样,重要性采样,吉布斯采样等,这些方法都是先采一个简单的样本,再通过某些条件来选择一些服从所需概率分布的样本。

(二)蒙特卡洛采样

  • 先从U(0,1)中随机生成一个伪随机数$u^{i}$;
  • 然后选择样本$x^{i}=cdf^{-1}(u^{i})$,得到的一系列样本$x^{1},x^{2},x^{3},...$就是采样点。

      其中$cdf$是一个累计分布函数,它表达的含义是$cdf=P(X\leq x^{i})$,所以反函数$cdf^{-1}$的自变量是概率,因变量是样本点,这里的随机变量是连续型随机变量。

(三)拒绝采样

      其实计算累计分布函数本身就是一个很复杂的工序,特别是需要用到采样的时候往往是因为分布太复杂了无法计算,不得不使用采样的方法。

      拒绝采样方法引入了一个可采样分布$q(x)$,再按一定策略拒绝掉一些样本,以接近不可直接采样分布$p(x)$:

  • 令接受率$\alpha =\frac{p(z^{i})}{kq(z^{i})}$;
  • 取$z^{i}\sim q(z)$;
  • 取$u^{i}\sim u(0,1)$,if $u^{i}< \alpha $,就采$z^{i}$,否则就拒绝$z^{i}$。

       这里定义了一个接受率,取值0-1之间,分子是我们的目标分布,而分母是一个带系数的可采样分布,我们要通过可采样分布,来采近似目标分布的样本。接受率是用二者的比值计算的,可以想象一条垂直的线条,其中落在目标分布内的部分与落在可采样分布内的部分之比,就是接受率。先是通过简单采样得到了一个样本$z^{i}$,然后我们取一个均匀分布下的数字$u^{i}$,看$u^{i}$和接受率的比较,为什么要比较它们俩的值呢,有什么意义?意义就是体现了一个随机性,因为有时候概率大也不一定发生,概率小也不一定不发生,为了衡量这种情况,所以加了一个均匀分布。

(四)重要性采样

重要性采样主要是引入了一个重要性权重$\frac{p(x)}{q(x)}$。我们要求的期望就是$E_{x\sim p(x)}(f(x))=\int_{x}^{ }p(x)f(x)dx$这样的形式,但是因为p(x)太过于复杂了,不好采,于是:

$E_{x\sim p(x)}(f(x))=\int_{x}^{ }p(x)f(x)dx=\int_{x}^{ }q(x)\frac{p(x)f(x)}{q(x)}dx=\int_{x}^{ }q(x)f(x)\frac{p(x)}{q(x)}dx=\int_{x}^{ }q(x)f(x)\omega (x)dx\approx \frac{1}{n}\sum_{i=1}^{n}f(x_{i})\frac{p(x_{i})}{q(x_{i})}$

问题转化成了在$q(x)$分布下求$f(x)\omega (x)$的期望,其中$\omega (x)=\frac{p(x)}{q(x)}$,称为重要性权重。

(五)吉布斯采样

 另开博文

(六)马尔可夫蒙特卡洛采样

  另开博文

posted @ 2020-03-21 21:43  小千北同学超爱写代码  阅读(3420)  评论(0编辑  收藏  举报