引言
隐马尔科夫模型是关于时序的概率模型,描述一个隐藏的马尔科夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。隐藏的马尔科夫随机生成的状态序列,称为状态序列(state sequence);每个状态生成一个观测,而由此产生的观测的随机序列(observation sequence).。序列的每一个位置又可以看作一个时刻。
隐马尔科夫模型由初始概率分布、状态转移概率分布以及观测概率分布确定。隐马尔科夫模型形式如下:
设$Q$是所有可能的状态的集合,$V$是所有可能的观测的集合
$$Q={q_1,q_2,…,q_N},V={v_1,v_2,…,v_M}$$
其中,$N$是可能的状态数,$M$是可能的观测数。
$I$是长度为$T$的状态序列,$O$是对应的观测序列。
$$I=(i_1,i_2,…,i_T),O=(o_1,o_2,…,o_T)$$
$A$是状态转移概率矩阵:
$$A=[a_{ij}]{N \times M}$$
其中,$$a{ij}=P(i_{t+1}=q_j|i_t=q_i),i=1,2,…,N;j=1,2,…,N$$
是在时刻$t$处于状态$q_i$条件下载时刻$t+1$转移到状态$q_j$的概率。
B 是观测概率矩阵:$$B=[b_j(k)]_{N \times M}$$
其中,$$b_j(k)=P(o_t=v_k|i_i=q_i),k=1,2,…,M;j=1,2,…,N$$
是在时刻$t$处于状态$q_j$的条件下生产观测$v_k$的概率。
$\pi$是初试状态概率向量:$$\pi=(\pi_i)$$
其中,$$\pi_i=P(i_1=q_i),i=1,2,..,N$$
是时刻$t=1$处于状态$q_i$的概率。
隐马尔科夫模型由初试状态概率向量$\pi$,状态转移概率矩阵$A$和观测概率矩阵$B$决定。$\pi$和$A$决定状态序列,$B$决定观测序列。因此,隐马尔科夫模型$\lambda$可以用三元符号表示,即:$$\lambda=(A,B,\pi)$$
$A,B,\pi$称为隐马尔科夫模型的三要素。
状态转移概率矩阵$A$与初始状态概率向量$\pi$确定了隐藏的马尔科夫链,生成不可观测的状态序列。观测概率矩阵$B$确定了如何从状态生成观测,与状态序列综合确定了如何产生观测序列。
从定义来看,隐马尔科夫模型作了两个基本的假设:
(1) 齐次马尔科夫性的假设,即假设隐藏的马尔科夫链在任意时刻$t$的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻$t$无关:
$$P(i_t|i_{t-1},o_{t-1},…,i_1,o_1)=P(i_t|i_{t-1}),t=1,2,…,T$$
(2) 观测独立性假设,即假设任意时刻的患侧只依赖于该时刻的马尔科夫链的状态,与其他观测状态无关。
$$P(o_t|i_T,o_T,i_{T-1},o_{T-1},…,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},…,i_1,o_1)=P(o_i|i_i)$$
观测序列生成过程过程
根据马尔科夫模型的定义,可以将一个长度为$T$的观测序列$O=(o_1,o_2,…,o_T)$的生成过程描述如下:
算法 观测序列形成
输入:隐马尔科夫模型$\lambda=(A,B,\pi)$,观测序列长度T
输出:观测序列$O=(o_1,o_2,…,o_T)$。
(1) 按照初始状态分布$\pi$产生状态$i_i$
(2) 令$t=1$
(3) 按照状态$i_t$的观测概率分布$b_{i_{t}}(k)$生成$o_t$
(4) 按照状态$i_t$的状态转移概率分布${a_{i_t,i_{t+1}}}$产生状态$i_{t+1}$,$i_{t+1}=1,2,…,N$
(5) 令$t=t+1$;如果$t<T$,转步(3);否则,终止
隐马尔科夫模型的三个基本问题
隐马尔科夫模型有3个基本问题:
(1) 概率计算问题,给定模型$\lambda = (A,B,\pi)$和观测序列$O=(o_1,o_2,…,o_T)$,计算在模型$\lambda$下观测序列$O$出现的概率$P(O|\lambda)$。
(2) 学习问题。已知观测序列$O=(o_1,o_2,…,o_T)$,估计模型$\lambda=(A,B,\pi)$参数,使得在该模型下观测序列概率$P(O|\lambda)$最大,即用极大似然估计的方法来估计参数。
(3)预测问题。也称为解码(decoding)问题。已知模型$\lambda = (A,B,\pi)$和观测序列$O=(o_1,o_2,…,o_T)$,求对给定观测序列条件概率$P(I|O)$最大的状态序列$I=(i_1,i_2,..,i_T)$。即给定观测序列,求最优可能的对应的状态序列
概率计算算法
直接计算法
给定模型$\lambda=(A,B,\pi)$和观测序列$O=(o_1,o_2,…,o_T)$,计算观测序列$O$的概率$P(O|\lambda)$,对所有可能的状态序列$I$求和,得到观测序列$O$的概率$P(O|\lambda)$,即
$$\begin{aligned} P(O|\lambda) &=\sum_I P(O|I,\lambda)P(I\lambda) \newline &= \sum_{i_1,i_2,…,i_T} \pi_{i_{1}}(o_1)a_{i_{1}i_{2}}b_{i_2}(o_{2})…a_{i_{T-1}i_{T}} b_{i_{T}}(o_T) \end{aligned} $$
但是,利用以上的公式会产生很大的计算量,复杂度达到$O(TN^T)$阶的,使用直接计算法不行
那么我们既要采用前向算法或者后向算法
前向算法
待更新
后向算法
待更新
学习算法
监督学习方法
假设已给训练数据包含$S$个长度相同的观测序列和对应的状态序列${(O_1,I_1),(O_2,I_2),…,(O_s,I_s)}$,那么可以利用极大似然估计法来估计隐马尔科夫模型的参数,具体的方法如下:
1.转移概率$a_{ij}$的估计
设样本中时刻$t$处于状态$i$时刻$t+1$转移到状态$j$的频数为$A_{ij}$,那么状态转移概率$a_{ij}$的估计是:
$$a_{ij}=frA_{ij}$$
待更新……
预测算法
待更新……