机器学习之HMM

 

        机器学习最重要的任务,是根据已观测到的数据(如训练样本)对感兴趣的未知变量(如类别标记)进行推断(inference)。概率图模型是用图表达变量相关关系的概率模型,分为“有向无环图模型/贝叶斯网”和“无向图模型/马尔可夫网”两类。

 

 

一、马尔可夫性质

        马尔可夫性质(Markov property)是概率论中的一个概念,当一个随机过程在给定现在状态以及所有过去状态的情况下,其未来状态的条件概率分布仅依赖于当前状态(即在给定当前状态后,过去与未来状态是条件独立的),那么这个随机过程就具有马尔可夫性质,具有马尔可夫性质的过程称为马尔可夫过程。

        应用有马尔可夫链、布朗运动等。

 

二、马尔可夫链

        马尔可夫链(Markov Chain)是指具有马尔可夫性质的离散事件随机过程,在给定当前状态的情况下,该过程中过去的状态对于预测未来的状态是无关的。

        在马尔可夫链的每一步,系统根据概率分布,可以从一个状态变到另一个状态,也可以保持当前状态不变。状态的改变叫做转移,状态改变的相关概率叫做转移概率。

        应用有随机漫步、排队理论建模、马尔可夫链蒙特卡洛方法MCMC、统计学建模、作为信号模型用于熵编码、人口过程、基因预测、谱曲等。

 

三、隐马尔可夫模型

        HMM(Hidden Markov Model)是关于时序的概率模型,属于生成式模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列(state sequence),再由各个状态生成一个观测而产生的观测随机序列(observation sequence)的过程(双重随机过程)。

        应用有语音/行为/模式识别、自然语言处理、生物信息DNA分析、故障诊断等。

     

 

    1、HMM的形式定义

        HMM涉及到的参数有:(隐含)状态序列I、观测序列O、初始(隐含)状态概率向量π、(隐含)状态转移概率矩阵A、观测概率矩阵B。

        (1)设 Q=\left \{ q_{1},q_{2},...,q_{N} \right \}是所有可能的状态集合,V=\left \{ v_{1},v_{2},...,v_{M} \right \}是所有可能的观测集合,N是可能的状态总数,M是可能的观测总数;

        (2)I=\left \{ i_{1},i_{2},...,i_{T} \right \}是长度为T的状态序列,O=\left \{ o_{1},o_{2},...,o_{T} \right \}是对应的观测序列;

        (3)A=[a_{ij}]_{N*N} 是状态转移概率矩阵,其中 a_{ij}=P(i_{t+1}=q_{j}|i_{t}=q_{i})i,j=1,2,...,N 是在时刻t处于状态 q_{i} 的条件下,在时刻t+1转移到状态 q_{j} 的概率。

        (4)B=[b_{i}(k)]_{N*M} 是观测概率矩阵,其中 b_{i}(k)=P(o_{t}=v_{k}|i_{t}=q_{i})k=1,2,...,Mi=1,2,...,N 是在时刻t处于状态 q_{i} 的条件下生成观测 v_{k} 的概率。

        (5)\pi =[\pi _{i}]_{1*N} 是初始状态概率向量,其中 \pi _{i}=P(i_{1}=q_{i}),i=1,2,...,N 是在时刻t=1处于状态 q_{i} 的概率。

        π和A决定了状态序列、B决定观测序列,因此HMM可以使用三要素表示:λ=(A,B,π)。

 

    2、HMM的观测序列生成过程

        已知HMM模型λ,观测序列长度为T,则观测序列O的生成过程:

        (1)由初始状态分布π产生状态 i_{1}

        (2)令t=1

        (3)按照状态it的观测概率分布 b_{i_{t}}(k) 生成 o_{t}

        (4)按照状态的状态转移概率分布 a_{i_{t}i_{t+1}} 产生状态 i_{t+1}

        (5)令t=t+1,如果t<T,转到(3);否则终止生成并输出O。

 

3、HMM的两个基本假设:

        (1)齐次马尔可夫性假设

        假设隐藏的马尔可夫链在任意t时刻的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关:

                    P(i_{t}|i_{t-1},o_{t-1},i_{t-2},o_{t-2},...,i_{1},o_{1})=P(i_{t}|i_{t-1})

        (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_{t}|i_{t})

 

    4、HMM的3个基本问题

        (1)概率计算问题:求P(O|λ)

        给定模型λ,计算其生成的观测序列O的概率P(O|λ),即评估模型与观测序列之间的匹配程度。

        (2)学习问题:求λ

        给定观测序列O,调整模型λ的参数(MLE),使得在该模型下观测序列出现的概率P(O|λ)最大;

        即训练模型使其能够更好地描述观测数据。

        (3)预测问题(decoding):求I

        给定模型λ和观测序列O,求使观测序列条件概率P(I|O)最大的状态序列I,即根据观测序列推断最匹配的状态序列。

 

四、概率计算问题

    1、直接计算法(brute)

        给定模型λ,计算其生成的观测序列O的概率P(O|λ)。最直接的方式是按照概率公式,列举所有可能的长度为T的状态序列 I=\left \{ i_{1},i_{2},...,i_{T} \right \},求状态序列I与观测序列 O=\left \{ o_{1},o_{2},...,o_{T} \right \} 的联合概率P(I,O|λ),然后对所有可能的状态序列求和(边际化marginalization),从而得到最终的概率P(O|λ)。

        P(I|\lambda)=\pi _{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}...a_{i_{T-1}i_{T}}

        P(O|I,\lambda)=b_{i_{1}}(o_{1})b_{i_{2}}(o_{2})...b_{i_{T}}(o_{T})

        P(O,I|\lambda)=P(O|I,\lambda)P(I|\lambda)=\pi _{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}...a_{i_{T-1}i_{T}}b_{i_{1}}(o_{1})b_{i_{2}}(o_{2})...b_{i_{T}}(o_{T})

        P(O|\lambda)=\sum _{I}P(O|I,\lambda)P(I|\lambda)=\sum _{i_{1},i_{2},...,i_{T}}\pi _{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}...a_{i_{T-1}i_{T}}b_{i_{1}}(o_{1})b_{i_{2}}(o_{2})...b_{i_{T}}(o_{T})

        这种算法的计算量很大 O(TN^{T}),概念上可解但实际应用中不可行。

 

    2、前向算法

        前向概率指的是给定模型λ,定义到时刻t部分的观测序列为 o_{1},o_{2},...,o_{t},且状态为 q_{i} 的概率为前向概率,记作:

        

        前向算法

        (1)初始化前向概率,是初始时刻的状态 i_{1} 和观测 o_{1} 的联合概率。对状态所有的取值总数 i=1,2,...,N 有:

                \alpha _{1}(i)=P(o_{1},i_{1}=q_{i}|\lambda)=\pi_{i}b_{i}(o_{1})

        (2)前向递推,设 \alpha _{t}(i) 是时刻t观测到 o_{1},o_{2},...,o_{t} 且此时处于 q_{i} 状态的前向概率;计算 a_{ij}\alpha _{t}(i) 就是时刻t观测到o1,o2,...,ot且此时处于 q_{i} 状态而在时刻t+1转移到状态 q_{j} 的联合概率,对其在时刻t所有可能的N个状态求和再乘以观测概率:

                \alpha _{t+1}(j)=b_{j}(o_{t+1})\sum_{i=1}^{N}\alpha _{t}(i)a_{ij}

        (3)将状态对应的概率求和消去,即可得到O的边缘概率:

                \alpha _{T}(i)=P(o_{1},o_{2},...,o_{T},i_{T}=q_{i}|\lambda)

                P(O|\lambda)=\sum_{i=1}^{N}\alpha _{T}(i)

        前向概率的计算量为 O(N^{2}T) ,减少计算量的原因在于每一次计算直接引用前一个时刻的计算结果,避免了重复计算。

 

    3、后向算法

        后向概率指的是给定模型λ,定义在时刻t状态为 q_{i} 的条件下,从t+1到T的部分观测序列为 o_{t+1},o_{t+2},...,o_{T} 的概率为后向概率,记作:

                

        后向算法

        (1)初始化后向概率,对最终时刻T的所有状态,i=1,2,...,N有:

                \beta _{T}(i)=1

        (2)后向递推,在时刻t+1所有可能的N个状态 q_{j} 的转移概率 a_{ij},乘以此状态下的观测概率 b_{j}(o_{t+1}),再乘以状态 q_{j} 之后的后向概率 \beta _{t+1}(j) 即可得到t时刻t状态为 q_{i} 的后向概率。对 t=T-1,T-2,...,1i=1,2,...,N,有:

                \beta _{t}(i)=\sum _{j=1}^{N}a_{ij}b_{j}(o_{t+1})\beta _{t+1}(j)

        (3)将状态对应的概率求和消去,即可得到O的边缘概率:

                P(O|\lambda )=\sum_{i=1}^{N}\pi_{i}b_{i}(o_{1})\beta_{1}(i)

    利用前向概率和后向概率的定义可以将观测序列P(O|λ)统一写成:

                P(O|\lambda )=\sum_{i=1}^{N} \sum_{j=1}^{N}\alpha _{t}(i)a_{ij}b_{j}(o_{t+1})\beta_{t+1}(j)

 

    4、单个状态的概率

        给定模型λ和观测序列O,在时刻t处于状态 q_{i} 的概率记为 \gamma _{t}(i)

                \gamma _{t}(i)=P(i_{t}=q_{i}|O,\lambda )=\frac{P(i_{t}=q_{i},O|\lambda)}{P(O|\lambda)}

        由前向、后向概率的定义可知:

                P(i_{t}=q_{i},O|\lambda)=\alpha _{t}(i)\beta _{t}(i)

        于是得到:

                \gamma _{t}(i)=\frac{\alpha _{t}(i)\beta _{t}(i)}{\sum_{j=1}^{N}\alpha _{t}(j)\beta _{t}(j)}

        单个状态概率的意义在于判断每个时刻最可能存在的状态,从而可以得到一个状态序列作为最终的预测结果。

 

    5、两个状态的联合概率

        给定模型λ和观测序列O,在时刻t处于状态 q_{i} 且在时刻t+1处于状态 q_{j} 的概率记为 \xi _{t}(i,j)

                \xi _{t}(i,j)=P(i_{t}=q_{i},i_{t+1}=q_{j}|O,\lambda)\\\\=\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_{i,j=1}^{N}P(i_{t}=q_{i},i_{t+1}=q_{j},O|\lambda)}\\\\\\=\frac{\alpha _{t}(i)a_{ij}b_{j}(o_{t+1})\beta_{t+1}(j)}{\sum_{i,j=1}^{N}\alpha _{t}(i)a_{ij}b_{j}(o_{t+1})\beta_{t+1}(j)}

 

    6、将 \gamma _{t}(i)\xi _{t}(i,j) 对各个时刻t求和,可以得到一些有用的期望值

        (1)在观测O下状态i出现的期望值:\sum_{t=1}^{T}\gamma _{t}(i)

        (2)在观测O下由状态i转移的期望值:\sum_{t=1}^{T-1}\gamma _{t}(i)

        (3)在观测O下由状态i转移到状态j的期望值:\sum_{t=1}^{T-1}\xi _{t}(i,j)

 

五、学习问题

        HMM的学习问题,根据训练数据是否包含状态序列分两类:若包含O和I,则可用监督学习算法实现;若只包含O,则需要用非监督学习算法Baum-Welch(EM)算法求解。

    1、监督学习方法

        由大数定理结论‘频率的极限是概率’直接得出HMM的参数估计。

        (1)设时刻t处于状态i、时刻t+1转移到状态j的频数为 A_{ij},则状态转移概率 a_{ij} 的估计为:

                \hat{a}_{ij}=\frac{A_{ij}}{\sum_{j=1}^{N}A_{ij}}\; \; \; \; i=1,2,...,N;\; j=1,2,...,N

        (2)设样本中状态为j且观测为k的频数是 B_{jk},则观测概率 b_{j}(k) 的估计为:

                \hat{b}_{j}(k)=\frac{B_{jk}}{\sum_{k=1}^{M}B_{jk}}\; \; \; \; j=1,2,...,N;\; k=1,2,...,M

        (3)初始状态概率 \pi _{i} 的估计为样本总数中初始状态为 q_{i} 的频率。

 

    2、非监督学习方法(Baum-Welch算法)

        给定观测数据O,状态序列I未知,则HMM为含有隐变量的概率模型 P(O|\lambda )=\sum_{I}P(O|I,\lambda)P(I|\lambda),然后用EM算法进行参数估计。步骤如下:

        (1)确定完全数据(O,I)的对数似然函数

                (O,I)=(o_{1},o_{2},...,o_{T},i_{1},i_{2},...,i_{T}),它的对数似然函数是lnP(O,I|λ)

        (2)E步求Q函数

                Q(\lambda ,\bar{\lambda} )=\sum _{I}P(I|O,\lambda )logP(O,I|\lambda )\\\\=\sum _{I}\frac{P(O,I|\bar{\lambda} )}{P(O|\bar{\lambda} )}logP(O,I|\lambda)\\\\\propto \sum _{I}P(O,I|\bar{\lambda} )logP(O,I|\lambda)

                其中,\bar{\lambda }是HMM参数的当前估计值,需要将其极大化。

                \because P(O,I|\lambda)=\pi _{i_{1}}a_{i_{1}i_{2}}a_{i_{2}i_{3}}...a_{i_{T-1}i_{T}}b_{i_{1}}(o_{1})b_{i_{2}}(o_{2})...b_{i_{T}}(o_{T})

                \therefore Q(\lambda |\bar{\lambda} )=\sum _{I}P(O,I|\bar{\lambda})\ln\pi_{i_{1}}+\sum _{I}P(O,I|\bar{\lambda})\sum_{t=1}^{T-1}\ln a_{i_{t}i_{t+1}}+\sum _{I}P(O,I|\bar{\lambda})\sum _{t=1}^{T}\ln b_{i_{t}}(o_{t})

        (3)M步极大化Q函数,使用Lagrange乘子法分别求π、A、B的值:

                \sum _{I}P(O,I|\bar{\lambda})\ln\pi_{I}=\sum_{i=1}^{N}P(O,i_{1}=i|\bar{\lambda })\ln\pi_{i}

                l(\pi_{i})=\sum_{i=1}^{N}P(O,i_{1}=i|\bar{\lambda })\ln \pi_{i}+\varphi \left ( \sum_{i=1}^{N}\ln \pi_{i}-1 \right )

                \frac{\partial l(\pi_{i})}{\partial \pi_{i}}=0\Rightarrow P(O,i_{1}=i|\bar{\lambda })+\varphi \pi_{i}=0

                对i求和消去i,可得:\varphi =-P(O|\bar{\lambda })

                \therefore \pi _{i}=\frac{P(O,i_{1}=i|\bar{\lambda })}{P(O|\bar{\lambda })}=\gamma _{1}(i)

 

                \sum _{I}P(O,I|\bar{\lambda})\sum_{t=1}^{T-1}\ln a_{i_{t}i_{t+1}}=\sum _{i=1}^{N}\sum_{j=1}^{N}\sum_{t=1}^{T-1}P(O,i_{t}=i,i_{t+1}=j|\bar{\lambda })\ln a_{ij}

                l(a_{ij})=\sum _{i=1}^{N}\sum_{j=1}^{N}\sum_{t=1}^{T-1}P(O,i_{t}=i,i_{t+1}=j|\bar{\lambda })\ln a_{ij}+\tau \left ( \sum _{i=1}^{N}\sum_{j=1}^{N}a_{ij}-N \right )

                \frac{\partial l(a_{ij})}{\partial a_{ij}}=0\Rightarrow \sum_{t=1}^{T-1}P(O,i_{t}=i,i_{t+1}=j|\bar{\lambda })+\tau a_{ij}=0

                对i、j求和消去i、j,可得:\tau =\sum_{t=1}^{T-1}P(O,i_{t}=i,|\bar{\lambda })

                \therefore a_{ij}=\frac{\sum_{t=1}^{T-1}P(O,i_{t}=i,i_{t+1}=j|\bar{\lambda })}{\sum_{t=1}^{T-1}P(O,i_{t}=i|\bar{\lambda })}= \frac{\sum_{t-1}^{T}\xi _{t}(i,j)}{\sum_{t-1}^{T}\gamma _{t}(i)}

                

                \sum _{I}P(O,I|\bar{\lambda})\sum _{t=1}^{T}\ln b_{i_{t}}(o_{t})=\sum_{j=1}^{N}\sum_{t=1}^{T}P(O,i_{t}=j|\bar{\lambda})\ln b_{j}(o_{t})

                l(b_{j}(o_{t}))=\sum_{j=1}^{N}\sum_{t=1}^{T}P(O,i_{t}=j|\bar{\lambda})\ln b_{j}(o_{t})+\eta \left ( \sum_{j=1}^{N}\sum_{k=1}^{M}b_{j}(o_{t}=v_{k})-M \right )

                \frac{\partial l(b_{j}(o_{t}))}{\partial b_{j}(o_{t})}=0\Rightarrow \sum_{j=1}^{N}\sum_{t=1}^{T}P(O,i_{t}=j|\bar{\lambda})+\eta b_{j}(o_{t})=0

                对j、k求和消去j、k,可得:\eta =\sum_{t=1}^{T-1}P(O,i_{t}=j,|\bar{\lambda })

                \therefore b_{j}(k)=\frac{\sum_{t=1}^{T}P(O,i_{t}=j|\bar{\lambda})I(o_{t}=v_{k})}{\sum_{t=1}^{T}P(O,i_{t}=j|\bar{\lambda})}=\frac{\sum_{t=1,o_{t}=v_{k}}^{T}\gamma _{t}(j)}{\sum_{t=1}^{T}\gamma _{t}(j)}

    Baum-Welch算法流程:

        给定观测序列 O=\left \{ o_{1},o_{2},...,o_{T} \right \}

        随机初始化 a_{ij}^{(0)}b_{j}(k)^{(0)}\pi_{i}^{(0)},得到模型 \lambda ^{(0)}=(\pi ^{(0)},A^{(0)},B^{(0)})

        对每个样本使用前向后向算法求出 \gamma _{t}(i)\xi _{t}(i,j)

        更新模型参数 a_{ij}^{(n)}b_{j}(k)^{(n)}\pi_{i}^{(n)}

        如果参数收敛则停止,否则继续迭代。

 

六、预测问题

        HMM的预测问题是给定模型λ和观测序列O,求最可能的状态序列,主要包含近似算法和Viterbi算法两种。

    1、近似算法

        将每个时刻t最有可能出现的状态 i_{t}^{*} 合并成为最终要预测的状态序列 I^{*}=\left \{ i_{1}^{*},i_{2}^{*},...,i_{T}^{*} \right \}。在时刻t处于状态 q_{i} 的最大概率为:

                \gamma _{t}(i)=\frac{\alpha _{t}(i)\beta _{t}(i)}{P(O|\lambda)}=\frac{\alpha _{t}(i)\beta _{t}(i)}{\sum_{j=1}^{N}\alpha _{t}(j)\beta _{t}(j)}

                i_{t}^{*}=\arg \max _{1\leqslant i\leqslant N}[\gamma _{t}(i)]

        近似算法的优点是计算简单,缺点是不能保证预测的I*是最有可能的I,因为I*可能有实际不发生的部分。

 

    2、Viterbi算法

        使用动态规划(dynamic programming)的思路求出概率最大的路径(最优路径),一条路径对应一个状态序列。递推计算时刻 t=1,2,...,T 状态为i的所有单个路径 (i_{1},i_{2},...,i_{t}) 中概率值最大的一个为 \delta _{t}(i),对应的终结点为 i_{T}^{*}。从后向前逐步求得结点 i_{T-1}^{*},...,i_{1}^{*}\Psi _{t}(i)),即可得到最优路径 I^{*}=( i_{1}^{*},i_{2}^{*},...,i_{T}^{*})

                \delta _{t}(i)=\max_{i_{1},i_{2},...,i_{t-1}}P(i_{t}=i,i_{t-1},...,i_{1},o_{t},...,o_{1}|\lambda)

                \Psi _{t}(i)=\arg\max_{1\leqslant j\leqslant N}[\delta _{t-1}(j)a_{ji}]

    Viterbi算法流程:

        给定模型λ=(A,B,π)和观测序列 O=\left \{ o_{1},o_{2},...,o_{T} \right \}

        (1)初始化,i=1,2,...,N

                \delta _{1}(i)=\pi_{i}b_{i}(o_{1})

                \Psi _{1}(i)=0

        (2)递推

                \delta _{t}(i)=\max_{i_{1},i_{2},...,i_{t-1}}P(i_{t}=i,i_{t-1},...,i_{1},o_{t},...,o_{1}|\lambda)=\max_{1\leqslant j\leqslant N}[\delta _{t-1}(j)a_{ji}]b_{i}(o_{t})

                \Psi _{t}(i)=\arg\max_{1\leqslant j\leqslant N}[\delta _{t-1}(j)a_{ji}]

        (3)终止

                P^{*}=\max_{1\leqslant i\leqslant N}\delta _{T}(i)

                i_{T}^{*}=\arg\max_{1\leqslant i\leqslant N}[\delta _{T}(i)]

        (4)回溯求得最优路径

                i_{t}^{*}=\Psi _{t+1}(i_{t+1}^{*})

                I^{*}=( i_{1}^{*},i_{2}^{*},...,i_{T}^{*})

 

参考资料:

《统计学习方法》、《机器学习——周志华》等

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值