马尔科夫模型
状态集合:S={s1,⋯,sN}
观测状态序列:x=x1,⋯,xt,⋯,xT,其中xt∈S
状态初始化概率:πi=p(x1=si),1≤i≤N
状态转移概率:aij=p(xt=sj|xt−1=si),1≤i,j≤N
计算观测状态序列的概率(假设当前的状态xt的生成只依赖于前一个状态xt−1,通常称为二阶马尔科夫模型):
P(x;θ)=T∏t=1p(xt|x1,⋯,xt−1)≈p(x1)×T∏t=2p(xt|xt−1)
其中θ={p(x)|x∈S}⋃{p(x′|x)|x,x′∈S}
模型的学习
目的:学习得到模型的参数θ,也即状态初始化概率和状态转移概率的学习,通过极大似然估计完成参数学习
假设训练集包含D个样本D={x(d)}Dd=1,使用极大似然估计来从训练数据中自动获取最优模型参数:
^θ=argmaxθ{L(θ)}
似然函数的对数形式:
L(θ)=D∑d=1logP(x(d);θ)=D∑d=1⎛⎝logp(x(d)1)+T(d)∑t=2logp(x(d)t|x(d)t−1)⎞⎠
其中T(d)表示第d个训练数据的序列长度,模型参数还需要满足一下两个约束条件:
∑x∈Sp(x)=1∀x:∑x′∈Sp(x′|x)=1
引入拉格朗日乘子法来实现约束条件下的极值求解:
J(θ,λ,γ)=L(θ)−λ(∑x∈Sp(x)−1)−∑x∈Sγx(∑x′∈Sp(x′|x)−1)
其中λ是与状态初始概率约束相关的拉格朗日乘子,γ={γx|x∈S}是与状态转移概率约束相关的拉格朗日乘子的集合
∂J(θ,λ,γ)∂p(x)=⎛⎝D∑d=1⎛⎝logp(x(d)1)+T(d)∑t=2logp(x(d)t|x(d)t−1)⎞⎠−λ(∑x∈Sp(x)−1)−∑x∈Sγx(∑x′∈Sp(x′|x)−1)⎞⎠′p(x)=∂∂p(x)D∑d=1logp(x(d)1)−λ=1p(x)D∑d=1δ(x(d)1,x)−λ
其中δ(a,b)的取值当a=b时为1,否则为0
用c(x,D)表示训练数据中第一个状态是x的次数:
c(x,D)=D∑d=1δ(x(d)1,x)
之后计算拉格朗日乘子λ的偏导
∂J(θ,λ,γ)∂λ=∑x∈Sp(x)−1
根据上式可以推导:
p(x)=c(x,D)λ
有λ=∑x∈Sc(x,D)所以状态初始化概率的估计公式:
p(x)=c(x,D)∑x′∈Sc(x′,D)
∂J(θ,λ,γ)∂p(x′|x)=⎛⎝D∑d=1⎛⎝logp(x(d)1)+T(d)∑t=2logp(x(d)t|x(d)t−1)⎞⎠−λ(∑x∈Sp(x)−1)−∑x∈Sγx(∑x′∈Sp(x′|x)−1)⎞⎠′p(x′|x)=∂∂p(x′|x)D∑d=1T(d)∑t=2logp(x(d)t|x(d)t−1)−γx=1p(x′|x)D∑d=1T(d)∑t=2δ(x(d)t−1,x)δ(x(d)t,x′)−γx
将训练数据中x′紧跟着出现在x后面的次数表示为:
c(x,x′,D)=D∑d=1T(d)∑t=2δ(x(d)t−1,x)δ(x(d)t,x′)
之后计算拉格朗日乘子γx的偏导:
∂J(θ,λ,γ)∂γx=∑x′∈Sp(x′|x)−1
从上式可以推出:
p(x′|x)=c(x,x′,D)γx
又可以得出γx=∑x′′∈Sc(x,x′′,D),故:
p(x′|x)=c(x,x′,D)∑x′′∈Sc(x,x′′,D)
计算观测概率
目的:计算观测序列的概率
一个例子:在暗室中不知道外面的天气,但是可以通过触摸地面的潮湿程度来推测外部的天气情况,此时,地面的潮湿程度是观测状态,外面的天气是隐状态
观测状态集合:O={o1,⋯,om}
隐状态集合:S={s1,⋯,sN}
观测状态序列:x=x1,⋯,xt,⋯,xT
隐状态序列:z=z1,⋯,zt⋯,zT
隐状态初始化概率:πi=p(z1=si),1≤i≤N
隐状态转移概率:aij=p(zt=sj|zt−1=si),1≤i,j≤N
观测状态生成概率:bj(k)=p(xt=ok|zt=sj),1≤j≤N⋀1≤k≤M
隐马尔可夫模型:
P(x;θ)=∑zP(x,z;θ)=∑zp(z1)×p(x1|z1)×T∏t=2p(zt|zt−1)×p(xt|zt)
模型参数θ={p(z)|z∈S}⋃{p(z′|z)|z,z′∈S}⋃{p(x|z)|x∈O⋀z∈S}
前向概率
部分观测状态序列x1,⋯,xt与第t个隐状态为si的联合概率称为前向概率:
αt(i)=P(x1,⋯,xt,zt=si;θ)
使用动态规划算法递归计算:
α1(i)=πibi(x1),1≤i≤N
αt(j)=(N∑i=1αt−1(i)aij)bj(xt),1≤j≤N
P(x;θ)=N∑i=1αT(i)
后向概率
第t个隐状态为sj生成部分观测状态序列xt+1,⋯,xT的条件概率称为后向概率,定义为:
βt(i)=P(xt+1,⋯,xT|zt=si;θ)
使用动态规划算法递归计算如下:
βT(i)=1,1≤i≤N
βt(i)=N∑j=1aijbj(xt+1)βt+1(j),1≤i≤N
P(x;θ)=N∑i=1πibi(x1)β1(i)
计算最优隐状态序列-Viterbi算法
目的:在给定一个观测状态序列x=x1,⋯,xt,⋯,xT和模型参数θ的条件下求出最优的隐状态序列
^z=argmaxz{P(z|x;θ)}=argmaxz{P(x,z;θ)P(x;θ)}=argmaxz{P(x,z;θ)}=argmaxz{∑zp(z1)×p(x1|z1)×T∏t=2p(zt|zt−1)×p(xt|zt)}
假设δi=maxj∈heads(i){ωjiδj}是从结点1到结点i的最大路径取值,ψi=argmaxj∈heads(i){ωjiδj}
Viterbi算法
δ1(i)=πib1(x1),ψ1(i)=0
δt(j)=max1≤i≤N{δt−1(i)aij}bj(xt)ψt(j)=argmax1≤i≤N{δt−1(i)aij}bj(xt)
^P=max1≤i≤N{δT(i)}^zT=argmax1≤i≤N{δT(i)}
^zt=ψt+1(^zt+1)
模型的学习-前向后向算法
目的:估计模型参数,我们知道的是观测序列,隐状态序列是不确定的,所以参数的主要挑战是需要对指数级的隐状态序列进行求和
给定训练集D={x(d)}Dd=1,使用极大似然估计来获得模型的最优参数:
^θ=argmaxθ{L(θ)}
Expectation-Maximization(简称EM)算法被广泛用于估计隐状态模型的参数。令X表示一组观测数据,Z表示未观测数据,也就是隐状态序列:EM算法在以下两个步骤中迭代运行:
Q(θ|θold)=EZ|X;θold[logP(X,Z;θ)]
θnew=argmaxθ{Q(θ|θold)}
那么使用EM算法来训练隐马尔可夫模型,在E步实际使用的目标函数定义如下:
J(θ,λ,γ,ϕ)=D∑d=1EZ|X(d);θold[logP(x(d),Z;θ)]−λ(∑z∈Sp(z)−1)−∑z∈Sγz(∑z′∈Sp(z′|z)−1)−∑z∈Sϕz(∑x∈Op(x|z)−1)
通过计算偏导,可以得到公式:
p(z)=c(z,D)∑z′∈Sc(z′,D)p(z′|z)=c(z,z′,D)∑z′′∈Sc(z,z′′,D)p(x|z)=c(z,x,D)∑x′∈Oc(z,x′,D)
其中c(⋅)表示计数函数,c(z,D)是在训练集D上第一个隐状态是z的次数的期望值,c(z,z′,D)是在训练集上隐状态z′出现在隐状态z的次数的期望值,c(z,x,D)是训练集上隐状态z生成观测状态x的次数的期望值。
上述的期望值定义如下:
c(z,D)≡D∑d=1EZ|X;θold[δ(z1,z)]c(z,z′,D)≡D∑d=1EZ|X;θold⎡⎣T(d)∑t=2δ(zt−1,z)δ(zt,z′)⎤⎦c(z,x,D)≡D∑d=1EZ|X;θold⎡⎣T(d)∑t=1δ(zt,z)δ(x(d)t,x)⎤⎦
期望基于隐状态的后验概率P(z|x(d);θold),计算期望的过程涉及指数级数量的计算,下面以隐状态转换次数的期望为例:
EZ|X;θold[δ(zt−1,z)δ(zt,z′)]=∑zP(z|x(d);θold)δ(zt−1,z)δ(zt,z′)=∑zP(x(d),z;θold)P(x(d);θold)δ(zt−1,z)δ(zt,z′)=1P(x(d);θold)∑zP(x(d),z;θold)δ(zt−1,z)δ(zt,z′)=P(x(d),zt−1=z,zt=z′;θold)P(x(d);θold)
上式的分母可以使用前向概率来计算,下面是分母的计算:
P(x,zt−1=si,zt=sj;θ)=P(x1,⋯,xt−1,zt−1=si;θ)×P(zt=sj|zt−1=si;θ)×P(xt|zt=sj;θ)×P(xt+1,⋯,xT|zt=sj;θ)=αt−1(i)aijbj(xt)βt(j)
估计隐状态初始化概率
p(z)=c(z,D)∑z′∈Sc(z′,D)=∑Dd=1P(x(d),z1=z;θold)∑Dd=1P(x(d);θold)¯¯¯πi=∑Dd=1α1(i)β1(i)∑Dd=1∑Ni=1αT(d)(i)
估计隐状态转换概率
p(z′|z)=c(z,z′,D)∑z′′∈Sc(z,z′′,D)=∑Dd=1∑T(d)t=2P(x,zt−1=z,zt=z′;θold)∑Dd=1∑T(d)t=2P(x,zt−1=z;θold)¯¯¯aij=∑Dd=1∑T(d)t=2αt−1(i)aijbj(x(d)t)βt(j)∑Dd=1∑T(d)t=2αt−1(i)βt(j)
估计观测状态生成概率
p(x|z)=c(z,x,D)∑x′∈Oc(z,x′,D)=∑Dd=1∑T(d)t=1δ(x(d)t,x)P(x(d),zt=z;θold)∑Dd=1∑T(d)t=1P(x(d),zt=z;θold)¯¯bi(k)=∑Dd=1∑T(d)t=1δ(x(d),ok)αt(i)βt(i)∑Dd=1∑T(d)t=1αt(i)βt(i)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)