隐马尔可夫模型HMM
隐马尔可夫HMM
定义
隐马尔可夫模型
(hidden Markov model, HMM)是可用于标注问题
的统计学习模型
描述由隐藏的马尔可夫链
随机生成观测序列
的过程,属于生成模型
隐藏的马尔可夫链随机生成的状态的序列,称为状态序列(state sequence)每个状态生成一个观测
而由此产生的观测的随机序列,称为观测序列(observation sequence)
序列的每一个位置又可以看作是一个时刻
这里的$Z$就是状态序列,$x$是观测序列,设Q是所有可能的状态的集合,V是所有可能的观测的集合,$N$是可能的状态数,$M$是可能的观测数
三要素
隐马尔可夫三要素
隐马尔可夫模型由初始状态概率
$\pi$、状态转移矩阵
$A$、观测概率矩阵
(或者叫发射矩阵)$B$决定,记作
其中$\pi$的维度为$N$,$A$的维度为$N \times N$,$B$的维度为$N \times M$
例子🌰
🌱假设有4个盒子,每个盒子里面有不同数量的红、白两种颜色的球,具体如下表
盒子编号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
按照下面的方法抽球,产生一个球的颜色的观测序列:
开始,从4个盒子里以等概率随机选取1个盒子,从这个盒子里随机抽出1个球,记录其颜色后,放回
然后,从当前盒子随机转移到下一个盒子,规则如下:
- 如果当前盒子是盒子1,那么下一盒子一定是盒子2
- 如果当前是盒子2或3,那么分别以概率0.4和0.6转移到左边或右边的盒子
- 如果当前是盒子4,那么各以0.5的概率停留在盒子4或转移到盒子3
- 确定转移的盒子后,再从这个盒子里随机抽出1个球,记录其颜色,放回
- 如此下去,重复进行5次,得到一个球的颜色的观测序列:$O={红,红,白,白,红}$
根据所给条件,可以明确状态集合、观测集合、序列长度以及模型的三要素
- 盒子对应状态,状态的集合是$Q={盒子1,盒子2,盒子3,盒子4}$,$N=4$
- 球的颜色对应观测。观测的集合是$V={红,白}$,$M=2$
- 状态序列和观测序列长度$T=5$
则初始概率分布为
状态转移概率分布为
观测概率分布为 (最终盒子红白球的概率)
三个假设
马尔科夫性假设
: $t$时刻的状态出现的概率只和$t-1$时刻的状态有关齐次马尔可夫假设
(假设1)观测独立性假设
(假设2)
假设1和假设2在前后向算法推导上有用到
观测序列生成
输入:隐马尔可夫模型 $\lambda=(A ,B ,\pi )$ ,观测序列长度$T$
输出:观测序列
- 按照初始状态分布 $\pi$ 产生状态$i_1$
- 令t $=1$
- 按照状态$\mathrm{t}$的观测概率分布 生成
- 按照状态 的状态转移概率分布 产生状态 ,
- 令 $\mathrm{t}=\mathrm{t}+1$; 如果 $\mathrm{t}<\mathrm{T}$ ,转步 $(3)$ ;否则,终止
概率基础
联合概率
联合概率指的是包含多个条件且所有条件同时成立的概率,记作
边缘概率
仅与单个随机变量有关的概率,记作
条件概率
条件概率表示在条件$Y=b$成立的情况下,$X=a$的概率,记作
具有性质:在条件$Y=b$下$X$的条件分布,也是一种$X$的概率分布,穷举$X$的可取值之后,所有这些值对应的概率之和为$1$,即:
🌿联合概率、边缘概率与条件概率之间的关系: 联=边*条
可以理解成在$Y$选中$b$的情况下,同时$X$选中$b$的概率就是联合概率,表示两个条件同时满足
🌰举个例子,假设有3个盒子,每个盒子中有白色和红色两种颜色的球,那么从第二个盒子中取出白球的概率,等价于抽到第二个盒子的概率$\times$第二个盒子中抽到白色求的概率
贝叶斯公式
- 先验概率:知道原因推结果的,P(原因)、P(结果|原因)等
- 后验概率:根据结果推原因的,P(原因|结果)等
HMM的三个问题
HMM的基本问题一共有三个:
概率计算
:给定参数$ \lambda =( \pi , A, B) $和观测序列$ X=(x_1,x_2, \cdots ,x_T) $,计算观测序列$ X $的条件概率$ P(X|\lambda)$参数学习
:给定观测序列$ X $,反推参数$\pi$、$A$、$B$解码问题
:给定参数$\lambda$和观测序列$ X=(x_1,x_2, \cdots ,x_T) $,求可能性最大的$ Z=(z_1, \cdots ,z_T)$
概率计算
HMM模型定义
🌱假设有4个盒子,每个盒子里面有不同数量的红、白两种颜色的球,具体如下表
盒子编号 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
现在从这些盒子中抽取$T$个球,每次抽取后记录颜色,再放回原盒子
序列如下图所示
其中$z_i$代表第$i$个隐序列值
,$q_i$代表第$i$个隐状态
,$x_i$代表第$i$个观测序列值
,注意
隐序列值
指的是第几个位置,比如第几个盒子、或者第几个单词隐状态
指的是第几个状态,比如红球还是白球,或者名词还是动词
此时$z_t = q_i$表达的含义就是$t$时刻,抽取第$q_i$个盒子,因为有$4$个盒子,所以在这里$i={1,2,3,4}$
对应取到的球的颜色可以记为$x_i$,其中$x_i \in {白色, 红色}$
直接计算
给定模型 $\lambda=(A, B, \pi)$ 和观测序列 ,算观测序列 $O$ 出现的 概率 ,最直接的方法是按概率公式直接计算.
通过列举所有可能的长度为$T$的状态序列,求各个状态序列$I$与观测序列 的联合概率 ,然后对所有可能的状态序列求和,得到
状态序列 的概率是
对固定的状态序列 ,观测序列 的概率是
$O$ 和 $I$ 同时出现的联合概率为
然后, 对所有可能的状态序列 $I$ 求和, 得到观测序列 $O$ 的概率 $P(O \mid \lambda)$, 即
但是,利用上述公式计算量很大,是 $O\left(T N^{T}\right)$ 阶的,这种算法不可行
🐜前向概率
定义
前向概率$ \alpha _t (i) $,它是$t$时刻的状态以及$1, 2, \cdots , t$时刻的观测在给定参数下的联合概率
也就是上图中标记的那一部分,$ \alpha _t (i) $表示的是在$t$时刻,隐状态为$q_i$的概率
前向概率初值
根据定义可以得到初值:
其中$P(x_1|z_1=q_i, \lambda)$表达的是,给定$\lambda$和状态$z_1=q_i$的情况下,观测值是$x_1$的概率
假设此时$x_1=白色$,这里可以通俗理解为$z_1$表示的第$1$个盒子,即从第一个盒子中取出白球的概率
同时$ b_i(x) $表示由状态$ q_i $生成给定观测数据的概率,例如设$ t $时刻观测数据$ x_t=v_j $,有
上述用到的公式为为概率基础
部分的知识
推导递推公式
由前向概率$ \alpha _t (i) $继续推导可以得到$ \alpha _T (i) $
根据这个公式,遍历$ z_T $的取值求和,可以得到$X$的边际概率
其中$N$表示的是状态数量
,比如盒子中只有红球和白球,即状态集合为${白球, 红球}$,此时$N=2$
由前向概率推导可以得到
引入变量$z_t=q_i$,注意($t+1$时刻$=$$z_t$所有状态求和),所以有
找到了$t$到$t+1$时刻的递推公式,分别看下公式的两个部分
前半部分根据
观测独立假设
后半部分根据
齐次马尔可夫假设
将上述结果代入$\alpha _{t+1}(j)$可以得到
条件概率
考虑盒子和球模型$\lambda (\pi,A,B)$,状态集合$Q={1,2,3}$,观测集合$V={红,白}$
观测序列 $O={ 红, 白, 红 }$
输出: 观测序列 $O={ 红, 白, 红 }$ 的概率
- $t=1$时刻的前向概率
隐藏状态为盒子1且为红色球的概率为:
隐藏状态为盒子 2 且为红色球的概率为:
隐藏状态为盒子3且为红色球的概率为:
- $t=2$时刻的前向概率(在前一个观测状态为红色球的基础下)
隐藏状态是盒子1且为白色球的概率为
关键 : 这里可以理解成,在$t=2$的时候,且盒子为1时,它的$t=1$时刻可能是盒子1或盒子2或盒子3 也就是$t=2$的路径有(盒子1->盒子1、盒子2->盒子1、盒子3->盒子1),由公式表述就是$$\sum_{i=1}^{3} \alpha_{1}(i) a_{i 1}$$ 隐藏状态是盒子2且为白色球的概率为: $$ \alpha_{2}(2)=\left[\sum_{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_{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 $$ * $t=3$时刻的前向概率(在1时刻为红色球,2时刻为白色球的基础下) 隐藏状态是盒子1且为红色球的概率为: $$ \begin{array}{l} \alpha_{3}(1)=\left[\sum_{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 \end{array} $$ 隐藏状态是盒子2且为红色球的概率为: $$ \begin{array}{l} \alpha_{3}(2)=\left[\sum_{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 \end{array} $$ 隐藏状态是盒子3且为红色球的概率为: $$ \begin{array}{l} \alpha_{3}(3)=\left[\sum_{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 \end{array} $$ 最终观测序列 $$O=\{ 红, 白, 红 \}$$ 的概率为: $$P(O \mid \lambda)=\sum_{i=1}^{3} \alpha_{3}(i)= 0.04187+0.03551+0.05284 = 0.13022$$1 | import numpy as np |
🐝后向概率
定义
也就是下图中标记的那一部分,$ \beta _t (i) $表示的是在$t$时刻,隐状态为$q_i$的概率
后向概率初值,定义为1
根据后向概率定义可以推出
然后来看上式和要计算的概率$ P(X| \lambda ) $之间的关系
上面$b_i(x_1) \pi _i$也就是$ \alpha _1(i) $的定义,实际上,对于任意时刻$ t $,存在以下等式
接着,假设已知所有的,来推导
观察上式,后部分实际上就是$\alpha _{ij}$,而前半部分,根据前向概率中的观测独立性假设
,$z_t$与$x_1, \cdots ,x_T$都是无关的,即相互独立,可以省去,因此第二部分可以变为
将结论代入$\beta _t{i}$得到
条件概率
例子
题目仍为前向概率
小节所描述
- $t=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$
- $t=1$时刻的后向概率
1时刻隐藏状态为盒子1的条件下,2为白3为红的概率:
1时刻隐藏状态为盒子2的条件下,2为白3为红的概率:
1时刻隐藏状态为盒子2的条件下,2为白3为红的概率:
最终观测序列$O={ 红, 白, 红 }$ 的概率为: