生成模型,描述由隐藏的马尔科夫链随机生成观测序列的过程。
隐马尔科夫模型
设$Q$是所有可能的状态的集合,$V$是所有的可能的观测的集合。
$$
Q=\{q_1, q_2, \dots, q_N\},V=\{v_1, v_2, \dots, v_M\}
$$
其中$N$是可能的状态数,$M$是可能的观测数。
$I$是长度为$T$的状态序列,$O$是对应的观测序列。
$$
I=\{i_1, i_2, \dots, i_T\},O=\{o_1, o_2, \dots, o_T\}
$$
$A$是状态转移概率矩阵:
$$
A=[a_{ij}]_{N\times N}
$$
其中,$a_{ij}=P(i_{t+1}=q_j | i_t = q_i),i=1,2,\dots,N;j=1,2,\dots,M$是在时刻$t$处于状态$q_i$的条件下在时刻$t+1$转移到状态$q_j$的概率。
$B$是观测概率矩阵:
$$
B=[b_j(k)]_{N\times M}
$$
其中,$n_j(k)=P(o_t=v_k | i_t=q_j),k=1,2,\dots,M;j=1,2,\dots,N$是在时刻$t$处于状态$q_j$的条件下生成观测$v_t$的概率。
$\pi$是初始状态观测的向量:
$$
\pi=(\pi_i)
$$
其中,$\pi_i=P(i_1=q_i),i=1,2,\dots,N$是时刻$t=1$处于状态$q_i$的概率。
隐马尔科夫模型由初始状态概率向量$\pi$、状态转移概率矩阵$A$和观测概率矩阵$B$决定。$\pi$和$A$决定状态序列,$B$决定观测序列。因此,HMM $\lambda$可以由三元组表示:
$$
\lambda = (A,B,\pi)
$$
$A,B,\pi$称为HMM的三要素。
$A,\pi$决定了隐藏的马尔科夫链,生成不可观测的状态序列。$B$决定了如何从状态生成观测,与状态序列综合决定了如何产生观测序列。
从定义可知,HMM作了两个基本的假设:
(1)齐次马尔科夫假设,即假设隐藏的马尔科夫链在任意时刻$t$的状态只依赖于其前一时刻的状态,而与其他时刻的状态无关,也与时刻$t$无关。
$$
P(i_t | i_{t-1}, o_{t-1}, i_{t-2}, o_{t-2}, \dots, i_1, o_1) = P(i_t | i_{t-1}), t=1,2,\dots,T
$$
(2)观测独立性假设,即假设任意时刻的观测只依赖于该时刻的状态,而与其他观测及状态无关。
$$
P(o_t | i_T, o_T, i_{T-1}, o_{T-1}, \dots, i_{t+1}, o_{t+1}, i_t, o_t, i_{t-1}, o_{t-1}, \dots, i_1, o_1) = P(o_t | i_t)
$$
HMM过程
一个长度为$T$的观测序列$O=(o_1,o_2,\dots,o_T)$的生成过程描述如下:
输入:隐马尔科夫模型$\lambda = (A, B, \pi)$,观测序列长度$T$。
输出:观测序列
(1)按照初始状态分布$\pi$产生状态$i_1$
(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,2,\dots,N$
(5)令$t=t+1$,如果$t \lt T$,跳到(3),否则终止。
HMM的三个基本问题
(1)概率计算问题
给定$\lambda = (A,B,\pi)$和观测序列$O=(o_1,o_2,\dots,o_T)$,计算在模型$\lambda$下观测序列$O$出现的概率$P(O|\lambda)$。
(2)学习概率
已知$O$,估计$\lambda$的参数,使$P(O|\lambda)$最大。
(3)预测问题(解码问题)
已知$\lambda$和$O$,求对$P(O|\lambda)$最大的状态序列$I=(i_1,i_2,\dots,i_T)$。
计算观测序列概率的方法
直接计算法
列举所有可能的长度为$T$的状态序列$I=(i_1,i_2,\dots,i_T)$,求各个状态序列$I$与观测序列$O=(o_1,o_2,\dots,o_T)$的联合概率$P(O,I|\lambda)$,然后对所有可能的状态序列求和,得到$P(O|\lambda)$。
状态序列$I=(i_1,i_2,\dots,i_T)$的概率是:
$$
P(O,I|\lambda) = b_{i_1}(o_1) b_{i_2}(o_2) \dots b_{i_T} (o_T)
$$
$O$和$I$同时出现的概率是:
$$
P(O,I | \lambda) = P(O | I, \lambda) P(I|\lambda)=\pi _{i_1}b_{i_1}(o_1) a_{i_1 i_2} b_{i_2}(o_2) a_{i_2 i_3} \dots a_{i_{T-1} i_{T}}b_{i_T}(o_T)
$$
前向算法
定义前向概率:给定HMM $\lambda$,定义到时刻$t$部分观测序列为$o_1,o_2,\dots,o_t$且状态为$q_i$的概率为前向概率,记作:
$$
\alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i | \lambda)
$$
观测序列概率的前向算法:
输入:HMM $\lambda$,观测序列$O$。
输出:观测序列概率$P(O|\lambda)$.
(1)初值
$$
\alpha_1(i) = \pi_i b_i (o_1), i=1,2,\dots, N
$$
(2)递推
对于$t=1,2,\dots,T-1$,
$$
\alpha_{t+1}(i)= \left[ \sum\limits_{j=1}^N \alpha_t(j) a_{ij} \right] b_i(o_{t+1})
$$
(3)终止
$$
P(O|\lambda) = \sum\limits_{i=1}^N \alpha_T(i)
$$
利用了动态规划的思想去计算$P(O|\lambda)$。
后向算法
后向概率:给定HMM $\lambda$,定义在时刻$t$状态为$q_i$的条件下,从$t+1$到$T$的部分观测序列为$o_{t+1},o_{t+2},\dots,o_T$的概率为后向概率,记作:
$$
\beta_t(i) = P(o_{t+1}, o_{t+2}, \dots, o_T | i_t = q_i, \lambda)
$$
可以用递推的方法求得后向概率$\beta_t(i)$及观测序列概率$P(O|\lambda)$.
输入:HMM $\lambda$,观测序列$O$。
输出:观测序列概率$P(O|\lambda)$.
(1)$\beta_T(i) = 1, i=1,2,\dots,N$
(2)对$t=T-1,T-2,\dots,1,$
$$
\beta_t(i)=\sum\limits_{j=1}^N a_{ij} b_j (o_{t+1}) \beta_{t+1} (j), i=1,2,\dots,N
$$
(3)$P(O | \lambda) = \sum\limits_{i=1}^N \pi_i b_i (o_1) \beta_1(i)$
利用前向概率和后向概率的定义,观测序列概率$P(O|\lambda)$可以写成
$$
P(O|\lambda) = \sum\limits_{i=1}^N \sum\limits_{j=1}^N \alpha_t (i) \alpha_{ij} b_j (o_{t+1}) \beta_{t+1} (j), t=1,2,\dots,T-1
$$
给定前向概率和后向概率,可以得到关于单个状态和两个状态概率的计算公式。
- 1 给定模型$\lambda$和观测序列$O$,在时刻$t$处于状态$q_i$的概率,记
$$
\gamma_t(i) = P(i_t = q_i | O, \lambda)
$$
而$\gamma_t(i) = P(i_t = q_i | O, \lambda) = \frac {P(i_t = q_i, O|\lambda)} {P(O|\lambda)}$,$\alpha_t(i) \beta_t(i) = P(i_t = q_i, O | \lambda)$
于是
$$
\gamma_t(i) = \frac{\alpha_t(i) \beta_t(i)}{P(O|\lambda)} = \frac {\alpha_t(i) \beta_t(i)} {\sum\limits_{j=1}^N \alpha_t(j) \beta_t(j)}
$$
- 2 给定模型$\lambda$和观测$O$,在时刻$t$处于状态$q_i$且在时刻$t+1$处于状态$q_j$的概率,记为
$$
\begin{split}
\xi_t (i,j)
= & \frac {P(i_t = q_i, i_{t+1} = q_j, O | \lambda)} {P(O|\lambda)} \\
= & \frac {P(i_t = q_i, i_{t+1} = q_j, O | \lambda)} {\sum\limits_{i=1}^N \sum\limits_{j=1}^N P(i_t = q_i, i_{t+1} = q_j, O | \lambda)}
\end{split}
$$
而$P(i_t = q_i, i_{t+1} = q_j, O | \lambda) = \alpha_t (i) \alpha_{ij} b_j (o_{t+1}) \beta_{t+1} (j)$
于是
$$
\xi_t(i,j) = \frac {\alpha_t (i) \alpha_{ij} b_j (o_{t+1}) \beta_{t+1} (j)} {\sum\limits_{i=1}^N \sum\limits_{j=1}^N \alpha_t (i) \alpha_{ij} b_j (o_{t+1}) \beta_{t+1} (j)}
$$
- 3 (1)在观测$O$下,状态$i$出现的期望值:
$$
\sum\limits_{t=1}^T \gamma_t(i)
$$
(2)在观测$O$下,状态$i$转移的期望值:
$$
\sum\limits_{t=1}^{T-1} \gamma_t(i)
$$
(3)在观测$O$下,由状态$i$转移到状态$j$的期望值:
$$
\sum\limits_{t=1}^{T-1} \xi_t (i,j)
$$
学习算法
监督学习
设已给出的数据包含了$S$个长度相同的观测序列和对应的状态序列$\{ (O_1, I_1), (O_2, I_2), \dots, (O_S, I_S) \}$,则可以使用极大似然估计来估计HMM的参数。
(1)转移概率$a_{ij}$的估计
设样本中时刻$t$处于状态$i$,时刻$t+1$处于状态$j$的样本为$A_{ij}$,则状态转移概率$a_{ij}$的估计是
$$
\hat{a_{ij}} = \frac {A_{ij}} {\sum\limits_{j=1}^N A_{ij}}, i=1,2,\dots,N;j=1,2,\dots,N
$$
(2)观测概率$b_j(k)$的估计
设样本中状态为$j$且观测为$k$的频数是$B_{jk}$,那么状态为$j$观测为$k$的概率$b_j(k)$的估计为
$$
\hat{b_j(k)} = \frac {B_{jk}} {\sum\limits_{k=1}^M B_{jk}},j=1,2,\dots,N;k=1,2,\dots,M
$$
(3)初始状态概率$\pi_i$的估计
$\pi_i$的估计$\hat{\pi_i}$为初始状态$q_i$的频率。
非监督学习
设训练数据包含$S$个长度为$T$的观测序列$\{O_1,O_2,\dots,O_S \}$,目标是学习HMM的参数$\lambda=(A,B,\pi)$。如果将状态序列视为不可观测的隐数据$I$,那么HMM就是一个含有隐变量的概率模型
$$
P(O | \lambda) = \sum _I P(O|I,\lambda) P( I | \lambda )
$$
这样参数的学习就可以通过EM算法实现。
(1)确定完全数据的对数似然函数
所有观测数据写成$O=(o_1,o_2,\dots,o_T)$,所有隐数据写成$I=(i_1,i_2,\dots,i_T)$,完全数据是$(O,I) = (o_1,o_2,\dots,o_T,i_1,i_2,\dots,i_T)$,完全数据的对数似然函数是$\log P(O,I|\lambda)$。
(2)E步:求Q函数 $Q(\lambda, \overline\lambda)$
$$
Q(\lambda, \overline\lambda) = \sum_I \log P(O,I|\lambda) P(O,I|\overline\lambda)
$$
其中。$\overline\lambda$是HMM参数的当前估计值,$\lambda$是要极大化的值。
$$
P(O,I|\lambda) = \pi_{i_1}b_{i_1}(o_1)a_{i_1 i_2}b_{i_2}(o_2)\dots a_{i_{T-1} i_T}b_{i_T}(o_T)
$$
于是Q函数可以写成:
$$
\begin{split}
Q(\lambda, \overline\lambda)
= & \sum_I \log \pi_{i_1}P(O,I|\overline\lambda) \\
& + \sum_I \left( \sum\limits_{t=1}^{T-1} \log a_{i_t} i_{t+1} \right)P(O,I|\overline\lambda) \\
& + \sum_I \left( \sum\limits_{t=1}^T b_{i_t} (o_t) \right)P(O,I|\overline\lambda)
\end{split} \tag{1}
$$
(3) M步:极大化Q函数,求$\lambda$
只需对$(1)$式的3项分别求极大化即可。
- 公式$(1)$的第1项可以写成:
$$
\sum_I \log \pi_{i_1}P(O,I|\overline\lambda) = \sum\limits_{i=1}^N \log \pi_i P(O,i_1=i | \overline\lambda)
$$
存在约束条件
$$
\sum\limits_{i=1}^N \pi_i = 1
$$
利用拉格朗日乘子法,写出拉格朗日函数:
$$
\sum\limits_{i=1}^N \log \pi_i P(O,i_1=i | \overline\lambda) + \gamma \left( \sum\limits_{i=1}^N \pi_i - 1 \right) \tag{2}
$$
求$(2)$式对$\pi_i$的偏导令等于0,得
$$
P(O,i_1=i | \overline\lambda) + \gamma\pi_i = 0, i=1,2,\dots,N \tag{3}
$$
i从1到N,N个公式$(3)$相加,得到
$$
P(O|\overline\lambda) + \gamma = 0
$$
于是
$$
\gamma = -P(O|\overline\lambda)
$$
代回原式,得到
$$
\pi_i = \frac {P(O,i_1=i | \overline\lambda)} {P(O|\overline\lambda)}
$$
- 公式$(1)$的第2项可以写成:
$$
\sum_I \left( \sum\limits_{t=1}^{T-1} \log a_{i_t i_{t+1}} \right)P(O,I | \overline\lambda) = \sum\limits_{i=1}^N \sum\limits_{j=1}^N \sum\limits_{t=1}^{T-1} \log a_{ij} P(O, i_t = i, i_{t+1} = j | \overline\lambda)
$$
存在约束条件:$\sum\limits_{j=1}^N a_{ij} = 1$
利用拉格朗日乘子法可得:
$$
a_{ij} = \frac {\sum\limits_{t=1}^{T-1} P(O, i_t = i, i_{t+1} = j | \overline\lambda)} {\sum\limits_{t=1}^{T-1} P(O, i_t = i | \overline\lambda)}
$$
- 公式$(1)$的第3项可以写成:
$$
\sum_I \left( \sum\limits_{t=1}^T \log b_{i_t}(o_t) \right) P(O, I | \overline\lambda) = \sum\limits_{j=1}^N \sum\limits_{t=1}^T \log b_{i_t}(o_t) P(O, i_t = j | \overline\lambda)
$$
约束条件$\sum\limits_{k=1}^M b_j(k) = 1$
注意到只有在$o_t = v_k$时$b_j(o_t)$对$b_j(k)$的偏导数才不为0,以$I(o_t = v_k)$表示。
由拉格朗日乘子法得:
$$
b_j(k) = \frac {\sum\limits_{t=1}^T P(O, i_t = j | \overline\lambda) I(o_t = v_k)} {\sum\limits_{t=1}^T P(O, i_t = j | \overline\lambda)}
$$
将以上三个结果分别用$\gamma_t(i), \xi_t(i,j)$表示,则有
$$
a_{ij} = \frac{\sum\limits_{t=1}^{T-1} \xi_t (i,j) } { \sum\limits_{t=1}^{T-1} \gamma_t(i) }
$$
$$
b_j(k) = \frac {\sum\limits_{t=0,o_t=v_k}^{T} \gamma_t(j) } {\sum\limits_{t=1}^T \gamma_t(j)}
$$
$$
\pi_i = \gamma_i(i)
$$
以上即为Baum-Welch算法,它是EM算法在HMM中的具体实现。
预测算法
近似算法
在每个时刻$t$选择在该时刻最有可能出现的状态$i_t^{*}$,从而得到一个状态序列$I^{*} = (i_1^{*}, i_2^{*}, \dots, i_T^{*})$,作为预测结果。
给定HMM参数$\lambda$和观测序列$O$,在时刻$t$处于状态$q_i$的概率$\gamma_t(i)$是:
$$
\gamma_t(i) = \frac {\alpha_t(i) \beta_t(i)} {P(O|\lambda)} = \frac {\alpha_t(i) \beta_t(i)} {\sum\limits_{j=1}^N \alpha_t(j) \beta_t(j)}
$$
在每一时刻$t$最有可能的状态$i_t^{*}$是:
$$
i_t^{*} = \arg \max\limits_{1 \le i \le N} \left[ \gamma_t(i) \right],i=1,2,\dots,T
$$
从而得到状态序列$I^{*} = (i_1^{*}, i_2^{*}, \dots, i_T^{*})$。
这种方法计算见到,但是不能保证预测的状态序列整体上是最有可能的状态序列。
维特比算法
用动态规划的思想去求解HMM预测问题。
输入:模型$\lambda = (A,B,\pi)$和观测$O=(o_1,o_2,\dots,o_T)$。
输出:最优路径$I^{*} = (i_1^{*}, i_2^{*}, \dots, i_T^{*})$
- 1 初始化
$$
\delta_1(i) = \pi_i b_i (o_1),i=1,2,\dots,N
$$
$$
\psi_1(i) = 0,i=1,2,\dots,N
$$
- 2 递推
对$t=2,3,\dots,T$
$$
\delta_t(i) = \max\limits_{1 \le j \le N} [\delta_{t-1} a_{ji}] b_i (o_t), i=1,2,\dots,N
$$
$$
\psi_t(i) = \arg \max \limits_{1 \le j \le N} [\delta_{t-1}(j) a_{ji}], i=1,2,\dots,N
$$
- 3 终止
$$
P^{*} = \max \limits_{1 \le i \le N} \delta_T(i)
$$
$$
i^{*} = \arg \max \limits_{1 \le j \le N} [\delta_T(i)]
$$
$\delta$为在时刻$t$状态为$i$的所有单个路径$(i_1,i_2,\dots,i_t)$中概率的最大值.
$$
\delta_t(i) = \max \limits_{i_1,i_2,\dots,i_{t-1}}P(i_t=i,i_{t-1},\dots,i_1,o_t,o_{t-1},\dots,o_1),i=1,2,\dots,N
$$
于是:
$$
\begin{split}
\delta_{t+1}(i)
= & \max \limits_{i_1,i_2,\dots,i_{t-1}} P(i_{t+1}=i,i_{t},\dots,i_1,o_{t+1},o_{t},\dots,o_1) \\
= & \max\limits_{1\le j\le N} [\delta_t(j)a_{ji}] b_i(o_{t+1})
\end{split}
$$
$\psi$为在时刻$t$状态为$i$的所有单个路径$(i_1,i_2,\dots,i_t)$中概率最大的路径的第$t-1$个结点.
$$
\psi_t(i) = \arg \max\limits_{1\le j \le N} [\delta_{t-1}(j)a_{ji}],i=1,2,\dots,N
$$
- 4 最优路径回溯
对$t=T-1,T-2,\dots,1$,
$$
i^{*} = \psi_{t+1}(i_{t+1} ^ {*})
$$
于是最优路径$I^{*} = (i_1^{*}, i_2^{*}, \dots, i_T^{*})$