Markov Chain

提起马尔科夫链,大家应该都不陌生。我第一次接触这个概念,是在大一的C语言编程课中,当时用马尔科夫链来做文章的随机生成。马尔科夫链的思想非常简单,在数学上可以表述如下:
(6)P(Xt+1∣Xt,Xt−1,...,X0)=P(Xt+1∣Xt)P(X_{t+1}|X_{t}, X_{t-1}, ..., X_0) = P(X_{t+1}|X_{t}) \tag6P(Xt+1​∣Xt​,Xt−1​,...,X0​)=P(Xt+1​∣Xt​)(6)

也就是说,随机变量XXX在t+1t+1t+1时刻的状态,只与ttt时刻的状态有关,与ttt时刻之前的状态无关,这就是所谓的马尔科夫性。由于马尔科夫链是一个过于简化的模型,大部分情况下并不能准确地描述客观世界中的现象。比如,我现在站在办公楼门口,那么马尔科夫链认为,我接下来要去哪与我之前在哪无关,这显然是不合理的。如果我之前在家,那么我下一个状态应该是进入办公室工作;如果我之前在办公室,那么我下一个状态可能是去附近吃午饭,也可能是回家。当然也存在一些情况,我们可以用马尔科夫链作为一个很好的近似,比如我们可以认为一个人下个月能拿到多少工资,只取决于他这个月的工资水平。

不过马尔科夫链能否对很好地对现实中的过程建模,并不是我们这里所关心的,我们在意的是马尔科夫链一个有趣的性质。我们首先看一下(6)(6)(6)式中的P(Xt+1∣Xt)P(X_{t+1}|X_t)P(Xt+1​∣Xt​),这一项是一组条件分布,它完整地描述了随机变量XXX如何由ttt时刻的状态转移至t+1t+1t+1时刻的状态。就让我们用一个例子来解释一下这句话的含义。

我们可以按照经济状况,把人分成下层,中层,上层三类。通常来说,一个人当前所处的阶层很大程度上取决于父辈的阶层。这里为了简化我们的讨论,我们假设社会上只有两个阶层,上层和下层。那么我们假设:

  • 如果父辈是上层,子辈有0.8的概率维持在上层,有0.2的概率落入下层
  • 如果父辈是下层,子辈有0.7的概率维持在下层,有0.3的概率进入上层

按照这种方式我们定义了P(Xt+1∣Xt)P(X_{t+1}|X_t)P(Xt+1​∣Xt​),我们可以用一个表格来表示上面两个条件分布:

P(Xt+1=上层)P(X_{t+1}=上层)P(Xt+1​=上层) P(Xt+1)=下层P(X_{t+1})=下层P(Xt+1​)=下层
Xt=上层X_t=上层Xt​=上层 0.8 0.2
Xt=下层X_t=下层Xt​=下层 0.3 0.7

现在我们只要知道了父辈的阶层,就可以知道子辈处于各个阶层的概率了。也就是说,这一组条件分布完整的描述了随机变量XXX如何由ttt时刻的状态转移到t+1t+1t+1时刻的状态。

单个随机变量的转移描述了个体的行为,如果从整体的角度来看,这一组条件分布也完整地描述了随机变量XXX如何由ttt时刻的分布P(Xt)P(X_t)P(Xt​)转移到t+1t+1t+1时刻的分布P(Xt+1)P(X_{t+1})P(Xt+1​)。假设在这一辈的分布是(上层人0.2, 下层人0.8),那么我们可以计算出在下一辈中,上层人和下层人的分布:
[0.20.8]T×[0.80.20.30.7]=[0.40.6]T\left[ \begin{array}{c}0.2\\0.8\end{array}\right]^T \times \left[ \begin{array}{cc}0.8&0.2\\ 0.3&0.7\end{array}\right]=\left[\begin{array}{c}0.4\\0.6\end{array}\right]^T [0.20.8​]T×[0.80.3​0.20.7​]=[0.40.6​]T

直觉上,如果按照这组条件分布一直持续进行下去,社会中上层人和下层人的比例应该会达到一种平衡的状态。我们用简单的计算验证一下。

  • 第一步,假设平衡的状态存在,在平衡的状态下,分布为(上层人xxx, 下层人1−x1-x1−x),且转移一代之后,上层人与下层人的分布不变,那么以下等式成立:
    [x1−x]T×[0.80.20.30.7]=[x1−x]T\left[ \begin{array}{c}x\\1-x\end{array}\right]^T \times \left[ \begin{array}{cc}0.8&0.2\\ 0.3&0.7\end{array}\right]=\left[\begin{array}{c}x\\1-x\end{array}\right]^T [x1−x​]T×[0.80.3​0.20.7​]=[x1−x​]T解这个方程可以得到 x=0.6x=0.6x=0.6, 也就是说,如果当前社会中上层人的比例为60%,下层人比例为40%, 那么以后的每一代中,该比例维持不变。

  • 第二步,我们证明从任意分布出发,经过一定次数的转移之后,都可以到达这个稳定的分布。我们假设当前的分布为 (xtx_txt​, 1−xt1-x_t1−xt​),且xt&gt;0.6x_t&gt;0.6xt​>0.6。那么经过一次转移之后,上层人的比例为xt+1=0.3+0.5xtx_{t+1}=0.3 + 0.5x_txt+1​=0.3+0.5xt​,且0.6&lt;xt+1&lt;xt0.6&lt;x_{t+1}&lt;x_t0.6<xt+1​<xt​ 。同理,如果xt&lt;0.6x_t&lt;0.6xt​<0.6,我们可以得到xt&lt;xt+1&lt;0.6x_t&lt;x_{t+1}&lt;0.6xt​<xt+1​<0.6。因此,无论初始的xtx_txt​是多少,最终都会向0.6收敛。

通过以上两步,我们证明了,无论初始状态下社会阶层的分布是怎样的,在误差允许的范围内, 我们可以经过有限步的转移,到达稳定的状态——60%的上层人,40%的下层人。

我们刚刚用阶层转移的例子讨论了最简单的情况 —— 随机变量XXX是一维离散的,并且只在两个点上取值。我们可以将其推广到一般的情形 —— XXX是高维随机变量,取值空间为Θ\ThetaΘ,f(Xt+1∣Xt)f(X_{t+1}|X_t)f(Xt+1​∣Xt​)是条件密度函数。假设我们现在有一个定义在Θ\ThetaΘ上的任意分布,其密度函数为π0(x)\pi_0(x)π0​(x),那么我们将π0(x)\pi_0(x)π0​(x)按照f(Xt+1∣Xt)f(X_{t+1}|X_t)f(Xt+1​∣Xt​)进行转移,依次得到π1(x),π2(x)⋯\pi_1(x), \pi_2(x)\cdotsπ1​(x),π2​(x)⋯,那么这一个分布序列最终会收敛到某个稳定的分布π(x)\pi(x)π(x)。πt(x)\pi_t(x)πt​(x)到πt+1(x)\pi_{t+1}(x)πt+1​(x)的转移过程可以由以下等式描述:
πt+1(x)=∫y∈Θf(x∣y)πt(y)dy\pi_{t+1}(x)=\int_{y \in \Theta}f(x|y)\pi_t(y)dyπt+1​(x)=∫y∈Θ​f(x∣y)πt​(y)dy

这个等式的含义是显然的,t+1t+1t+1时刻的状态xxx可能由ttt时刻任意状态yyy转移而得到,这个事件的概率为f(x∣y)πt(y)f(x|y)\pi_t(y)f(x∣y)πt​(y),我们对所有可能的yyy求和(积分),便得到πt+1(x)\pi_{t+1}(x)πt+1​(x)。

这种收敛性是否对于任意的转移概率f(Xt+1∣Xt)f(X_{t+1}|X_t)f(Xt+1​∣Xt​)都成立呢?马尔可夫链收敛性的证明是一个复杂的问题,鉴于我并没有研究过,这里只列出结论:

  • f(Xt+1∣Xt)f(X_{t+1}|X_t)f(Xt+1​∣Xt​)是非周期的。所谓周期性,就是存在至少一个分布π(x)\pi(x)π(x),经过有限步的转移之后,再次回到π(x)\pi(x)π(x)。我们遇到的绝大多数马尔可夫链都是非周期的
  • 随机变量XXX的任意两个状态是连通的。也就是说,对于任意两个状态xi,xjx_i, x_jxi​,xj​, 从xix_ixi​出发, 经过有限次的转移之后,我们可以转移到状态xjx_jxj​

总结一下,如果我们有一组条件分布f(Xt+1∣Xt)f(X_{t+1}|X_t)f(Xt+1​∣Xt​),满足非周期性和连通性,那么我们从随机变量XXX的任意分布π0(x)\pi_0(x)π0​(x)出发,按照该条件分布进行转移,会收敛到某个稳定的分布π(x)\pi(x)π(x)。到这里,马尔科夫链与采样似乎产生了联系,在下一篇里我们将详细讨论,如何借助马尔科夫链,来实现从任意分布中采样。

文章列表:
漫谈MCMC与Gibbs采样(一)—— 采样背后的逻辑
漫谈MCMC与Gibbs采样(二)—— 拒绝采样
漫谈MCMC与Gibbs采样(三)—— 有趣的马尔科夫链
漫谈MCMC与Gibbs采样(四)—— Monte Carlo Markov Chain
漫谈MCMC与Gibbs采样(五)—— M-H采样与Gibbs采样

漫谈MCMC与Gibbs采样(三)—— 有趣的马尔科夫链相关推荐

  1. 预测未来的神技——有趣的马尔科夫链

    本文为量子金服原创文章,转载须授权 作为概率论的一个重要分支,随机过程撑起了概率论的半壁江山,如今,它广泛使用在诸如天气预报.统计物理.天体物理.运筹决策.经济数学.安全科学.人口理论.可靠性及计算机 ...

  2. MCMC(二)马尔科夫链

    在MCMC(一)蒙特卡罗方法中,我们讲到了如何用蒙特卡罗方法来随机模拟求解一些复杂的连续积分或者离散求和的方法,但是这个方法需要得到对应的概率分布的样本集,而想得到这样的样本集很困难.因此我们需要本篇 ...

  3. 蒙特卡罗 马尔科夫链 与Gibbs采样

    这几个概念看了挺多遍都还是含混不清,最近看了几篇博客,才算大致理解了一点点皮毛,所以来总结一下. MCMC概述 从名字我们可以看出,MCMC由两个MC组成,即蒙特卡罗方法(Monte Carlo Si ...

  4. 蒙特卡洛分析_随机模拟:马尔科夫链蒙特卡洛采样MCMC与EM算法「2.3」

    最近学习了机器学习中的马尔科夫链蒙特卡洛(Markov Chain Monte Carlo, 简称MCMC) 相关的知识. 主要内容包括: [1]蒙特卡洛原则,及其应用于采样的必要性(已经发布在头条) ...

  5. MCMC原理解析(马尔科夫链蒙特卡洛方法)

    马尔科夫链蒙特卡洛方法(Markov Chain Monte Carlo),简称MCMC,MCMC算法的核心思想是我们已知一个概率密度函数,需要从这个概率分布中采样,来分析这个分布的一些统计特性,然而 ...

  6. MCMC(一):蒙特卡罗方法和马尔科夫链

    作为一种随机采样方法,马尔科夫链蒙特卡罗(Markov Chain Monte Carlo,以下简称MCMC)在机器学习,深度学习以及自然语言处理等领域都有广泛的应用,是很多复杂算法求解的基础.比如分 ...

  7. 从马尔科夫链到吉布斯采样与PageRank

    马尔科夫链表示state的链式关系,下一个state只跟上一个state有关. 吉布斯采样通过采样条件概率分布得到的样本点,近似估计概率分布P(z)P(z).PageRank通过节点间的连接,估计节点 ...

  8. MCMC+马尔科夫链蒙特卡罗

    MCMC+马尔科夫链蒙特卡罗 为了解决什么问题,所以出现了这一种方法? 后来又因为出现了什么新情况,所以产生了对应的变种?

  9. 马尔科夫链蒙特卡洛(MCMC)

    在以贝叶斯方法为基础的机器学习技术中,通常需要计算后验概率,然后通过最大后验概率(MAP)等方法进行参数推断和决策.然而,在很多时候,后验分布的形式可能非常复杂,这个时候寻找其中的最大后验估计或者对后 ...

最新文章

  1. se(3)-TrackNet: 数据驱动的动态6D物体姿态跟踪, 基于合成域的图片残差校准
  2. Git 2.25.0 发布,新特性:部分 clone 与稀疏 checkout
  3. 136. Leetcode 47. 全排列 II (回溯算法-排列问题)
  4. Spring-AOP @AspectJ进阶之切点复合运算
  5. 《每天学点博弈论全集》-读书总结
  6. java逆数组如何print_Java 逆数组
  7. php curl获取响应,php – cUrl – 获取html响应正文
  8. phpMyAdmin常用设置
  9. P1501 [国家集训队]Tree II
  10. java 运行500错误_MyEclipse运行JAVA Web时出现HTTP Status 500错误
  11. 事件和委托的编译代码
  12. pytorch使用模型预测_使用PyTorch从零开始对边界框进行预测
  13. 个人档案php源码,php人事档案管理系统
  14. FFmpeg+SDL纯视频播放器
  15. 视频中的目标检测与图像中的目标检测具体有什么区别?
  16. Unity-URP学习笔记(八)使用RendererFeature制作屏幕后期-高斯模糊
  17. ESXI安装OpenWRT LEDE软路由部署指南(附镜像下载)
  18. 玩了下朋友刚买的iphone4s,太鸡冻了,太幸福了
  19. Ubuntu在线安装NFS服务
  20. 【解决】Keil中创建工程时出现-arm_math.h(xxx): warning: #xxxx-D: unrecognized GCC pragma错误

热门文章

  1. 【java进阶02:抽象类和接口】类与类之间的关系 抽象类与接口的区别
  2. Spring Security 中的权限注解很神奇吗?
  3. g4600黑苹果efi_【玩机教程】最全黑苹果安装教程 之 小白也能掌握(完结篇)
  4. 介绍几个不错的.NET开源的搜索组件
  5. java如何调用微信功能_Java编程调用微信分享功能示例
  6. web期末作业设计网页 HTML5+CSS大作业——明星个人主页(15页) 创作主页
  7. shell,打通 Linux 任督二脉,任何武功都随你所用
  8. 第三方软件测试(软件检测)收费标准
  9. H5获取微信公众号用户openId,用户信息
  10. Flow 转 LiveData 后数据丢了,肿么回事?