HMM前向和后向算法在计算什么?

前向算法在计算什么?

前向算法计算的是在给定\(\lambda=(\Pi,A,B)\)时观测的概率,如果有观测序列\((x_1,x_2,...,x_5)\),状态序列为\((z_1,...,z_5)\),有三种状态

在第5个结点计算观测序列概率时,因为\(z_5\)有三种情况,那么\((z_1,...,z_5)\)产生\((x_1,...,x_5)\)的概率会计算三次。如果使用前向算法可以省略很多次计算。

假设\(t-1\)长的观测序列概率已计算,现要计算t长的观测序列的概率。定义变量

\(\alpha_i(t)=p(x_1,x_2,...,x_t,z_t=i)\),t的状态为\(i\)

则t长的观测序列概率为\(p({\bf{x}})=p(x_1,x_2,...,x_T)=\sum\limits_{i=1}^n p(x_1,...,x_T,z_T=i)=\sum\limits_{i=1}^n\alpha_i(T)\)

\(\sum \limits_{i=1}^n\)的意思是,每个状态都有概率转化到\(x_T\)

那么可以根据上式递归计算观测序列的概率

\(\alpha _j(t)=\sum\limits_{i=1}^n \alpha_i(t-1)a_{ij}b_{jx_t},j=1,2...,n;t=1,2,..,T\)

\(\alpha_j(t)\)表示长度为t,t时刻状态为j的概率

image-20200507204140267

前向概率:\(t\)时刻隐藏状态为\(q_i\)且观测序列为\(o_1,o_2,...,o_t\)的概率,记为\(\alpha_t(i)=P(o_1,o_2,...,o_t,i_t=q_i|\lambda)\)

递推过程:

image-20200507205630943

例子:

输入:

\(\prod=(0.2,0.4,0.4)^T\)

\(A=\begin{pmatrix} 0.5 & 0.2 &0.3 \\ 0.3 & 0.5 &0.2 \\ 0.2&0.3&0.5 \end{pmatrix}\)

\(B=\begin{pmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{pmatrix}\)

观测序列\(O=\{红,白,红\}\)

输出:

观测序列\(O=\{红,白,红\}\)的概率

1时刻的前向概率:

隐藏状态为盒子1且为红色球的概率为:\(\alpha_1(1)=\pi_1b_1(o_1)=0.2 \times 0.5 =0.1\)

隐藏状态为盒子2且为红色球的概率为:\(\alpha_1(2)=\pi_2b_2(o_1)=0.4 \times 0.4 =0.16\)

隐藏状态为盒子3且为红色球的概率为:\(\alpha_1(3)=\pi_3b_3(o_1)=0.4 \times 0.7 =0.28\)

开始递推2时刻的前向概率:(在前一个观测状态为红色球的基础下)

隐藏状态是盒子1且为白色球的概率为:\(\alpha_{2}(1)=\left[\sum\limits_{i=1}^{3} \alpha_{1}(i) a_{i 1}\right] b_{1}\left(o_{2}\right)=[0.1 * 0.5+0.16 * 0.3+0.28 * 0.2] \times 0.5=0.077\)

隐藏状态是盒子2且为白色球的概率为:

\(\alpha_{2}(2)=\left[\sum\limits_{i=1}^{3} \alpha_{1}(i) a_{i 2}\right] b_{2}\left(o_{2}\right)=[0.1 * 0.2+0.16 * 0.5+0.28 * 0.3] \times 0.6=0.1104\)

隐藏状态是盒子3且为白色球的概率为:

\(\alpha_{2}(3)=\left[\sum\limits_{i=1}^{3} \alpha_{1}(i) a_{i 3}\right] b_{3}\left(o_{2}\right)=[0.1 * 0.3+0.16 * 0.2+0.28 * 0.5] \times 0.3=0.0606\)

递推到3时刻的前向概率:(在1时刻为红色球,2时刻为白色球的基础下)

隐藏状态是盒子1且为红色球的概率为:

\(\alpha_{3}(1)=\left[\sum\limits_{i=1}^{3} \alpha_{2}(i) a_{i 1}\right] b_{1}\left(o_{3}\right)=[0.077 * 0.5+0.1104 * 0.3+0.0606 * 0.2] \times 0.5=0.04187\)

隐藏状态是盒子2且为红色球的概率为:

\(\alpha_{3}(2)=\left[\sum\limits_{i=1}^{3} \alpha_{2}(i) a_{i 2}\right] b_{2}\left(o_{3}\right)=[0.077 * 0.2+0.1104 * 0.5+0.0606 * 0.3] \times 0.4=0.03551\)

隐藏状态是盒子3且为红色球的概率为:

\(\alpha_{3}(3)=\left[\sum\limits_{i=1}^{3} \alpha_{2}(i) a_{i 3}\right] b_{3}\left(o_{3}\right)=[0.077 * 0.3+0.1104 * 0.2+0.0606 * 0.5] \times 0.7=0.05284\)

最终观测序列\(O=\{红,白,红\}\)的概率为:\(P(O|\lambda)=\sum\limits_{i=1}^3 \alpha_3(i)=0.13022\)

后向算法在计算什么?


image-20200507212313054

后向算法:条件概率

后向概率:\(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)\)

递推过程:

image-20200507212625047

例子:

输入:

\(\prod=(0.2,0.4,0.4)^T\)

\(A=\begin{pmatrix} 0.5 & 0.2 &0.3 \\ 0.3 & 0.5 &0.2 \\ 0.2&0.3&0.5 \end{pmatrix}\)

\(B=\begin{pmatrix} 0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3 \end{pmatrix}\)

观测序列\(O=\{红,白,红\}\)

输出:

观测序列\(O=\{红,白,红\}\)的概率

例子:

2时刻的后向概率

2时刻隐藏状态为盒子1的条件下,3观测为红的概率为\(\beta_2(1)= 0.5 \times 0.5 + 0.2 \times 0.4 + 0.3 \times 0.7=0.54\)

2时刻隐藏状态为盒子2的条件下,3观测为红的概率为\(\beta_2(2)=0.3 \times 0.5+0.5 \times 0.4 +0.2 \times 0.7=0.49\)

2时刻隐藏状态为盒子3的条件下,3观测为红的概率为\(\beta_2(3)=0.2 \times 0.5+0.3 \times 0.4 +0.5 \times 0.7=0.57\)

递推到1时刻

1时刻隐藏状态为盒子1的条件下,2为白3为色的概率:$\beta_1(1)=0.5 \times 0.5 \times 0.54 + 0.2\times 0.6 \times0.49 +0.3\times0.3\times0.57=0.2451 $

1时刻隐藏状态为盒子2的条件下,2为白3为色的概率:\(\beta_1(2)=0.3 \times 0.5 \times 0.54+0.5 \times 0.6\times0.49+0.2\times0.3\times0.57=0.2622\)

1时刻隐藏状态为盒子3的条件下,2为白3为红的概率:\(\beta_1(3)=0.2 \times 0.5 \times 0.54+0.3\times0.6\times0.49+0.5\times0.3\times0.57=0.2277\)

最终观测序列\(O=\{红,白,红\}\)的概率为:\(P(O|\lambda)=0.2 \times 0.5 \times 0.2451 +0.4\times 0.4 \times 0.2622+0.4\times 0.7 \times 0.2277=0.13022\)

posted @ 2020-05-22 21:00  yueqiudian  阅读(473)  评论(0)    收藏  举报