理解隐马尔可夫模型

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。

书的购买链接
书的勘误,优化,源代码资源

在这里插入图片描述

作者简介:SIGAI人工智能平台

全文PDF下载:http://www.tensorinfinity.com/paper_99.html

隐马尔可夫模型(Hidden Markov Model,简称HMM)由Baum等人在1966年提出[1],是一种概率图模型,用于解决序列预测问题,可以对序列数据中的上下文信息建模。所谓概率图模型,指用图为相互依赖的一组随机变量进行建模,图的顶点为随机变量,边为变量之间的概率关系。

在隐马尔可夫模型中,有两种类型的节点,分别为观测值序列与状态值序列,后者是不可见的,它们的值需要通过从观测值序列进行推断而得到。很多现实应用可以抽象为此类问题,如语音识别,自然语言处理中的分词、词性标注,计算机视觉中的动作识别。隐马尔可夫模型在这些问题中得到了成功的应用。本文作为已经出版的《机器学习与应用》,清华大学出版社,雷明著第16章“循环神经网络”中隐马尔可夫模型一节的扩充,已经被独立成一章,在第二版中出版。为降低阅读与理解难度,本文尽量不过多涉及概率图模型的概念,而是从序列建模的角度对HMM进行解释。

马尔可夫过程与马尔可夫模型

马尔可夫过程是随机过程的典型代表。所谓随机过程,是指一个系统的状态随着时间线随机的演化。这种模型可以计算出系统每一时刻处于各种状态的概率以及这些状态之间的转移概率。首先定义状态的概念,在 t t t时刻系统的状态为 z t z_t zt,在这里是一个离散型随机变量,取值来自一个有限集
S = { s 1 , . . . , s n } S=\left \{ s_{1},...,s_{n} \right \} S={s1,...,sn}
例如我们要为天气进行建模,需观察每一天的天气,则状态集为
S = { 晴 天 , 阴 天 , 雨 天 } S=\left \{ 晴天,阴天,雨天 \right \} S={}
为简化表示,将状态用整数编号,可以写成
S = { 1 , 2 , 3 } S=\left \{ 1,2,3 \right \} S={1,2,3}
1 1 1时刻开始到 T T T时刻为止,系统所有时刻的状态值构成一个随机变量序列
Z = { z 1 , . . . , z T } Z=\left \{ z_{1},...,z_{T} \right \} Z={z1,...,zT}
系统在不同时刻可以处于同一种状态,但在任一时刻只能有一种状态。不同时刻的状态之间是有关系的。例如,如果今天是阴天,明天下雨的可能性会更大,在时刻 t t t的状态由它之前时刻的状态决定,可以表示为如下的条件概率
p ( z t ∣ z t − 1 , . . . , z 1 ) p\left ( z_{t}\mid z_{t-1},...,z_{1} \right ) p(ztzt1,...,z1)
即在从 1 1 1 t − 1 t-1 t1时刻系统的状态值分别为 z 1 , ⋯   , z t − 1 z_1,\cdots ,z_{t-1} z1,,zt1的前提下,时刻 t t t系统的状态为 z t z_t zt的概率。如果要考虑之前所有时刻的状态计算太复杂。为此进行简化,假设 t t t时刻的状态只与 t − 1 t-1 t1时刻的状态有关,与更早的时刻无关,即忘记了更早的信息。上面的概率可以简化为
p ( z t ∣ z t − 1 , . . . , z 1 ) = p ( z t ∣ z t − 1 ) p\left ( z_{t}\mid z_{t-1},...,z_{1} \right )=p\left ( z_{t}\mid z_{t-1} \right ) p(ztzt1,...,z1)=p(ztzt1)
该假设称为一阶马尔可夫假设,满足这一假设的马尔可夫模型称为一阶马尔可夫模型。如果状态有 n n n种取值,在 t t t时刻取任何一个值与 t − 1 t-1 t1时刻取任何一个值的条件概率构成一个 n × n n \times n n×n的矩阵 A A A,称为状态转移概率矩阵,其元素为
a i j = p ( z t = j ∣ z t − 1 = i ) a_{ij}=p\left ( z_{t}=j\mid z_{t-1}=i \right ) aij=p(zt=jzt1=i)
该值表示 t − 1 t-1 t1时刻的状态为 i i i,时刻的状态为 j j j,即从状态 i i i转移到状态 j j j的概率。如果知道了状态转移矩阵,就可以计算出任意时刻系统状态取每个值的概率。状态转移概率矩阵的元素必须满足如下约束:
a i j ≥ 0 ∑ j = 1 n a i j = 1 \begin{aligned} a_{ij} &\geq 0 \\ \sum_{j=1}^{n}a_{ij} &= 1 \end{aligned} aijj=1naij0=1
第一条是因为概率值必须在 [ 0 , 1 ] \left [ 0,1 \right ] [01]之间,第二条是因为无论 t t t时刻的状态值是什么,在下一个时刻一定会转向 n n n个状态中的一个,因此它们的转移概率和必须为 1 1 1。以天气为例,假设状态转移矩阵为
[ 0.7 0.2 0.1 0.4 0.5 0.1 0.3 0.4 0.3 ] \begin{bmatrix} 0.7 & 0.2 & 0.1\\ 0.4 & 0.5 & 0.1\\ 0.3 & 0.4 & 0.3 \end{bmatrix} 0.70.40.30.20.50.40.10.10.3
其对应的状态转移图(状态机)如下图所示,图中每个顶点表示状态,边表示状态转移概率,是有向图
在这里插入图片描述
有一个需要考虑的问题是系统初始时刻处于何种状态,这同样是随机的,可以用向量 π \pi π表示。以天气为例,假设初始时处于晴天的概率是 0.5 0.5 0.5,处于阴天的概率是 0.4 0.4 0.4,处于雨天的概率是 0.1 0.1 0.1,则 π \pi π
[ 0.5 0.4 0.1 ] \begin{bmatrix} 0.5 & 0.4 & 0.1 \end{bmatrix} [0.50.40.1]
为简化表述,引入一个特殊的状态 s 0 s_0 s0消掉 π \pi π,该状态的编号为 0 0 0。它是系统初始时所处的状态,即 z 0 = s 0 z_0=s_0 z0=s0,在接下来的时刻从它转向其他状态,但在后续任何时刻都不会再进入此状态。加入初始状态之后,对状态转移矩阵也进行扩充,行和列的下标变为从 0 0 0开始。以天气问题为例,扩充后的状态转移矩阵为
[ 0 0.5 0.4 0.1 0 0.7 0.2 0.1 0 0.4 0.2 0.1 0 0.3 0.4 0.3 ] \begin{bmatrix} 0 & 0.5 & 0.4 &0.1 \\ 0 & 0.7& 0.2 & 0.1\\ 0 & 0.4 & 0.2 &0.1 \\ 0 & 0.3 &0.4 & 0.3 \end{bmatrix} 00000.50.70.40.30.40.20.20.40.10.10.10.3
给定一阶马尔可夫过程的参数,由该模型产生一个状态序列 z 1 , ⋯   , z T z_1,\cdots,z_T z1,,zT的概率为
p ( z 1 , . . . , z T ) = p ( z t ∣ z 1 , . . . , z t − 1 ) p ( z t − 1 ∣ z 1 , . . . , z t − 2 ) . . . = p ( z t ∣ z t − 1 ) p ( z t − 1 ∣ z t − 2 ) . . . = ∏ t = 1 T a z t z t − 1 \begin{aligned} p(z_{1},...,z_{T}) &=p\left ( z_{t}\mid z_{1},...,z_{t-1} \right )p\left ( z_{t-1}\mid z_{1},...,z_{t-2} \right )... \\ &=p\left ( z_{t}\mid z_{t-1} \right )p\left ( z_{t-1}\mid z_{t-2} \right ) ...\\ &= \prod_{t=1}^{T}a_{z_{t}z_{t-1}} \end{aligned} p(z1,...,zT)=p(ztz1,...,zt1)p(zt1z1,...,zt2)...=p(ztzt1)p(zt1zt2)...=t=1Taztzt1
结果就是状态转移矩阵的元素乘积。在这里假设任何一个时刻的状态转移矩阵都是相同的,即状态转移矩阵与时刻无关。

对于上面的天气问题,连续3天全部为晴天的概率为
p ( z 1 = 1 , z 2 = 1 , z 3 = 1 ) = p ( z 1 = 1 ∣ z 0 ) p ( z 2 = 1 ∣ z 1 = 1 ) p ( z 3 = 1 ∣ z 2 = 1 ) = a 01 × a 11 × a 11 = 0.5 × 0.7 × 0.7 = 0.245 \begin{aligned} &p\left ( z_{1}=1,z_{2}=1,z_{3}=1 \right )\\ &= p\left ( z_{1}=1\mid z_{0} \right )p\left ( z_{2}=1\mid z_{1}=1 \right )p\left ( z_{3}=1\mid z_{2}=1 \right )\\ &= a_{01}\times a_{11}\times a_{11}\\ &= 0.5\times 0.7\times 0.7\\ &= 0.245 \end{aligned} p(z1=1,z2=1,z3=1)=p(z1=1z0)p(z2=1z1=1)p(z3=1z2=1)=a01×a11×a11=0.5×0.7×0.7=0.245
状态转移矩阵通过训练样本学习得到,采用最大似然估计。给定一个状态序列 z z z,马尔可夫过程的对数似然函数为
L ( A ) = ln ⁡ p ( z ; A ) = ln ⁡ ∏ t = 1 T a z t − 1    z t = ∑ t = 1 T ln ⁡ a z t − 1    z t = ∑ i = 1 n ∑ j = 1 n ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } ln ⁡ a i j \begin{aligned} L(A) &=\ln p(z;A) \\ &= \ln \prod_{t=1}^{T}a_{z_{t-1}\; z_{t}}\\ &=\sum_{t=1}^{T} \ln a_{z_{t-1}\; z_{t}}\\ &=\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}\ln a_{ij} \end{aligned} L(A)=lnp(z;A)=lnt=1Tazt1zt=t=1Tlnazt1zt=i=1nj=1nt=1T1{zt1=izt=j}lnaij
这里使用了指示变量来方便表述。因为状态转移矩阵要满足上面的两条约束,因此要求解的是如下带约束的最优化问题
m a x A L ( A ) ∑ j = 1 n a i j = 1 , i = 1 , . . . , n a i j ≥ 0 , i . j = 1 , . . . , n \begin{aligned} max_{A}L(A) \\ \sum_{j=1}^{n}a_{ij}&=1,i=1,...,n \\ a_{ij}\geq 0,i.j&=1,...,n \end{aligned} maxAL(A)j=1naijaij0,i.j=1,i=1,...,n=1,...,n
由于对数函数的定义域要求自变量大于 0 0 0,因此可以去掉不等式约束,上面的最优化问题变成带等式约束的优化问题,可以用拉格朗日乘数法求解。构造拉格朗日乘子函数
L ( A , α ) = ∑ i = 1 n ∑ j = 1 n ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } ln ⁡ a i j + ∑ i = 1 n α i ( 1 − ∑ j = 1 n a i j ) L(A,\alpha )=\sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}\ln a_{ij}+\sum_{i=1}^{n}\alpha _{i}\left ( 1-\sum_{j=1}^{n}a_{ij} \right ) L(A,α)=i=1nj=1nt=1T1{zt1=izt=j}lnaij+i=1nαi(1j=1naij)
对求偏导数并令导数为 0 0 0,可以到得
∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } a i j = α i \frac{\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}}{a_{ij}}=\alpha _{i} aijt=1T1{zt1=izt=j}=αi
解得
a i j = 1 α i ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } a_{ij}=\frac{1}{\alpha _{i}}\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \} aij=αi1t=1T1{zt1=izt=j}
a i a_i ai求偏导数并令导数为 0 0 0,可以得到
1 − ∑ j = 1 n a i j = 0 1-\sum_{j=1}^{n}a_{ij}=0 1j=1naij=0
a i j a_{ij} aij代入上式可以得到
1 − ∑ j = 1 n ( 1 α i ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } ) = 0 1-\sum_{j=1}^{n}\left ( \frac{1}{\alpha _{i}}\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \} \right )=0 1j=1n(αi1t=1T1{zt1=izt=j})=0
解得
α i = ∑ j = 1 n ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } = ∑ t = 1 T 1 { z t − 1 = i } \alpha _{i}=\sum_{j=1}^{n}\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}=\sum_{t=1}^{T}1\left \{ z_{t-1}=i \right \} αi=j=1nt=1T1{zt1=izt=j}=t=1T1{zt1=i}
合并后得到下面的结果
a i j = ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } ∑ t = 1 T 1 { z t − 1 = i } a_{ij}=\frac{\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}}{\sum_{t=1}^{T}1\left \{ z_{t-1}=i \right \}} aij=t=1T1{zt1=i}t=1T1{zt1=izt=j}
这一结果也符合我们的直观认识:从状态 i i i转移到状态 j j j的概率估计值就是在训练样本中,从状态 i i i转移到状态 j j j的次数除以从状态 i i i转移到下一个状态的总次数。对于多个状态序列,方法与单个状态序列相同。

隐马尔可夫模型

在实际应用中,有些时候我们不能直接观察到状态的值,即状态的值是隐含的,只能得到观测的值。为此对马尔可夫模型进行扩充,得到隐马尔可夫模型。

隐马尔可夫模型描述了观测变量和状态变量之间的概率关系。与马尔可夫模型相比,隐马尔可夫模型不仅对状态建模,而且对观测值建模。不同时刻的状态值之间,同一时刻的状态值和观测值之间,都存在概率关系。

首先定义观测序列
X = { x 1 , . . . , x T } X=\left \{ x_{1},...,x_{T} \right \} X={x1,...,xT}
这是直接能观察或者计算得到的值。任一时刻的观测值来自有限的观测集
V = { v 1 , . . . , v m } V=\left \{ v_{1},...,v_{m} \right \} V={v1,...,vm}
接下来定义状态序列
Z = { z 1 , . . . , z T } Z=\left \{ z_{1},...,z_{T} \right \} Z={z1,...,zT}
任一时刻的状态值也来自有限的状态集
S = { s 1 , . . . , s n } S=\left \{ s_{1},...,s_{n} \right \} S={s1,...,sn}
这与马尔可夫模型中的状态定义相同。在这里,状态是因,观测是果,即因为处于某种状态所以才有某一观测值。

例如,如果我们要识别视频中的动作,状态就是要识别的动作,有站立、坐下、行走等取值,在进行识别之前无法得到其值。观测是能直接得到的值如人体各个关节点的坐标,隐马尔可夫模型的作用是通过观测值推断出状态值,即识别出动作。

除之前已定义的状态转移矩阵之外,再定义观测矩阵 B B B,其元素为
b i j = p ( v j ∣ s i ) b_{ij}=p\left ( v_{j}\mid s_{i} \right ) bij=p(vjsi)
该值表示时刻状态值为时观测值为的概率。显然该矩阵也要满足和状态转移矩阵同样的约束条件:
b i j ≥ 0 ∑ j = 1 n b i j = 1 \begin{aligned} b_{ij} &\geq 0 \\ \sum_{j=1}^{n}b_{ij}&=1 \end{aligned} bijj=1nbij0=1
另外还要给出初始时状态取每种值的概率 π \pi π。隐马尔可夫模型可以表示为一个五元组
{ S , V , π , A , B } \left \{ S,V,\pi ,A,B \right \} {S,V,π,A,B}
如果加上初始状态则可以消掉参数 π \pi π,只剩下 A A A B B B。在实际应用中,一般假设矩阵 A A A B B B在任何时刻都是相同的即与时间无关,这样简化了问题的计算。

任意一个状态序列可以看做是这样产生的:系统在 1 1 1时刻处于状态 z 1 z_1 z1,在该状态下得到观测值 x 1 x_1 x1。接下来从 z 1 z_1 z1转移到 x 2 x_2 x2,并在此状态下得到观测值 x 2 x_2 x2。以此类推,得到整个观测序列。由于每一时刻的观测值只依赖于本时刻的状态值,因此在状态序列 z z z下出现观测序列 x x x的概率为
p ( z , x ) = p ( z ) p ( x ∣ z ) = p ( z t ∣ z t − 1 ) p ( z t − 1 ∣ z t − 2 ) . . . p ( z 1 ∣ z 0 ) p ( x t ∣ z t ) p ( x t − 1 ∣ z t − 1 ) . . . p ( x 1 ∣ z 1 ) = ( ∏ t = 1 T a z t z t − 1 ) ∏ t = 1 T b z t x t \begin{aligned} p(z,x) &=p(z)p(x\mid z) \\ &= p(z_{t}\mid z_{t-1})p(z_{t-1}\mid z_{t-2})...p(z_{1}\mid z_{0})p(x_{t}\mid z_{t})p(x_{t-1}\mid z_{t-1})...p(x_{1}\mid z_{1})\\ &= \left ( \prod_{t=1}^{T}a_{z_{t}z_{t-1}} \right )\prod_{t=1}^{T}b_{z_{t}x_{t}} \end{aligned} p(z,x)=p(z)p(xz)=p(ztzt1)p(zt1zt2)...p(z1z0)p(xtzt)p(xt1zt1)...p(x1z1)=(t=1Taztzt1)t=1Tbztxt
这就是所有时刻的状态转移概率,观测概率的乘积。

以天气问题为例,假设我们不知道每天的天气,但能观察到一个人在各种天气下的活动,根据这一现象来推断天气。这里的活动有 3 3 3种情况,睡觉,跑步,逛街。对于这个问题,天气是状态值,活动是观测值。该隐马尔可夫模型如下图所示
在这里插入图片描述
这一问题的观测矩阵为
[ 0.5 0.2 0.3 0.1 0.7 0.2 0.7 0.1 0.2 ] \begin{bmatrix} 0.5 & 0.2 & 0.3\\ 0.1 & 0.7 & 0.2\\ 0.7& 0.1 & 0.2 \end{bmatrix} 0.50.10.70.20.70.10.30.20.2
在隐马尔可夫模型中,隐藏状态和观测值的数量是根据实际问题人工设定的;状态转移矩阵和混淆矩阵通过样本学习得到。隐马尔可夫模型需要解决以下三个问题:

估值问题,给定隐马尔可夫模型的参数A和B,计算一个观测序列x出现的概率值p(x)。
解码问题,给定隐马尔可夫模型的参数A和B以及一个观测序列x,计算最有可能产生此观测序列的状态序列z。
学习问题,给定隐马尔可夫模型的结构,但参数未知,给定一组训练样本,确定隐马尔可夫模型的参数A和B。

按照定义,隐马尔可夫模型对条件概率 p ( x ∣ z ) p(x|z) p(xz)建模,因此是一种生成模型。

中文分词问题

下面以中文分词问题为例,介绍隐马尔可夫模型如何用于实际问题,这是典型的序列标注问题。中文分词即断句,是自然语言处理中的核心、基础问题。因为中文和英文不同,各个词之间没有空格隔开。对于下面的句子

我是中国人

正确的分词结果为

我    是     中国人

在这里观测序列是输入的语句,每个字为每个时刻的观测值。状态序列为分词的结果,每个时刻的状态值有如下几种情况
{ B , M , E , S } \left \{ B,M,E,S \right \} {B,M,E,S}
其中 B B B表示当前字为一个词的开始, M M M表示当前字是一个词的中间位置, E E E表示当前字是一个词的结尾, S S S表示单字词。则上面这个句子的分词标注结果为

我/S     是/S      中/B      国/M     人/E

显然,得到了这个标注结果,我们就可以得到分词结果,做法很简单:

遇到S,则为一个单字词;遇到B,则为一个词的开始,直到遇到下一个E,则为一个词的结尾。

分词问题为给定观测序列,计算出概率最大的状态序列,对应的就是分词的结果。这通过解码算法实现。隐马尔可夫模型的参数则通过用语料库训练得到。下图是分词的隐马尔可夫模型按时间线展开后的结果
在这里插入图片描述

对于中文分词,词性标注等问题,在《机器学习与应用》中有详细的讲解,包括如何用循环神经网络解决此问题,感兴趣的读者可以进一步阅读。

估值问题

估值问题需要计算隐马尔可夫模型产生一个观测序列 x = { x 1 , ⋯   , x T } x=\left \{ x_1,\cdots,x_T \right \} x={x1,,xT}的概率。因为任意一种状态序列取值都可能会导致出现此观测序列,根据全概率公式,其值为
p ( x ) = ∑ z p ( x ∣ z ) p ( z ) p(x)=\sum_{z}p(x\mid z)p(z) p(x)=zp(xz)p(z)
上式列举所有可能的状态序列,以及该状态序列产生此观测序列的概率,要对 n T n^T nT项求和。因为每一时刻的状态取值有种 n n n可能,因此长度为 T T T的状态序列总共有 n T n^T nT种可能。下图展示了这一过程
在这里插入图片描述
已经推导过,任意一个状态序列出现的概率为
p ( z ) = ∏ t = 1 T p ( z t ∣ z t − 1 ) p(z)=\prod_{t=1}^{T}p(z_{t}\mid z_{t-1}) p(z)=t=1Tp(ztzt1)
由于每一时刻的观测值只依赖于本时刻的状态值,因此有
p ( x ∣ z ) = ∏ t = 1 T p ( x t ∣ z t ) p(x\mid z)=\prod_{t=1}^{T}p(x_{t}\mid z_{t}) p(xz)=t=1Tp(xtzt)
产生一个观测序列的概率为
p ( x ) = ∑ z ∏ t = 1 T p ( z t ∣ z t − 1 ) p ( x t ∣ z t ) = ∑ z ∏ t = 1 T b z t x t a z t z t − 1 p(x)=\sum_{z}\prod_{t=1}^{T}p(z_{t}\mid z_{t-1})p(x_{t}\mid z_{t})=\sum_{z}\prod_{t=1}^{T}b_{z_{t}x_{t}}a_{z_{t}z_{t-1}} p(x)=zt=1Tp(ztzt1)p(xtzt)=zt=1Tbztxtaztzt1
直接计算这个值的复杂度是 O ( n T T ) O(n^TT) O(nTT)。显然上面的公式有很多重复计算。例如要计算产生观测序列 ( x 1 , ⋯   , x 5 ) (x_1,\cdots,x_5) (x1,,x5)的概率,产生它的状态序列为 ( z 1 , ⋯   , z 5 ) (z_1,\cdots,z_5) (z1,,z5),假设状态取值有 3 3 3种情况。无论 z 5 z_5 z5取什么值,为了计算整个序列出现的概率,任何一个长度为 4 4 4的子序列 ( z 1 , ⋯   , z 4 ) (z_1,\cdots,z_4) (z1,,z4)产生观测子序列 ( x 1 , ⋯   , x 4 ) (x_1,\cdots,x_4) (x1,,x4)的概率都要被重复计算 3 3 3次。利用这一特点可以使用动态规划算法高效求解。

假设已经计算出了长度为 t − 1 t-1 t1的观测序列的概率,现在要计算长度为 t t t的观测序列的概率。如果状态的取值有 n n n种可能,则 z t z_t zt的取值有种可能。定义变量
α i ( t ) = p ( x 1 , . . . , x t , z t = i ) \alpha _{i}(t)=p(x_{1},...,x_{t},z_{t}=i) αi(t)=p(x1,...,xt,zt=i)
这个变量是到时刻 t t t为止的观测序列,产生它的状态序列中,最后一个状态为 i i i,即 z t = i z_t=i zt=i的概率。因此有
p ( x ) = p ( x 1 , . . . , x T ) = ∑ i = 1 n p ( x 1 , . . . , x T , z T = i ) = ∑ i = 1 n α i ( T ) p(x)=p(x_{1},...,x_{T})=\sum_{i=1}^{n}p(x_{1},...,x_{T},z_{T}=i)=\sum_{i=1}^{n}\alpha _{i}(T) p(x)=p(x1,...,xT)=i=1np(x1,...,xT,zT=i)=i=1nαi(T)
根据定义可以得到这个变量的递归计算公式
α j ( t ) = ∑ i = 1 n α i ( t − 1 ) α i j b j x t , j = 1 , . . . , n , t = 1 , . . . , T \alpha _{j}(t)=\sum_{i=1}^{n}\alpha _{i}(t-1)\alpha _{ij}b_{jx_{t}},j=1,...,n,t=1,...,T αj(t)=i=1nαi(t1)αijbjxt,j=1,...,n,t=1,...,T
由此得到计算观测序列概率的高效算法。
在这里插入图片描述

上面算法的时间复杂度为 O ( n 2 T ) O(n^2T) O(n2T),这比之前大为减少。此算法称为前向算法,也可以实现后向算法,即从后向前计算。这需要定义变量 β \beta β然后反向递推计算,原理与前向算法相同。

下面给出前向算法的直观解释。如果将状态序列所有时刻的路径展开,可以形成如下图所示的树结构
在这里插入图片描述
前向变量是对上图中以某一节点为根的子树中所有路径求和的结果。在上图中在 3 3 3时刻的值 z 3 z_3 z3经过值 a a a的所有路径构成的子树以蓝色表示,这一子树求和的结果即为 α a ( 3 ) \alpha_a(3) αa(3)。只要得到所有子树的求和结果,通过递推可以得到以它们的父节点为根的子树的结果。

解码问题

解码问题指已知一个观测序列,寻找出最有可能产生它的状态序列,这是实际应用时最常见的问题。根据贝叶斯公式,解码问题可以形式化的定义为如下最大后验概率问题
arg ⁡ max ⁡ z p ( z ∣ x ) = arg ⁡ max ⁡ z p ( x , z ) p ( x ) = arg ⁡ max ⁡ z p ( x , z ) ∑ z p ( x , z ) = arg ⁡ max ⁡ z p ( x , z ) \begin{aligned} \arg \max_{z}p(z\mid x) &=\arg \max_{z}\frac{p(x,z)}{p(x)} \\ &= \arg \max_{z}\frac{p(x,z)}{\sum_{z}p(x,z)}\\ &= \arg \max_{z}p(x,z) \end{aligned} argzmaxp(zx)=argzmaxp(x)p(x,z)=argzmaxzp(x,z)p(x,z)=argzmaxp(x,z)

和贝叶斯分类器相同,忽略掉分母,因为它对所有状态序列是相同的。贝叶斯分类器是已知特征向量计算类后验概率,这里是已知观测序列反算状态序列的条件概率。

最简单的方法是列举所有可能的状态序列,然后计算它们产生该观测序列的概率,找出概率最大的那个。但这是没有必要的,通过使用动态规划算法,可以高效的解决此问题。动态规划求解最优路径时的核心结论是:要保证一个解是全局最优解,其部分解也必须是最优的。根据这一结论,可以得到经典的维特比(Viterbi)算法。

要保证 p ( x 1 , ⋯   , x T , z 1 , ⋯   , z T ) p(x_1,\cdots,x_T,z_1, \cdots,z_T) p(x1,,xT,z1,,zT)的概率最大,就需要保证 p ( x 1 , ⋯   , x T − 1 , z 1 , ⋯   , Z T − 1 ) p(x_1,\cdots,x_{T-1},z_1,\cdots,Z_{T-1}) p(x1,,xT1,z1,,ZT1)的概率最大,这相当于寻找一条产生最大概率的路径,这条路径对应着一个状态序列。这和前面的前向算法类似,只要把求和换成求最大值即可。

如果整体路径是最优的,那么子路径也是最优的。假设概率最大的路径是 ( z 1 , ⋯   , z T ) (z_1,\cdots,z_T) (z1,,zT),在时刻 t t t经过的节点为 z t z_t zt,路径序列 z t , ⋯   , z T z_t,\cdots,z_T zt,,zT必须是最优的。假设它不是最优的,则存在另外一个序列 z t , ⋯   , z T z_t,\cdots,z_T zt,,zT的概率值更大,这与 ( z 1 , ⋯   , z T ) (z_1,\cdots,z_T) (z1,,zT)是最优解矛盾。下图是维特比算法求解的示意图
在这里插入图片描述

上图中最优路径用加粗线表示。如果得到了 1 1 1时刻到 3 3 3时刻的最优路径,根据递推公式可以得到更长的序列的最优路径。

基于这个思想,从 1 1 1时刻开始,递推的计算 t t t时刻状态 z t = i z_t=i zt=i的子序列的最大概率路径,最后就可以得到整个问题的最优解。这一过程与前向算法、后向算法类似,区别在于是求极大值而不是求和。定义如下变量
α i ( i ) = m a x z 1 , . . . , z t − 1 p ( z t = i , z t − 1 , . . . , z 1 , x t , . . . x 1 ) , i = 1 , 2... T \alpha _{i}(i)=max_{z_1,...,z_{t-1}}p\left (z_{t}=i,z_{t-1},...,z_{1},x_{t},...x_{1} \right ),i=1,2...T αi(i)=maxz1,...,zt1p(zt=i,zt1,...,z1,xt,...x1),i=1,2...T
即产生观测序列 ( x 1 , ⋯   , x t ) (x_1,\cdots,x_t) (x1,,xt)的所有状态序列 ( z 1 , ⋯   , z t ) (z_1,\cdots,z_t) (z1,,zt)中, t t t时刻的状态 z t = i z_t=i zt=i的概率的最大值。根据它的定义,可以得到递推计算公式
α i ( i ) = max ⁡ j ( α t − 1 ( j ) a j i b i x t ) , j = 1 , . . . , n , t = 1 , . . . , T \alpha _{i}(i)=\max_j\left ( \alpha_{t-1}(j)a_{ji}b_{ix_{t}} \right ),j=1,...,n,t=1,...,T αi(i)=jmax(αt1(j)ajibixt),j=1,...,n,t=1,...,T
最后可以得到产生观测序列的最大概率为
max ⁡ i α T ( i ) \max_{i}\alpha _{T}(i) imaxαT(i)
上面的定义只能得到最大概率,但要求解的得到这个最大概率的状态序列,为此定义下面的变量记住这个最优路径
β t ( i ) = arg ⁡ max ⁡ j α t − 1 ( j ) a j i , i = 1 , . . . , n , j = 1 , . . . , n \beta _{t}(i)=\arg \max_{j}\alpha _{t-1}(j)a_{ji},i=1,...,n,j=1,...,n βt(i)=argjmaxαt1(j)aji,i=1,...,n,j=1,...,n
t t t时刻的状态 z t = i z_t=i zt=i的概率最大的状态序列中, t − 1 t-1 t1时刻的状态值。有了这两个变量,就可以得到维特比算法。
在这里插入图片描述
在算法实现时,需要存储所有的 β t ( i ) \beta_t(i) βt(i),而只用存储当前步的 α t ( i ) \alpha_t(i) αt(i)。这个算法的时间复杂度为 O ( n T ) O(nT) O(nT)

训练算法

训练时给定一组样本,确定状态转移矩阵和观测矩阵。目标是状态转移矩阵和观测矩阵能很好的解释这组样本,通过最大似然估计实现。如果已知训练样本集中每个观测序列对应的状态序列,则可以直接根据最大似然估计得到模型参数,具体方法已经介绍,不同的是增加了观测矩阵。

下面考虑第二种情况,训练样本集只有观测值而没有状态值。假设有 l l l个训练样本,第 i i i个样本的观测序列为 x i x_i xi,其对应的状态序列为 z i z_i zi,序列长度为 T T T z i z_i zi未知,计算 x i x_i xi的边缘概率时要对其所有可能的取值求和。假设状态集的大小为 n n n,观测集的大小为 m m m。为简化表述,考虑对单个样本的情况,对数似然函数为
L ( A , B ) = ln ⁡ p ( x ; A , B ) = ∑ z ln ⁡ p ( x , z ; A , B ) = ∑ z ( ln ⁡ p ( z ; A , B ) p ( x ∣ z ; A , B ) ) = ∑ z ln ⁡ ( ( ∏ t = 1 T p ( z t ∣ z t − 1 ) ) ( ∏ t = 1 T p ( x t ∣ z t ) ) ) = ∑ z ln ⁡ ( ( ∏ t = 1 T a z t − 1 z t ) ( ∏ t = 1 T b z t x t ) ) = ∑ z ∑ t = 1 T ( ln ⁡ a z t − 1 z t + ln ⁡ b z t x t ) = ∑ z ( ∑ i = 1 n ∑ j = 1 n ∑ t = 1 T ( 1 { Z t − 1 = i ∧ z t = j } ln ⁡ a i j ) + ∑ j = 1 n ∏ k = 1 m ∑ t = 1 T ( 1 { z t = j ∧ x t = k } ln ⁡ b j k ) ) \begin{aligned} L(A,B) &=\ln p(x;A,B)=\sum_{z}\ln p(x,z;A,B) \\ &= \sum_{z}(\ln p(z;A,B)p(x\mid z;A,B))\\ &= \sum_{z}\ln\left ( (\prod_{t=1}^{T}p(z_{t}\mid z_{t-1}))(\prod_{t=1}^{T}p(x_{t}\mid z_{t})) \right )\\ &=\sum_{z}\ln\left ( \left ( \prod_{t=1}^{T}a_{z_{t-1}z_{t}} \right )\left ( \prod_{t=1}^{T}b_{z_{t}x_{t}} \right ) \right )\\ &= \sum_{z}\sum_{t=1}^{T}(\ln a_{z_{t-1}z_{t}}+\ln b_{z_{t}x_{t}})\\ &= \sum_{z}\left ( \sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{t=1}^{T}(1\left \{ Z_{t-1}=i\wedge z_{t}=j \right \}\ln a_{ij})+\sum_{j=1}^{n}\prod_{k=1}^{m}\sum_{t=1}^{T}(1\left \{ z_{t}=j\wedge x_{t}=k \right \}\ln b_{jk}) \right ) \end{aligned} L(A,B)=lnp(x;A,B)=zlnp(x,z;A,B)=z(lnp(z;A,B)p(xz;A,B))=zln((t=1Tp(ztzt1))(t=1Tp(xtzt)))=zln((t=1Tazt1zt)(t=1Tbztxt))=zt=1T(lnazt1zt+lnbztxt)=z(i=1nj=1nt=1T(1{Zt1=izt=j}lnaij)+j=1nk=1mt=1T(1{zt=jxt=k}lnbjk))
这里含有隐变量(状态变量),因此需要用EM算法求解。EM算法的详细原理在SIGAI之前的公众号文章“理解EM算法”以及《机器学习与应用》一书中有详细的讲解。

按照EM算法框架,在E步根据参数 A A A B B B的当前估计值计算隐变量 z z z的条件概率
Q ( z ) = p ( z ∣ x ; A , B ) Q(z)=p(z\mid x;A,B) Q(z)=p(zx;A,B)
在M步计算数学期望,构造下界函数
∑ z Q ( z ) ln ⁡ p ( x , z ; A , B ) Q ( z ) = ∑ z Q ( z ) ( ∑ i = 1 n ∑ j = 1 n ∑ t = 1 T ( 1 { z t − 1 = i ∧ z t = j } ln ⁡ a i j ) + ∑ j = 1 n ∑ k = 1 m ∑ t = 1 T ( 1 { z t = j ∧ x t = k } ln ⁡ Q ( z ) ) ) \begin{aligned} &\sum_{z}Q(z)\ln \frac{p(x,z;A,B)}{Q(z)} \\ &= \sum_{z}Q(z)\left ( \sum_{i=1}^{n}\sum_{j=1}^{n}\sum_{t=1}^{T}(1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}\ln a_{ij}) +\sum_{j=1}^{n}\sum_{k=1}^{m}\sum_{t=1}^{T}(1\left \{ z_{t}=j\wedge x_{t}=k \right \}\ln Q(z))\right ) \end{aligned} zQ(z)lnQ(z)p(x,z;A,B)=zQ(z)(i=1nj=1nt=1T(1{zt1=izt=j}lnaij)+j=1nk=1mt=1T(1{zt=jxt=k}lnQ(z)))
在这里 l n Q ( z ) lnQ(z) lnQ(z)是与 A A A B B B无关的常数,可以忽略。由于状态转移矩阵和观测矩阵满足等式约束,构造拉格朗日乘子函数
L ( A , B , μ , v ) = ∑ z Q ( z ) ( ∑ i = 1 n ∑ j = 1 n ∑ t = 1 T ( 1 { z t − 1 = i ∧ z t = j } ln ⁡ a i j ) + ∑ j = 1 n ∑ k = 1 m ∑ t = 1 T ( 1 { z t = j ∧ x t = k } ln ⁡ b j k ) ) + ∑ i = 1 n μ i ( 1 − ∑ j = 1 n a i j ) + ∑ j = 1 n v j ( 1 − ∑ k = 1 m b j k ) L(A,B,\mu ,v)=\sum_{z}Q(z)\left ( \sum_{i=1}^{n}\sum_{j=1}^{n} \sum_{t=1}^{T}(1\left \{ z_{t-1=i\wedge z_{t}=j}\quad \right \}\ln a_{ij})+\sum_{j=1}^{n}\sum_{k=1}^{m}\sum_{t=1}^{T}(1\left \{ z_{t}=j\wedge x_{t}=k \right \}\ln b_{jk})\right )+\sum_{i=1}^{n}\mu _{i}(1-\sum_{j=1}^{n}a_{ij})+\sum_{j=1}^{n}v_{j}(1-\sum_{k=1}^{m}b_{jk}) L(A,B,μ,v)=zQ(z)(i=1nj=1nt=1T(1{zt1=izt=j}lnaij)+j=1nk=1mt=1T(1{zt=jxt=k}lnbjk))+i=1nμi(1j=1naij)+j=1nvj(1k=1mbjk)
a i j a_{ij} aij求偏导数并令其为 0 0 0,可以得到
∂ L ( A , B , μ , v ) ∂ a i j = ∑ z Q ( z ) 1 a i j ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } − μ i = 0 \frac{\partial L(A,B,\mu ,v)}{\partial a_{ij}}=\sum_{z}Q(z)\frac{1}{a_{ij}}\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t} =j\right \}-\mu _{i}=0 aijL(A,B,μ,v)=zQ(z)aij1t=1T1{zt1=izt=j}μi=0
解得
a i j = 1 μ i ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } a_{ij}=\frac{1}{\mu _{i}}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t} =j\right \} aij=μi1zQ(z)t=1T1{zt1=izt=j}
b i j b_{ij} bij求偏导数并令其为0,可以得到
∂ L ( A , B , μ , v ) ∂ b j k = ∑ z Q ( z ) 1 b j k ∑ t = 1 T 1 { z t = j ∧ x t = k } − v j = 0 \frac{\partial L(A,B,\mu ,v)}{\partial b_{jk}}=\sum_{z}Q(z)\frac{1}{b_{jk}}\sum_{t=1}^{T}1\left \{ z_{t}=j\wedge x_{t} =k\right \}-v_{j}=0 bjkL(A,B,μ,v)=zQ(z)bjk1t=1T1{zt=jxt=k}vj=0
解得
b j k = 1 v j ∑ z Q ( z ) ∑ t = 1 T 1 { z t = j ∧ x t = k } b_{jk}=\frac{1}{v_{j}}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t}=j\wedge x_{t} =k\right \} bjk=vj1zQ(z)t=1T1{zt=jxt=k}
μ i \mu_{i} μi求偏导数,并令其为0,可以得到
∂ L ( A , B , μ , v ) ∂ μ i = 1 − ∑ j = 1 n a i j = 1 − ∑ j = 1 n 1 μ i ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } = 0 \begin{aligned} \frac{\partial L(A,B,\mu ,v)}{\partial \mu _{i}} &= 1-\sum_{j=1}^{n}a_{ij}\\ &= 1-\sum_{j=1}^{n}\frac{1}{\mu _{i}}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}=0 \end{aligned} μiL(A,B,μ,v)=1j=1naij=1j=1nμi1zQ(z)t=1T1{zt1=izt=j}=0
解得
μ i = ∑ j = 1 n ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } = ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i } \begin{aligned} \mu _{i} &=\sum_{j=1}^{n}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \} \\ &= \sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1} =i\right \} \end{aligned} μi=j=1nzQ(z)t=1T1{zt1=izt=j}=zQ(z)t=1T1{zt1=i}
v j v_j vj求偏导数,并令其为0,可以得到
∂ L ( A , B , μ , v ) ∂ v j = 1 − ∑ k = 1 m b j k = 1 − ∑ k = 1 m 1 v j ∑ z Q ( z ) ∑ t = 1 T 1 { z t = j ∧ x t = k } = 0 \begin{aligned} \frac{\partial L(A,B,\mu ,v)}{\partial v_{j}} &= 1-\sum_{k=1}^{m}b_{jk}\\ &= 1-\sum_{k=1}^{m}\frac{1}{v_{j}}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t}=j\wedge x_{t}=k \right \}=0 \end{aligned} vjL(A,B,μ,v)=1k=1mbjk=1k=1mvj1zQ(z)t=1T1{zt=jxt=k}=0
解得
v j = ∑ k = 1 m ∑ z Q ( z ) ∑ t = 1 T 1 { z t = j ∧ x t = k } = ∑ z Q ( z ) ∑ t = 1 T 1 { z t = j } \begin{aligned} v_{j} &=\sum_{k=1}^{m}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t}=j\wedge x_{t}=k \right \} \\ &= \sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t} =j\right \} \end{aligned} vj=k=1mzQ(z)t=1T1{zt=jxt=k}=zQ(z)t=1T1{zt=j}
μ i \mu_i μi v j v _j vj的值分别代入 a i j a_{ij} aij b j k b_{jk} bjk的解,可以得到
a i j = ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i } b j k = ∑ z Q ( z ) ∑ t = 1 T 1 { z t = j ∧ x t = k } ∑ z Q ( z ) ∑ t = 1 T 1 { z t = j } a_{ij}=\frac{\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}}{\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i \right \}} b_{jk}=\frac{\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t}=j\wedge x_{t}=k \right \}}{\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t}=j \right \}} aij=zQ(z)t=1T1{zt1=i}zQ(z)t=1T1{zt1=izt=j}bjk=zQ(z)t=1T1{zt=j}zQ(z)t=1T1{zt=jxt=k}
但上面两个值直接计算的成本太高,状态序列 z z z的所有可能取值有 n T n^T nT种。这一问题可用估值问题中使用的技巧解决,递推的计算这两个值。
∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } = ∑ t = 1 T ∑ z 1 { z t − 1 = i ∧ z t = j } Q ( z ) = ∑ t = 1 T ∑ z 1 { z t − 1 = i ∧ z t = j } p ( z ∣ x ; A , B ) = 1 p ( x ; A , B ) ∑ t = 1 T ∑ z 1 { z t − 1 = i ∧ z t = j } p ( z , x ; A , B ) = 1 p ( x ; A , B ) ∑ t = 1 T α i ( t ) a i j b j x t β j ( t + 1 ) \begin{aligned} \sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \} &= \sum_{t=1}^{T}\sum_{z}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}Q(z)\\ &= \sum_{t=1}^{T}\sum_{z}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}p(z\mid x;A,B)\\ &= \frac{1}{p(x;A,B)}\sum_{t=1}^{T}\sum_{z}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \}p(z,x;A,B)\\ &= \frac{1}{p(x;A,B)}\sum_{t=1}^{T}\alpha _{i}(t)a_{ij}b_{jx_{t}}\beta _{j}(t+1) \end{aligned} zQ(z)t=1T1{zt1=izt=j}=t=1Tz1{zt1=izt=j}Q(z)=t=1Tz1{zt1=izt=j}p(zx;A,B)=p(x;A,B)1t=1Tz1{zt1=izt=j}p(z,x;A,B)=p(x;A,B)1t=1Tαi(t)aijbjxtβj(t+1)
类似的有
∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i } = ∑ j = 1 n ∑ z Q ( z ) ∑ t = 1 T 1 { z t − 1 = i ∧ z t = j } = 1 p ( x ; A , B ) ∑ j = 1 n ∑ t = 1 T α i ( t ) a i j b j x t β j ( t + 1 ) \begin{aligned} &\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i \right \}=\sum_{j=1}^{n}\sum_{z}Q(z)\sum_{t=1}^{T}1\left \{ z_{t-1}=i\wedge z_{t}=j \right \} \\ &= \frac{1}{p(x;A,B)}\sum_{j=1}^{n}\sum_{t=1}^{T}\alpha _{i}(t)a_{ij}b_{jx_{t}}\beta _{j}(t+1) \end{aligned} zQ(z)t=1T1{zt1=i}=j=1nzQ(z)t=1T1{zt1=izt=j}=p(x;A,B)1j=1nt=1Tαi(t)aijbjxtβj(t+1)
因此有
a i j = ∑ t = 1 T α i ( t ) a i j b j x t β j ( t + 1 ) ∑ j = 1 n ∑ t = 1 T α i ( t ) a i j b j x t β j ( t + 1 ) a_{ij}=\frac{\sum_{t=1}^{T}\alpha _{i}(t)a_{ij}b_{jx_{t}}\beta _{j}(t+1)}{\sum_{j=1}^{n}\sum_{t=1}^{T}\alpha _{i}(t)a_{ij}b_{jx_{t}}\beta _{j}(t+1)} aij=j=1nt=1Tαi(t)aijbjxtβj(t+1)t=1Tαi(t)aijbjxtβj(t+1)
用同样的方法可以计算出 b j k b_{jk} bjk。由此得到求解隐马尔可夫模型训练问题的Baum-Welch算法。

用随机数初始化矩阵 A A A B B B的元素,矩阵元素要满足等式约束条件
在这里插入图片描述

参考文献

[1] Baum, L. E., Petrie, T. Statistical Inference for Probabilistic Functions of Finite State Markov Chains. The Annals of Mathematical Statistics. 37 (6): 1554–1563. 1966.

[2] Baum, L. E., Eagon, J. A. An inequality with applications to statistical estimation for probabilistic functions of Markov processes and to a model for ecology. Bulletin of the American Mathematical Society. 73 (3): 360. 1967.

[3] Baum, L. E., Petrie, T., Soules, G., Weiss, N. A Maximization Technique Occurring in the Statistical Analysis of Probabilistic Functions of Markov Chains. The Annals of Mathematical Statistics. 41: 164. 1970

[4] Baum, L.E. An Inequality and Associated Maximization Technique in Statistical Estimation of Probabilistic Functions of a Markov Process. Inequalities. 3: 1–8. 1972.

[5] Lawrence R. Rabiner. A tutorial on Hidden Markov Models and selected applications in speech recognition. Proceedings of the IEEE. 77 (2): 257–286. 1989.

相关推荐