HMM预习中文版

news2024/9/21 22:45:18

马尔可夫模型

在之前的笔记中,我们讨论了贝叶斯网络,以及它们如何被用于紧凑地表示随机变量之间的关系。现在,我们将介绍一个与之紧密相关的结构,称为马尔可夫模型,对于本课程的目的,可以将其视为类似于链式的、无限长度的贝叶斯网络。我们在这一部分中将要使用的运行示例是日常天气模式的波动。我们的天气模型将是时间相关的(就像马尔可夫模型通常是的),这意味着我们将有一个单独的随机变量代表每天的天气。如果我们定义 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.coloradmin.cn/o/1264669.html

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

相关文章

位运算算法【1】

文章目录 &#x1f34a;面试题 01.01. 判定字符是否唯一&#x1f96d;题目&#x1f351;算法原理&#x1f95d;解法一&#xff1a;哈希表&#x1f95d;解法二&#xff1a;位图 &#x1f951;代码实现 &#x1f33d;268. 丢失的数字&#x1f96c;题目&#x1f344;算法原理&…

多线程(补充知识)

STL库&#xff0c;智能指针和线程安全 STL中的容器是否是线程安全的? 不是. 原因是, STL 的设计初衷是将性能挖掘到极致, 而一旦涉及到加锁保证线程安全,会对性能造成巨大的影响. 而且对于不同的容器, 加锁方式的不同, 性能可能也不同(例如hash表的锁表和锁桶). 因此 STL 默认…

(Linux2.6内核)进程调度队列与切换

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 我们首先来了解几个概念 1. 进程在CPU上运行的时候&#xff0c;一定要运行完才行吗&#xff1f;答案是否定的&#xff0c;我们大部分的操作系统&#xff0c;主流就是分时操作系统&#xff0c;即基于时间片进程轮转执行的。 …

吃火锅(Python)

题目描述 吃火锅 以上图片来自微信朋友圈&#xff1a;这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”&#xff0c;那就厉害了&#xff0c;我们的故事就开始了。 本题要求你实现一个程序&#xff0c;自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。…

单片机复位电路

有时候我们的代码会跑飞,这个时候基本上是一切推到重来.”推倒重来”在计算机术语上称为复位.复位需要硬件的支持,复位电路就是在单片机的复位管脚上产生一个信号&#xff0c;俗称复位信号.这个信号需要持续一定的时间,单片机收到该信号之后就会复位,从头执行。 复位原理: 那么…

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

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

人工智能原理复习--知识表示(一)

文章目录 上一篇知识概述命题逻辑谓词逻辑谓词逻辑的应用 下一篇 上一篇 人工智能原理复习–绪论 知识概述 知识就是人类认识自然界的精神产物&#xff0c;是人类进行智能活动的基础。 是经过加工的信息&#xff0c;包括事实、信念和启发式规则。 分类&#xff1a; 按作用可…

第22章 NIO编程

在本章中需要掌握NIO中的缓冲区的作用&#xff0c;并理解缓冲区中的数据处理模型&#xff0c;掌握Channel的作用&#xff0c;并结合缓冲区实现数据I/O操作&#xff0c;理解文件锁的作用&#xff0c;并且掌握字符编码处理支持类的使用&#xff0c;掌握Reactor设计模型&#xff0…

深信服AD负载均衡频繁掉线故障分析

一个由114.114.114.114引起的AD异常 客户反馈深信服负载均衡链路频繁掉线&#xff0c;具体故障现象如下 可以获取到IP地址、网关 两分钟掉一次&#xff0c;持续一个多月&#xff0c;求IT的心理阴影面积&#xff01; 链路监视器只设置了一个114.114.114.114 处理流程&#xff…

Ps:子路径的上下排列以及对齐与分布

不论是一个形状图层&#xff08;或图层的矢量蒙版&#xff09;上的多个形状还是同一路径层上多个路径&#xff0c;只要对应“路径”面板的一个路径层&#xff0c;可以将这些路径称为该路径层的“子路径”&#xff0c;也称为“组件”。 当一个路径层上有两个以上的子路径时&…

『 Linux 』进程优先级

文章目录 什么是优先级Linux下的进程优先级PRI与NI使用top查看进程以及对进程的优先级的修改 进程优先级的其他概念竞争性与独立性并发与并行 什么是优先级 优先级,顾名思义,即在同一环境下不同单位对同一个资源的享有顺序; 一般优先级高的单位将优先占有该资源; 在进程当中进…

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

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

chatgpt prompt提示词

ChatGPT 最近十分火爆&#xff0c;今天我也来让 ChatGPT 帮我阅读一下 Vue3 的源代码。 都知道 Vue3 组件有一个 setup函数。那么它内部做了什么呢&#xff0c;今天跟随 ChatGPT 来一探究竟。 实战 1.setup setup 函数在什么位置呢&#xff0c;我们不知道他的实现函数名称&…

PyCharm简介与安装

pyCharm的作用 PyCharm是一种Python的集成开发环境&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高效率的工具 pyCharm的集成 pyCharm的分类 PyCharm的下载 网址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows PyCharm的安装

Jmeter--如何监控服务器资源

在我们做项目的性能测试时&#xff0c;需要查看相关服务器的资源使用情况&#xff1b;本文以apache-Jmeter-5.5版本为例&#xff0c;使用PerfMon进行服务器资源监控的方案由两部分来实现&#xff1a;ServerAgent部署在被测服务器&#xff0c;负责资源耗用数据的采集&#xff0c…

直接插入排序和希尔排序

前言 我们前面几期介绍了线性和非线性的基本数据结构。例如顺序表、链表、栈和队列、二叉树等~&#xff01;本期和接下来的几期我们来详解介绍各个排序的概念、实现以及性能分析&#xff01; 本期内容 排序的概念以及其运用 常见的排序算法 直接插入排序 希尔排序 一、排序的…

xv6 磁盘中断流程和启动时调度流程

首发公号&#xff1a;Rand_cs 本文讲述 xv6 中的一些细节流程&#xff0c;还有对之前文中遗留的问题做一些补充说明&#xff0c;主要有以下几个问题&#xff1a; 一次完整的磁盘中断流程进入调度器后的详细流程sched 函数中的条件判断scheduler 函数中为什么要周期性关中断 …

Java 基础学习(三)循环流程控制与数组

1 循环流程控制 1.1 循环流程控制概述 1.1.1 什么是循环流程控制 当一个业务过程需要多次重复执行一个程序单元时&#xff0c;可以使用循环流程控制实现。 Java中包含3种循环结构&#xff1a; 1.2 for循环 1.2.1 for循环基础语法 for循环是最常用的循环流程控制&#xff…

WPF Live Charts2 自学笔记

文章目录 前言实现效果微软平台的历史问题 WPF 项目搭建Nuget添加额外框架添加项目初始化livecharts配置其它LiveCharts2 案例简单案例Demo示例ViewViewModel GPU渲染 Github地址仓库 前言 LiveChart 是C# 上面很受欢迎的统计图 UI控件。最近在学WPFhalcon开发&#xff0c;想想…

【.NET全栈】.net的微软API接口与.NET框架源码

文章目录 0 前言1 微软官方.net接口学习2 .NET框架源码总结 0 前言 如果浏览器打不开链接&#xff0c;换一个浏览器打开。 我是 打不开微软的链接&#xff0c;使用&#xff1a; 可以打开&#xff01;&#xff01;&#xff01; 1 微软官方.net接口学习 https://docs.microsoft…