首页 > 其他分享 >时间可逆的马氏链(Time Reversible Markov Chain)

时间可逆的马氏链(Time Reversible Markov Chain)

时间:2023-04-28 20:46:23浏览次数:50  
标签:Chain 可逆 元素 ij cdots Reversible Time pi 马氏链

逆向过程

考虑一个具有转移概率\(P_{ij}\)和平稳概率\(\pi_i\)的已经达到平稳状态的遍历的(不可约+非周期+正常返)马尔科夫链。假设这个马氏链在平稳态的状态序列是\(\{X_m,X_{m+1},\cdots\}\), 现在我们沿时间的反方向来看这条链,具体地,我们希望考察
\(P(X_m = j|X_{m+1} = i, X_{m+2},\cdots)\)
因为在这个马氏链的正向过程中有\(X_m\)与\(X_{m+2},\cdots\)是相互独立的,所以在逆向过程中结合上式有
\(P(X_m = j|X_{m+1} = i, X_{m+2},\cdots) = P(X_m = j|X_{m+1} = i)\)
这个式子说明遍历的马氏链在达到平衡态之后沿着时间的反方向的过程也是一个马氏链。接着自然要考虑这个马氏链的转移概率\(Q_{ij}\)根据马氏链的平稳概率以及条件概率公式易得
\(Q_{ij} = P(X_m = j|X_{m+1} = i) = \frac{\pi_{j}P_{ji}}{\pi_i}\)

时间可逆的马氏链

一个马氏链的逆向过程其实并不特殊,但是如果满足\(Q_{ij} = P_{ij}\),那么马氏链就特殊起来了,这种马氏链可以称为时间可逆的,且根据这个条件我们可以进一步时间可逆马氏链的一个条件
\(\pi_i P_{ij} = \pi_j P_{ji}\)
这个条件可以帮助我们在后面得出时间可逆马氏链的充要条件。现在来思考一下为什么\(Q_{ij} = P_{ij}\)时,马氏链被称为是时间可逆的,\(Q_{ij} = P_{ij}\)表达的是在反向过程中后一个时间点状态\(i\)到前一个时间点状态\(j\)的概率等于正向过程中前一个时间点状态\(i\)到后一个时间点状态\(j\)的概率,这个结论对任意\(i,j\)都成立,就好像时间这个因素对状态之间的转移概率没有影响一样,不管是正向还是逆向过程,只要是状态\(i\)转移到状态\(j\), 这个转移概率就不变,状态之间的转移概率不同完全取决于状态本身。由于目前来看,时间只有两种方向(过去(逆向),未来(正向)), 所以对于上面那种不受时间影响的说法也可以说是时间可逆。

我们得到了一个判断马氏链是否是可逆的充分条件,即\(\pi_i P_{ij} = \pi_j P_{ji}\)。实际上如果我们能够找到一组非负数使得它满足方程
\(x_iP_{ij} = x_jP_{ji}\quad \sum_{i} x_i = 1\)
那么对应的马氏链是时间可逆的,并且得到的解就是该马氏链的各态的稳态概率。这可以通过求马氏链稳态概率的那个方程组来得到证明,实际上只需要对上面第一个方程两边同时对\(x_i\)或者\(x_j\)求和即可。再看一眼时间可逆马氏链的条件
\(\pi_i P_{ij} = \pi_j P_{ji}\)
两边同时对\(i\)求和,我们得到的是
\(\sum_{i} \pi_i P_{ij} = \pi_j\)
这正是马氏链的稳态方程(默认概率的归一性),而马氏链的稳态方程对应的是马氏链的细致平衡条件,所以这样时间可逆的马氏链一定满足马氏链的细致平衡条件,故时间可逆的马氏链一定存在稳态概率。

判断马氏链是否是时间可逆的充要条件

对于只要\(P_{ji} = 0\)就有\(P_{ij} = 0\)的遍历的马尔科夫链,它是时间可逆的当且仅当如果它开始在状态\(i\),任意一个回到\(i\)的路径与它的反向路径有相同的概率,即如果对于一切状态\(i,i_1,\cdots,i_k\), 有
\(P_{i,i_1}P_{i_1,i_2}\cdots P_{i_k,i} = P_{i,i_k}P_{i_k,i_{k-1}}\cdots P_{i_1,i}\)

这个充要条件告诉我们,可以通过考察马氏链从某个状态出发再回到这个状态的正向路径以及逆向路径的概率是否相等来判断这个马氏链是否是时间可逆的。

例题

假设给定了标号从\(1\)到\(n\)的\(n\)个元素的集合,将它们排列成某个有序的列表,在每个时间单位,有一个需求(独立于过去)即从这些元素中取出一个元素,元素\(i\)被需求的概率是\(P_i\),元素经过需求后放回,但是不必放在原来的位置。现在有两种规则来决定元素经过需求后放置的新位置:

  1. 每次被需求的元素放在这个有序列表的表头位置
  2. 每次被需求的元素从其所在位置向列表的首位移进一个位置

我们关心的是在这个过程中采用上述两种规则中哪一种规则会使得长时间下被需求元素的平均位置最小(想象一下高中时期推挤在桌上的一摞书,被需求的元素就是我们要找到的书,我们一般是选择将找到书又放在最上面,虽然这样更省时,但这种方法一定就是最好的方法吗?)。

对于这\(n\)个元素的集合,其所有的\(n!\)个排列构成了所有的状态空间\(\{X_n,n\geq0\}\) 且\(X_n = (e^n_1,e^n_2,\cdots,e^n_n)\),容易得出这个状态空间中状态与状态之间的转移可以用马氏链来建模。实际上无论对于规则1还是规则2,整个过程中被需求元素的平均位置都为

\(E(被需求元素的位置) = \sum_{j}^{n} E(被需求的元素的位置|被需求元素为e_j)P_{j}\)

又因为元素\(e_j\)被需求与否于它所在的位置无关,所以上式可以进一步写为

\(E(被需求元素的位置) = \sum_{j}^n E(e_j的位置)P_j\)

如何描述\(e_j\)的位置?我们可以描述\(e_j\)前面有多少个元素,然后这个数目再加1就是\(e_j\)在序列中的位置。(一定要把不知如何描述的变量与其他变量结合起来,看看能否用其他变量予以描述)进而有如下定义

\(I_i = \left \{ \begin{align} & 1 ,\quad e_i在e_j之前\\ & 0, \quad else \end{align}\right.\)

那么\(1+\sum_{i} I_i\)就表示\(e_j\)的位置了,所以上述均值可以进一步写为

\(E(被需求元素的位置) = \sum_{j}^n E(1+\sum_i I_i)P_j = 1+ \sum_{j} \sum_{j\neq i}P_jP(e_i在e_j之前)\)

这里看看那个有两个求和号的求和,它可以看做一个主对角为0的矩阵所有元素之和,所以可以拆成一个下三角和一个上三角的矩阵的和最后再求和,即上述式子可以化为

\(E(被需求的元素的位置) = 1+ \sum_{i<j} P_jP(e_i在e_j之前) + \sum_{i>j} P_jP(e_i在e_j之前)\)

再对那个下三角矩阵进行转置(交换了行和列(\(i,j\)要交换))后就换为了两个上三角矩阵的和最后再求和,即

\(E(被需求的元素的位置) = 1+\sum_{i<j} P_jP(e_i在e_j之前)+P_iP(e_j在e_i之前)\)

进一步地,利用\(P(e_i在e_j前) = 1-P(e_j在e_i前)\),上式可以化为

\(E(被需求的元素的位置) = 1+\sum_{i<j} (P_i-P_j)P(e_j先于e_i) + \sum_{i<j} P_j\)

所以最终就只需要确定\(P(e_j先于e_i)\)的位置了,而对于以上两种不同的规则,这个概率自然是不同的。首先来看规则1,因为规则1是移至队列首,所以这种情况下事件\(e_j先于e_i\)等价于对于元素\(e_i\)或者元素\(e_j\)的需求是\(e_j\), 而对规则2就不是这样,因为可能\(e_j\)和\(e_i\)之间隔着多个元素,向前移动一个元素的情况下并不能保证谁在谁的前面。这样一来对于规则1,\(P(e_j先于e_i) = \frac{e_j}{e_j+e_i}\).

现在要想说明规则2比规则1更优秀,我们就需要说明在\(P_i>P_j\)的情况下,\(P_{Rule 2}(e_j先于e_i)<P_{Rule1}(e_j先于e_i) = \frac{e_j}{e_j+e_i}\)或者在\(P_j>P_i\)的情况下,说明\(P_{Rule2}(e_j先于e_i)>P_{Rule1}(e_j先于e_i) = \frac{e_j}{e_j+e_i}\)。因为这两种情况都使得\(E(被需求元素的位置)\)在规则2下更小,我们这里只说明后面一种情况,前者是一样的推理。

现在考虑规则2,可以适用于规则2的马氏链是时间可逆的,比如说对于一个3状态的排列\((1,2,3)\),根据上面充要条件的启发,我们考察它到它自身的任意一个路径的正向和逆向的概率:

(1,2,3)\(\rightarrow\)(2,1,3)\(\rightarrow\)(2,3,1)\(\rightarrow\)(3,2,1)\(\rightarrow\)(3,1,2)\(\rightarrow\)(1,3,2)\(\rightarrow\)(1,2,3)

正向路径的概率是 \(P_2P_3P_3P_1P_1P_2\), 而反向路径的概率是 \(P_2P_1P_1P_3P_3P_2P_2\), 根据乘法的交换律可以知道对任何其他路径以及其他数目状态都有正向路径的概率等于反向路径的概率的结论,所以这个马氏链是时间可逆的马氏链。

根据时逆马氏链满足的式子 \(\pi(i)P(i,j) = \pi(j)P(j,i)\), 我们有

\(\pi(e^i_1,\cdots,e^i_k,e^i_{k+1},\cdots,e^i_n)P_{e^i_{k+1}} = \pi(e^i_1,\cdots,e^i_{k+1},e^i_k,\cdots,e^i_n)P_{e^i_{k}}\)

现在根据要求\(e_j在e_i\)前面,我们考虑所有的\(e_i\)在\(e_j\)前面的所有状态\((\cdots,e_i,\cdots,e_j,\cdots)\),根据上面这个等式有

\(\pi(\cdots,e_i,\cdots,e_j,\cdots)P_j^{k+1} = \pi(\cdots,e_j,\cdots,e_i,\cdots)P_i^{k+1}\) 其中\(k\)是\(e_j\)和\(e_i\)之间相隔的元素个数

进而有

\(\pi(\cdots,e_i,\cdots,e_j,\cdots) = \frac{P_i^{k+1}}{P_j^{k+1}}\pi(\cdots,e_j,\cdots,e_i,\cdots)\)

因为\(P_j>P_i\),所以进一步又有

\(\pi(\cdots,e_i,\cdots,e_j,\cdots) < \frac{P_i}{P_j}\pi(\cdots,e_j,\cdots,e_i,\cdots)\)

这个式子对所有的\(e_i\)先于\(e_j\)的式子都成立,对所有\(e_i\)先于\(e_j\)的情况求和,就得到下式

\(P(e_i先于e_j)<\frac{P_i}{P_j}P(e_j先于e_i)\), 再通过\(P(e_i在e_j前) = 1-P(e_j在e_i前)\)就可以进一步得到

\(P(e_j先于e_i) < \frac{P_j}{P_j+P_i}\)

另一个方面的证明也可以同理得到,所以我们得出结论:对于被需求的元素来说,规则2比规则1具有更小的平均位置,这也说明如果我们在取书放书时采用规则2,被需求的书的位置就会更靠上。

标签:Chain,可逆,元素,ij,cdots,Reversible,Time,pi,马氏链
From: https://www.cnblogs.com/siranlee/p/17363097.html

相关文章

  • 02 Real-Time Shadows
    1.ShadowMapping在shadowmap中,场景被离散化了。在camera中的像素对应的点跟shadow中对应深度可能会有较小偏差,则为阴影。当入射越是平行表面,shadowmap中的像素范围越大,越严重。为此,设置一个shadowmap深度的冗余的阈值偏置。此外,这个bias可以根据角度调整。但是bias过大会......
  • 【专栏精选】Unity热更新之ILRuntime
    本文节选自洪流学堂公众号技术专栏《大话Unity2019》,未经允许不可转载。洪流学堂公众号回复专栏,查看更多专栏文章。洪流学堂,让你快人几步。你好,我是郑洪智。小新:“热更新真的是打开了一片天啊,现在我越发感觉热更新能做的事情太多了。之前做了一个项目,每次打包都好花费半小时,如果有......
  • 词库过大导致的Redis超时问题-RedisCommandTimeoutException
    问题Redis缓存超时问题报错内容redisio.lettuce.core.RedisCommandTimeoutException:Commandtimedoutafter10second(s)原因1.报错原因这里是因为词库的数据量过大,在开发库中有40w的数据需要刷到缓存中,因数据量过大时间久,Redis直接刷挂了2.为什么线上没有问题线上的......
  • 如何在Timeline中创建自定义轨道?
    你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。用过一段时间Timeline后,我问大智:“Timeline中只有这么几个轨道么?我发现有的需求这些轨道根本没办法满足,使用之前学过的PlayableTrack也很麻烦,还有其他办法么?”大智:“你遇到了什么问题呢?”小新:“之前咱们学的那......
  • 揭开Timeline中Playable Track的神秘面纱
    你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。大智:“小新,学习PlayableTrack之前你了解它么?”小新:“还真不了解,我尝试过,但是添加以后一片空白,啥都没有,就不知道该怎么用了。”大智:“那估计有很多同学也遇到过这种情况,你今天就带着大家一起探索下吧。”小新:“......
  • Timeline的Animation Track详解
    你好,我是跟着大智学Unity的萌新,我叫小新,这是我本周的学习总结报告哦。在Timeline中,AnimationTrack可能是我们用的最多的一个轨道了,而且功能也相对比较多,今天小新就来总结一下AnimationTrack经常用到的那些功能。在Timeline中录制基本动画你可以直接在Timeline的Animation轨道上录......
  • Python很多时候要从键盘连续输入一个数组,并用空格隔开;Python爬取一些数据;python pip安
    Python要从键盘连续输入一个数组,并用空格隔开,Python中的实现方法如下:str=input(‘以空格为间隔连续输入一个数组:’)然后在键盘中输入,会·得到的str为一个字符串,要将其转为一个列表有两种方法方法一:a=[int(n)forninstr_in.split()]方法二:a=list(map(int,str.strip().sp......
  • CF1814E Chain Chips & CF750E New Year and Old Subsequence - 动态 dp -
    一句话概括动态dp:用来解决带修改/多次区间询问的dp问题。将转移写成矩阵的形式,然后利用线段树求解区间问题/单点修改1814E注意一条边要么选2要么选0次,而且第一条边一定是选了2次。如果有一条边没选,那么这条边两侧的边一定都选了。设\(f_i\)代表考虑到第\(i\)条边,......
  • Markov Chain Monte Carlo(MCMC) 方法
    MonteCarlo方法假设我们要求一个原函数并不明确的函数\(f(x)\)的在某个区间\([a,b]\)上的积分\(\theta=\int_{a}^bf(x)dx\)因为\(f(x)\)的原函数不知道,所以无法用牛顿-莱布尼茨公式计算。这里采用一种称为montecarlo的方法来模拟近似求解,它的思想如下,首先将待求的式子化......
  • Langchain框架 prompt injection注入
    Langchain框架promptinjection注入PromptInjection是一种攻击技术,黑客或恶意攻击者操纵AI模型的输入值,以诱导模型返回非预期的结果Langchain框架LangChain是一个基于大语言模型进行应用开发的框架。所谓大语言模型(LargeLanguageModels,LLMs),是指基于海量语料训练、......