HMM的参数估计问题:给定一个观察序列 O = O 1 O 2 ⋯ O T O = O_{1} O_{2} \cdots O_{T} O=O1O2⋯OT,计算使 P ( O ∣ μ ) P(O | \mu) P(O∣μ)最大时,模型 μ = ( A , B , π ) \mu = (\mathbf{A}, \mathbf{B}, \mathbf{\pi}) μ=(A,B,π)的参数
μ ^ = arg max μ P ( O training ∣ μ ) \hat{\mu} = \argmax_{\mu} P(O_{\text{training}} | \mu) μ^=μargmaxP(Otraining∣μ)
对于完全情况(complete case),产生观察序列 O O O的状态序列 Q = q 1 q 2 ⋯ q T Q = q_{1} q_{2} \cdots q_{T} Q=q1q2⋯qT已知(完全数据),可通过最大似然估计HMM参数:
π ˉ i = δ ( q 1 , s i ) \bar{\pi}_{i} = \delta(q_{1}, s_{i}) πˉi=δ(q1,si)
a ˉ i j = Q 中从状态 s i 转移到 s j 的次数 Q 中所有从状态 s i 转移到另一状态(包括 s j 自身)的次数 = ∑ t = 1 T − 1 δ ( q t , s i ) δ ( q t + 1 , s j ) ∑ t = 1 T − 1 δ ( q t , s i ) \begin{aligned}\bar{a}_{ij} & = \frac{ Q\text{中从状态}s_{i}\text{转移到}s_{j}\text{的次数} }{ Q\text{中所有从状态}s_{i}\text{转移到另一状态(包括}s_{j}\text{自身)的次数} } \\ & = \frac{ \sum_{t = 1}^{T - 1} \delta(q_{t}, s_{i}) \delta(q_{t + 1}, s_{j}) }{ \sum_{t = 1}^{T - 1} \delta(q_{t}, s_{i}) } \end{aligned} aˉij=Q中所有从状态si转移到另一状态(包括sj自身)的次数Q中从状态si转移到sj的次数=∑t=1T−1δ(qt,si)∑t=1T−1δ(qt,si)δ(qt+1,sj)
b ˉ j ( k ) = Q 中从状态 s j 输出符号 v k 的次数 Q 到达 s j 的次数 = ∑ t = 1 T δ ( q t , s j ) δ ( O t , v k ) ∑ t = 1 T δ ( q t , s j ) \begin{aligned}\bar{b}_{j}(k) & = \frac{ Q\text{中从状态}s_{j}\text{输出符号}v_{k}\text{的次数} }{ Q\text{到达}s_{j}\text{的次数} } \\ & = \frac{ \sum_{t = 1}^{T} \delta(q_{t}, s_{j}) \delta(O_{t}, v_{k}) }{ \sum_{t = 1}^{T} \delta(q_{t}, s_{j}) } \end{aligned} bˉj(k)=Q到达sj的次数Q中从状态sj输出符号vk的次数=∑t=1Tδ(qt,sj)∑t=1Tδ(qt,sj)δ(Ot,vk)
其中, v k v_{k} vk为HMM输出符号集中的第 k k k个符号。 δ ( x , y ) \delta(x, y) δ(x,y)为克罗奈克(Kronecker)函数,
δ ( x , y ) = { 1 , x = y 0 , otherwise \delta(x, y) = \begin{cases} 1, & x = y \\ 0, & \text{otherwise} \end{cases} δ(x,y)={1,0,x=yotherwise
非完全情况(incomplete case),HMM中的状态序列 Q Q Q是无法观察的(隐变量,非完全数据)。
期望最大化(expectation maximization, EM)算法:对含有隐变量的统计模型的参数最大似然估计,其基本思想为:初始时随机地给模型的参数赋值,该赋值遵循模型对参数的限制(例如,从某–状态出发的所有转移概率的和为1),给定模型参数初值后,得到模型 μ 0 \mu_{0} μ0;然后根据 μ 0 \mu_{0} μ0可以得到模型中隐变量的期望值(例如,从 μ 0 \mu_{0} μ0得到从某一状态转移到另一状态的期望次数),用期望值替代方程(6-23)中的实际次数,可以得到模型参数新的估计值,并得到新模型 μ 1 \mu_{1} μ1。根据 μ 1 \mu_{1} μ1,计算模型中隐变量的期望值,然后重新估计模型参数,迭代直至参数收敛于最大似然估计值。这种迭代爬山算法可以使 P ( O ; μ ) P(O; \mu) P(O;μ)局部最大化。
BaumWelch算法(前向后向算法,forward backward algorithm):EM算法的一种具体实现。给定HMM的参数 μ \mu μ和观察序列 O = O 1 O 2 ⋯ O T O = O_{1} O_{2} \cdots O_{T} O=O1O2⋯OT,在 t t t时该位于状态 s i s_{i} si、 t + 1 t + 1 t+1时刻位于状态 s j s_{j} sj的概率 ξ t ( i , j ) = P ( q t = s i , q t + 1 = s j ∣ O ; μ ) \xi_{t}(i, j) = P(q_{t} = s_{i}, q_{t + 1} = s_{j} | O; \mu) ξt(i,j)=P(qt=si,qt+1=sj∣O;μ)( 1 ≤ t ≤ T 1 \leq t \leq T 1≤t≤T、 1 ≤ i , j ≤ N 1 \leq i, j \leq N 1≤i,j≤N)为:
ξ t ( i , j ) = P ( q t = s i , q t + 1 = s j , O ; μ ) P ( O ; μ ) = α t ( i ) a i j b j ( O t + 1 ) β t + 1 ( j ) ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( O t + 1 ) β t + 1 ( j ) (6-24) \begin{aligned} \xi_{t}(i, j) & = \frac{P(q_{t} = s_{i}, q_{t + 1} = s_{j}, O; \mu)}{P(O; \mu)} \\ & = \frac{\alpha_{t}(i) a_{ij} b_{j}(O_{t + 1}) \beta_{t + 1}(j)}{\sum_{i = 1}^{N} \sum_{j = 1}^{N} \alpha_{t}(i) a_{ij} b_{j}(O_{t + 1}) \beta_{t + 1}(j)} \\ \end{aligned} \tag {6-24} ξt(i,j)=P(O;μ)P(qt=si,qt+1=sj,O;μ)=∑i=1N∑j=1Nαt(i)aijbj(Ot+1)βt+1(j)αt(i)aijbj(Ot+1)βt+1(j)(6-24)
给定HMM μ \mu μ和观察序列 O = O 1 O 2 ⋯ O T O = O_{1} O_{2} \cdots O_{T} O=O1O2⋯OT,在 t t t时刻位于状态 s i s_{i} si的概率 γ t ( i ) \gamma_{t}(i) γt(i)为
γ t ( i ) = ∑ j = 1 N ξ t ( i , j ) (6-25) \gamma_{t}(i) = \sum_{j = 1}^{N} \xi_{t}(i, j) \tag {6-25} γt(i)=j=1∑Nξt(i,j)(6-25)
因此, μ \mu μ的参数可重新估计为:
π ˉ i = P ( q 1 = s i ∣ O ; μ ) = γ 1 ( i ) (6-26) \bar{\pi}_{i} = P(q_{1} = s_{i} | O; \mu) = \gamma_{1}(i) \tag {6-26} πˉi=P(q1=si∣O;μ)=γ1(i)(6-26)
a ˉ i j = Q 中从状态 s i 转移到 s j 的期望次数 Q 中所有从状态 s i 转移到另一状态(包括 s j 自身)的期望次数 = ∑ t = 1 T − 1 ξ t ( i , j ) ∑ t = 1 T − 1 γ t ( i ) (6-27) \begin{aligned}\bar{a}_{ij} & = \frac{ Q\text{中从状态}s_{i}\text{转移到}s_{j}\text{的期望次数} }{ Q\text{中所有从状态}s_{i}\text{转移到另一状态(包括}s_{j}\text{自身)的期望次数} } \\ & = \frac{ \sum_{t = 1}^{T - 1} \xi_{t}(i, j) }{ \sum_{t = 1}^{T - 1} \gamma_{t}(i) } \end{aligned} \tag {6-27} aˉij=Q中所有从状态si转移到另一状态(包括sj自身)的期望次数Q中从状态si转移到sj的期望次数=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)(6-27)
b ˉ j ( k ) = Q 中从状态 s j 输出符号 v k 的期望次数 Q 到达 s j 的期望次数 = ∑ t = 1 T γ t ( j ) δ ( O t , v k ) ∑ t = 1 T γ t ( j ) (6-28) \begin{aligned}\bar{b}_{j}(k) & = \frac{ Q\text{中从状态}s_{j}\text{输出符号}v_{k}\text{的期望次数} }{ Q\text{到达}s_{j}\text{的期望次数} } \\ & = \frac{ \sum_{t = 1}^{T} \gamma_{t}(j) \delta(O_{t}, v_{k}) }{ \sum_{t = 1}^{T} \gamma_{t}(j) } \end{aligned} \tag {6-28} bˉj(k)=Q到达sj的期望次数Q中从状态sj输出符号vk的期望次数=∑t=1Tγt(j)∑t=1Tγt(j)δ(Ot,vk)(6-28)
算法6-4(前向后向算法,forward-backward algorithm)
∑ i = 1 N π i = 1 \sum_{i = 1}^{N} \pi_{i} = 1 i=1∑Nπi=1
∑ j = 1 N a i , j = 1 , 1 ≤ i ≤ N \sum_{j = 1}^{N} a_{i, j} = 1, 1 \leq i \leq N j=1∑Nai,j=1,1≤i≤N
∑ k = 1 M b j ( k ) = 1 , 1 ≤ j ≤ N \sum_{k = 1}^{M} b_{j}(k) = 1, 1 \leq j \leq N k=1∑Mbj(k)=1,1≤j≤N
得到模型 μ 0 \mu_{0} μ0。令 i = 0 i = 0 i=0,执行EM估计。
E步骤:由模型 μ i \mu_{i} μi,根据方程(6-24)、(6-25)计算期望值 ξ t ( i , j ) \xi_{t}(i, j) ξt(i,j)和 γ t ( i ) \gamma_{t}(i) γt(i);
M步骤:用E步骤得到的期望值,根据方程(6-26)、(6-27)和(6-28)重新估计参数 π i \pi_{i} πi、 a i j a_{ij} aij、 b j ( k ) b_{j}(k) bj(k)的值,得到模型 μ i + 1 \mu_{i + 1} μi+1。
令 i = i + 1 i = i + 1 i=i+1,重复执行EM计算,直到 π i \pi_{i} πi、 a i j a_{ij} aij、 b j ( k ) b_{j}(k) bj(k)收敛。
实际应用中,多个概率连乘会引起的浮点数下溢问题。在Viterbi算法中,由于只涉及乘法运算和求最大值问题,因此可以对概率相乘取对数运算,将乘法运算转变成加法运算,这样一方面避免能浮点数下溢问题,另一方面能提高运算速度。在前向后向算法中,也经常采用对数运算方法判断参数 π i \pi_{i} πi、 a i j a_{ij} aij、 b j ( k ) b_{j}(k) bj(k)是否收敛:
∣ log P ( O ; μ i + 1 ) − log P ( O ; μ i ) ∣ < ϵ | \log P(O; \mu_{i + 1}) - \log P(O; \mu_{i}) | \lt \epsilon ∣logP(O;μi+1)−logP(O;μi)∣<ϵ
其中, ϵ \epsilon ϵ为一个足够小的正实数。在前向后向算法中,EM计算包含加法,因此无法采用对数运算。此时,可以设置一个辅助的比例系数,将概率值乘以该比例系数以放大概率值,避免浮点数下溢。在每次迭代结束重新估计参数值时,再将比例系数取消。