隐马尔可夫模型:参数估计问题

隐马尔可夫模型:参数估计问题(BaumWelch算法)

HMM的参数估计问题:给定一个观察序列O=O1O2OTO = O_{1} O_{2} \cdots O_{T},计算使P(Oμ)P(O | \mu)最大时,模型μ=(A,B,π)\mu = (\mathbf{A}, \mathbf{B}, \mathbf{\pi})的参数

μ^=arg maxμP(Otrainingμ)\hat{\mu} = \argmax_{\mu} P(O_{\text{training}} | \mu)

对于完全情况(complete case),产生观察序列OO的状态序列Q=q1q2qTQ = q_{1} q_{2} \cdots q_{T}已知(完全数据),可通过最大似然估计HMM参数:

πˉi=δ(q1,si)\bar{\pi}_{i} = \delta(q_{1}, s_{i})

aˉij=Q中从状态si转移到sj的次数Q中所有从状态si转移到另一状态(包括sj自身)的次数=t=1T1δ(qt,si)δ(qt+1,sj)t=1T1δ(qt,si)\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}

bˉj(k)=Q中从状态sj输出符号vk的次数Q到达sj的次数=t=1Tδ(qt,sj)δ(Ot,vk)t=1Tδ(qt,sj)\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}

其中,vkv_{k}为HMM输出符号集中的第kk个符号。δ(x,y)\delta(x, y)为克罗奈克(Kronecker)函数,

δ(x,y)={1,x=y0,otherwise\delta(x, y) = \begin{cases} 1, & x = y \\ 0, & \text{otherwise} \end{cases}

非完全情况(incomplete case),HMM中的状态序列QQ是无法观察的(隐变量,非完全数据)。

期望最大化(expectation maximization, EM)算法:对含有隐变量的统计模型的参数最大似然估计,其基本思想为:初始时随机地给模型的参数赋值,该赋值遵循模型对参数的限制(例如,从某–状态出发的所有转移概率的和为1),给定模型参数初值后,得到模型μ0\mu_{0};然后根据μ0\mu_{0}可以得到模型中隐变量的期望值(例如,从μ0\mu_{0}得到从某一状态转移到另一状态的期望次数),用期望值替代方程(6-23)中的实际次数,可以得到模型参数新的估计值,并得到新模型μ1\mu_{1}。根据μ1\mu_{1},计算模型中隐变量的期望值,然后重新估计模型参数,迭代直至参数收敛于最大似然估计值。这种迭代爬山算法可以使P(O;μ)P(O; \mu)局部最大化。

BaumWelch算法(前向后向算法,forward backward algorithm):EM算法的一种具体实现。给定HMM的参数μ\mu和观察序列O=O1O2OTO = O_{1} O_{2} \cdots O_{T},在tt时该位于状态sis_{i}t+1t + 1时刻位于状态sjs_{j}的概率ξt(i,j)=P(qt=si,qt+1=sjO;μ)\xi_{t}(i, j) = P(q_{t} = s_{i}, q_{t + 1} = s_{j} | O; \mu)1tT1 \leq t \leq T1i,jN1 \leq i, j \leq N)为:

ξt(i,j)=P(qt=si,qt+1=sj,O;μ)P(O;μ)=αt(i)aijbj(Ot+1)βt+1(j)i=1Nj=1Nαt(i)aijbj(Ot+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}

在这里插入图片描述

给定HMMμ\mu和观察序列O=O1O2OTO = O_{1} O_{2} \cdots O_{T},在tt时刻位于状态sis_{i}的概率γt(i)\gamma_{t}(i)

γt(i)=j=1Nξt(i,j)(6-25)\gamma_{t}(i) = \sum_{j = 1}^{N} \xi_{t}(i, j) \tag {6-25}

因此,μ\mu的参数可重新估计为:

πˉi=P(q1=siO;μ)=γ1(i)(6-26)\bar{\pi}_{i} = P(q_{1} = s_{i} | O; \mu) = \gamma_{1}(i) \tag {6-26}

aˉij=Q中从状态si转移到sj的期望次数Q中所有从状态si转移到另一状态(包括sj自身)的期望次数=t=1T1ξt(i,j)t=1T1γ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}

bˉj(k)=Q中从状态sj输出符号vk的期望次数Q到达sj的期望次数=t=1Tγt(j)δ(Ot,vk)t=1Tγ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}

算法6-4(前向后向算法,forward-backward algorithm)

  1. 初始化,随机给参数πi\pi_{i}aija_{ij}bj(k)b_{j}(k)赋值,使其满足如下约束:

i=1Nπi=1\sum_{i = 1}^{N} \pi_{i} = 1

j=1Nai,j=1,1iN\sum_{j = 1}^{N} a_{i, j} = 1, 1 \leq i \leq N

k=1Mbj(k)=1,1jN\sum_{k = 1}^{M} b_{j}(k) = 1, 1 \leq j \leq N

得到模型μ0\mu_{0}。令i=0i = 0,执行EM估计。

  1. EM计算

E步骤:由模型μi\mu_{i},根据方程(6-24)、(6-25)计算期望值ξt(i,j)\xi_{t}(i, j)γt(i)\gamma_{t}(i)

M步骤:用E步骤得到的期望值,根据方程(6-26)、(6-27)和(6-28)重新估计参数πi\pi_{i}aija_{ij}bj(k)b_{j}(k)的值,得到模型μi+1\mu_{i + 1}

  1. 迭代计算

i=i+1i = i + 1,重复执行EM计算,直到πi\pi_{i}aija_{ij}bj(k)b_{j}(k)收敛。

实际应用中,多个概率连乘会引起的浮点数下溢问题。在Viterbi算法中,由于只涉及乘法运算和求最大值问题,因此可以对概率相乘取对数运算,将乘法运算转变成加法运算,这样一方面避免能浮点数下溢问题,另一方面能提高运算速度。在前向后向算法中,也经常采用对数运算方法判断参数πi\pi_{i}aija_{ij}bj(k)b_{j}(k)是否收敛:

logP(O;μi+1)logP(O;μi)<ϵ| \log P(O; \mu_{i + 1}) - \log P(O; \mu_{i}) | \lt \epsilon

其中,ϵ\epsilon为一个足够小的正实数。在前向后向算法中,EM计算包含加法,因此无法采用对数运算。此时,可以设置一个辅助的比例系数,将概率值乘以该比例系数以放大概率值,避免浮点数下溢。在每次迭代结束重新估计参数值时,再将比例系数取消。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章