学习笔记四:HMM(隐马尔科夫模型)
第四章 HMM
1.隐马尔科夫模型的基本概念
引入
- 例子:天气和冰激凌问题
- 想象你是2799年的气候学家,正在研究全球变暖的历史
- 你无法找到任何关于北京2020年夏天的天气记录
- 但你找到了小米的日记本,上面列出了小米每天吃的冰激凌数目
- 我们的目标是:根据观测(小米每天吃的冰激凌数目)估计这个夏天的天气状况
- 假设天气只有冷(COLD)和热(HOT)两种可能,小米吃的冰激凌只有1、2、3三种可能
- 所以你的任务是:
- 给定观测序列O,比如O = (3,1,3)(其中每个整数表示小明每天吃的冰激凌数目)
- 找到隐藏的天气状态序列Q,比如Q = (HOT, COLD, HOT)
隐马尔科夫模型的基本概念:定义
- 隐马尔科夫模型:Hidden Markov Model(HMM)
- 定义:
- 隐马尔科夫模型是关于时间序列的概率模型
- 描述由一个隐藏的马尔可夫链随机生成不可观测的状态序列,再由各个状态生成一个观测而产生的观测序列的过程,序列的每一个位置又可以看作是一个时刻
图:马尔可夫模型的生成过程
隐马尔科夫模型的基本概念:组成
组成
HMM由初始概率分布、状态转移概率分布和观测概率分布决定,当观测为离散值时:
Q = {q1q2...qNq_1q_2...q_Nq1q2...qN} 所有可能的状态的集合(N个) ps:在上图中表现为hot,cold两种状态
V = {v1v2...vMv_1v_2...v_Mv1v2...vM} 所有可能的观测的集合(M个) ps:在上图中表现为1、2、3三种观测
I = (i1i2...iTi_1i_2...i_Ti1i2...iT) 长度为T的状态序列,每个都来自于Q
O = (o1o2...oTo_1o_2...o_To1o2...oT) 长度为T的观测序列,每个都来自于V ps:在上图中表现为状态序列对应的313观测序列
A = [aij]N∗N[a_{ij}]_{N*N}[aij]N∗N 状态转移概率矩阵,其中aij=P(it+1=qj∣it=qi),i=1,2,...,N;j=1,2,..,Na_{ij} = P(i_{t+1} = q_j |i_t = q_i),i = 1,2,...,N;j = 1,2,..,Naij=P(it+1=qj∣it=qi),i=1,2,...,N;j=1,2,..,N,是在时刻t处于状态qiq_iqi的条件下在时刻t+1转移到状态qjq_jqj的概率,个人理解:维度来自于状态*状态,即N*N,aija_{ij}aij表示从状态i->状态j的概率,
ps:再上图表现为
B=[bj(ot)]N∗MB = [b_j(o_t)]_{N*M}B=[bj(ot)]N∗M 观测概率矩阵,其中bj(ot)=P(ot=vk∣it=qj),k=1,2,...,M;j=1,2,...,Nb_j(o_t) = P(o_t = v_k|i_t = qj),k =1,2,...,M;j = 1,2,...,Nbj(ot)=P(ot=vk∣it=qj),k=1,2,...,M;j=1,2,...,N,是在时刻t处于状态qjq_jqj条件下生成观测vkv_kvk的概率,N个状态,M个观测,所以为N*M
ps:在图中表现为(在hot状态下生成观测的概率值)
Π=(Πi)Π = (Π_i)Π=(Πi) 初始概率向量,其中Πi=P(i1=qj),i=1,2,...,NΠ_i = P(i_1 = q_j),i = 1,2,...,NΠi=P(i1=qj),i=1,2,...,N,是时刻t = 1处于状态qjq_jqj的概率
HMM λ = (A, B, Π),A,B,Π称为HMM的三要素
隐马尔科夫模型的基本概念:基本假设
HMM的两个基本假设
齐次马尔可夫假设:隐藏的马尔科夫链在时刻t的状态只和t - 1的状态有关
P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1),t=1,2,...,TP(i_t|i_{t-1},o_{t-1},...,i_1,o_1) = P(i_t|i_{t-1}), t = 1,2,...,TP(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1),t=1,2,...,T
解读:当我们知道从t - 1时刻到1时刻下所有的状态i和观测o的时候,t时刻的状态iti_tit只和状态it−1i_{t-1}it−1有关
**观测独立性假设:**观测只和当前的状态有关
P(ot∣iT,oT,iT−1,oT−1,...,it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it),t=1,2,...,TP(o_t|i_T,o_T,i_{T-1},o_{T-1},...,i_{t+1},o_{t+1},\textcolor{red}{i_t},i_{t-1},o_{t-1},...,i_1,o_1) = P(o_t|i_t), t = 1,2,...,TP(ot∣iT,oT,iT−1,oT−1,...,it+1,ot+1,it,it−1,ot−1,...,i1,o1)=P(ot∣it),t=1,2,...,T
解读:当我们知道所有从时刻T到时刻1下所有的状态i和观测o的时候,t时刻的观测之和当前时刻的状态i有关
隐马尔科夫模型的基本概念:分类
隐马尔科夫模型的基本概念:例子
分析:状态集合为盒子序列(不可知),观测集合为球的颜色,初始状态概率分布为等概率,状态转移概率矩阵为转移规则,观测概率矩阵为N*M大小的红白球在盒子中的比重
隐马尔科夫模型的基本概念:生成过程
step --(3)对应于齐次马尔可夫假设,t时刻下的状态iti_tit只和t-1时刻下的it−1i_{t-1}it−1有关
step --(4)对应于观测独立假设,t时刻下的观测只和当前时刻的状态iti_tit有关
2.隐马尔科夫模型的三个基本问题
1.概率计算问题
- 已知模型 λ=(A,B,Π)λ = (A,B,Π)λ=(A,B,Π)和观测序列 O = (o1,o2,...,oTo_1,o_2,...,o_To1,o2,...,oT)
- 计算概率P(O∣λ)P(O|λ)P(O∣λ)
2.预测问题(解码问题)
- 已知模型 λ=(A,B,Π)λ = (A,B,Π)λ=(A,B,Π)和观测序列 O = (o1,o2,...,oTo_1,o_2,...,o_To1,o2,...,oT)
- 计算使得概率P(O∣λ)P(O|λ)P(O∣λ)最大的状态序列I=(i−1,i12,...,iT)I = (i-1,i_12,...,i_T)I=(i−1,i12,...,iT)
3.学习问题
- 已知观测序列 O = (o1,o2,...,oTo_1,o_2,...,o_To1,o2,...,oT)
- 估计模型 λ ,使P(O∣λ)P(O|λ)P(O∣λ)最大
概率计算算法
- 已知模型 λ=(A,B,Π)λ = (A,B,Π)λ=(A,B,Π)和观测序列 O = (o1,o2,...,oTo_1,o_2,...,o_To1,o2,...,oT)
- bj(ot)b_j(o_t)bj(ot)可以是离散的,也可以是连续的
- 计算概率P(O∣λ)P(O|λ)P(O∣λ)
概率计算算法:直接计算法
思路:
列举所有可能的长度为T的状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,i_T)I=(i1,i2,...,iT),每个iii可能都有N个状态
求各个状态III与观测序列O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)O=(o1,o2,...,oT)的联合概率P(O,I∣λ)P(O,I|λ)P(O,I∣λ)
然后对所有可能的状态序列求和,得到P(O∣λ)P(O|λ)P(O∣λ)
具体计算过程
状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,i_T)I=(i1,i2,...,iT)的概率是P(I∣λ)=Πi1ai1i2ai2i3...aiT−1iTP(I|λ) = Π_{i1}a_{i_1i_2}a{i_2i_3}...a_{i_{T-1}i_T}P(I∣λ)=Πi1ai1i2ai2i3...aiT−1iT
初始概率*由状态i1i_1i1转移到状态i2i_2i2的概率
- 对固定的状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,i_T)I=(i1,i2,...,iT),观测序列O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)O=(o1,o2,...,oT)的概率P(O∣I,λ)P(O|I,λ)P(O∣I,λ)
P(O∣I,λ)=bi1(o1)bi2(o2)...bT(oT)P(O|I,λ) = b_{i_1}(o_1)b_{i_2}(o_2)...b_T(o_T)P(O∣I,λ)=bi1(o1)bi2(o2)...bT(oT)
O 和 I 同时出现的联合概率P(O,I∣λ)=P(O∣I,λ)P(I∣λ)P(O,I|λ) = P(O|I,λ)P(I|λ)P(O,I∣λ)=P(O∣I,λ)P(I∣λ)
=Πi1bi1(o1)ai1i2bi2...aiT−1iT(OT)= Π_{i_1}b_{i_1}(o_1)a_{i_1i_2b_{i_2}}...a_{i_{T-1}i_T}(O_T)=Πi1bi1(o1)ai1i2bi2...aiT−1iT(OT)
对所有可能的状态序列 I 求和,得到观测序列O的概率P(O∣λ)P(O|λ)P(O∣λ)
P(O∣λ)=∑IP(O∣I,λ)P(I∣λ)P(O|λ) = \sum \limits_{I}P(O|I,λ)P(I|λ)P(O∣λ)=I∑P(O∣I,λ)P(I∣λ)
=∑i1,i2,...,iTΠi1bi1(o1)ai1i2bi2...aiT−1iT(OT)= \sum \limits_{i_1,i_2,...,i_T}Π_{i_1}b_{i_1}(o_1)a_{i_1i_2b_{i_2}}...a_{i_{T-1}i_T}(O_T)=i1,i2,...,iT∑Πi1bi1(o1)ai1i2bi2...aiT−1iT(OT)
复杂度:O(TNT)O(TN^T)O(TNT) 时间复杂度太高了
概率计算算法:前向算法
前向算法
**前向概率定义:**给定马尔可夫模型λ,定义到时刻t部分观测序列为o1,o2,...,oto_1,o_2,...,o_to1,o2,...,ot且状态为qiq_iqi的概率为前向概率,记作(可省略λ)
αt(i)=P(o1,o2,...,ot,it=qi∣λ)\alpha_t(i) = P(o_1,o_2,...,o_t,i_t = q_i|\lambda) αt(i)=P(o1,o2,...,ot,it=qi∣λ)算法(观测序列概率的前向算法)
输入:隐马尔科夫模型λ,观测序列O
输出:观测序列概率P(O∣λ)P(O|λ)P(O∣λ)
(1)初值:初始概率观测概率α(i)\alpha(i)α(i)一共有N个
α1(i)=πibi(o1),i=1,2,...,N\alpha_1(i) = \pi_ib_i(o_1), i=1,2,...,N α1(i)=πibi(o1),i=1,2,...,N
(2)递推:对 t = 1,2,…,T-1 次数i和j都要进行嵌套循环,N2,外层又隐藏着T\textcolor{red}{次数i和j都要进行嵌套循环,N^2,外层又隐藏着T}次数i和j都要进行嵌套循环,N2,外层又隐藏着T
αt+1(i)=[∑j=1Nαt(j)aij]bi(ot+1),i=1,2,...,N\alpha_{t+1}(i) = [\sum_{j=1}^{N}\alpha_t(j)a_{ij}]b_i(o_{t+1}), i=1,2,...,N αt+1(i)=[j=1∑Nαt(j)aij]bi(ot+1),i=1,2,...,N
对于每个时刻t,都要求出N个前向概率,所以一共有TN个前向概率
(3)终止:t = T
P(O∣λ)=∑i=1NαT(i)P(O|\lambda) = \sum_{i=1}^{N}\alpha_T(i) P(O∣λ)=i=1∑NαT(i)
从下图中可以看出递推这一步的计算方法:t-1时刻的前向概率*状态转移概率,然后求和,再*t时刻下的观测概率
前向算法性能
对上上述图中的三个状态序列,如果不使用前向算法,标号①的路径概率将被重复计算
前向算法的关键:减少计算量的原因在于,他每一次的计算直接引用前一个时刻的计算结果,避免重复计算\textcolor{red}{避免重复计算}避免重复计算
复杂度从O(TNT)O(TN^T)O(TNT)降到了O(TN2)O(TN^2)O(TN2)
对于初值步骤公式的证明,使用贝叶斯公式
α1(i)=P(o1,i1=qi)=P(i1=qi)P(o1∣i1=qi)=πibj(o1)\alpha_1(i) = P(o_1,i_1 = q_i) = P(i_1 = q_i)P(o_1|i_1 = q_i) = \pi_ib_j(o_1) α1(i)=P(o1,i1=qi)=P(i1=qi)P(o1∣i1=qi)=πibj(o1)
- 对于终止步骤的公式证明,边缘分布
αT(i)=P(o1,o2,...,OT,iT=qi∣λ)=P(O,iT=qi∣λ)P(O∣λ)=∑i=1NP(O,iT=qi∣λ)=∑i=1NαT(i)\alpha_T(i) = P(o_1,o_2,...,O_T,i_T = q_i|\lambda) = P(O,i_T = q_i|\lambda) \\P(O|\lambda) = \sum_{i=1}^{N}P(O,i_T = q_i|\lambda) = \sum_{i=1}^{N}\alpha_T(i) αT(i)=P(o1,o2,...,OT,iT=qi∣λ)=P(O,iT=qi∣λ)P(O∣λ)=i=1∑NP(O,iT=qi∣λ)=i=1∑NαT(i)
- 对于递推步骤公式的证明
αt(j)=P(qt=j,o1t)=∑i=1NP(qt−1=i,qt=j,o1t−1,ot)贝叶斯=∑i=1NP(qt=j,ot∣qt−1=i,o1t−1)P(qt−1=i,oit−1)齐次马尔可夫假设=∑i=1NP(qt=j,ot∣qt−1=i)αt−1(i)贝叶斯=∑i=1NP(ot∣qt=j,qt−1=i)P(qt=j∣qt−1=i)αt−1(i)观测独立假设=∑i=1Nbj(ot)aijαt−1(i)\begin{align} \alpha_t(j) =& P(q_t = j,o_1^t)\\ =& \sum_{i=1}^{N}P(q_{t-1} = i,q_t = j,o_1^{t-1},o_t) 贝叶斯\\ =& \sum_{i=1}^{N}P(q_{t} = j,o_t|q_{t-1} = i,o_1^{t-1})P(q_{t-1} = i,o_i^{t-1})齐次马尔可夫假设\\ =& \sum_{i=1}^{N}P(q_t = j,o_t|q_{t-1} = i)\alpha_{t-1}(i)贝叶斯\\ =& \sum_{i=1}^{N}P(o_t|q_t = j,q_{t-1} = i)P(q_t = j|q_{t-1 }=i)\alpha_{t-1}(i)观测独立假设\\ =& \sum_{i=1}^{N}b_j(o_t)a_{ij}\alpha_{t-1}(i)\\ \end{align} αt(j)======P(qt=j,o1t)i=1∑NP(qt−1=i,qt=j,o1t−1,ot)贝叶斯i=1∑NP(qt=j,ot∣qt−1=i,o1t−1)P(qt−1=i,oit−1)齐次马尔可夫假设i=1∑NP(qt=j,ot∣qt−1=i)αt−1(i)贝叶斯i=1∑NP(ot∣qt=j,qt−1=i)P(qt=j∣qt−1=i)αt−1(i)观测独立假设i=1∑Nbj(ot)aijαt−1(i)
概率计算算法:后向算法
后向算法
**后向概率定义:**给定隐马尔可夫模型λ,定义在时刻t状态为qiq_iqi的条件下,从t+1到T时刻部分观测序列为ot+1,ot+2,...,oTo_{t+1},o_{t+2},...,o_Tot+1,ot+2,...,oT的概率为后向概率,记作(可省略λ)
βt(i)=P(ot+1,ot+2,...,oT∣it=qi,λ)\beta_t(i) = P(o_{t+1},o_{t+2},...,o_T|i_t = q_i,\lambda) βt(i)=P(ot+1,ot+2,...,oT∣it=qi,λ)算法(观测序列概率的前向算法)
输入:隐马尔科夫模型λ,观测序列O
输出:观测序列概率P(O∣λ)P(O|λ)P(O∣λ)
(1)初值:一共有N个
βT(i)=1,i=1,2,...,N\beta_T(i) = 1, i=1,2,...,N βT(i)=1,i=1,2,...,N
(2)递推:对 t = T-1,T-2,…,1 次数i和j都要进行嵌套循环,N2,外层又隐藏着T\textcolor{red}{次数i和j都要进行嵌套循环,N^2,外层又隐藏着T}次数i和j都要进行嵌套循环,N2,外层又隐藏着T
βt(i)=∑j=1Naijbi(ot+1)βt+1(j),i=1,2,...,N\beta_t(i) = \sum_{j=1}^{N}a_{ij}b_i(o_{t+1})\beta_{t+1}(j), i=1,2,...,N βt(i)=j=1∑Naijbi(ot+1)βt+1(j),i=1,2,...,N
对于每个时刻t,都要求出N个后向概率,所以一共有T*N个后向概率
(3)终止:t = T
P(O∣λ)=∑i=1Nπibi(o1)β1(i)P(O|\lambda) = \sum_{i=1}^{N}\pi_ib_i(o_1)\beta_1(i) P(O∣λ)=i=1∑Nπibi(o1)β1(i)
预测算法
预测算法:viterbi解码算法
已知模型 λ = (A, B, π\piπ)和观测序列 O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)O=(o1,o2,...,oT)
bj(ot)b_j(o_t)bj(ot)可以是离散的也可以是连续的
求给定观测序列O条件下可以使得P(I)最大的状态序列I=(i1,i2,...,iT)I = (i_1,i_2,...,iT)I=(i1,i2,...,iT),即P(I∣O)P(I|O)P(I∣O)
用动态规划求概率最大路径(最优路径),一个路径对应一个状态序列
最优路径的特性:t时刻通过的节点it∗i_t^*it∗,到终结点iT∗i_T^*iT∗,这条路就必须是所有可能的部分路径中最优的选择
只需要在时刻 t = 1开始,递推的计算在时刻t状态为i的各条部分路径的最大概率,直至得到时刻 t= T 状态为 i 的各条路径的最大概率,时刻 t = T 的最大概率即为最优路径的概率p∗p^*p∗,最优路径的终结点iT∗i_T^*iT∗也将得到
之后,为了找出最优路径的各个节点,从终结点开始,由后向前逐步求得节点iT∗,..,i1∗i_T^*,..,i_1^*iT∗,..,i1∗,得到最优路径$ I^* = (i_1*,i_2,…,i_T^)$
Viterbi算法细节
输入:模型λ = (A, B, π\piπ)和观测 O=(o1,o2,...,oT)O = (o_1,o_2,...,o_T)O=(o1,o2,...,oT)
输出:最优路径(状态序列)$ I^* = (i_1*,i_2,…,i_T^)$
(1)初始化
δ1(i)=πibi(o1),i=1,2,...,Nψ1(i)=0,i=1,2,...,N\delta_1(i) = \pi_ib_i(o_1),i=1,2,...,N\\ \psi_1(i) = 0,i=1,2,...,N δ1(i)=πibi(o1),i=1,2,...,Nψ1(i)=0,i=1,2,...,N
(2)递推,对于 t = 2,3,…,T
δt(i)=max1≤j≤N[δt−1(j)aji]bi(ot),i=1,2,...,Nψt(i)=argmax1≤j≤N[δt−1(j)aji],i=1,2,...,N\delta_t(i) = \max \limits_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}]b_i(o_t),i=1,2,...,N \\ \psi_t(i) = arg \max \limits_{1 \leq j \leq N}[\delta_{t-1}(j)a_{ji}],i=1,2,...,N δt(i)=1≤j≤Nmax[δt−1(j)aji]bi(ot),i=1,2,...,Nψt(i)=arg1≤j≤Nmax[δt−1(j)aji],i=1,2,...,N
(3)终止
P∗=max1≤i≤NδT(i)iT∗=argmax1≤i≤N[δT(i)]P^* = \max \limits_{1 \leq i \leq N}\delta_T(i)\\ i_T^* = arg \max \limits_{1 \leq i \leq N}[\delta_T(i)] P∗=1≤i≤NmaxδT(i)iT∗=arg1≤i≤Nmax[δT(i)]
(4)最优路径回溯,对于 t = T-1,T-2,…,1
it∗=ψt+1(it+1∗)i_t^* = \psi_{t+1}(i_{t+1}^*) it∗=ψt+1(it+1∗)
求得最优路径 $ I^* = (i_1*,i_2,…,i_T^)$
除去ψ\psiψ,对比维特比算法和前向算法发现,两个算法及其相似,只是前向算法求∑\sum∑,而维特比算法求argmaxarg \maxargmax
学习算法
Viterbi学习算法
- 已知观测序列O=(o1,o2,...,oT),bj(ot)=∑m=1McjmN(ot,μjm,Σjm)O = (o_1,o_2,...,o_T),b_j(o_t) = \sum_{m=1}^Mc_{jm}N(o_t,\mu_{jm},\Sigma_{jm})O=(o1,o2,...,oT),bj(ot)=∑m=1McjmN(ot,μjm,Σjm)
即已知观测序列O以及bj(ot)b_j(o_t)bj(ot)服从GMM(连续)
估计HMM-GMM模型参数 λ ,使得P(O∣λ)P(O|\lambda)P(O∣λ)最大
参数 λ 包括:
初始状态概率向量:π=(πi)\pi = (\pi_i)π=(πi)
状态转移矩阵A=[aij]N∗NA = [a_{ij}]_{N*N}A=[aij]N∗N
状态 j 的GMM参数(cjm,μjm,Σjm),j=1,2,...,N;m=1,2,..,M(c_{jm}, \mu_{jm}, \Sigma_{jm}),j = 1,2,...,N; m = 1,2,..,M(cjm,μjm,Σjm),j=1,2,...,N;m=1,2,..,M表示GMM分量的编号,对于这M个分量,每个分量都有初始概率,均值,方差这几个参数
上图上半部分表示状态初始概率以及状态转移矩阵A
上图下半部分表示每个分量的GMM模型
如果已知状态-观测对齐序列,每个观测OtO_tOt对应一个具体的状态
状态观测对齐序列:每个观测都对应一个状态
状态-观测对齐序列可以通过Viterbi解码算法得到,也可以通过人工标注得到
Viterbi解码算法工作原理概述:Viterbi算法主要做的事情就是得到观测对应的概率最大的状态路径,通过Viterbi解码算法,可以拿到这一条状态路径,也就知道了每个观测对应的状态
πj\pi_jπj可以通过最大似然估计得到(数数)
- 令C(i)C(i)C(i)表示状态为 i 的次数
- πi=c(i)/Σkc(k)\pi_i = c(i)/\Sigma_kc(k)πi=c(i)/Σkc(k)
- 公式解读:得到状态-观测对齐序列后,可以数出来状态 i 的次数 除以全部状态的次数
aija_{ij}aij也可以通过最大似然估计得到(数数)
- 令C(i→j)C(i \rightarrow j)C(i→j)表示从状态 i 转移到状态 j 的次数
- aij=C(i→j)/ΣkC(i→k)a_{ij} = C(i \rightarrow j)/ \Sigma_kC(i \rightarrow k)aij=C(i→j)/ΣkC(i→k)
- 公式解读:得到状态-观测对齐序列后,可以数出来状态 i 转移到状态 j 的次数 除以全部状态转移的次数(处于状态i的次数)
可得到每个状态 j 对应的观测集合Zj=(y1,y2,...,yN)Z_j = (y_1,y_2,...,y_N)Zj=(y1,y2,...,yN) 注意:此处的N不同于状态N
每个状态对应一个GMM,也就得到了每个GMM对应的观测集合Zj=(y1,y2,...,yN)Z_j = (y_1,y_2,...,y_N)Zj=(y1,y2,...,yN)
Q:用Viterbi算法得到对齐序列时,需要知道GMM−HMM模型λ,这个λ怎么来的?\textcolor{red}{Q:用Viterbi算法得到对齐序列时,需要知道GMM-HMM模型 \lambda ,这个 \lambda 怎么来的?}Q:用Viterbi算法得到对齐序列时,需要知道GMM−HMM模型λ,这个λ怎么来的?
暂时假设bj(ot)=N(ot,μj,Σj)b_j(o_t) = N(o_t,\mu_j, \Sigma_j)bj(ot)=N(ot,μj,Σj),也就是GMM只有一个高斯,即服从单高斯
∣Zj∣|Z_j|∣Zj∣表示ZjZ_jZj的元素个数
μj=ΣotϵZjOt∣Zj∣Σj=ΣotϵZj(ot−μj)(ot−μj)T∣Zj∣\mu_j = \frac{ \Sigma_{o_t \epsilon Z_j} O_t } {|Z_j|} \\ \Sigma_j = \frac{\Sigma_{o_t \epsilon Z_j}(o_t - \mu_j)(o_t- \mu_j)^T} {|Z_j|} μj=∣Zj∣ΣotϵZjOtΣj=∣Zj∣ΣotϵZj(ot−μj)(ot−μj)T
通过Viterbi解码算法拿到状态-观测对其序列之后,可以知道每个状态对应的观测数据,对于每个状态 j 的这一批观测数据,带入高斯混合模型bj(ot)=Σm=1McjmN(ot;μjm,Σjm)b_j(o_t) = \Sigma_{m=1}^M c_{jm} N(o_t;\mu_{jm},\Sigma_{jm})bj(ot)=Σm=1McjmN(ot;μjm,Σjm)进行参数迭代
收敛的话,通过指定训练的轮数或者一个准则就可以实现
Baum-Welch学习算法
(1)暂时假设bj(ot)=N(ot;μj,Σj)b_j(o_t) = N(o_t;\mu_j,\Sigma_j)bj(ot)=N(ot;μj,Σj),也就是GMM只有一个分量
Viterbi学习算法是一种近似,只考虑了最优对齐路径,而我们想考虑所有的路径
每个时刻t每个状态j以一定的概率出现,而不是硬的状态-观测对齐(也就是每个时刻只有一个状态出现,实际上是每个状态以一定的概率出现)
**状态占用概率:**给的模型 λ 和观测O,在时刻t处于状态qiq_iqi的概率为γt(i)\gamma_t(i)γt(i)
γt(i)=P(it=qi∣O,λ)=αt(i)βt(i)Σi=1NαT(i)\gamma_t(i) = P(i_t = q_i|O,\lambda) = \frac{\alpha_t(i)\beta_t(i)}{\Sigma_{i=1}^N\alpha_T(i)} γt(i)=P(it=qi∣O,λ)=Σi=1NαT(i)αt(i)βt(i)可以将此概率用于一个迭代算法,学习到参数 λ :EM算法(在HMM中成为Baum-Welch算法)
每次迭代可以分为两步
- E步(count):估计状态占用概率(期望)
- M步(normalize):基于估计的状态占用概率,重新估计参数 λ (最大化)
证明状态占用概率γt(i)=P(it=qi∣O,λ)=αt(i)βt(i)Σi=1NαT(i)(结合前向概率和后向概率的定义)\textcolor{red}{证明状态占用概率\gamma_t(i) = P(i_t = q_i|O,\lambda) = \frac{\alpha_t(i)\beta_t(i)}{\Sigma_{i=1}^N\alpha_T(i)}(结合前向概率和后向概率的定义)}证明状态占用概率γt(i)=P(it=qi∣O,λ)=Σi=1NαT(i)αt(i)βt(i)(结合前向概率和后向概率的定义)
省略 λ,o1t=o1,o2,...,ot,O=o1To_1^t = o_1,o_2,...,o_t,O = o_1^To1t=o1,o2,...,ot,O=o1T
KaTeX parse error: Expected 'EOF', got '&' at position 15: \gamma_t(i) =&̲ P(i_t = q_i|O,…
P(O∣λ)=∑j=1NαT(j)P(O|\lambda) = \sum_{j=1}^{N}\alpha_T(j) P(O∣λ)=j=1∑NαT(j)
证毕
Viterbi学习算法更新参数时,∣Zj∣|Z_j|∣Zj∣是一个硬条件,是直接固定的,所有状态下的观测个数相加
与状态占用概率类似,定义给定模型 λ 和观测 O ,在时刻t处于状态 i 且在t +1时刻处于状态 j的概率为ξt(i,j)\xi_t(i,j)ξt(i,j)
KaTeX parse error: Expected 'EOF', got '&' at position 14: \xi_t(i.j) =&̲ P(i_t = i,i_{t…
且有γt(i)=Σk=1Nξt(i,k)\gamma_t(i) = \Sigma_{k=1}^N\xi_t(i,k)γt(i)=Σk=1Nξt(i,k),t时刻下状态 i 的状态转移概率
由该概率可得到转移概率和初始概率
a^ij=∑t=1T−1ξt(i,j)∑t=1T−1∑k=1Nξt(i,k)=∑t=1T−1ξt(i,j)∑t=1T−1γt(i)=从i→j的概率从i转移出去的概率π^i=γ1(i)\begin{aligned} \hat{a}_{i j} &=\frac{\sum_{t=1}^{T-1} \xi_{t}(i, j)}{\sum_{t=1}^{T-1} \sum_{k=1}^{N} \xi_{t}(i, k)}=\frac{\sum_{t=1}^{T-1} \xi_{t}(i, j)}{\sum_{t=1}^{T-1} \gamma_{t}(i)} = \frac{从i \rightarrow j 的概率}{从i转移出去的概率}\\ \hat{\pi}_{i} &=\gamma_{1}(i) \end{aligned} a^ijπ^i=∑t=1T−1∑k=1Nξt(i,k)∑t=1T−1ξt(i,j)=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)=从i转移出去的概率从i→j的概率=γ1(i)
证明ξt(i,j)=αt(i)aijbj(ot+1)βt+1(j)∑k=1NαT(k)\textcolor{red}{证明\xi_{t}(i, j)=\frac{\alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j)}{\sum_{k=1}^{N} \alpha_{T}(k)}}证明ξt(i,j)=∑k=1NαT(k)αt(i)aijbj(ot+1)βt+1(j)
由前面前向公式的递推证明可知αt(i)aijbj(ot+1)=P(it=qi,it+1=qj,o1t+1∣λ)\alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right)=P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, o_{1}^{t+1} \mid \lambda\right)αt(i)aijbj(ot+1)=P(it=qi,it+1=qj,o1t+1∣λ)
由后向公式的定义可知:βt+1(j)=P(ot+2T∣it+1=qj,λ)\beta_{t+1}(j)=P\left(o_{t+2}^{T} \mid i_{t+1}=q_{j}, \lambda\right)βt+1(j)=P(ot+2T∣it+1=qj,λ)
核心部分证明:对于P(it=i,it+1=j,O∣λ)P\left(i_{t}=i, i_{t+1}=j, O \mid \lambda\right)P(it=i,it+1=j,O∣λ)
P(it=qi,it+1=qj,O∣λ)=P(it=qi,it+1=qj,o1t+1,ot+2T∣λ)=P(it=qi,it+1=qj,o1t+1∣ot+2T,λ)P(ot+2T∣λ)=P(it=qi,it+1=qj,o1t+1∣λ)P(ot+2T∣it+1=qj,λ)=αt(i)aijbj(ot+1)βt+1(j)\begin{aligned} P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, O \mid \lambda\right) &=P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, o_{1}^{t+1}, o_{t+2}^{T} \mid \lambda\right) \\ &=P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, o_{1}^{t+1} \mid o_{t+2}^{T}, \lambda\right) P\left(o_{t+2}^{T} \mid \lambda\right) \\ &=P\left(i_{t}=q_{i}, i_{t+1}=q_{j}, o_{1}^{t+1} \mid \lambda\right) P\left(o_{t+2}^{T} \mid i_{t+1}=q_{j}, \lambda\right) \\ &=\alpha_{t}(i) a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j) \end{aligned} P(it=qi,it+1=qj,O∣λ)=P(it=qi,it+1=qj,o1t+1,ot+2T∣λ)=P(it=qi,it+1=qj,o1t+1∣ot+2T,λ)P(ot+2T∣λ)=P(it=qi,it+1=qj,o1t+1∣λ)P(ot+2T∣it+1=qj,λ)=αt(i)aijbj(ot+1)βt+1(j)
(2)当bj(ot)=∑m=1McjmN(ot;μjm,Σjm)b_{j}\left(o_{t}\right)=\sum_{m=1}^{M} c_{j m} \mathcal{N}\left(o_{t} ; \mu_{j m}, \Sigma_{j m}\right)bj(ot)=∑m=1McjmN(ot;μjm,Σjm)时,
与前面类似,定义给定模型 λ 和观测 O ,在时刻t处于状态qjq_jqj且为GMM第k个分量的概率为ζt(j,k)\zeta_{t}(\boldsymbol{j}, \boldsymbol{k})ζt(j,k)
ζt(j,k)=P(it=qj,mt=k∣O,λ)=P(it=qj,mt=k,O∣λ)P(O∣λ)=∑iαt−1(i)aijcjkbjk(ot)βt(j)∑i=1NαT(i)\begin{aligned} \zeta_{t}(j, k) &=P\left(i_{t}=q_{j}, m_{t}=k \mid O, \lambda\right) \\ &=\frac{P\left(i_{t}=q_{j}, m_{t}=k, O \mid \lambda\right)}{P(O \mid \lambda)} \\ &=\frac{\sum_{i} \alpha_{t-1}(i) a_{i j} c_{j k} b_{j k}\left(o_{t}\right) \beta_{t}(j)}{\sum_{i=1}^{N} \alpha_{T}(i)} \end{aligned} ζt(j,k)=P(it=qj,mt=k∣O,λ)=P(O∣λ)P(it=qj,mt=k,O∣λ)=∑i=1NαT(i)∑iαt−1(i)aijcjkbjk(ot)βt(j)则有
μ^jk=Σt=1Tζt(j,k)otΣt=1Tζt(j,k)Σ^jk=Σt=1Tζt(j,k)(ot−μ^jk)(ot−μ^jk)TΣt=1Tζt(j,k)c^jk=Σt=1Tζt(j,k)Σt=1TΣkζt(j,k)\hat \mu_{jk} = \frac{\Sigma_{t=1}^T \zeta_t(j,k)o_t}{\Sigma_{t=1}^T \zeta_t(j,k)}\\ \hat \Sigma_{jk} = \frac{\Sigma_{t=1}^T \zeta_t(j,k)(o_t - \hat \mu_{jk})(o_t - \hat \mu_{jk})^T}{\Sigma_{t=1}^T \zeta_t(j,k)}\\ \hat c_{jk} = \frac{\Sigma_{t=1}^T \zeta_t(j,k)}{\Sigma_{t=1}^T \Sigma_k \zeta_t(j,k)} μ^jk=Σt=1Tζt(j,k)Σt=1Tζt(j,k)otΣ^jk=Σt=1Tζt(j,k)Σt=1Tζt(j,k)(ot−μ^jk)(ot−μ^jk)Tc^jk=Σt=1TΣkζt(j,k)Σt=1Tζt(j,k)
Baum-Welch学习算法总结:
学习笔记四:HMM(隐马尔科夫模型)相关推荐
- 隐马尔科夫模型c#语言算法实现,HMM学习最佳范例四:隐马尔科夫模型
四.隐马尔科夫模型(Hidden Markov Models) 1.定义(Definition of a hidden Markov model) 一个隐马尔科夫模型是一个三元组(pi, A, B). ...
- 通过hmmlearn学习使用HMM隐马尔科夫模型
一.了解隐马尔科夫模型(HMM) 具体可参考https://www.zhihu.com/question/20962240,讲得很通俗易懂. 本文使用的是hmmlearn模块,可以使用pip inst ...
- HMM(隐马尔科夫模型)
HMM模型基础 介绍 隐马尔科夫模型(Hidden Markov Model,以下简称HMM)是比较经典的机器学习模型了,它在语言识别,自然语言处理,模式识别等领域得到广泛的应用.当然,随着目前深度学 ...
- HMM隐马尔科夫模型(附维特比代码)
背景知识:马尔科夫模型 1 马尔科夫的局限性 在一些情况下,我们并不能直接得到观测的结果,比如在天气系统中,我们不能直接得到天气的状态,但是我们有一堆蚂蚁,可以从蚂蚁的行为状态找到天气变化的关系规律. ...
- 一文讲透:HMM隐马尔科夫模型
一.马尔科夫模型 1 马尔科夫的几个概念 要想理解隐马尔科夫模型,首先要理解马尔科夫模型. 下面通过一个天气变化的例子来认识马尔科夫模型中的几个重要概念.
- HMM隐马尔科夫模型 学习总结
隐马尔可夫模型(Hidden Markov Model,简称HMM)是结构最简单的动态贝叶斯网(dynamic Bayesian network),这是一种著名的有向图模型,主要用于时序数据建模,在语 ...
- HMM隐马尔科夫模型浅析
http://www.zhihu.com/question/20962240 著作权归作者所有. 商业转载请联系作者获得授权,非商业转载请注明出处. 作者:Yang Eninala 链接:http:/ ...
- 强化学习(一)-->隐马尔科夫模型HMM-->HMM模型基础
隐马尔科夫模型HMM 隐马尔科夫模型算是比较经典的机器学习模型了,在自然语言处理.语言识别.模型识别等这些领域也得到了广泛的应用.在深度学习的崛起,尤其是RNN.LSTM等神经网络序列模型的火热,HM ...
- 隐马尔科夫模型HMM之前后向算法Python代码实现,包括2个优化版本
☕️ 本文系列文章汇总: (1)HMM开篇:基本概念和几个要素 (2)HMM计算问题:前后向算法 (3)HMM学习问题:Baum-Welch算法 (4) HMM预测问题:维特比算法 本篇算法原理分析 ...
- 隐马尔科夫模型HMM详解(1)
目录 隐马尔科夫模型基本概念 隐马尔科夫模型的三个基本问题 概率计算 预测算法-Viterbi算法 HMM学习算法参考下篇文章 代码地址:https://gitee.com/liangcd/speec ...
最新文章
- C# 实现简单打印(二)-打印一个文本文档,打印的内容是多行的
- python了解一下_Python发展史了解一下
- 移动IM开发指南1:如何进行技术选型
- win7计算机管理禁用,Win7任务管理器已被系统管理员禁用怎么办
- ios开发 多人语音聊天_手游语音市场的现状、机遇与挑战
- 唱吧基于 MaxCompute 弥补自建体系的不足
- Google Colab 免费GPU 教程
- c++二进制转十进制_进制转换:二进制、八进制、十进制、十六进制相互转换
- 80-200-040-原理-MySQL服务端架构
- nginx是干嘛用的_上帝视角——面试官常问的nginx的几个问题
- 深度学习模型的可视化技术总结
- 神州数码云平台基础环境搭建
- 从哪些方面评价一款在线客服系统产品
- 基于梯度下降算法求解线性回归
- 《仙剑奇侠传3》全攻略
- HyperLynx(十三)Hyperlynx前放置之对网络的EMC分析
- 百度地图如何在html中显示图片,在网页中插入百度地图(实例)
- android保存到本地的图片、视频相册里找不到怎么办?
- python-Opencv 图片锐化
- 如何在网上选到一瓶心仪的红酒?通过文本分析预测葡萄酒的质量