2.概率计算算法

01 引言

直 接 计 算 法 计 算 量 太 大 , 是 O ( T N T ) 阶 的 , 这 种 算 法 不 可 行 。 直接计算法计算量太大,是O(TN^T)阶的,这种算法不可行。 O(TNT)

下面介绍计算观测序列概率P(O|λ)的有效算法:前向-后向算法(forward-backward algorithm)

前向后向算法就是来帮助我们在较低的时间复杂度情况下求解这个问题的。

02. 前向算法

对于隐马尔可夫模型第一个基本问题,在介绍前向算法之前,先介绍前向概率
前 向 概 率 : 在 给 定 隐 马 尔 科 夫 模 型 λ = ( A , B , C ) , 定 义 到 时 刻 t 部 分 观 测 序 列 为 o 1 , o 2 , . . . , o t 且 状 态 为 q i 的 概 率 为 前 向 概 率 , 记 为 : α t ( i ) = P ( o 1 , o 2 , . . . , o t , i t = q i ∣ λ ) 前向概率:在给定隐马尔科夫模型λ=(A,B,C),定义到时刻t部分 观测\\序列为o_1,o_2,...,o_t 且状态为q_i的概率为前向概率,记为:\\ \alpha_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda) λ=A,B,Cto1,o2,...,otqi,αt(i)=P(o1,o2,...,ot,it=qiλ)
可以根据数据对前向概率公式进行递推,并最终得到观测序列概率P(O|λ). 前向概率算法就是根据前向概率递推公式进行计算的,输入为隐马尔可夫模型观测序列,输出的结果为序列概率P(O|λ). 计算的步骤为:

(1) 根据前向概率公式,先设定 t = 1的初值:
在 t = 1 时 , 且 给 定 λ 条 件 下 , i 1 的 状 态 为 q i 且 观 测 为 o 1 的 概 率 为 : α 1 ( i ) = P ( o 1 , i 1 = q i ∣ λ ) = P ( i 1 = q i ∣ λ ) ∗ P ( o 1 ∣ i 1 = q i ∣ λ ) = c i b i ( o 1 ) , i = 1 , 2 , . . . , N 在t=1时,且给定\lambda条件下,i_1的状态为q_i且观测为o_1的概率为:\\ \alpha_1(i)=P(o_1,i_1=q_i|\lambda)\\ =P(i_1=q_i|\lambda)\ast P(o_1|i_1=q_i|\lambda)\\ =c_ib_i(o_1) , i=1,2,...,N t=1,λi1qio1α1(i)=P(o1,i1=qiλ)=P(i1=qiλ)P(o1i1=qiλ)=cibi(o1),i=1,2,...,N

C i = P ( i 1 = q i ) b j ( v k ) = P ( o t = v k ∣ i t = q j ) P ( A , B ) = P ( B ) ∗ P ( A ∣ B ) P ( A , B ∣ C ) = P ( B ∣ C ) ∗ P ( A ∣ B ∣ C ) C_i=P(i_1=q_i)\\ b_j(v_k)=P(o_t=v_k|i_t=q_j)\\ P(A,B)=P(B)\ast P(A|B)\\ P(A,B|C)=P(B|C)\ast P(A|B|C) Ci=P(i1=qi)bj(vk)=P(ot=vkit=qj)P(A,B)=P(B)P(AB)P(A,BC)=P(BC)P(ABC)

(2) 根据前向概率公式对前向概率进行递推,因此对t=1,2,…,N-1有:
α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] ∗ b i ( o t + 1 ) , i = 1 , 2 , . . . , N \alpha_{t+1}(i)=[\sum_{j=1}^N \alpha_t(j)a_{ji}]\ast b_i(o_{t+1}), i=1,2,...,N αt+1(i)=[j=1Nαt(j)aji]bi(ot+1),i=1,2,...,N

  • 解 释 : α 2 ( i ) α 1 ( i ) = [ α 1 ( 1 ) . . . α 1 ( N ) ] 解释:\alpha_{2}(i) \\ \alpha_{1}(i)= \begin{bmatrix} \alpha_{1}(1) \\ ... \\ \alpha_{1}(N) \\ \end{bmatrix} α2(i)α1(i)=α1(1)...α1(N)

  • 【 ∑ j = 1 N α 1 ( j ) a j i 】 : α 1 ( j = 1 ) 乘 以 状 态 转 移 矩 阵 A 1 的 第 一 整 列 ( 即 , 乘 以 a 1 i ) , 一 直 加 到 α 1 ( N ) 乘 以 状 态 转 移 矩 阵 A 1 的 第 N 整 列 。 然 后 , 再 乘 以 , 在 状 态 i 2 = q i 时 , 观 测 为 o 2 的 概 率 【\sum_{j=1}^N\alpha_1(j)a_{ji}】:\alpha_1(j=1)乘以状态转移矩阵A_1的第一整列 (即,乘以a_{1i}),一直加\\到\alpha_1(N)乘以状态转移矩阵A_1的第N整列。 然后,再乘以,在状态i_2=q_i时,\\观测为o_2的概率 j=1Nα1(j)aji:α1(j=1)A1(a1i)α1(N)A1N,i2=qio2

    在这里插入图片描述

(3) 最后对所有的前向概率进行求和得到最终的结果,即为:
P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda)=\sum_{i=1}^N\alpha_T(i) P(Oλ)=i=1NαT(i)

该算法所表示的递推关系图为:

在这里插入图片描述

  • 步骤(1):
    初 始 化 前 向 概 率 , 是 初 始 时 刻 的 状 态 i 1 = q 1 和 观 测 o 1 的 联 合 概 率 。 初始化前向概率,是初始时刻的状态i_1 = q_1和观测o_1的联合概率。 i1=q1o1

  • 步骤(2):
    是 前 向 概 率 的 递 推 公 式 , 计 算 到 时 刻 t + 1 部 分 观 测 序 列 为 o 1 , o 2 , . . . , o t , o t + 1 且 在 时 刻 t + 1 处 于 状 态 q i 的 前 向 概 率 。 如 上 图 所 示 , 既 然 α t ( j ) 是 得 到 时 刻 t 观 测 到 o 1 , o 2 , . . . , o t 并 在 时 刻 t 处 于 状 态 的 q j 前 向 概 率 , 那 么 乘 积 α t ( j ) a j i 就 是 到 时 刻 t 观 测 到 o 1 , o 2 , . . . , o t 并 在 是 时 刻 t 处 于 q j 状 态 而 在 时 刻 t + 1 到 达 q i 状 态 的 联 合 概 率 。 对 于 这 个 乘 积 在 时 刻 t 的 所 有 可 能 的 N 个 状 态 q j 求 和 , 其 结 果 就 是 到 时 刻 t 观 测 为 o 1 , o 2 , . . . , o t , 并 在 时 刻 t + 1 处 于 状 态 q i 的 联 合 概 率 。 方 括 号 里 的 值 与 观 测 概 率 b i ( o t + 1 ) 的 乘 积 恰 好 是 时 刻 t + 1 观 测 到 o 1 , o 2 , . . . , o t , o t + 1 并 在 时 刻 t + 1 处 于 状 态 q i 的 前 向 概 率 α t + 1 ( j ) 。 是前向概率的递推公式,计算到时刻t+1部分观测序列为o_1,o_2,..., o_t,o_{t+1} 且在时刻\\t+1处于状态q_i的前向概率。如上图所示,既然 \alpha_t(j)是得到时刻t观测到o_1,o_2,...,o_t\\并在时刻t处于状态的q_j前向 概率,那么乘积\alpha_t(j)a_{ji}就是到时刻t观测到o_1,o_2,...,o_t并\\在是时刻 t处于q_j状态而在时刻t+1到达q_i状态的联合概率。对于这个乘积在时 刻t的\\所有可能的N个状态q_j求和,其结果就是到时刻t观测为o_1,o_2,..., o_t,并在时刻t+1\\处于状态q_i的联合概率。方括号里的值与观测概率 b_i(o_{t+1})的乘积恰好是时刻t+1观\\测到o_1,o_2,...,o_t,o_{t+1}并在时刻 t+1处于状态q_i的前向概率\alpha_{t+1}(j)。 t+1o1,o2,...,ot,ot+1t+1qiαt(j)to1,o2,...,ottqjαt(j)ajito1,o2,...,ottqjt+1qitNqjto1,o2,...,ott+1qibi(ot+1)t+1o1,o2,...,ot,ot+1t+1qiαt+1(j)
    步骤(3):
    计 算 出 P ( O ∣ λ ) 的 结 果 。 α T ( i ) = P ( o 1 , o 2 , . . . , o T , i T = q i ∣ λ ) P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) 计算出P(O|\lambda)的结果。\\ \alpha_T(i)=P(o_1,o_2,...,o_T,i_T=q_i|\lambda)\\ P(O|\lambda)=\sum_{i=1}^N\alpha_T(i) P(Oλ)αT(i)=P(o1,o2,...,oT,iT=qiλ)P(Oλ)=i=1NαT(i)

在 时 刻 t = 1 , 计 算 α 1 ( i ) 的 N 个 值 ( i = 1 , 2 , . . . , N ) ; 在 各 个 时 刻 t = 1 , 2 , . . . , T − 1 , 计 算 α t + 1 ( i ) 的 N 个 值 ( i = 1 , 2 , . . . , N ) , 而 且 每 个 α t + 1 ( i ) 的 计 算 利 用 前 一 时 刻 N 个 α t ( i ) 。 减 少 计 算 量 的 原 因 在 于 每 一 次 计 算 直 接 引 用 前 一 个 时 刻 的 计 算 结 果 , 避 免 重 复 计 算 。 在时刻t=1,计算\alpha_1(i)的N个值(i=1,2,...,N);在各个时刻t=1, 2,...,T-1,计算\alpha_{t+1}(i)\\的N个值(i=1,2,...,N),而且每个\alpha_{t+1}(i) 的计算利用前一时刻N个\alpha_{t}(i)。减少计算量的\\原因在于每一次计算直接 引用前一个时刻的计算结果,避免重复计算。\\ t=1α1(i)N(i=1,2,...,N);t=1,2,...,T1,αt+1(i)N(i=1,2,...,N),αt+1(i)Nαt(i)

03. 举个小栗子

问题:考虑盒子和球模型λ=(A,B,C),状态集合Q = { 1 , 2 , 3 } ,观测集合V = { 红 , 白 }

A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] , B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] , C = [ 0.2 0.4 0.4 ] A= \begin{bmatrix} 0.5 & 0.2 & 0.3\\ 0.3 & 0.5 & 0.2\\ 0.2 & 0.3 & 0.5\\ \end{bmatrix}, B= \begin{bmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3\\ \end{bmatrix}, C= \begin{bmatrix} 0.2 \\ 0.4 \\ 0.4 \\ \end{bmatrix} A=0.50.30.20.20.50.30.30.20.5B=0.50.40.70.50.60.3C=0.20.40.4
设T=3,O=(红,白,红),试用前向算法计算P(O|λ)。

  • (1)计算初值
    α 1 ( 1 ) = C 1 b 1 ( o 1 ) = 0.2 ∗ 0.5 = 0.10 α 1 ( 2 ) = C 2 b 2 ( o 1 ) = 0.4 ∗ 0.4 = 0.16 α 1 ( 3 ) = C 3 b 3 ( o 1 ) = 0.4 ∗ 0.7 = 0.28 \alpha_{1}(1)=C_1b_1(o_1)=0.2*0.5=0.10\\ \alpha_{1}(2)=C_2b_2(o_1)=0.4*0.4=0.16\\ \alpha_{1}(3)=C_3b_3(o_1)=0.4*0.7=0.28 α1(1)=C1b1(o1)=0.20.5=0.10α1(2)=C2b2(o1)=0.40.4=0.16α1(3)=C3b3(o1)=0.40.7=0.28
    (2)递推计算

α 2 ( 1 ) = [ ∑ i = 1 3 α 1 ( i ) a i 1 ] b 1 ( o 2 ) = [ 0.1 ∗ 0.5 + 0.16 ∗ 0.3 + 0.28 ∗ 0.2 ] ∗ 0.5 = 0.077 α 2 ( 2 ) = [ ∑ i = 1 3 α 1 ( i ) a i 2 ] b 2 ( o 2 ) = 0.1104 α 2 ( 3 ) = [ ∑ i = 1 3 α 1 ( i ) a i 3 ] b 3 ( o 2 ) = 0.0606 α 3 ( 1 ) = [ ∑ i = 1 3 α 2 ( i ) a i 1 ] b 1 ( o 3 ) = 0.04187 α 3 ( 2 ) = [ ∑ i = 1 3 α 2 ( i ) a i 2 ] b 2 ( o 3 ) = 0.03551 α 3 ( 3 ) = [ ∑ i = 1 3 α 2 ( i ) a i 3 ] b 3 ( o 3 ) = 0.05284 \alpha_2(1)=[\sum_{i=1}^3 \alpha_1(i)a_{i1}]b_1(o_{2})\\=[0.1*0.5+0.16*0.3+0.28*0.2]*0.5=0.077\\ \alpha_2(2)=[\sum_{i=1}^3 \alpha_1(i)a_{i2}]b_2(o_{2})=0.1104\\ \alpha_2(3)=[\sum_{i=1}^3 \alpha_1(i)a_{i3}]b_3(o_{2})=0.0606\\ \alpha_3(1)=[\sum_{i=1}^3 \alpha_2(i)a_{i1}]b_1(o_{3})=0.04187\\ \alpha_3(2)=[\sum_{i=1}^3 \alpha_2(i)a_{i2}]b_2(o_{3})=0.03551\\ \alpha_3(3)=[\sum_{i=1}^3 \alpha_2(i)a_{i3}]b_3(o_{3})=0.05284 α2(1)=[i=13α1(i)ai1]b1(o2)=[0.10.5+0.160.3+0.280.2]0.5=0.077α2(2)=[i=13α1(i)ai2]b2(o2)=0.1104α2(3)=[i=13α1(i)ai3]b3(o2)=0.0606α3(1)=[i=13α2(i)ai1]b1(o3)=0.04187α3(2)=[i=13α2(i)ai2]b2(o3)=0.03551α3(3)=[i=13α2(i)ai3]b3(o3)=0.05284

(3)终止
P ( O ∣ λ ) = ∑ i = 1 3 α 3 ( i ) = 0.13022 P(O|\lambda)=\sum_{i=1}^3\alpha_3(i)=0.13022 P(Oλ)=i=13α3(i)=0.13022

04. 后向算法

在介绍后向算法之前,先介绍后向概率
后 向 概 率 : 在 给 定 隐 马 尔 科 夫 模 型 λ = ( A , B , C ) , 定 义 到 时 刻 t 部 分 状 态 为 q i 的 条 件 下 , 从 t + 1 到 T 的 部 分 观 测 序 列 为 o t + 1 , o t + 2 , . . . , o T 的 概 率 为 后 向 概 率 , 记 为 : β t ( i ) = P ( o t + 1 , o t + 2 , . . . , o T ∣ i t = q i , λ ) 后向概率:在给定隐马尔科夫模型λ=(A,B,C),定义到时刻t部分状态\\ 为q_i的条件下,从t+1到T的部分观测序列为o_{t+1},o_{t+2},...,o_T的概率为\\后向概率,记为:\\ \beta_t(i)=P(o_{t+1},o_{t+2},...,o_T|i_t=q_i,\lambda) λ=A,B,Ctqit+1Tot+1,ot+2,...,oT,βt(i)=P(ot+1,ot+2,...,oTit=qi,λ)
可以根据数据对后向概率公式进行递推,并最终得到观测序列概率P(O|λ). 后向概率算法就是根据后向概率递推公式进行计算的,输入为隐马尔可夫模型λ观测序列O输出的结果为序列概率P(O|λ). 计算的步骤为:

(1) 根据后向概率公式,先设定 t = T的初值:
在 t = T 时 , i T 的 状 态 为 q i 且 给 定 λ 条 件 下 , 观 测 为 o T 的 概 率 为 : β T ( i ) = P ( o T ∣ i T = q i , λ ) = 1 , i = 1 , 2 , . . . , N 在t=T时,i_T的状态为q_i且给定\lambda条件下,观测为o_T的概率为:\\ \beta_T(i)=P(o_T|i_T=q_i,\lambda)=1, i=1,2,...,N t=T,iTqiλoTβT(i)=P(oTiT=qi,λ)=1,i=1,2,...,N

全 概 思 想 : P ( o T ∣ i T = q i ) = P ( o T ∣ i T = q 1 ) + P ( o T ∣ i T = q 2 ) + . . . + P ( o T ∣ i T = q T ) = 1 全概思想:P(o_T|i_T=q_i)=P(o_T|i_T=q_1)+P(o_T|i_T=q_2)+...\\ +P(o_T|i_T=q_T)=1 P(oTiT=qi)=P(oTiT=q1)+P(oTiT=q2)+...+P(oTiT=qT)=1

(2) 对t=T-1,T-2,…,1有:
β t ( i ) = ∑ j = 1 N a i j ∗ b j ( o t + 1 ) ∗ β t + 1 ( j ) , i = 1 , 2 , . . . , N b j ( v k ) = P ( o t = v k ∣ i t = q j ) a i j = P ( i t + 1 = q j ∣ i t = q i ) \beta_{t}(i)=\sum_{j=1}^N a_{ij}\ast b_j(o_{t+1})\ast\beta_{t+1}(j), i=1,2,...,N\\ b_j(v_k)=P(o_t=v_k|i_t=q_j)\\ a_{ij}=P(i_{t+1}=q_j|i_{t}=q_i)\\ βt(i)=j=1Naijbj(ot+1)βt+1(j),i=1,2,...,Nbj(vk)=P(ot=vkit=qj)aij=P(it+1=qjit=qi)
(2) 有:
P ( O ∣ λ ) = ∑ i = 1 N C i b i ( o 1 ) β 1 ( i ) P(O|\lambda)=\sum_{i=1}^N C_{i}b_i(o_{1})\beta_{1}(i) P(Oλ)=i=1NCibi(o1)β1(i)

  • 公式证明:
    知 识 补 充 : o t + 1 T = o t + 1 , o t + 2 , . . . , o T P ( A ∣ B ) = P ( A , B ) P ( B ) , ∑ j = 1 N P ( i t = q i ) = 1 知识补充:o_{t+1}^T=o_{t+1},o_{t+2},...,o_T\\P(A|B)=\frac{P(A,B)}{P(B)} , \sum_{j=1}^N P(i_t=q_i)=1\\ ot+1T=ot+1,ot+2,...,oTP(AB)=P(B)P(A,B),j=1NP(it=qi)=1

在这里插入图片描述

该算法所表示的递推关系图为:

请添加图片描述

  • 步骤(1):
    初 始 化 后 向 概 率 , 对 最 终 时 刻 的 所 有 状 态 q i 规 定 β T ( i ) = 1 。 初始化后向概率,对最终时刻的所有状态q_i规定\beta_T(i)=1。 qiβT(i)=1

  • 步骤(2):
    是 后 向 概 率 的 递 推 公 式 , 如 上 图 所 示 , 为 了 计 算 在 时 刻 t 状 态 为 q i 条 件 下 时 刻 t + 1 之 后 的 观 测 序 列 为 o t + 1 , o t + 2 , . . . , o T 的 后 向 概 率 β t ( i ) , 只 需 考 虑 在 时 刻 t + 1 所 有 可 能 的 N 个 状 态 q j 的 转 移 概 率 ( 即 , a i j 项 ) 以 及 在 此 状 态 下 的 观 测 o t + 1 的 观 测 概 率 ( 即 , b j ( o t + 1 ) 项 ) , 然 后 考 虑 状 态 q j 之 后 的 观 测 序 列 的 后 向 概 率 ( 即 , β t + 1 ( j ) 项 ) 。 是后向概率的递推公式,如上图所示,为了计算在时刻t状态为q_i条件下 时刻t+1之后\\的观测序列为o_{t+1},o_{t+2},...,o_{T}的后向概率\beta_t(i), 只需考虑在时刻t+1所有可能的N个\\状态q_j的转移概率(即,a_{ij}项) 以及在此状态下的观测o_{t+1}的观测概率(即,b_j(o_{t+1})项),\\然后考虑 状态q_j之后的观测序列的后向概率(即,\beta_{t+1}(j)项)。\\ tqit+1ot+1,ot+2,...,oTβt(i),t+1Nqj(aij)ot+1(bj(ot+1))qj(βt+1(j))
    步骤(3):
    求 P ( O ∣ λ ) 的 思 路 与 步 骤 ( 2 ) 一 致 , 只 是 初 始 概 率 C i 代 替 转 移 概 率 。 求P(O|\lambda)的思路与步骤(2)一致,只是初始概率C_i代替转移概率。\\ P(Oλ)(2)Ci

利 用 前 向 概 率 和 后 向 概 率 的 定 义 可 以 将 观 测 序 列 概 率 P ( O ∣ λ ) 统 一 写 成 : P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) t = 1 , 2 , . . . , T − 1 利用前向概率和后向概率的定义可以将观测序列概率P(O|\lambda)统一写成:\\ P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1}) \beta_{t+1}(j)\\ t=1,2,...,T-1 P(Oλ)P(Oλ)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j)t=1,2,...,T1

步骤(3):
求 P ( O ∣ λ ) 的 思 路 与 步 骤 ( 2 ) 一 致 , 只 是 初 始 概 率 C i 代 替 转 移 概 率 。 求P(O|\lambda)的思路与步骤(2)一致,只是初始概率C_i代替转移概率。\\ P(Oλ)(2)Ci

利 用 前 向 概 率 和 后 向 概 率 的 定 义 可 以 将 观 测 序 列 概 率 P ( O ∣ λ ) 统 一 写 成 : P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 ) β t + 1 ( j ) t = 1 , 2 , . . . , T − 1 利用前向概率和后向概率的定义可以将观测序列概率P(O|\lambda)统一写成:\\ P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1}) \beta_{t+1}(j)\\ t=1,2,...,T-1 P(Oλ)P(Oλ)=i=1Nj=1Nαt(i)aijbj(ot+1)βt+1(j)t=1,2,...,T1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值