HMM预习中文版

马尔可夫模型

在之前的笔记中,我们讨论了贝叶斯网络,以及它们如何被用于紧凑地表示随机变量之间的关系。现在,我们将介绍一个与之紧密相关的结构,称为马尔可夫模型,对于本课程的目的,可以将其视为类似于链式的、无限长度的贝叶斯网络。我们在这一部分中将要使用的运行示例是日常天气模式的波动。我们的天气模型将是时间相关的(就像马尔可夫模型通常是的),这意味着我们将有一个单独的随机变量代表每天的天气。如果我们定义 W i W_{i} Wi 为代表第 i i i 天天气的随机变量,那么我们天气示例的马尔可夫模型看起来像这样:

我们应该存储关于马尔可夫模型中涉及的随机变量的哪些信息?为了跟踪我们正在考虑的数量(在这种情况下,是天气)随时间的变化,我们需要知道它在时间 t = 0 t=0 t=0 时的初始分布以及一些转移模型,这些模型表征了从一个状态到另一个状态之间的概率。马尔可夫模型的初始分布由概率表 P ( W 0 ) P\left(W_{0}\right) P(W0) 给出,从状态 i i i 转移到 i + 1 i+1 i+1 的转移模型由 P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi) 给出。注意,这个转移模型意味着 W i + 1 W_{i+1} Wi+1 的值只与 W i W_{i} Wi 的值有条件依赖。换句话说,时间 t = i + 1 t=i+1 t=i+1 的天气满足马尔可夫性质或无记忆性质,并且除了 t = i t=i t=i 以外的所有其他时间步与天气无关。

使用我们的天气马尔可夫模型,如果我们想要用链式规则重构 W 0 , W 1 W_{0}, W_{1} W0,W1 W 2 W_{2} W2 之间的联合概率,我们会希望:

P ( W 0 , W 1 , W 2 ) = P ( W 0 ) P ( W 1 ∣ W 0 ) P ( W 2 ∣ W 1 , W 0 ) P\left(W_{0}, W_{1}, W_{2}\right)=P\left(W_{0}\right) P\left(W_{1} \mid W_{0}\right) P\left(W_{2} \mid W_{1}, W_{0}\right) P(W0,W1,W2)=P(W0)P(W1W0)P(W2W1,W0)

然而,根据我们的假设,马尔可夫性质成立且 W 0 ⊥ W 2 ∣ W 1 W_{0} \perp W_{2} \mid W_{1} W0W2W1,联合概率简化为:

P ( W 0 , W 1 , W 2 ) = P ( W 0 ) P ( W 1 ∣ W 0 ) P ( W 2 ∣ W 1 ) P\left(W_{0}, W_{1}, W_{2}\right)=P\left(W_{0}\right) P\left(W_{1} \mid W_{0}\right) P\left(W_{2} \mid W_{1}\right) P(W0,W1,W2)=P(W0)P(W1W0)P(W2W1)

我们有了从马尔可夫模型计算所需的一切。更一般地说,马尔可夫模型在每个时间步做出以下独立假设: W i + 1 ⊥ { W 0 , … , W i − 1 } ∣ W i W_{i+1} \perp\left\{W_{0}, \ldots, W_{i-1}\right\} \mid W_{i} Wi+1{W0,,Wi1}Wi。这使我们能够通过链式规则重构前 n + 1 n+1 n+1 个变量的联合分布,如下所示:

P ( W 0 , W 1 , … , W n ) = P ( W 0 ) P ( W 1 ∣ W 0 ) P ( W 2 ∣ W 1 ) … P ( W n ∣ W n − 1 ) = P ( W 0 ) ∏ i = 0 n − 1 P ( W i + 1 ∣ W i ) P\left(W_{0}, W_{1}, \ldots, W_{n}\right)=P\left(W_{0}\right) P\left(W_{1} \mid W_{0}\right) P\left(W_{2} \mid W_{1}\right) \ldots P\left(W_{n} \mid W_{n-1}\right)=P\left(W_{0}\right) \prod_{i=0}^{n-1} P\left(W_{i+1} \mid W_{i}\right) P(W0,W1,,Wn)=P(W0)P(W1W0)P(W2W1)P(WnWn1)=P(W0)i=0n1P(Wi+1Wi)

马尔可夫模型中通常做出的最后一个假设是转移模型是平稳的。换句话说,对于所有的 i i i 值(所有时间步), P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi) 是相同的。这使我们能够仅用两个表格表示一个马尔可夫模型:一个用于 P ( W 0 ) P\left(W_{0}\right) P(W0),另一个用于 P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi)

迷你前向算法

我们现在知道如何计算马尔可夫模型随时间步的联合分布。然而,这并没有明确帮助我们回答关于给定某一天 t t t 的天气分布的问题。当然,我们可以计算联合概率,然后将所有其他变量边缘化(求和),但这通常是极其低效的,因为如果我们有 j j j 个变量,每个变量可以取 d d d 个值,联合分布的大小是 O ( d j ) O\left(d^{j}\right) O(dj)。相反,我们将介绍一种更有效的技术,称为迷你前向算法。

这是它的工作原理。根据边缘化的性质,我们知道

P ( W i + 1 ) = ∑ w i P ( w i , W i + 1 ) P\left(W_{i+1}\right)=\sum_{w_{i}} P\left(w_{i}, W_{i+1}\right) P(Wi+1)=wiP(wi,Wi+1)

通过链式规则,我们可以将其重新表达为:

P ( W i + 1 ) = ∑ w i P ( W i + 1 ∣ w i ) P ( w i ) P\left(W_{i+1}\right)=\sum_{w_{i}} P\left(W_{i+1} \mid w_{i}\right) P\left(w_{i}\right) P(Wi+1)=wiP(Wi+1wi)P(wi)

这个方程应该有一些直观的意义 - 要计算时间步 i + 1 i+1 i+1 的天气分布,我们看看由 P ( W i ) P\left(W_{i}\right) P(Wi) 给出的时间步 i i i 的概率分布,并用我们的转移模型 P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi) 将这个模型“推进”一个时间步。有了这个方程,我们可以通过从初始分布 P ( W 0 ) P\left(W_{0}\right) P(W0) 开始,用它来计算 P ( W 1 ) P\left(W_{1}\right) P(W1),然后依次使用 P ( W 1 ) P\left(W_{1}\right) P(W1) 来计算 P ( W 2 ) P\left(W_{2}\right) P(W2),等等,迭代地计算任何我们选择的时间步的天气分布。让我们用以下初始分布和转移模型来举一个例子:

W 0 W_{0} W0 P ( W 0 ) P\left(W_{0}\right) P(W0)
sun0.8
rain0.2
W i + 1 W_{i+1} Wi+1 W i W_{i} Wi P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi)
sunsun0.6
rainsun0.4
sunrain0.1
rainrain0.9

使用迷你前向算法,我们可以这样计算 P ( W 1 ) P\left(W_{1}\right) P(W1)

P ( W 1 = sun  ) = ∑ w 0 P ( W 1 = sun ⁡ ∣ w 0 ) P ( w 0 ) = P ( W 1 = sun ⁡ ∣ W 0 = sun ⁡ ) P ( W 0 = sun  ) + P ( W 1 = sun ⁡ ∣ W 0 = rain  ) P ( W 0 = rain  ) = 0.6 ⋅ 0.8 + 0.1 ⋅ 0.2 = 0.5 P ( W 1 = rain  ) = P ( W 1 = rain ⁡ ∣ w 0 ) P ( w 0 ) = P ( W 1 = rain ⁡ ∣ W 0 = sun  ) P ( W 0 = sun  ) + P ( W 1 = rain  ∣ W 0 = rain  ) P ( W 0 = rain  ) = 0.4 ⋅ 0.8 + 0.9 ⋅ 0.2 = 0.5 \begin{aligned} P\left(W_{1}=\text { sun }\right) & =\sum_{w_{0}} P\left(W_{1}=\operatorname{sun} \mid w_{0}\right) P\left(w_{0}\right) \\ & =P\left(W_{1}=\operatorname{sun} \mid W_{0}=\operatorname{sun}\right) P\left(W_{0}=\text { sun }\right)+P\left(W_{1}=\operatorname{sun} \mid W_{0}=\text { rain }\right) P\left(W_{0}=\text { rain }\right) \\ & =0.6 \cdot 0.8+0.1 \cdot 0.2=0.5 \\ P\left(W_{1}=\text { rain }\right) & =P\left(W_{1}=\operatorname{rain} \mid w_{0}\right) P\left(w_{0}\right) \\ & =P\left(W_{1}=\operatorname{rain} \mid W_{0}=\text { sun }\right) P\left(W_{0}=\text { sun }\right)+P\left(W_{1}=\text { rain } \mid W_{0}=\text { rain }\right) P\left(W_{0}=\text { rain }\right) \\ & =0.4 \cdot 0.8+0.9 \cdot 0.2=0.5 \end{aligned} P(W1= sun )P(W1= rain )=w0P(W1=sunw0)P(w0)=P(W1=sunW0=sun)P(W0= sun )+P(W1=sunW0= rain )P(W0= rain )=0.60.8+0.10.2=0.5=P(W1=rainw0)P(w0)=P(W1=rainW0= sun )P(W0= sun )+P(W1= rain W0= rain )P(W0= rain )=0.40.8+0.90.2=0.5

因此我们的 P ( W 1 ) P\left(W_{1}\right) P(W1) 分布为

W 1 W_{1} W1 P ( W 1 ) P\left(W_{1}\right) P(W1)
sun0.5
rain0.5

值得注意的是,晴朗天气的概率从时间 t = 0 t=0 t=0 80 % 80 \% 80% 降低到时间 t = 1 t=1 t=1 50 % 50 \% 50%。这是我们的转移模型的直接结果,该模型倾向于转移到雨天而不是晴天。这引起了一个自然的后续问题:在给定时间步的状态的概率是否会收敛?我们将在接下来的部分中回答这个问题。

静止分布

为了解决上述问题,我们必须计算天气的静止分布。顾名思义,静止分布是在时间流逝后保持不变的分布,即

P ( W t + 1 ) = P ( W t ) P\left(W_{t+1}\right)=P\left(W_{t}\right) P(Wt+1)=P(Wt)

我们可以通过将上述等价性与迷你前向算法所使用的相同方程结合起来来计算给定状态的收敛概率:

P ( W t + 1 ) = P ( W t ) = ∑ w t P ( W t + 1 ∣ w t ) P ( w t ) P\left(W_{t+1}\right)=P\left(W_{t}\right)=\sum_{w_{t}} P\left(W_{t+1} \mid w_{t}\right) P\left(w_{t}\right) P(Wt+1)=P(Wt)=wtP(Wt+1wt)P(wt)

对于我们的天气示例,这给了我们以下两个方程:

P ( W t = sun  ) = P ( W t + 1 = sun ⁡ ∣ W t = sun ⁡ ) P ( W t = sun  ) + P ( W t + 1 = sun ⁡ ∣ W t = rain  ) P ( W t = rain  ) = 0.6 ⋅ P ( W t = sun ⁡ ) + 0.1 ⋅ P ( W t = rain  ) P ( W t = rain  ) = P ( W t + 1 = rain  ∣ W t = sun ⁡ ) P ( W t = sun  ) + P ( W t + 1 = rain  ∣ W t = rain  ) P ( W t = rain  ) = 0.4 ⋅ P ( W t = sun  ) + 0.9 ⋅ P ( W t = rain  ) \begin{aligned} P\left(W_{t}=\text { sun }\right) & =P\left(W_{t+1}=\operatorname{sun} \mid W_{t}=\operatorname{sun}\right) P\left(W_{t}=\text { sun }\right)+P\left(W_{t+1}=\operatorname{sun} \mid W_{t}=\text { rain }\right) P\left(W_{t}=\text { rain }\right) \\ & =0.6 \cdot P\left(W_{t}=\operatorname{sun}\right)+0.1 \cdot P\left(W_{t}=\text { rain }\right) \\ P\left(W_{t}=\text { rain }\right) & =P\left(W_{t+1}=\text { rain } \mid W_{t}=\operatorname{sun}\right) P\left(W_{t}=\text { sun }\right)+P\left(W_{t+1}=\text { rain } \mid W_{t}=\text { rain }\right) P\left(W_{t}=\text { rain }\right) \\ & =0.4 \cdot P\left(W_{t}=\text { sun }\right)+0.9 \cdot P\left(W_{t}=\text { rain }\right) \end{aligned} P(Wt= sun )P(Wt= rain )=P(Wt+1=sunWt=sun)P(Wt= sun )+P(Wt+1=sunWt= rain )P(Wt= rain )=0.6P(Wt=sun)+0.1P(Wt= rain )=P(Wt+1= rain Wt=sun)P(Wt= sun )+P(Wt+1= rain Wt= rain )P(Wt= rain )=0.4P(Wt= sun )+0.9P(Wt= rain )

我们现在正好有了解决静止分布的所需的东西,即两个未知数的两个方程系统!我们可以通过使用 P ( W t ) P\left(W_{t}\right) P(Wt) 是一个概率分布的事实来得到第三个方程,因此必须加和为 1 :

P ( W t = sun  ) = 0.6 ⋅ P ( W t = sun  ) + 0.1 ⋅ P ( W t = rain  ) P ( W t = rain  ) = 0.4 ⋅ P ( W t = sun  ) + 0.9 ⋅ P ( W t = rain  ) 1 = P ( W t = sun  ) + P ( W t = rain  ) \begin{aligned} P\left(W_{t}=\text { sun }\right) & =0.6 \cdot P\left(W_{t}=\text { sun }\right)+0.1 \cdot P\left(W_{t}=\text { rain }\right) \\ P\left(W_{t}=\text { rain }\right) & =0.4 \cdot P\left(W_{t}=\text { sun }\right)+0.9 \cdot P\left(W_{t}=\text { rain }\right) \\ 1 & =P\left(W_{t}=\text { sun }\right)+P\left(W_{t}=\text { rain }\right) \end{aligned} P(Wt= sun )P(Wt= rain )1=0.6P(Wt= sun )+0.1P(Wt= rain )=0.4P(Wt= sun )+0.9P(Wt= rain )=P(Wt= sun )+P(Wt= rain )

求解这个方程组得到 P ( W t = sun  ) = 0.2 P\left(W_{t}=\text { sun }\right)=0.2 P(Wt= sun )=0.2 P ( W t = rain  ) = 0.8 P\left(W_{t}=\text { rain }\right)=0.8 P(Wt= rain )=0.8。因此,我们静止分布的表格,我们今后将其表示为 P ( W ∞ ) P\left(W_{\infty}\right) P(W),如下所示:

W ∞ W_{\infty} W P ( W ∞ ) P\left(W_{\infty}\right) P(W)
sun0.2
rain0.8

为了验证这个结果,让我们将转移模型应用于静止分布:

P ( W ∞ + 1 = sun  ) = P ( W ∞ + 1 = sun ⁡ ∣ W ∞ = sun ⁡ ) P ( W ∞ = sun  ) + P ( W ∞ + 1 = sun ⁡ ∣ W ∞ = rain  ) P ( W ∞ = rain  ) = 0.6 ⋅ 0.2 + 0.1 ⋅ 0.8 = 0.2 P ( W ∞ + 1 = rain  ) = P ( W ∞ + 1 = rain ⁡ ∣ W ∞ = sun ⁡ ) P ( W ∞ = sun  ) + P ( W ∞ + 1 = rain  ∣ W ∞ = rain  ) P ( W ∞ = rain  ) = 0.4 ⋅ 0.2 + 0.9 ⋅ 0.8 = 0.8 \begin{aligned} P\left(W_{\infty+1}=\text { sun }\right) & =P\left(W_{\infty+1}=\operatorname{sun} \mid W_{\infty}=\operatorname{sun}\right) P\left(W_{\infty}=\text { sun }\right)+P\left(W_{\infty+1}=\operatorname{sun} \mid W_{\infty}=\text { rain }\right) P\left(W_{\infty}=\text { rain }\right) \\ & =0.6 \cdot 0.2+0.1 \cdot 0.8=0.2 \\ P\left(W_{\infty+1}=\text { rain }\right) & =P\left(W_{\infty+1}=\operatorname{rain} \mid W_{\infty}=\operatorname{sun}\right) P\left(W_{\infty}=\text { sun }\right)+P\left(W_{\infty+1}=\text { rain } \mid W_{\infty}=\text { rain }\right) P\left(W_{\infty}=\text { rain }\right) \\ & =0.4 \cdot 0.2+0.9 \cdot 0.8=0.8 \end{aligned} P(W+1= sun )P(W+1= rain )=P(W+1=sunW=sun)P(W= sun )+P(W+1=sunW= rain )P(W= rain )=0.60.2+0.10.8=0.2=P(W+1=rainW=sun)P(W= sun )+P(W+1= rain W= rain )P(W= rain )=0.40.2+0.90.8=0.8

正如预期的那样, P ( W ∞ + 1 ) = P ( W ∞ ) P\left(W_{\infty+1}\right)=P\left(W_{\infty}\right) P(W+1)=P(W)。一般来说,如果 W t W_{t} Wt 的域的大小为 k k k,则等式

P ( W t ) = ∑ w t P ( W t + 1 ∣ w t ) P ( w t ) P\left(W_{t}\right)=\sum_{w_{t}} P\left(W_{t+1} \mid w_{t}\right) P\left(w_{t}\right) P(Wt)=wtP(Wt+1wt)P(wt)

产生了一个 k k k 方程的系统,我们可以用它来求解静止分布。

隐马尔可夫模型

在马尔可夫模型中,我们看到了如何通过一系列随机变量来表示随时间变化的方式。例如,如果我们想知道标准马尔可夫模型中第 10 天的天气,我们可以从初始分布 P ( W 0 ) P\left(W_{0}\right) P(W0) 开始,并使用我们的转移模型通过迷你前向算法计算 P ( W 10 ) P\left(W_{10}\right) P(W10)。然而,在时间 t = 0 t=0 t=0 和时间 t = 10 t=10 t=10 之间,我们可能会收集到新的气象证据,这可能会影响我们在任何给定时间步的天气概率分布的信念。简而言之,如果天气预报在第 10 天有 80 % 80 \% 80% 的几率下雨,但在第 9 天晚上天空晴朗,那么 80 % 80 \% 80% 的概率可能会大幅下降。这正是隐马尔可夫模型帮助我们解决的问题 - 它允许我们在每个时间步观察到一些证据,这可能会影响每个状态的信念分布。我们的天气模型的隐马尔可夫模型可以使用一个贝叶斯网结构来描述,看起来如下:

与普通马尔可夫模型不同,我们现在有两种不同类型的节点。为了区分这一点,我们将每个 W i W_{i} Wi 称为状态变量,每个天气预报 F i F_{i} Fi 称为证据变量。由于 W i W_{i} Wi 编码了我们对第 i i i 天天气概率分布的信念,因此第 i i i 天的天气预报取决于这种信念是一个自然的结果。该模型暗示了与标准马尔可夫模型相似的条件独立关系,以及证据变量的额外一组关系:

F 1 ⊥ W 0 ∣ W 1 ∀ i = 2 , … , n ; W i ⊥ { W 0 , … , W i − 2 , F 1 , … , F i − 1 } ∣ W i − 1 ∀ i = 2 , … , n ; F i ⊥ { W 0 , … , W i − 1 , F 1 , … , F i − 1 } ∣ W i \begin{array}{ll} F_{1} \perp W_{0} \mid W_{1} & \\ \forall i=2, \ldots, n ; & W_{i} \perp\left\{W_{0}, \ldots, W_{i-2}, F_{1}, \ldots, F_{i-1}\right\} \mid W_{i-1} \\ \forall i=2, \ldots, n ; & F_{i} \perp\left\{W_{0}, \ldots, W_{i-1}, F_{1}, \ldots, F_{i-1}\right\} \mid W_{i} \end{array} F1W0W1i=2,,n;i=2,,n;Wi{W0,,Wi2,F1,,Fi1}Wi1Fi{W0,,Wi1,F1,,Fi1}Wi

就像马尔可夫模型一样,隐马尔可夫模型假设转移模型 P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi) 是平稳的。隐马尔可夫模型还做出了额外的简化假设,即传感器模型 P ( F i ∣ W i ) P\left(F_{i} \mid W_{i}\right) P(FiWi) 也是平稳的。因此,任何隐马尔可夫模型都可以用仅三个概率表格紧凑地表示:初始分布、转移模型和传感器模型。

关于符号的最后一点,我们将定义时间 i i i 时的信念分布,并且到目前为止观察到了所有证据 F 1 , … , F i F_{1}, \ldots, F_{i} F1,,Fi

B ( W i ) = P ( W i ∣ f 1 , … , f i ) B\left(W_{i}\right)=P\left(W_{i} \mid f_{1}, \ldots, f_{i}\right) B(Wi)=P(Wif1,,fi)

同样,我们将定义 B ′ ( W i ) B^{\prime}\left(W_{i}\right) B(Wi) 为时间 i i i 的信念分布,并且观察到了证据 f 1 , … , f i − 1 f_{1}, \ldots, f_{i-1} f1,,fi1

B ′ ( W i ) = P ( W i ∣ f 1 , … , f i − 1 ) B^{\prime}\left(W_{i}\right)=P\left(W_{i} \mid f_{1}, \ldots, f_{i-1}\right) B(Wi)=P(Wif1,,fi1)

将在时间步 i i i 观察到的证据定义为 e i e_{i} ei,你可能有时会看到从时间步 1 ≤ i ≤ t 1 \leq i \leq t 1it 聚集的证据以以下形式重新表达:

e 1 : t = e 1 , … , e t e_{1: t}=e_{1}, \ldots, e_{t} e1:t=e1,,et

在这种符号下, P ( W i ∣ f 1 , … , f i − 1 ) P\left(W_{i} \mid f_{1}, \ldots, f_{i-1}\right) P(Wif1,,fi1) 可以写作 P ( W i ∣ f 1 : ( i − 1 ) ) P\left(W_{i} \mid f_{1:(i-1)}\right) P(Wif1:(i1))。这种符号在接下来的部分中将变得相关,那时我们将讨论通过迭代地将新证据纳入我们的天气模型来进行时间流逝更新。

前向算法

使用上述条件概率假设和条件概率表的边缘化属性,我们可以推导出 B ( W i ) B\left(W_{i}\right) B(Wi) B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1) 之间的关系,其形式与迷你前向算法的更新规则相同。我们首先使用边缘化:

B ′ ( W i + 1 ) = P ( W i + 1 ∣ f 1 , … , f i ) = ∑ w i P ( W i + 1 , w i ∣ f 1 , … , f i ) B^{\prime}\left(W_{i+1}\right)=P\left(W_{i+1} \mid f_{1}, \ldots, f_{i}\right)=\sum_{w_{i}} P\left(W_{i+1}, w_{i} \mid f_{1}, \ldots, f_{i}\right) B(Wi+1)=P(Wi+1f1,,fi)=wiP(Wi+1,wif1,,fi)

然后我们可以使用链式规则将其重新表达为:

B ′ ( W i + 1 ) = P ( W i + 1 ∣ f 1 , … , f i ) = ∑ w i P ( W i + 1 ∣ w i , f 1 , … , f i ) P ( w i ∣ f 1 , … , f i ) B^{\prime}\left(W_{i+1}\right)=P\left(W_{i+1} \mid f_{1}, \ldots, f_{i}\right)=\sum_{w_{i}} P\left(W_{i+1} \mid w_{i}, f_{1}, \ldots, f_{i}\right) P\left(w_{i} \mid f_{1}, \ldots, f_{i}\right) B(Wi+1)=P(Wi+1f1,,fi)=wiP(Wi+1wi,f1,,fi)P(wif1,,fi)

注意 P ( w i ∣ f 1 , … , f i ) P\left(w_{i} \mid f_{1}, \ldots, f_{i}\right) P(wif1,,fi) 简单地是 B ( w i ) B\left(w_{i}\right) B(wi),而且 W i + 1 ⊥ { f 1 , … f i } ∣ W i W_{i+1} \perp\left\{f_{1}, \ldots f_{i}\right\} \mid W_{i} Wi+1{f1,fi}Wi,这简化为我们最终的关系,即 B ( W i ) B\left(W_{i}\right) B(Wi) B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1)

B ′ ( W i + 1 ) = ∑ w i P ( W i + 1 ∣ w i ) B ( w i ) B^{\prime}\left(W_{i+1}\right)=\sum_{w_{i}} P\left(W_{i+1} \mid w_{i}\right) B\left(w_{i}\right) B(Wi+1)=wiP(Wi+1wi)B(wi)

现在让我们考虑如何从 B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1) 导出 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1) 的关系。通过简单地应用贝叶斯规则,我们可以看到

B ( W i + 1 ) = P ( W i + 1 ∣ f 1 , … , f i + 1 ) = P ( W i + 1 , f i + 1 ∣ f 1 , … , f i ) P ( f i + 1 ∣ f 1 , … , f i ) B\left(W_{i+1}\right)=P\left(W_{i+1} \mid f_{1}, \ldots, f_{i+1}\right)=\frac{P\left(W_{i+1}, f_{i+1} \mid f_{1}, \ldots, f_{i}\right)}{P\left(f_{i+1} \mid f_{1}, \ldots, f_{i}\right)} B(Wi+1)=P(Wi+1f1,,fi+1)=P(fi+1f1,,fi)P(Wi+1,fi+1f1,,fi)

处理条件概率时,一个常用的技巧是延迟归一化,直到我们需要归一化的概率,现在我们将使用这个技巧。更具体地说,由于上述展开中 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1) 的分母是 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1) 所代表的概率表中的每个项的公共项,我们可以省略实际除以 P ( f i + 1 ∣ f 1 , … , f i ) P\left(f_{i+1} \mid f_{1}, \ldots, f_{i}\right) P(fi+1f1,,fi)。相反,我们可以简单地注意到 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1) P ( W i + 1 , f i + 1 ∣ f 1 , … , f i ) P\left(W_{i+1}, f_{i+1} \mid f_{1}, \ldots, f_{i}\right) P(Wi+1,fi+1f1,,fi) 成正比:

B ( W i + 1 ) ∝ P ( W i + 1 , f i + 1 ∣ f 1 , … , f i ) B\left(W_{i+1}\right) \propto P\left(W_{i+1}, f_{i+1} \mid f_{1}, \ldots, f_{i}\right) B(Wi+1)P(Wi+1,fi+1f1,,fi)

其比例常数等于 P ( f i + 1 ∣ f 1 , … , f i ) P\left(f_{i+1} \mid f_{1}, \ldots, f_{i}\right) P(fi+1f1,,fi)。当我们决定我们想要恢复信念分布 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1) 时,我们可以通过这个常数将每个计算出的值除以。现在,使用链式规则我们可以观察到以下情况:

B ( W i + 1 ) ∝ P ( W i + 1 , f i + 1 ∣ f 1 , … , f i ) = P ( f i + 1 ∣ W i + 1 , f 1 , … , f i ) P ( W i + 1 ∣ f 1 , … , f i ) B\left(W_{i+1}\right) \propto P\left(W_{i+1}, f_{i+1} \mid f_{1}, \ldots, f_{i}\right)=P\left(f_{i+1} \mid W_{i+1}, f_{1}, \ldots, f_{i}\right) P\left(W_{i+1} \mid f_{1}, \ldots, f_{i}\right) B(Wi+1)P(Wi+1,fi+1f1,,fi)=P(fi+1Wi+1,f1,,fi)P(Wi+1f1,,fi)

根据之前所述的隐马尔可夫模型的条件独立假设, P ( f i + 1 ∣ W i + 1 , f 1 , … , f i ) P\left(f_{i+1} \mid W_{i+1}, f_{1}, \ldots, f_{i}\right) P(fi+1Wi+1,f1,,fi) 等价于简单的 P ( f i + 1 ∣ W i + 1 ) P\left(f_{i+1} \mid W_{i+1}\right) P(fi+1Wi+1),而 P ( W i + 1 ∣ f 1 , … , f i ) P\left(W_{i+1} \mid f_{1}, \ldots, f_{i}\right) P(Wi+1f1,,fi) 根据定义是 B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1)。这使我们能够以其最终形式表达 B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1) B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1) 之间的关系:

B ( W i + 1 ) ∝ P ( f i + 1 ∣ W i + 1 ) B ′ ( W i + 1 ) B\left(W_{i+1}\right) \propto P\left(f_{i+1} \mid W_{i+1}\right) B^{\prime}\left(W_{i+1}\right) B(Wi+1)P(fi+1Wi+1)B(Wi+1)

结合我们刚刚推导出的两个关系,就得到了一个称为前向算法的迭代算法,这是隐马尔可夫模型中早期迷你前向算法的类似物:

B ( W i + 1 ) ∝ P ( f i + 1 ∣ W i + 1 ) ∑ w i P ( W i + 1 ∣ w i ) B ( w i ) B\left(W_{i+1}\right) \propto P\left(f_{i+1} \mid W_{i+1}\right) \sum_{w_{i}} P\left(W_{i+1} \mid w_{i}\right) B\left(w_{i}\right) B(Wi+1)P(fi+1Wi+1)wiP(Wi+1wi)B(wi)

前向算法可以被认为包含两个独特的步骤:时间流逝更新,对应于从 B ( W i ) B\left(W_{i}\right) B(Wi) 确定 B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1);观察更新,对应于从 B ′ ( W i + 1 ) B^{\prime}\left(W_{i+1}\right) B(Wi+1) 确定 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1)。因此,为了将我们的信念分布前进一个时间步(即从 B ( W i ) B\left(W_{i}\right) B(Wi) 计算 B ( W i + 1 ) B\left(W_{i+1}\right) B(Wi+1)),我们必须首先用时间流逝更新前进模型的状态一个时间步,然后用观察更新纳入该时间步的新证据。考虑以下初始分布、转移模型和传感器模型:

W 0 W_{0} W0 B ( W 0 ) B\left(W_{0}\right) B(W0)
sun0.8
rain0.2
W i + 1 W_{i+1} Wi+1 W i W_{i} Wi P ( W i + 1 ∣ W i ) P\left(W_{i+1} \mid W_{i}\right) P(Wi+1Wi)
sunsun0.6
rainsun0.4
sunrain0.1
rainrain0.9
F i F_{i} Fi W i W_{i} Wi P ( F i ∣ W i ) P\left(F_{i} \mid W_{i}\right) P(FiWi)
goodsun0.8
badsun0.2
goodrain0.3
badrain0.7

为了计算 B ( W 1 ) B\left(W_{1}\right) B(W1),我们首先执行时间更新以获得 B ′ ( W 1 ) B^{\prime}\left(W_{1}\right) B(W1)

B ′ ( W 1 = sun  ) = ∑ w 0 P ( W 1 = sun ⁡ ∣ w 0 ) B ( w 0 ) = P ( W 1 = sun ⁡ ∣ W 0 = sun ⁡ ) B ( W 0 = sun ⁡ ) + P ( W 1 = sun ⁡ ∣ W 0 = rain ⁡ ) B ( W 0 = rain  ) = 0.6 ⋅ 0.8 + 0.1 ⋅ 0.2 = 0.5 B ′ ( W 1 = rain  ) = ∑ w 0 P ( W 1 = rain ⁡ ∣ w 0 ) B ( w 0 ) = P ( W 1 = rain ⁡ ∣ W 0 = sun ⁡ ) B ( W 0 = sun ⁡ ) + P ( W 1 = rain  ∣ W 0 = rain  ) B ( W 0 = rain  ) = 0.4 ⋅ 0.8 + 0.9 ⋅ 0.2 = 0.5 \begin{aligned} B^{\prime}\left(W_{1}=\text { sun }\right) & =\sum_{w_{0}} P\left(W_{1}=\operatorname{sun} \mid w_{0}\right) B\left(w_{0}\right) \\ & =P\left(W_{1}=\operatorname{sun} \mid W_{0}=\operatorname{sun}\right) B\left(W_{0}=\operatorname{sun}\right)+P\left(W_{1}=\operatorname{sun} \mid W_{0}=\operatorname{rain}\right) B\left(W_{0}=\text { rain }\right) \\ & =0.6 \cdot 0.8+0.1 \cdot 0.2=0.5 \\ B^{\prime}\left(W_{1}=\text { rain }\right) & =\sum_{w_{0}} P\left(W_{1}=\operatorname{rain} \mid w_{0}\right) B\left(w_{0}\right) \\ & =P\left(W_{1}=\operatorname{rain} \mid W_{0}=\operatorname{sun}\right) B\left(W_{0}=\operatorname{sun}\right)+P\left(W_{1}=\text { rain } \mid W_{0}=\text { rain }\right) B\left(W_{0}=\text { rain }\right) \\ & =0.4 \cdot 0.8+0.9 \cdot 0.2=0.5 \end{aligned} B(W1= sun )B(W1= rain )=w0P(W1=sunw0)B(w0)=P(W1=sunW0=sun)B(W0=sun)+P(W1=sunW0=rain)B(W0= rain )=0.60.8+0.10.2=0.5=w0P(W1=rainw0)B(w0)=P(W1=rainW0=sun)B(W0=sun)+P(W1= rain W0= rain )B(W0= rain )=0.40.8+0.90.2=0.5

因此:

W 1 W_{1} W1 B ′ ( W 1 ) B^{\prime}\left(W_{1}\right) B(W1)
sun0.5
rain0.5

接下来,我们假设第 1 天的天气预报是好的(即 F 1 = good F_{1}=\text{good} F1=good),并进行观察更新以获得 B ( W 1 ) B\left(W_{1}\right) B(W1)

B ( W 1 = sun  ) ∝ P ( F 1 = good  ∣ W 1 = sun  ) B ′ ( W 1 = sun  ) = 0.8 ⋅ 0.5 = 0.4 B ( W 1 = rain  ) ∝ P ( F 1 = good  ∣ W 1 = rain  ) B ′ ( W 1 = rain  ) = 0.3 ⋅ 0.5 = 0.15 \begin{aligned} B\left(W_{1}=\text { sun }\right) & \propto P\left(F_{1}=\text { good } \mid W_{1}=\text { sun }\right) B^{\prime}\left(W_{1}=\text { sun }\right)=0.8 \cdot 0.5=0.4 \\ B\left(W_{1}=\text { rain }\right) & \propto P\left(F_{1}=\text { good } \mid W_{1}=\text { rain }\right) B^{\prime}\left(W_{1}=\text { rain }\right)=0.3 \cdot 0.5=0.15 \end{aligned} B(W1= sun )B(W1= rain )P(F1= good W1= sun )B(W1= sun )=0.80.5=0.4P(F1= good W1= rain )B(W1= rain )=0.30.5=0.15

最后一步是对 B ( W 1 ) B\left(W_{1}\right) B(W1) 进行归一化,注意 B ( W 1 ) B\left(W_{1}\right) B(W1) 表中的项加起来为 0.4 + 0.15 = 0.55 0.4+0.15=0.55 0.4+0.15=0.55

B ( W 1 = sun  ) = 0.4 / 0.55 = 8 11 B ( W 1 = rain  ) = 0.15 / 0.55 = 3 11 \begin{aligned} B\left(W_{1}=\text { sun }\right) & =0.4 / 0.55=\frac{8}{11} \\ B\left(W_{1}=\text { rain }\right) & =0.15 / 0.55=\frac{3}{11} \end{aligned} B(W1= sun )B(W1= rain )=0.4/0.55=118=0.15/0.55=113

因此,我们的最终 B ( W 1 ) B\left(W_{1}\right) B(W1) 表如下:

W 1 W_{1} W1 B ′ ( W 1 ) B^{\prime}\left(W_{1}\right) B(W1)
sun 8 / 11 8 / 11 8/11
rain 3 / 11 3 / 11 3/11

注意观察天气预报的结果。因为天气预报预测天气晴朗,我们相信晴天的可能性从时间更新后的 1 2 \frac{1}{2} 21 增加到观察更新后的 8 11 \frac{8}{11} 118

作为最后一点说明,上面讨论的归一化技巧实际上可以在使用隐马尔可夫模型时显著简化计算。如果我们从某个初始分布开始,并且对在时间 t t t 的信念分布感兴趣,我们可以使用前向算法迭代地计算 B ( W 1 ) , … , B ( W t ) B\left(W_{1}\right), \ldots, B\left(W_{t}\right) B(W1),,B(Wt),并且只在最后通过将 B ( W t ) B\left(W_{t}\right) B(Wt) 表中的每个项除以其项的总和来进行一次归一化。

维特比算法

在前向算法中,我们使用递归来求解 P ( X N ∣ e 1 : N ) P\left(X_{N} \mid e_{1: N}\right) P(XNe1:N),即系统在迄今为止观察到的证据变量下可能处于的状态的概率分布。另一个与隐马尔可夫模型相关的重要问题是:鉴于到目前为止观察到的证据变量,系统最有可能遵循的隐藏状态序列是什么?换句话说,我们想要求解 arg ⁡ max ⁡ x 1 : N P ( x 1 : N ∣ e 1 : N ) = arg ⁡ max ⁡ x 1 : N P ( x 1 : N , e 1 : N ) \arg \max _{x_{1: N}} P\left(x_{1: N} \mid e_{1: N}\right)=\arg \max _{x_{1: N}} P\left(x_{1: N}, e_{1: N}\right) argmaxx1:NP(x1:Ne1:N)=argmaxx1:NP(x1:N,e1:N)。这个轨迹也可以使用动态规划和维特比算法来求解。

该算法包括两个步骤:第一个向前进行,并计算到目前为止观察到的证据下每个(状态,时间)元组的最佳路径的概率。第二个步骤向后进行:首先找到位于最高概率路径上的终止状态,然后沿着通往这个状态的路径(必然是最佳路径)向后穿越时间。

为了可视化算法,考虑以下状态格栅,即随时间变化的状态和转换的图:

在这个有两个可能隐藏状态的隐马尔可夫模型中,即晴天或雨天,我们想要计算从 X 1 X_{1} X1 X N X_{N} XN 的最高概率路径(每个时间步的状态分配)。从 X t − 1 X_{t-1} Xt1 X t X_{t} Xt 的边的权重等于 P ( X t ∣ X t − 1 ) P ( E t ∣ X t ) P\left(X_{t} \mid X_{t-1}\right) P\left(E_{t} \mid X_{t}\right) P(XtXt1)P(EtXt),路径的概率通过取其边权重的乘积来计算。权重公式中的第一项表示特定转换的可能性有多大,第二项表示观察到的证据与结果状态的匹配程度有多好。

回想一下:

P ( X 1 : N , e 1 : N ) = P ( X 1 ) P ( e 1 ∣ X 1 ) ∏ t = 2 N P ( X t ∣ X t − 1 ) P ( e t ∣ X t ) P\left(X_{1: N}, e_{1: N}\right)=P\left(X_{1}\right) P\left(e_{1} \mid X_{1}\right) \prod_{t=2}^{N} P\left(X_{t} \mid X_{t-1}\right) P\left(e_{t} \mid X_{t}\right) P(X1:N,e1:N)=P(X1)P(e1X1)t=2NP(XtXt1)P(etXt)

前向算法计算(在归一化之前)

P ( X N , e 1 : N ) = ∑ x 1 , . , x N − 1 P ( X N , x 1 : N − 1 , e 1 : N ) P\left(X_{N}, e_{1: N}\right)=\sum_{x_{1}, ., x_{N-1}} P\left(X_{N}, x_{1: N-1}, e_{1: N}\right) P(XN,e1:N)=x1,.,xN1P(XN,x1:N1,e1:N)

在维特比算法中,我们想要计算

arg ⁡ max ⁡ x 1 , … , x N P ( x 1 : N , e 1 : N ) \arg \max _{x_{1}, \ldots, x_{N}} P\left(x_{1: N}, e_{1: N}\right) argx1,,xNmaxP(x1:N,e1:N)

以找到隐藏状态序列的最大似然估计。注意,乘积中

的每一项正好是从层 t − 1 t-1 t1 到层 t t t 之间的边权重的表达式。因此,格栅上路径的权重乘积给出了给定证据下路径的概率。

我们可以为所有可能的隐藏状态求解一个联合概率表,但这会导致指数级的空间成本。有了这样的表,我们可以使用动态规划在多项式时间内计算最佳路径。然而,由于我们可以使用动态规划来计算最佳路径,我们并不一定需要在任何给定时间拥有整个表。

定义 m t [ x t ] = max ⁡ x 1 : t − 1 P ( x 1 : t , e 1 : t ) m_{t}\left[x_{t}\right]=\max _{x_{1: t-1}} P\left(x_{1: t}, e_{1: t}\right) mt[xt]=maxx1:t1P(x1:t,e1:t),或者是从任何 x 0 x_{0} x0 开始并到目前为止所见证据到给定 x t x_{t} xt 的时间 t t t 的最大概率路径。这与从步骤 1 到 t t t 通过格栅的最高权重路径相同。还要注意

m t [ x t ] = max ⁡ x 1 : t − 1 P ( e t ∣ x t ) P ( x t ∣ x t − 1 ) P ( x 1 : t − 1 , e 1 : t − 1 ) = P ( e t ∣ x t ) max ⁡ x t − 1 P ( x t ∣ x t − 1 ) max ⁡ x 1 : t − 2 P ( x 1 : t − 1 , e 1 : t − 1 ) = P ( e t ∣ x t ) max ⁡ x t − 1 P ( x t ∣ x t − 1 ) m t − 1 [ x t − 1 ] \begin{aligned} m_{t}\left[x_{t}\right] & =\max _{x_{1: t-1}} P\left(e_{t} \mid x_{t}\right) P\left(x_{t} \mid x_{t-1}\right) P\left(x_{1: t-1}, e_{1: t-1}\right) \\ & =P\left(e_{t} \mid x_{t}\right) \max _{x_{t-1}} P\left(x_{t} \mid x_{t-1}\right) \max _{x_{1: t-2}} P\left(x_{1: t-1}, e_{1: t-1}\right) \\ & =P\left(e_{t} \mid x_{t}\right) \max _{x_{t-1}} P\left(x_{t} \mid x_{t-1}\right) m_{t-1}\left[x_{t-1}\right] \end{aligned} mt[xt]=x1:t1maxP(etxt)P(xtxt1)P(x1:t1,e1:t1)=P(etxt)xt1maxP(xtxt1)x1:t2maxP(x1:t1,e1:t1)=P(etxt)xt1maxP(xtxt1)mt1[xt1]

这表明我们可以通过动态规划递归地计算所有 m t m_{t} mt。这使我们能够确定最有可能路径的最后状态 x N x_{N} xN,但我们仍然需要一种方法来回溯以重构整个路径。让我们定义 a t [ x t ] = P ( e t ∣ x t ) arg ⁡ max ⁡ x t − 1 P ( x t ∣ x t − 1 ) m t − 1 [ x t − 1 ] = arg ⁡ max ⁡ x t − 1 P ( x t ∣ x t − 1 ) m t − 1 [ x t − 1 ] a_{t}\left[x_{t}\right]=P\left(e_{t} \mid x_{t}\right) \arg \max _{x_{t-1}} P\left(x_{t} \mid x_{t-1}\right) m_{t-1}\left[x_{t-1}\right]=\arg \max _{x_{t-1}} P\left(x_{t} \mid x_{t-1}\right) m_{t-1}\left[x_{t-1}\right] at[xt]=P(etxt)argmaxxt1P(xtxt1)mt1[xt1]=argmaxxt1P(xtxt1)mt1[xt1] 来跟踪通往 x t x_{t} xt 的最佳路径的最后一次转换。我们现在可以概述算法。

结果:隐藏状态 x 1 : N ∗ x_{1: N}^{*} x1:N 的最有可能序列

注意我们的 a a a 数组定义了一组 N N N 个序列,每个序列是到特定结束状态 x N x_{N} xN 的最有可能序列。一旦我们完成前向传递,我们查看 N N N 个序列的可能性,选择最好的一个,并在后向传递中重构它。因此,我们已经在多项式空间和时间内计算了我们的证据的最有可能的解释。

粒子滤波

回想一下,当使用贝叶斯网进行精确推理计算成本过高时,使用我们讨论过的其中一种抽样技术是有效近似我们想要的概率分布的可行替代方案。隐马尔可夫模型也有同样的缺点- 使用前向算法进行精确推理所需的时间随着随机变量域中值的数量而增长。在我们当前的天气问题表述中,这是可以接受的,因为天气只能取两个值, W i ∈ { sun , rain } W_{i} \in\{\text{sun}, \text{rain}\} Wi{sun,rain},但假设我们想要进行推理,计算某一天实际温度到十分之一度的分布。

隐马尔可夫模型中贝叶斯网抽样的类似物称为粒子滤波,它涉及通过状态图模拟一组粒子的运动来近似所讨论的随机变量的概率(信念)分布。这解决了与前向算法相同的问题:它为我们提供了 P ( X N ∣ e 1 : N ) P\left(X_{N} \mid e_{1: N}\right) P(XNe1:N) 的近似。

我们不再存储将每个状态映射到其信念概率的完整概率表,而是存储一个包含 n n n 个粒子的列表,其中每个粒子处于我们时间相关随机变量的域中的 d d d 个可能状态之一。通常, n n n 显著小于 d d d(符号表示为 n < < d n<<d n<<d),但仍足够大以产生有意义的近似;否则,粒子滤波的性能优势将变得可以忽略。粒子只是这个算法中样本的名称。

我们认为粒子在任何给定时间步的任何给定状态中的信念完全取决于我们模拟中该状态在该时间步的粒子数量。例如,假设我们确实想要模拟某一天 i i i 温度 T T T 的信念分布,并为了简单起见,假设这个温度只能在范围 [ 10 , 20 ] [10,20] [10,20] 内取整数值( d = 11 d=11 d=11 个可能状态)。进一步假设我们有 n = 10 n=10 n=10 个粒子,在我们模拟的时间步 i i i 中取以下值:

[ 15 , 12 , 12 , 10 , 18 , 14 , 12 , 11 , 11 , 10 ] [15,12,12,10,18,14,12,11,11,10] [15,12,12,10,18,14,12,11,11,10]

通过计算粒子列表中出现的每个温度的计数并除以粒子总数,我们可以生成我们在时间 i i i 所需的经验分布:

T i T_{i} Ti1011121314151617181920
B ( T i ) B\left(T_{i}\right) B(Ti)0.20.20.300.10.1000.100

现在我们已经看到了如何从粒子列表中恢复信念分布,剩下要讨论的就是如何为我们选择的时间步生成这样的列表。

粒子滤波模拟

粒子滤波模拟从粒子初始化开始,这可以非常灵活地完成 - 我们可以随机、均匀地抽样粒子,或者从某个初始分布中抽样。一旦我们抽样出了一个初始粒子列表,模拟就会采取与前向算法类似的形式,在每个时间步进行时间流逝更新和观察更新:

  • 时间流逝更新 - 根据转移模型更新每个粒子的值。对于处于状态 t i t_{i} ti 的粒子,从由 P ( T i + 1 ∣ t i ) P\left(T_{i+1} \mid t_{i}\right) P(Ti+1ti) 给出的概率分布中抽样更新值。注意时间流逝更新与贝叶斯网的先验抽样的相似之处,因为粒子在任何给定状态的频率反映了转移概率。
  • 观察更新 - 在粒子滤波的观察更新期间,我们使用传感器模型 P ( F i ∣ T i ) P\left(F_{i} \mid T_{i}\right) P(FiTi) 根据观察到的证据和粒子的状态对每个粒子进行加权。具体来说,对于处于状态 t i t_{i} ti 的粒子和传感器读数 f i f_{i} fi,分配一个权重 P ( f i ∣ t i ) P\left(f_{i} \mid t_{i}\right) P(fiti)。观察更新的算法如下:
  1. 如上所述,计算所有粒子的权重。
  2. 计算每个状态的总权重。
  3. 如果所有状态的权重总和为 0,则重新初始化所有粒子。
  4. 否则,对状态上的总权重分布进行归一化,并从该分布中重新抽样粒子列表。

注意观察更新的相似之处与似然加权,我们再次根据我们的证据对样本进行加权。

让我们通过一个例子更好地理解这个过程。定义我们的天气场景中使用温度作为时间相关随机变量的转移模型:对于特定的温度状态,你可以保持在同一状态或转移到相差一度的状态,范围在 [ 10 , 20 ] [10,20] [10,20] 内。在可能的结果状态中,转移到最接近 15 的状态的概率为 80 % 80 \% 80%,其余的结果状态均匀地分摊剩余的 20 % 20 \% 20% 概率。

我们的温度粒子列表如下:

[ 15 , 12 , 12 , 10 , 18 , 14 , 12 , 11 , 11 , 10 ] [15,12,12,10,18,14,12,11,11,10] [15,12,12,10,18,14,12,11,11,10]

为了对这个粒子列表中的第一个粒子进行时间流逝更新,它处于状态 T i = 15 T_{i}=15 Ti=15,我们需要相应的转移模型:

T i + 1 T_{i+1} Ti+1141516
P ( T i + 1 ∣ T i = 15 ) P\left(T_{i+1} \mid T_{i}=15\right) P(Ti+1Ti=15)0.10.80.1

实际操作中,我们为 T i + 1 T_{i+1} Ti+1 域中的每个值分配一个不同的值范围,以便这些范围共同覆盖区间 [ 0 , 1 ) [0,1) [0,1),且不重叠。对于上述转移模型,范围如下:

  1. T i + 1 = 14 T_{i+1}=14 Ti+1=14 的范围是 0 ≤ r < 0.1 0 \leq r<0.1 0r<0.1
  2. T i + 1 = 15 T_{i+1}=15 Ti+1=15 的范围是 0.1 ≤ r < 0.9 0.1 \leq r<0.9 0.1r<0.9
  3. T i + 1 = 16 T_{i+1}=16 Ti+1=16 的范围是 0.9 ≤ r < 1 0.9 \leq r<1 0.9r<1

为了重新抽样状态为 T i = 15 T_{i}=15 Ti=15 的粒子,我们只需在区间 [ 0 , 1 ) [0,1) [0,1) 中生成一个随机数,并查看它落在哪个范围内。因此,如果我们的随机数是 r = 0.467 r=0.467 r=0.467,那么粒子在 T i = 15 T_{i}=15 Ti=15 将保持在 T i + 1 = 15 T_{i+1}=15 Ti+1=15,因为 0.1 ≤ r < 0.9 0.1 \leq r<0.9 0.1r<0.9。现在考虑以下区间 [ 0 , 1 ) [0,1) [0,1) 中的 10 个随机数:

[ 0.467 , 0.452 , 0.583 , 0.604 , 0.748 , 0.932 , 0.609 , 0.372 , 0.402 , 0.026 ] [0.467,0.452,0.583,0.604,0.748,0.932,0.609,0.372,0.402,0.026] [0.467,0.452,0.583,0.604,0.748,0.932,0.609,0.372,0.402,0.026]

如果我们将这 10 个值作为重新抽样我们 10 个粒子的随机值,我们的新粒子列表在完整的时间流逝更新后应该看起来像这样:

[ 15 , 13 , 13 , 11 , 17 , 15 , 13 , 12 , 12 , 10 ] [15,13,13,11,17,15,13,12,12,10] [15,13,13,11,17,15,13,12,12,10]

验证一下这个过程!更新后的粒子列表产生了相应更新后的信念分布 B ( T i + 1 ) B\left(T_{i+1}\right) B(Ti+1)

T i T_{i} Ti1011121314151617181920
B ( T i + 1 ) B\left(T_{i+1}\right) B(Ti+1)0.10.10.20.300.200.1000

对比我们更新前和更新后的信念分布 B ( T i + 1 ) B\left(T_{i+1}\right) B(Ti+1),我们可以看到作为一般趋势,粒子趋向于聚集在 T = 15 T=15 T=15 的温度。

接下来,让我们进行观察更新,假设我们的传感器模型 P ( F i ∣ T i ) P\left(F_{i} \mid T_{i}\right) P(FiTi) 表明正确预报 f i = t i f_{i}=t_{i} fi=ti 的概率是 80 % 80 \% 80%,预报其他 10 个状态中的任何一个的概率均匀为 2 % 2 \% 2%。假设预报 F i + 1 = 13 F_{i+1}=13 Fi+1=13,我们 10 个粒子的权重如下:

粒子 p 1 p_{1} p1 p 2 p_{2} p2 p 3 p_{3} p3 p 4 p_{4} p4 p 5 p_{5} p5 p 6 p_{6} p6 p 7 p_{7} p7 p 8 p_{8} p8 p 9 p_{9} p9 p 10 p_{10} p10
状态15131311171513121210
权重0.020.80.80.020.020.020.80.020.020.02

然后我们按状态汇总权重:

状态101112131517
权重0.020.020.042.40.040.02

所有状态的权重总和加起来为 2.54,我们可以通过将每个条目除以这个总和来对权重表进行归一化,生成一个概率分布:

状态101112131517
权重0.020.020.042.40.040.02
归一化权重0.00790.00790.01570.94490.01570.0079

最后一步是从这个概率分布中重新抽样,使用我们在时间流逝更新期间用来重新抽样的相同技术。假设我们生成了区间 [ 0 , 1 ) [0,1) [0,1) 中的 10 个随机数,其值如下:

[ 0.315 , 0.829 , 0.304 , 0.368 , 0.459 , 0.891 , 0.282 , 0.980 , 0.898 , 0.341 ] [0.315,0.829,0.304,0.368,0.459,0.891,0.282,0.980,0.898,0.341] [0.315,0.829,0.304,0.368,0.459,0.891,0.282,0.980,0.898,0.341]

这将产生以下重新抽样的粒子列表:

[ 13 , 13 , 13 , 13 , 13 , 13 , 13 , 15 , 13 , 13 ] [13,13,13,13,13,13,13,15,13,13] [13,13,13,13,13,13,13,15,13,13]

对应的最终新信念分布为:

T i T_{i} Ti1011121314151617181920
B ( T i + 1 ) B\left(T_{i+1}\right) B(Ti+1)0000.900.100000

注意我们的传感器模型编码了我们的天气预报具有 80 % 80 \% 80% 的准确率,而且我们新的粒子列表与此一致,因为大多数粒子被重新抽样为 T i + 1 = 13 T_{i+1}=13 Ti+1=13

总结

在这篇笔记中,我们介绍了两种新的模型:

  • 马尔可夫模型,编码具有马尔可夫性质的时间依赖随机变量。我们可以使用概率推理和迷你前向算法计算马尔可夫模型在我们选择的任何时间步的信念分布。
  • 隐马尔可夫模型,是具有额外属性的马尔可夫模型,即在每个时间步可以观察到可能影响我们的信念分布的新证据。要计算隐马尔可夫模型在任何给定时间步的信念分布,我们使用前向算法。

有时,在这些模型上运行精确推理可能计算成本过高,在这种情况下,我们可以使用粒子滤波作为近似推理的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/179853.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端量子纠缠 效果炸裂 multipleWindow3dScene

我 | 在这里 &#x1f575;️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 &#x1f3e0; 工作 | 广州 ⭐ Java 全栈开发&#xff08;软件工程师&#xff09; &#x1f383; 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 ✈️已经旅游的地点 | 新疆-乌鲁木齐、新疆-吐鲁番、广东-广州…

SELinux零知识学习三十七、SELinux策略语言之约束(1)

接前一篇文章:SELinux零知识学习三十六、SELinux策略语言之角色和用户(7) 四、SELinux策略语言之约束 SELinux对策略允许的访问提供了更严格的约束机制,不管策略的allow规则如何。 1. 近距离查看访问决定算法 为了理解约束的用途,先来看一下SELinux Linux安全模块(Lin…

Android : SQLite 增删改查—简单应用

示例图&#xff1a; 学生实体类 Student.java package com.example.mysqlite.dto;public class Student {public Long id;public String name;public String sex;public int age;public String clazz;public String creatDate;//头像public byte[] logoHead;Overridepublic St…

C#文件流FileStream类

目录 一、文件流类 1.FileStream类的常用属性 2.FileStream类的常用方法 3.使用FileStream类操作文件 二、文本文件的写入与读取 1.StreamWriter类 2.StreamReader类 3.示例及源码 三、二进制文件的写入与读取 1.BinaryWriter类 2.BinaryReader类 3.示例源码 数据流…

探究Kafka原理-7.exactly once semantics 和 性能测试

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44…

python基于YOLOv8全系列模型【n/s/m/l/x】开发构建不同参数量级的钢铁产业产品智能自动化检测识别系统

在前文的项目开发实践中&#xff0c;我们已经以钢铁产业产品缺陷检测数据场景为基准&#xff0c;陆续开发构建了多款目标检测模型&#xff0c;感兴趣的话可以自行阅读即可。 《YOLOv3老矣尚能战否&#xff1f;基于YOLOv3开发构建建钢铁产业产品智能自动化检测识别系统&#xf…

数据分析工具比较:Excel vs Python vs R

写在开头 在数据分析的世界里,选择合适的工具至关重要。本篇博客将深入比较常用的数据分析工具,包括Excel、Python和R,以帮助读者更好地选择适合自己需求的工具。 1.Excel:经典易用的电子表格 优势: 用户友好: Excel是大多数人熟悉的电子表格工具,使用简单,无需编程…

STM32之模数转换器ADC

目录 1、ADC介绍 1.什么是ADC&#xff1f; ADC的全称是Analog-to-Digital Converter&#xff0c;指模拟/数字转换器 2.ADC的性能指标 3.ADC特性 12位分辨率 4.ADC通道 5.ADC转换顺序 6.ADC触发方式 7.ADC转化时间 8.ADC转化模式 9.模拟看门狗 实验&#xff1a;使用ADC读…

fastjson 1.2.24 反序列化导致任意命令执行漏洞

漏洞描述 fastjson在解析json的过程中&#xff0c;支持使用autoType来实例化某一个具体的类&#xff0c;并调用该类的set/get方法来访问属性。 通过查找代码中相关的方法&#xff0c;即可构造出一些恶意利用链。 参考资料&#xff1a; 浅谈Fastjson RCE漏洞的绕过史 - FreeB…

Postgresql数据库运维统计信息

如果需要使用以下运维信息&#xff0c;需要如下几步 修改postgresql.conf文件 #shared_preload_libraries # (change requires restart)shared_preload_libraries pg_stat_statements重启数据库创建扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements;1. 统计信息…

ArrayList与顺序表的简单理解

前言----list 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素进…

鸿蒙4.0开发笔记之ArkTS语法基础@Entry@Component自定义组件的使用(九)

文章目录 一、自定义组件概述1、什么是自定义组件2、自定义组件的优点 二、创建自定义组件1、自定义组件的结构2、自定义组件要点3、成员变量的创建4、参数传递规则 三、练习案例 一、自定义组件概述 1、什么是自定义组件 在ArkUI中&#xff0c;UI显示的内容均为组件&#xf…

毫米波雷达DOA角度计算-----MUSIC算法

MUSIC算法如下&#xff1a; txNum &#xff1a;发射天线 2个 &#xff0c;rxNum&#xff1a;接收天线 4 个 。 ant &#xff1a; 为目标点的 天线 接收数据 &#xff0c; 为 8*1矩阵。 A ant;d 0.5;M 1; % # 快拍数ang_ax -90:90; % 角度坐标% 接收信号方向向量for k1:…

【Java学习笔记】73 - 正则表达式

项目代码 https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter27/src/com/yinhai/regexp 一、引入正则表达式 1.提取文章中所有的英文单词 2.提取文章中所有的数字 3.提取文章中所有的英文单词和数字 4.提取百度热榜标题 正则表达式是处理文本的利器…

C语言——输入两个正整数 m 和 n。求其最大公约数和最小公倍数。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int m, n;int i;int x 1;int y 0;printf("请输入两个正整数m和n&#xff1a;\n");scanf("%d,%d", &m, &n);for (i 1; i < m && i < n; i) {if (m % i 0 …

Java程序连接 nacos集群

我们在bootstrap.yml文件里可以直接连一个nacos集群的. 架构如下 没错,我们程序直连的是通过Nginx的,利用nginx的反向代理来做到连接nacos集群. 我们先把nginx的配置贴上来 upstream cluster{server 127.0.0.1:8848;server 127.0.0.1:8849;server 127.0.0.1:8850; }server{l…

软著项目推荐 深度学习动物识别 - 卷积神经网络 机器视觉 图像识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

基于SSM的高校学生实习管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

软件设计开发规程文件

《软件设计开发规程文件》 目的&#xff1a;为需求设计、开发、实现解决方案。

全新付费进群系统源码 完整版教程

首先准备域名和服务器 安装环境&#xff1a;Nginx1.18 MySQL 5.6 php7.2 安装扩展sg11 伪静态thikphp 后台域名/admin账号admin密码123456 代理域名/daili账号admin密码123456 一、环境配置 二、建站上传源代码解压 上传数据库配置数据库信息 三、登入管理后台 后台域名/ad…