深度学习 --- 受限玻尔兹曼机RBM(MCMC和Gibbs采样)

版权声明:转载请注明出处: https://blog.csdn.net/weixin_42398658/article/details/84189728

上一节我们详细的讲解了马尔科夫过程和马尔科夫链,提及了转移矩阵P,马尔科夫的平稳性(遍历性),需要好好理解马尔科夫的平稳性,因为本节将根据马尔科夫的平稳性进行讲解,同时也介绍了采样的原理和过程。好,到这里呢,我们在回顾一下我们的最初的目的是什么,我们的最初的目的是解决玻尔兹曼机的计算复杂的问题,为了解决这个问题就需要引入Gibbs采样,而想要理解Gibbs采样就需要知道马尔科夫链,还要知道MCMC算法即蒙特卡洛方法,本节将在马尔科夫链的基础上继续讲解蒙特卡洛方法,然后引入Gibbs采样,为下一节的受限玻尔兹曼机做准备,在这里先提前和大家提个建议,本节有点难理解,希望大家能坚持,并把本节彻底搞懂,本节确实不容易理解,我也是理解了很长时间才消化,因此大家尽量理解就好,废话不多说,下面进入正题:

马尔科夫平稳性:

          这里还是回忆一下上节的马尔科夫的一些性质:

这个马氏链的收敛定理非常重要,所有的MCMC(Markov Chain Monte Carlo)方法都是以这个定理作为理论基础的。定理的证明相对复杂,一般的随机过程课本中也不给证明,所以我们就不用纠结它的证明了,直接用这个定理的结论就好了。我们对这个定理的内容做一些解释说明:
1.该定理中马氏链的状态不要求有限,可以是有无穷多个的;
2.定理中的“非周期“这个概念我们不打算解释了,因为我们遇到的绝大多数马氏链都是非周期的:

3.两个状态0是连通并非指i可以直接一步转移到临>0),而是可以通过有限的n步转移到达j(P_{ij}> 0)。马氏链的任何两个状态是连通的含义是指存在一个n使得矩阵p^n中的任何一个元素的数值都大于零。
4.我们用X_i表示在马氏链上跳转第步后所处的状态,如果\lim_{n\rightarrow \infty }P^n_{ij}=\pi (j)存在,很容易证明以上定理的第二个结论。由于 :

                       上式两边取极限就得到\pi (j) = \sum_{i=0}^{\infty }\pi (i)P_{ij} 

     从初始概率分布\pi _0出发,我们在马氏链上做状态转移,记X_i的概率分布为\pi _j,则有:

                                                            X_0 \sim \pi _0(x)   

                                                             X_i \sim \pi _i(x)

                                                             \pi _i(x) = \pi _{i-1}(x)P = \pi _0(x)P^n        

由马氏链收敛的定理,概率分布\pi _i(x)将收敛到平稳分布\pi (x),假设到第n步的时候马氏链收敛,则有:

所以X_n,X_{n+1},X_{n+2},...\pi (x)都是同分布的随机变量,当然他们并不独立。如果我们从一个具体的初始状态x_0开始,沿着马氏链按照概率转移矩阵做跳转,那么我们得到一个转移序列x_0,x_1,x_2,...,x_n,x_{n+1},...,由于马氏链的收敛行为, x_n,x_{n+1},...都将是平稳分布\pi (x)的样本。那么我们可以多想一下就是我们通常都是从样本中统计得到分布函数(均匀分布、正态分布、t分布等)那什么是分布函数呢?大家还记得吧,我们一起来看一下:

简单来说分布函数就是随机变量的值对应的概率,如学生的分数就符合高斯分布,我拿到一张成绩单就可以得到成绩的概率分布是符合高斯的,学生的分数有很多可能,但是他的统计特性不会变的,例如我拿出一个分数,就能计算出这个分数对应的概率。我们通常遇到的问题就是一堆数据去找这个数据符合什么样的分布,进而研究数据的其他特性(期望、均值等),但是呢?现实数据中有时候并不是我们常见的概率分布,有些概率分布很复杂,我们根本得不到,而有时候我们项目需要一些样本,就是上面对应学生的分数,但是呢这个样本应该符合我们要求的分布,但是呢这个分布很复杂或者说维度很大,让我们生成基于这个分布的样本就没有那么容易了,但是我们上面讲了平稳马尔科夫链,我们发现一个很有意思的现象就是当马尔科夫链转移n次后的状态概率不在变化了。此时继续转移那么对应的X_n,X_{n+1},.....的概率分布不在变化,也就是说这时候的x是符合这些不在变化的概率分布的,那么我们能不能根据这个特点解决生成样本的问题呢?当然可以了,下面我们就详细讲解到底怎样才能生成我们的样本。

        对于给定的概率分布p(x)我们希望能有便捷的方式生成它对应的样本。由于马氏链能收敛到平稳分布,于是一个很的漂亮想法是:如果我们能构造一个转移矩阵为P的马氏链,使得该马氏链的平稳分布恰好是p(x),那么我们从任何一个初始状态出发沿着马氏链转移,得到一个转移序列x_0,x_1,x_2,....,x_n,x_{n+1},.....,如果马氏链在第n步己经收敛了,于是我们就得到了\large \pi (x)的样本\large x_n,x_{n+1},x_{n+2},.....
        这个绝妙的想法在1953年被Metropolis想到了,为了研究粒了系统的平稳性质,Metropolis考虑了物理学中常见的波尔兹曼分布的采样问题,首次提出了基于马氏链的蒙特卡罗方法,即Metropolis算法,并在最早的计算机上编程实现。Metropolis算法是首个普适的采样方法,并启发了一系列MCMC方法,所以人们把它视为随机模拟技术腾飞的起点。Metropolis的这篇论文被收录在《统计学中的重大突破》中,Metropolis算法也被遴选为二十世纪的十个最重要的算法之一。我们接下来介绍的MCMC算法是Metropolis算法的一个改进变种,即常用的Metropolis-Hastings算法。由上一节的例子和定理我们看到了,马氏链的收敛性质主要由转移矩阵\large P决定,所以基于马氏链做采样的关键问题是如何构造转移矩阵尸,使得平稳分布恰好是我们要的分布)。如何能做到这一点呢?我们主要使用如下的定理:

                定理(细致平稳条件):  如果非周期马氏链的转移矩阵P和分布\large \pi (x)满足;

                                                                           \large \pi (i)P_{ij} = \pi (j)P_{ji}             对所有的\large i,j

                         则\large \pi (x)是马氏链的平稳分布,上式被称为细致平稳条件

       这里先解释一下这个是什么意思:

解释一下就是第0代人所处的阶层的概率为\large \pi (0)=[0.210,0.680,0.110],而转移矩阵P为下面这个矩阵:

那么在第0代人的阶层概率\large \pi (0)=[0.210,0.680,0.110]乘上转移概率矩阵P,我们来计算一下吧,总感觉这里大家会迷糊,把这里搞清楚在往下理解才清楚:

也就是说,计算就是简单的矩阵计算,那么我们的第0代、1代、3代、、、、、n代就是随机变量了,真正的样本应该是统计每代人的层次人数然后求出概率,即每一代都是统计出来这样的概率,随着代数的增加,层次的概率趋于稳定了,这个时候我们就说每代人的层次分布符合这个稳定的概率分布了,那么如果我们知道了这个层次的概率分布,我们就可以生成任意一代的一些样本了,大家可能还会问,生成的样本的人数不都是一样的吗?其实是只要知道一代人的层次人数我就可以很正确的求出其他的人数,只要概率是符合这样的稳定概率就可以了,这里说那么多就是想要大家明白他们的关系,即样本,转移概率、稳定的概率分布,搞清楚这些东西,下面才好理解,好,我们接着上面的继续:

           上面的细致平稳条件解释一下;

          其实这个定理是显而易见的,因为细致平稳条件的物理含义就是对于任何两个状态动,从i转移出去到j而丢失的概率质量,恰好会被从j转移回i的概率质量补充回来,所以状态i上的概率质量\large \pi (i)是稳定的,从而\large \pi (x)是马氏链的平稳分布。这里再用上面的例子解释一下,如第一代的层次乘上第一代转移第二代的转移矩阵就等于第二代的层次概率乘上第二代转移第一代的转移矩阵,即他们的乘积是不变的,也就是说,整体的乘积是不变的,变化的只是不同的概率质量,但是这个变化的概率质量可以反转进行得到。   数学上的证明也很简单,山细致平稳条件可得 :

                                                      

由于\large \pi是方程\large \pi P = \pi的解,所以\large \pi是平稳分。 下面就引入关键问题了:

           统计模拟中有一个重要的问题就是给定一个概率分布p(x),我们如何在计算机中生成它的样本。一般而言均匀分布\large Uniform(0,1)的样本是相对容易生成的。通过线性同余发生器可以生成伪随机数,我们用确定性算法生成[0:1]之间
的伪随机数序列后,这些序列的各种统计指标和均匀分布\large Uniform(0,1)的理论计算结果非常接近。这样的伪随机序列就有比较好的统计性质,可以被当成真实的随机数使用。
       而我们常见的概率分布,无论是连续的还是离散的分布,都可以基与\large Uniform(0,1)的样本生成,例如正态分布可以通过著名的Box-Muller变换得到:

         定理(Box-Muller变换): 如果随机变量\large U_1,U_2独立且\large U_1,U_2\sim Uniform(0,1)则:

                                            \large Z_0 = \sqrt{-2lnU_1cos(2\pi U_2)}

                                              \large Z_1 = \sqrt{-2lnU_1sin(2\pi U_2)}

         则,\large Z_0,Z_1独立且服从标准正态分布。

其它几个著名的连续分布,包括指数分布、Gamma分布、t分布、F分布、Beta分布、Dinchlet分布等等,也都可以通过类似的数学变换得到:离散的分布通过均匀分布更加容易生成。更多的统计分布如何通过均匀分布的变换生成出来,大家可以参考统计计算的书,其中SheldonM.Ross的《统计模拟》是写得非常通俗易懂的一本。
不过我们并不是总是这么幸运的,当p(x)的形式很复杂,或者p(x)是个高维的分布的时候,样本的生成就可能很困难了。譬如有如下的情况:

  1.            \large p(x) = \frac{\tilde{p(x)}}{\int \tilde{p(x)}dx},而\large \tilde{p(x)}我们是可以计算的,但是底下的积分形式无法显示的计算。
  2. \large p(x,y)是一个个二维的分布函数,这个函数本身计算很困难,但是条件分布\large p(x|y),p(y|x)的计算相对简单;如果\large p(x)是高维的,这种情形就更加明显了。

那么MCMC是如何具体做的呢?

MCMC (Markov Chain Monte Carlo):

  对于给定的概率分布p(x)我们希望能有便捷的方式生成它对应的样本。由于马氏链能收敛到平稳分布,于是一个很的漂亮想法是:如果我们能构造一个转移矩阵为P的马氏链,使得该马氏链的平稳分布恰好是p(x),那么我们从任何一个初始状态出发沿着马氏链转移,得到一个转移序列x_0,x_1,x_2,....,x_n,x_{n+1},.....,如果马氏链在第n步己经收敛了,于是我们就得到了\large \pi (x)的样本\large x_n,x_{n+1},x_{n+2},.....

这是上面的内容,之所以来回强调,就是希望大家能理解,因为下面不太好理解。

这里需要强调下,假入我们已知概率分布的p(x),想得到符合此概率分布的样本,那么我们就基于p(x)设计马氏链:
假设我们已经有一个转移矩阵为Q马氏链(\large q(i,j)表示从状态i转移到状态j的概率,也可以写为\large q(j|i)或者\large q(i\rightarrow j)),显然,通常情况下
                                                          \large p(i)q(i,j)\neq p(j)q(j,i)                                            (1)

也就是细致平稳条件不成立,所以p(x)不太可能是这个马氏链的平稳分布。我们可否对马氏链做一个改造,使得细致平稳条件成立呢?譬如,我们引入一个\large \alpha (i,j)我们希望:

                                                           \large p(i)q(i,j)\alpha (i,j) = p(j)q(j,i)\alpha (j,i)
取什么样的\large \alpha (i,j)以上等式能成立呢?最简单的,按照对称性,我们可以取

                                                             \large \alpha (i,j) = p(j)q(j,i)           \large \alpha (j,i) = p(i)q(i,j)

于是(1)式就成立了。所以有                                             

于是我们把原来具有转移矩阵Q的一个很普通的马氏链,改造为了具有转移矩阵Q'的马氏链,而Q'恰好满足细致平稳条件,由此马氏链Q'的平稳分布就是p(x)!!!!
       在改造Q的过程中引入的\large \alpha (i,j)称为接受率,物理意义可以理解为在原来的马氏链上,从状态i以\large q(i,j)的概率转跳转到状态j的时候,我们以\large \alpha (i,j)的概率接受这个转移,于是得到新的马氏链Q'的转移概率为q(i,j)\alpha (i,j)

解释一下上图就是在i转移到j时,需要判断一下概率,如果 \large \alpha (i,j)大于设定的概率我们就转移,否则不转移,这和退火算法很相似,转移的说明符合细致平稳条件,反之不符合就不转移,这个大家需要多体会一下,我也是理解了很长时间的。这样我们就得到了一个以转移矩阵Q,对应平稳的概率p(x)因此我们就得到了采样样本符合概率分布p(x)的算法:

 这个简单的说一下,感觉上面的算法没什么的,但是内容主要在p(x)不好生成样本,但是通过q(x)可以很好的抽样,这个需要大家好好理解。到这里mcmc就结束了,但是我一直都有一个疑问就是为什么需要小于这个接受率才转移即小于这个接受率才得到一个样本,否则回到本身的状态,为什么这样,按理说只要满足细致平稳条件就可以了啊,为什么还要这么费功夫,有的人说这和重要采样、接受拒绝采样相关,但是感觉也没关系啊,接受-拒绝采样,最起码他接受的是符合要求的状态分布的量,但是这里应该都是符合的,我在网上找到了一篇博客关于这个疑问的,我这里有word版,我还没看明白,大家有时间可下载这篇文章看看,我也在研究一下。(接受率的我已经理解了,在下一篇介绍)

下载链接:https://pan.baidu.com/s/1DmTy2D3R7VhBqZYbUkeedw 
提取码:7o8x 
 

以上的MCMC采样算法已经能很漂亮的工作了,不过它有一个小的问题.马氏链Q在转移的过程中的接受率\large \alpha (i,j)可能偏小,这样采样过程中马氏链容易原地踏步,拒绝大量的跳转,这使得马氏链遍历所有的状态空间要花费太长的时间,收敛到平稳分布)的速度太慢。有没有办法提升一些接受率呢?
假设\large \alpha (i,j)=0.1,\large \alpha (j,i) = 0.2此时满足细致平稳条件,于是:

                                       \large p(i)q(i,j)\times 0.1 = p(j)q(j,i)\times 0.2

两边同时扩大五倍;

                                        \large p(i)q(i,j)\times 0.5 = p(j)q(j,i)\times 1

从上面我们可以看出,我们同时放大了5倍,但是条件都满足,没有打破细致平稳条件,为了提高接受率,我们这样选择\large \alpha

                                     

于是,经过对上述MCMC采样算法中接受率的微小改造,我们就得到了如下教科书中最常见的Metropolis-Hastings算法。
对于分布p(x)我们构造转移矩阵\large Q'使其满足细致平稳条件 :

                                   

此处x并不要求是一维的,对于高维空间的p(x),如果满足细致平稳条件;

这个理解和MCMC一样,只是问题还是那个问题,这里就先这样了,下面开始Gibbs采样。

Gibbs采样

           对于高维的情形,由于接受率\large \alpha的存在(通常\large \alpha< 1),以上的算法效率不够高,能否找到一个转移矩阵Q使的接受率\large \alpha =1呢?先看看二维的情况,假设概率分布\large p(x,y),考察x坐标相同的两个点\large A(x_1,y_1),B(x_1,y_2),图形如下:

现在我们来看看,从A到B两点的转移情况:

\large A\rightarrow B:     可以表示为:在\large x_1的情况下,A转移到B的概率此时可以理解为q,就有如下的公式:

                                         \large p(x_1,y_1)p(y_2|x_1)= p(x_1)p(y_1|x_1)p(y_2|x_1)       

                                         其中:\large p(x_1,y_1) = p(x_1)p(y_1|x_1)条件概率等式 ,带进去就得到,上面的式子

\large B\rightarrow A:       可以表示为:在\large x_1的情况下,A转移到B的概率此时可以理解为q,就有如下的公式:

                                           \large p(x_1,y_2)p(y_1|x_1) = p(x_1)p(y_2|x_1)p(y_1|x_1)

我们发现两式是相等的,因此得到:

                                            \large p(x_1,y_1)p(y_2|x_1) = p(x_1,y_2)p(y_1|x_1)

即:

                                             \large p(A)p(y_2|x_1) = p(B)p(y_1|x_1)

基于以上等式,我们发现,在\large x=x_1这条平行于\large y轴的直线上,如果使用条件分布\large p(y|x_1)做为任何两个点之间的转移概率,那么任何两个点之司的转移满足细致平稳条件。同样的,如果我们在\large y=y_1这条直线上任意取两个点\large A(x_1,y_1),C(x_2,y_1),也有如下等式:

                                             \large p(A)p(x_2|y_1) = p(C)p(x_1|y_1)

于是就可以构造平面上任意两点之间的转移概率矩阵Q,即:

                                               \large Q(A\rightarrow B) = p(y_B|x_1)                       如果\large x_A = x_B = x_1

                                                \large Q(A\rightarrow C) = p(y_C|y_1)                        如果\large y_A = y_C = y_1

                                                \large Q(A\rightarrow D) = 0                                        其他

有了上面的转移矩阵Q,很容易验证对平面任意两点\large X,Y,满足细致平稳条件:

                                                \large p(X)Q(X\rightarrow Y) = p(Y)Q(Y\rightarrow X)

于是这个二维空间上的马氏链将收敛到平稳分布\large p(x,y),这个算法就称为Gibbs Sampling 算法。算法流程如下:

以上采样的过程中,马氏链的转移只是轮换的沿着坐标轴x轴和y轴做转移,于是得到样本\large (x_0,y_0),(x_0,y_1),(x_1,y_2),(x_2,y_2),......马氏链收敛后,最终得到的样本就是\large p(x,y)的样本,如下图的转移过程:

在此基础上可以推广到高维,即可以通过向量进行表示:

                                                             

 所以说如理解了MCMC基本上就全都理解了,现在我还剩下一个问题就是MCMC中的那个接受率,为什么称为接受率?为什么必须小于接受率才转移?这里隐式的说明了什么?蕴藏的物理意义是什么?到目前为止我还没搞懂,上面分享了关于我疑问的解答,下面我就会好好研究一下,然后整理出来,单独写一份贴出来进行解释,如果有搞明白的请告诉我呀,另外就是本篇主要参考了《LDA数学八卦》的内容,只是在此基础上,增添了内容,使其更容易理解和吸收,这里特此说明,大家也可以找到这篇文章参考。本节结束,下节就是通过Gibbs采样处理玻尔兹曼机的训练漫长的缺点进而引出受限玻尔兹曼机。

猜你喜欢

转载自blog.csdn.net/weixin_42398658/article/details/84189728