自动驾驶(六十三)---------蒙特卡罗-马尔科夫链

    前面介绍过蒙特卡罗搜索树和隐马尔可夫模型,今天要把这两种结果,恰好在自动驾驶中可以很好的应用,那么我们一点点展开。蒙特卡罗-马尔科夫链(MCMC),也有把马尔科夫链放在前面:马尔科夫链蒙特卡罗,这里我们采用周志华机器学习的叫法:蒙特卡罗-马尔科夫链。

1.  蒙特卡罗

      对于求积分这件事而言,我是没有什么好印象的,笔者当年本科是数学,上大学过的很恍惚,当年第一次数学分析就挂科了,经历了唯一的一次补考,所以一直有点畏惧它。   在这个表达式中,如果我们很难求解出f(x)的原函数,那就没法计算它的积分了。

      不过我们可以采用近似的方法来计算,把区间分段为:x0,x1,...xn−1,用每个区间代表值来代表[a,b]区间上所有的f(x)的值,然后分段求和,计算面积。当然这种计算方法是近似计算方法,有可能和结合相差很远,如何优化这个问题呢?

       如果我们可以得到x在[a,b]的概率分布函数p(x),而不是简单的把定区间均匀的分段,我们的定积分求和可以这样求解:

               

       这个形式就是蒙特卡罗方法的一般形式。那么最开始的问题就转化成如何x的概率分布,一个可行的办法是采用接受-拒绝采样来得到该分布的样本。既然p(x) 太复杂在程序中没法直接采样,那么我设定一个程序可采样的分布 q(x) 比如高斯分布,然后按照一定的方法拒绝某些样本,以达到接近p(x) 分布的目的,其中q(x)叫做 proposal distribution。

       具体采用过程如下,设定一个方便采样的常用概率分布函数 q(x),以及一个常量 k,使得 p(x) 总在kq(x) 的下方。如图:

             

  采样得到q(x)的一个样本z0,从均匀分布(0,kq(z0))中采样得到一个值u。如果u落在了上图中的灰色区域,则拒绝这次抽样,否则接受这个样本z0。重复以上过程得到n个接受的样本z0,z1,...zn−1则最后的蒙特卡罗方法求解结果为:

       整个过程中,我们通过一系列的接受拒绝决策来达到用q(x)q(x)模拟p(x)p(x)概率分布的目的。

2. 马尔科夫链

      上面讲到如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或者离散求和的方法,但是这个方法需要得到对应的概率分布的样本集,而想得到这样的样本集很困难,因此我们需要本篇讲到的马尔科夫链来帮忙。

      马尔科夫链定义本身比较简单,它假设某一时刻状态转移的概率只依赖于它的前一个状态。举个例子:股票今天的涨跌,之和昨天股票的涨跌有关系,甚至和前天都没关系,这个模型十分的简化,类似于RNN。既然某一时刻状态转移的概率只依赖于它的前一个状态,那么我们只要能求出系统中任意两个状态之间的转换概率,这个马尔科夫链的模型就定了。

                         

      股市模型的共有三种状态: 牛市、熊市、横盘,每一个状态都以一定的概率转化到下一个状态。比如,牛市以0.025的概率转化到横盘的状态。这个状态概率转化图可以以矩阵的形式表示。如果我们定义矩阵阵P某一位置P(i,j)的值为P(j|i),即从状态i转化到状态j的概率,并定义牛市为状态0, 熊市为状态1, 横盘为状态2. 这样我们得到了马尔科夫链模型的状态转移矩阵为:

                               

      那么马尔科夫链模型的状态转移矩阵和我们蒙特卡罗方法需要的概率分布样本集有什么关系呢?这需要从马尔科夫链模型的状态转移矩阵的性质讲起。

      如果我们有一个初始状态t0,带入这个状态转移计算t1. t2. ...tn的状态,如果你编程后发现一定迭代次数后,我们的状态概率分布就不变了,甚至我们在改变初始值后,最后都得到同样的结果。总结如下:对于一个确定的状态转移矩阵P,它的n次幂Pn在当n大于一定的值的时候也可以发现是确定的。当然也有一些条件,那就是:任何两个状态是连通的,这个指的是从任意一个状态可以通过有限步到达其他的任意一个状态,不会出现条件概率一直为0导致不可达的情况。最终的稳态我们称为平稳分布。

      当我们得到一个马尔科夫链的稳态时,可以用来做蒙特卡罗模拟求和了。首先,输入马尔科夫链状态转移矩阵PP,设定状态转移次数阈值n1n1,需要的样本个数n2。第二步,从任意简单概率分布采样得到初始状态值x0。第三步,for t=0 to n1+n2−1: 从条件概率分布P(x|xt)中采样得到样本xt+1样本集(xn1,xn1+1,...,xn1+n2−1)即为我们需要的平稳分布对应的样本集。

3. 马尔科夫链蒙特卡洛方法

      上面介绍了蒙特卡罗近似求积分的方法,也介绍了马尔科夫链的平稳分布,两者如何结合呢?首先蒙特卡罗需要的是自变量取值的概率分布,所以问题转化为马尔科夫链的平稳分布如何得到概率分布呢?

      首先介绍一个概念:细致平稳条件。如果非周期马尔科夫链的状态转移矩阵P和概率分布π(x)对于所有的i,j满足:

                                              

     则称概率分布π(x)是状态转移矩阵P的平稳分布。证明很简单,由细致平稳条件有:      

               

     将上式用矩阵表示即为: 即满足马尔可夫链的收敛性质。也就是说,只要我们找到了可以使概率分布π(x)满足细致平稳分布的矩阵P即可。这给了我们寻找从平稳分布π, 找到对应的马尔科夫链状态转移矩阵P的新思路。

     目标平稳分布π(x)和某一个马尔科夫链状态转移矩阵Q不满足细致平稳条件,即

     我们可以对上式做一个改造,使细致平稳条件成立。方法是引入一个α(i,j),使上式可以取等号,即:

                        

        问题是什么样的α(i,j)可以使等式成立呢?其实很简单,只要满足下两式即可:

                                    

       这样,我们就得到了我们的分布π(x)对应的马尔科夫链状态转移矩阵P,满足:

       也就是说,我们的目标矩阵P可以通过任意一个马尔科夫链状态转移矩阵Q乘以α(i,j)得到α(i,j)我们有一般称之为接受率。取值在[0,1]之间,可以理解为一个概率值。即目标矩阵P可以通过任意一个马尔科夫链状态转移矩阵Q以一定的接受率获得。好了,现在我们来总结下MCMC的采样过程。

  1. 输入我们任意选定的马尔科夫链状态转移矩阵Q,平稳分布π(x),设定状态转移次数阈值n1,需要的样本个数n2
  2. 从任意简单概率分布采样得到初始状态值x0
  3. for t=0 to n1+n2−1:
  • a. 从条件概率分布Q(x|xt)中采样得到样本x∗
  • b. 从均匀分布采样u∼uniform[0,1]
  • c. 如果u<α(xt,x∗)=π(x∗)Q(x∗,xt), 则接受转移xt→x∗,即xt+1=x∗
  • d. 否则不接受转移,t=max(t−1,0)

      样本集(xn1,xn1+1,...,xn1+n2−1)即为我们需要的平稳分布对应的样本集。

      上面这个过程基本上就是MCMC采样的完整采样理论了,但是这个采样算法还是比较难在实际中应用,为什么呢?问题在上面第三步的c步骤,接受率这儿。由于α(xt,x∗)可能非常的小,比如0.1,导致我们大部分的采样值都被拒绝转移,采样效率很低。有可能我们采样了上百万次马尔可夫链还没有收敛,也就是上面这个n1要非常非常的大,这让人难以接受,怎么办呢?这时就轮到我们的M-H采样出场了。

3. M-H采样

      M-H采样是Metropolis-Hastings采样的简称,这个算法首先由Metropolis提出,被Hastings改进,因此被称之为Metropolis-Hastings采样或M-H采样,M-H采样解决了我们上一节MCMC采样接受率过低的问题。我们回到MCMC采样的细致平稳条件:

      

       我们采样效率低的原因是α(i,j)太小了,比如为0.1,而α(j,i) 为0.2。即:

      这时我们可以看到,如果两边同时扩大五倍,接受率提高到了0.5,但是细致平稳条件却仍然是满足的,即:

                  

       这样我们的接受率可以做如下改进,即:

       通过这个微小的改造,我们就得到了可以在实际应用中使用的M-H采样算法过程如下:

  1. 输入我们任意选定的马尔科夫链状态转移矩阵Q,平稳分布π(x),设定状态转移次数阈值n1,需要的样本个数n2
  2. 从任意简单概率分布采样得到初始状态值x0
  3. for t=0 to n1+n2−1:
  • a) 从条件概率分布Q(x|xt)中采样得到样本x∗
  • b) 从均匀分布采样u∼uniform[0,1]
  • c) 如果u<α(xt,x∗)=min{π(j)Q(j,i)π(i)Q(i,j),1}, 则接受转移xt→x∗xt→x∗,即xt+1=x∗xt+1=x∗
  • d) 否则不接受转移,t=max(t−1,0)

     样本集(xn1,xn1+1,...,xn1+n2−1)即为我们需要的平稳分布对应的样本集。很多时候,我们选择的马尔科夫链状态转移矩阵Q如果是对称的,即满足Q(i,j)=Q(j,i),这时我们的接受率可以进一步简化为:

               

 

发布了66 篇原创文章 · 获赞 115 · 访问量 82万+

猜你喜欢

转载自blog.csdn.net/zhouyy858/article/details/103830675