训练方法
训练HMM, 用到的是前向-后向算法(Forward-backward algorithm), 又被称之为Baum-Welch算法, 这是一种非监督学习算法.
中间变量
首先是前向算法和后向算法中的概率.
前向概率
对于HMM模型中的参数集合, 前向概率定义为: 时刻部分观测序列为, 且当前时刻的隐藏状态为的概率:
假设隐藏状态的可能数为, 则在时刻, 对于种可能的隐藏状态, 都有一个与之对应.
递推公式
另外前向概率还有如下的递推公式:
即时刻的每个可能的隐藏状态的概率都是由上一个时刻所有可能的隐藏状态根据转移概率为权值, 加权得到的.
递推公式中:
为隐藏状态的状态转移概率, 为前面所说的大小为的状态转移矩阵中这个值.
就是隐藏状态为时对应的观测为的概率. 对应的就是前面的观测概率矩阵(离散)或者是状态发射函数(连续)
当观测值是有限个状态, 即离散的情况下, 一般就使用前面所说的观测概率矩阵. 如果观测有个状态, 则对应于一个的概率矩阵
当观测值是有无限个状态, 即值域是连续的情况下, 这时的发射函数为高斯函数. 具体的说, 对于每个隐藏状态(隐藏状态一定是离散的, 即数量有限的), 都对应于一套独自的高斯分布参数和, 因此每个隐藏状态生成观测值$x$时也就有所区别.
初始状态
后向概率
递推公式
与前向概率不同, 后向概率从序列最后向前递推. 递推公式为:
初始状态
观测概率
使用前向概率, 我们可以认为:
使用后向概率, 我们可以认为:
因此整个观测序列的发生概率既可以用前向概率表示, 也可以用后向概率表示:
训练过程
目标推导
将上式中的表达式部分记为:
对于第三项发射概率, 根据观测随机变量的类型, 有两种情况.
这里的推导过程中需要指明的是:
EM算法求解
E步
根据上面的公式, 直接得到:
而又有:
M步
另一个是对状态转移矩阵中的每一行, 要求其概率为1
对上式中的每个待解参数求偏导, 并令偏导为0, 得到极值.
而对于连续的情况:
参考资料
对于HMM模型中的参数集合, 后向概率定义为: 时刻, 当前的隐藏状态为的条件下, 从时刻到最后一个时刻的部分观测序列为的概率:
这一概率对于所有都成立. 至于为何值为1, 在后面有讲解.
因为在后面的计算中, 需要用到作为归一化的因子使用, 因此需要求出当前模型参数下的观测概率. 为了方便, 一般使用计算得到.
定义对于马尔科夫模型, 在现有观测序列的条件下, 时刻, 隐藏状态为的概率为:
将这个概率与上面的前向概率和后向概率联合起来, 得到他们之间的关系:
由于归一化因子就是分母在所有隐藏状态下的概率之和, 因此有.
定义对于马尔科夫模型和观测序列, 在时刻处于状态, 在时刻处于状态的概率为:
将与上面的前向概率和后向概率联合起来, 得到他们之间的关系:
由于隐藏状态的存在, 直接对观测值求极大似然是无解的, 因此HMM模型的参数的训练学习可以由EM算法实现.
最优的参数应当满足对应的观测序列概率最大, 即有:
而HMM作为一种生成式模型, 我们的出发点是观测序列和隐藏序列的联合分布概率, 观测概率是联合分布概率在各种隐藏状态序列下的期望值. 因此有:
上式中的最后一步是对联合分布概率求期望的方法. 由于观测序列是已知的, 当前的模型参数也是已知的, 此时的随机变量就是在这两个条件下的隐藏状态, 对应的概率就是的条件分布概率.
因为模型参数是我们的求解目标, 而当前模型参数会决定隐藏状态分布的概率, 因此上式是和的函数.
进一步拆解上式, 对于联合分布概率, 可以表示为:
可以将上面的三种概率分别对应于HMM模型中的隐藏状态的先验分布概率, 隐藏状态之间的转移概率, 已知隐藏状态确定观测值的发射概率. 在加上函数中的符号, 有:
如果观测值是离散值, 则对应于一个发射概率矩阵, 大小为隐藏状态值数乘以观测值数, 每个隐藏状态对于不同的观测状态都有着独立的概率. 这样就是一个矩阵.
如果观测值是连续值, 则每个隐藏状态都对应着一个独自的正态分布(常用正态分布, 也可以使用其他分布), 从这个正态分布中得到观测值. 不同的隐藏状态对应的正态分布的参数不同, 对于隐藏状态, 对应的分布的参数为和, 可以都是标量, 或是均值向量和协方差矩阵, 此时对应着观测序列中的每一个值都是一个向量的情况.
综合上述内容, 以连续情况为例, 函数可以变换为:
是一个向量, 代表时刻每个隐藏状态的情况, 在每个时刻向量中只能有一个位置的值为1, 其他位置都是0. 如果这个时刻的隐藏状态为, 那么就只有. 所以才有上面那种对所有序列考虑的写法.
有了函数, 并将它转换成中间概率的形式之后, 再使用EM算法对模型参数进行求解, 对下面的参数进行求解:
E步: 借助当前的模型参数, 计算各个时刻, 各个隐藏状态对应的和. 等价于根据现有参数求出了隐藏状态的分布情况.
M步: 经过E步更新后的函数就只是的函数了, 计算新的, , 参数.
目标是最小化似然函数, 找到对应的值. 而求解过程需要使用到拉格朗日公式:
后面一个是对的限制, 要求初始隐藏状态向量的概率之和为1
的分母表示只有对应时刻的观测状态的的时刻, 才对这个参数做出贡献. 分母就是归一化值, 是所有的种观测状态对应的值之和.
x1,x2,⋯,xn α(zn)=P(x1,x2,⋯,xn,zn∣θ) α(zn)=P(xn∣zn)zn−1∑α(zn−1)P(zn∣zn−1) P(zn∣zn−1) azn,zn−1 P(xn∣zn) α(z1)=P(x1∣z1)πz1 α(z1k)=P(x1∣z1k)πz1k xn+1,⋯,xN β(zn)=P(xn+1,⋯,xN∣zn,θ) β(zn)=zn+1∑β(zn+1)P(xn+1∣zn+1)P(zn+1∣zn) β(zN)=1 P(X∣θ)=P(X) P(X)=zN∑P(X,zN)=zN∑α(zN) P(X)=z1∑P(X∣z1)P(z1)=z1∑P(x1∣z1)P(x2,⋯,xN)P(z1)=z1∑P(x1∣z1)β(z1)π(z1) P(X)=zN∑α(zN)=z1∑P(x1∣z1)β(z1)π(z1) P(X)=zN∑α(zN) γ(zn,k) γ(zn,k)=P(zn=k∣X,θ) γ(zn)=P(zn∣X)=P(X)P(X,zn)=P(X)P(X∣zn)P(zn)=P(X)α(zn)β(zn)=zn∑α(zn)β(zn)α(zn)β(zn)=zN∑α(zN)α(zn)β(zn) zn∑γ(zn)=1 ξ(zn−1,zn) ξ(zn−1,zn)=P(zn−1,zn∣X,θ) ξ(zn−1,zn)=P(zn−1,zn∣X)=P(X)P(X,zn−1,zn)=P(X)P(X∣zn−1,zn)P(zn−1,zn)=P(X)P(x1,⋯,xn−1∣zn−1)P(xn∣zn)P(xn+1,⋯,xN∣zn)P(zn∣zn−1)=P(X)α(zn−1)P(xn∣zn)β(zn)P(zn∣zn−1)=zn∑α(zn−1)P(xn∣zn)β(zn)P(zn∣zn−1)α(zn−1)P(xn∣zn)β(zn)P(zn∣zn−1)=zN∑α(zN)α(zn−1)P(xn∣zn)β(zn)P(zn∣zn−1) ξ(zn−1,zn) θ=argθmaxP(X∣θ) P(X,Z∣θ) θ=argθmaxP(X∣θ)=argθmaxE[P(X,Z∣θ)]=argθmaxE[logP(X,Z∣θ)]=argθmaxZ∑P(Z∣X,θ′)logP(X,Z∣θ) Q(θ,θ′)=Z∑P(Z∣X,θ′)logP(X,Z∣θ) P(X,Z∣θ) P(X,Z∣θ)=P(Z∣θ)P(X∣Z,θ)=P(z1∣θ)n=2∏NP(zn∣zn−1,θ)n=1∏NP(xn∣zn,θ) logP(X,Z∣θ)=logP(z1∣π)+n=2∑NlogP(zn∣zn−1,Λ)+n=1∑NlogP(xn∣zn,Φ) Q(θ,θ′)=k=1∑KZ∑P(Z∣X,θ′)logπkz1k+n=2∑Nj=1∑Kk=2∑KZ∑P(Z∣X,θ′)logΛjkzn−1,j⋅zn,k+n=1∑Nk=1∑KZ∑P(Z∣X,θ′)zn,klogN(xn∣μk,Σk)=k=1∑Kγ(z1k)logπk+n=2∑Nj=1∑Kk=2∑Kξ(zn−1,j,zn,k)logΛjk+n=1∑Nk=1∑Kγ(zn,k)logN(xn∣μk,Σk) P(xn∣zn,Φ) Q(θ,θ′)=k=1∑Kγ(z1k)logπk+n=2∑Nj=1∑Kk=2∑Kξ(zn−1,j,zn,k)logΛjk+n=1∑Nk=1∑Kγ(zn,k)logΦk,xn γ(zn,k) ξ(zn−1,j,zn,k) γ(zn)=P(zn∣X)=P(X)α(zn)β(zn) ξ(zn−1,zn)=P(zn−1,zn∣X)=P(X)α(zn−1)P(xn∣zn)β(zn)P(zn∣zn−1) P(X)=zN∑α(zN) Q(θ,θ′) L=Q(θ,θ′)+λ1(k=1∑Kπk−1)+j=1∑Kλ2j(l=1∑KΛjl−1) πk=l=1∑Kγ(z1,k)γ(z1,k)=P(X)α(z1,kβ(z1,k)) Λjk=n=2∑Nl=1∑Kξ(zn−1,j,zn,l)n=2∑Nξ(zn−1,j,zn,k) Φk,j=j=1∑Jxn=xj∑γ(zn,k)xn=xj∑γ(zn,k) μk=n=1∑Nγ(zn,k)n=1∑Nγ(zn,k)⋅xn Σk=n=1∑Nγ(zn,k)n=1∑Nγ(zn,k)(xn−μk)(xn−μk)T