HMM学习算法参考下篇文章
代码地址:6.1公布
先看一个小问题:
问题:假设你是2077年的气候学家,正在进行气候研究,无法获得西安2021年的天气记录。你找到了果冻的日记本,上面列出了果冻这个夏天每天吃的冰淇淋数目。你的目标是:根据观测量(果冻夏天每天吃的冰淇淋数目)估计夏天每天的天气。假设天气只有冷和热两种可能,果冻吃的冰淇淋数目只有1,2,3三种可能。
你的任务是:
隐马尔科夫模型定义:
HMM由初始概率分布、状态转移概率分布和观测概率分布决定,当观测为离散值时:
Q = { q 1 q 2 … q N } Q=\left\{q_{1} q_{2} \ldots q_{N}\right\} \quad Q={ q1q2…qN} 所有可能的状态的集合 ( N (N (N 个 ) ) )
V = { v 1 v 2 … v M } V=\left\{v_{1} v_{2} \ldots v_{M}\right\} \quad V={ v1v2…vM} 所有可能的观测的集合 ( M (M (M 个 ) ) )
I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) \quad I=(i1i2…iT) 长度为 T T T的状态序列,每个来自 Q Q Q
O = ( o 1 o 2 … o T ) O=\left(o_{1} o_{2} \ldots o_{T}\right) \quad O=(o1o2…oT) 长度为 T T T的观测序列,每个来自 V V V
A = [ a i j ] N × N A=\left[a_{i j}\right]_{N \times N} \quad A=[aij]N×N 状交转移概率矩阵,其中 a i j = P ( i t + 1 = q j ∣ i t = q i ) , i = 1 , 2 , … , N ; j = 1 , 2 , … , N a_{i j}=P\left(i_{t+1}=q_{j} \mid i_{t}=q_{i}\right), i=1,2, \ldots, N ; j=1,2, \ldots, N aij=P(it+1=qj∣it=qi),i=1,2,…,N;j=1,2,…,N是在时刻 t t t 处于状态 q i q_{i} qi 的条件下,在时刻 t + 1 t+1 t+1 转移到状态 q j q_{j} qj 的概率
B = [ b j ( o t ) ] N × M B = [b_{j}\left(o_{t}\right)]_{N \times M} B=[bj(ot)]N×M 观测概率矩阵,其中 b j ( o t ) = P ( o t = v k ∣ i t = q j ) , k = 1 , 2 , , … , M ; j = 1 , 2 , … , N b_{j}\left(o_{t}\right)=P\left(o_{t}=v_{k} \mid i_{t}=q_{j}\right), k=1,2,, \ldots, M ; j=1,2, \ldots, N bj(ot)=P(ot=vk∣it=qj),k=1,2,,…,M;j=1,2,…,N,是在时刻t处于状态 q j q_j qj的条件下生成观测 v k v_k vk的概率。
π = ( π i ) \pi=\left(\pi_{i}\right) \quad π=(πi) 初始状态概率向量,其中 π i = P ( i 1 = q i ) , i = 1 , 2 , … , N \pi_{i}=P\left(i_{1}=q_{i}\right), i=1,2, \ldots, N πi=P(i1=qi),i=1,2,…,N, 是时刻 t = 1 t=1 t=1 处于状态 q i q_i qi的概率
HMM λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π), A , B , π A,B,\pi A,B,π称为HMM的三要素
HMM的两个基本假设
齐次马尔可夫性假设:隐藏的马尔科夫链在时刻t的状态只与t-1的状态有关
P ( i t ∣ i t − 1 , o t − 1 , . . . , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , . . . , T P(i_t|i_{t-1},o_{t-1},...,i_1,o_1) = P(i_t|i_{t-1}), t=1,2,...,T P(it∣it−1,ot−1,...,i1,o1)=P(it∣it−1),t=1,2,...,T
观测独立性假设:观测只与当前时刻的状态有关
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 ) P\left(o_{t} \mid i_{T}, o_{T}, i_{T-1}, o_{T-1}, \ldots, i_{t+1}, o_{t+1}, i_{t}, i_{t-1}, o_{t-1}, \ldots, i_{1}, o_{1}\right)=P\left(o_{t} \mid i_{t}\right) P(ot∣iT,oT,iT−1,oT−1,…,it+1,ot+1,it,it−1,ot−1,…,i1,o1)=P(ot∣it)
HMM的分类
HMM分类 | 观测 | 观测概率分布 | |
---|---|---|---|
离散HMM | 离散值 | 离散(概率) | B = [ b j ( o t ) ] N × M ′ o t ∈ V = { v 1 v 2 … v M } B=\left[b_{j}\left(o_{t}\right)\right]_{N \times M^{\prime}} o_{t} \in V=\left\{v_{1} v_{2} \ldots v_{M}\right\} B=[bj(ot)]N×M′ot∈V={ v1v2…vM} |
连续HMM | 实数、向量 | 连续(概率密度函数) | 单高斯分布: b j ( o t ) = N ( o t ; μ j , Σ j ) b_{j}\left(\boldsymbol{o}_{t}\right)=\mathcal{N}\left(\boldsymbol{o}_{t} ; \boldsymbol{\mu}_{j}, \boldsymbol{\Sigma}_{j}\right) bj(ot)=N(ot;μj,Σj) 高斯混合模型: b j ( o t ) = ∑ m = 1 M α j m N ( o t ; μ j m , Σ j m ) b_{j}\left(\boldsymbol{o}_{t}\right)=\sum_{m=1}^{M} \alpha_{j m} \mathcal{N}\left(\boldsymbol{o}_{t} ; \boldsymbol{\mu}_{j m}, \boldsymbol{\Sigma}_{j m}\right) bj(ot)=∑m=1MαjmN(ot;μjm,Σjm) |
当HMM的观测概率分布由高斯混合模型表示时,称为GMM-HMM,它广泛应用在语音识别、词性标注等任务。
观测序列的生成过程
长度为T的观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的生成过程如下:
输入:隐马尔科夫模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测序列长度 T T T
输出:观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)
- 根据初始状态分布 π \pi π产生状态 i 1 i_1 i1
- t=1
- 根据状态 i t i_t it的观测概率分布 b i t ( k ) b_{i_t}(k) bit(k)生成 o t o_t ot
- 根据状态 i t i_t it的状态转移概率分布 { a i t i t + 1 } \{a_{i_ti_{t+1}}\} { aitit+1}产生状态 i t + 1 i_{t+1} it+1
- t=t+1,如果t
举个小栗子
问题:盒子和球的模型(烂大街栗子)
盒子 | 1 | 2 | 3 | 4 |
---|---|---|---|---|
红球数 | 5 | 3 | 6 | 8 |
白球数 | 5 | 7 | 4 | 2 |
按照如下方法抽球,并产生球颜色的观测序列:
观察者只能观察到球的颜色序列,观测不到球是从哪个盒子取出的,观测序列:球颜色序列;状态序列(隐藏):盒子的序列。重复5次:观测序列 O = { 红 , 红 , 白 , 白 , 红 } O=\{红,红,白,白,红\} O={ 红,红,白,白,红}
QAQ:对应的状态集合,观测集合,初始状态概率向量,状态转移概率矩阵,观测概率矩阵分别是什么?
状态集合: Q = { 盒 子 1 , 盒 子 2 , 盒 子 3 , 盒 子 4 } Q=\{盒子1,盒子2,盒子3,盒子4\} Q={ 盒子1,盒子2,盒子3,盒子4}, N = 4 N=4 N=4
观测集合: V = { 红 , 白 } V=\{红,白\} V={ 红,白}, M = 2 M=2 M=2
初始状态概率分布: π = ( 0.25 , 0.25 , 0.25 , 0.25 ) T \pi = (0.25,0.25,0.25,0.25)^T π=(0.25,0.25,0.25,0.25)T
状态转移概率分布: A = [ 0 1 0 0 0.4 0 0.6 0 0 0.4 0 0.6 0 0 0.5 0.5 ] A=\left[\begin{array}{cccc}0 & 1 & 0 & 0 \\ 0.4 & 0 & 0.6 & 0 \\ 0 & 0.4 & 0 & 0.6 \\ 0 & 0 & 0.5 & 0.5\end{array}\right] A=⎣⎢⎢⎡00.400100.4000.600.5000.60.5⎦⎥⎥⎤
观测概率分布: B = [ 0.5 0.5 0.3 0.7 0.6 0.4 0.8 0.2 ] B=\left[\begin{array}{ll}0.5 & 0.5 \\ 0.3 & 0.7 \\ 0.6 & 0.4 \\ 0.8 & 0.2\end{array}\right] B=⎣⎢⎢⎡0.50.30.60.80.50.70.40.2⎦⎥⎥⎤
概率计算问题
预测问题(解码问题)
已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)
计算使概率 P ( I ∣ O ) P(I|O) P(I∣O)最大的状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2…iT)
学习问题
已知观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)
估计模型 λ \lambda λ,使 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)最大
已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT), b j ( o t ) b_j(o_t) bj(ot)可以是离散的也可以是连续的,计算概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ).
直接计算法
列举所有可能的长度为T状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2…iT),求每个状态序列 I I I与观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的联合概率 P ( O , I ∣ λ ) P(O,I|\lambda) P(O,I∣λ),然后对所有可能的状态序列求和,得到 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
直接计算法
状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2…iT)的概率是$P(I|\lambda)=\pi_{i_1} a_{i_1 i_2} a_{i_2 i_3}… a_{i_{T-1} i_T} $
对固定的状态序列 I = ( i 1 i 2 … i T ) I=\left(i_{1} i_{2} \ldots i_{T}\right) I=(i1i2…iT),观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT)的概率是 P ( O ∣ I , λ ) P(O|I,\lambda) P(O∣I,λ)
O O O和 I I I同时出现的联合概率是:
P ( O , I ∣ λ ) = P ( O ∣ I , λ ) P ( I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i , b b i 2 ( o 2 ) ⋯ a i − 1 τ b i t ( o T ) \begin{aligned} P(O, I \mid \lambda) &=P(O \mid I, \lambda) P(I \mid \lambda) \\ &=\pi_{i_{1}} b_{i_{1}}\left(o_{1}\right) a_{i, b} b_{i_{2}}\left(o_{2}\right) \cdots a_{i_{-1} \tau} b_{i_{t}}\left(o_{T}\right) \end{aligned} P(O,I∣λ)=P(O∣I,λ)P(I∣λ)=πi1bi1(o1)ai,bbi2(o2)⋯ai−1τbit(oT)对所有可能的状态序列 I I I求和,得到观测序列 O O O的概率是 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
P ( O ∣ λ ) = ∑ l P ( O ∣ I , λ ) P ( I ∣ λ ) = ∑ i 1 , i 2 , . . . , i T π i 1 b i 1 ( o 1 ) a i i 2 b i 2 ( o 2 ) ⋯ a h − i T b i r ( o T ) \begin{aligned} P(O \mid \lambda) &=\sum_{l} P(O \mid I, \lambda) P(I \mid \lambda) \\ &=\sum_{i_1,i_2,...,i_T} \pi_{i_{1}} b_{i_{1}}\left(o_{1}\right) a_{i i_{2}} b_{i_{2}}\left(o_{2}\right) \cdots a_{h-i_{T}} b_{i_{r}}\left(o_{T}\right) \end{aligned} P(O∣λ)=l∑P(O∣I,λ)P(I∣λ)=i1,i2,...,iT∑πi1bi1(o1)aii2bi2(o2)⋯ah−iTbir(oT)复杂度: O ( T N T ) O(TN^T) O(TNT),为什么?
每个时刻有N个可能的状态,所有T个时刻,状态序列有 N T N^T NT个可能,每个状态序列对应的时间复杂度是 O ( T ) O(T) O(T),可理解为T次乘法,则总的时间复杂度为 O ( T N T ) O(TN^T) O(TNT)。
前向算法
前向概率定义:给定隐马尔科夫模型 λ \lambda λ,定义到时刻 t t t部分观测序列为 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot,且状态为 q i q_i qi的概率为前向概率:
α t ( i ) = P ( o 1 , o 2 , … , o t , i t = q i ∣ λ ) \alpha_{t}(i)=P\left(o_{1}, o_{2}, \ldots, o_{t}, i_{t}=q_{i} \mid \lambda\right) αt(i)=P(o1,o2,…,ot,it=qi∣λ)
观测序列概率的前向算法
输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O
输出:观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
初值:KaTeX parse error: \tag works only in display equations
递推:对 t = 1 , 2 , . . . , T − 1 t=1,2,...,T-1 t=1,2,...,T−1
α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) (2) \alpha_{t+1}(i)=\left[\sum_{j=1}^{N} \alpha_{t}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right) \tag{2} αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1)(2)终止: P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) (3) P(O \mid \lambda)=\sum_{i=1}^{N} \alpha_{T}(i) \tag{3} P(O∣λ)=i=1∑NαT(i)(3)
前向算法的关键:直接引用前一时刻的计算结果,避免重复计算,复杂度从 O ( T N T ) O(TN^T) O(TNT)降到 O ( T N 2 ) O(TN^2) O(TN2)
![]()
问题:(不理解可以略过)
为什么上述公式1成立?使用贝叶斯公式
α 1 ( i ) = P ( o 1 , i 1 = q i ) = P ( i 1 = q i ) P ( o 1 ∣ i 1 = q i ) = π i b i ( o 1 ) \alpha_{1}(i)=P\left(o_{1}, i_{1}=q_{i}\right)=P\left(i_{1}=q_{i}\right) P\left(o_{1} \mid i_{1}=q_{i}\right)=\pi_{i} b_{i}\left(o_{1}\right) α1(i)=P(o1,i1=qi)=P(i1=qi)P(o1∣i1=qi)=πibi(o1)
为什么上述公式3成立?边缘分布
α T ( i ) = P ( o 1 , o 2 , … , o T , i T = q i ∣ λ ) = P ( O , i T = q i ∣ λ ) P ( O ∣ λ ) = ∑ i = 1 N P ( O , i T = q i ∣ λ ) = ∑ i = 1 N α T ( i ) \begin{array}{c} \alpha_{T}(i)=P\left(o_{1}, o_{2}, \ldots, o_{T}, i_{T}=q_{i} \mid \lambda\right)=P\left(O, i_{T}=q_{i} \mid \lambda\right) \\ P(O \mid \lambda)=\sum_{i=1}^{N} P\left(O, i_{T}=q_{i} \mid \lambda\right)=\sum_{i=1}^{N} \alpha_{T}(i) \end{array} αT(i)=P(o1,o2,…,oT,iT=qi∣λ)=P(O,iT=qi∣λ)P(O∣λ)=∑i=1NP(O,iT=qi∣λ)=∑i=1NαT(i)
为什么上述公式2成立?结合HMM的两个基本假设,贝叶斯公式,边缘分布
q t = j q_t=j qt=j与前述 i t = q j i_t=q_j it=qj等价, o 1 t \mathbf{o}_{1}^{t} o1t与 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot等价
α t ( j ) = P ( q t = j , o 1 t ) = ∑ i = 1 N P ( q t − 1 = i , q t = j , o 1 t − 1 , o t ) = ∑ i = 1 N P ( q t = j , o t ∣ q t − 1 = i , o 1 t − 1 ) P ( q t − 1 = i , o 1 t − 1 ) = ∑ i = 1 N P ( q t = j , o t ∣ q t − 1 = i ) α t − 1 ( i ) = ∑ i = 1 N P ( o t ∣ q t = j , q t − 1 = i ) P ( q t = j ∣ q t − 1 = i ) α t − 1 ( i ) = ∑ i = 1 N b j ( o t ) a i j α t − 1 ( i ) \begin{aligned} \alpha_{t}(j) &=P\left(q_{t}=j, \mathbf{o}_{1}^{t}\right) \\ &=\sum_{i=1}^{N} P\left(q_{t-1}=i, q_{t}=j, \mathbf{o}_{1}^{t-1}, \mathbf{o}_{t}\right) \\ &=\sum_{i=1}^{N} P\left(q_{t}=j, \mathbf{o}_{t} \mid q_{t-1}=i, \mathbf{o}_{1}^{t-1}\right) P\left(q_{t-1}=i, \mathbf{o}_{1}^{t-1}\right) \\ &=\sum_{i=1}^{N} P\left(q_{t}=j, \mathbf{o}_{t} \mid q_{t-1}=i\right) \alpha_{t-1}(i) \\ &=\sum_{i=1}^{N} P\left(\mathbf{o}_{t} \mid q_{t}=j, q_{t-1}=i\right) P\left(q_{t}=j \mid q_{t-1}=i\right) \alpha_{t-1}(i) \\ &=\sum_{i=1}^{N} b_{j}\left(\mathbf{o}_{t}\right) a_{i j} \alpha_{t-1}(i) \end{aligned} α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,o1t−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)
后向算法
后向概率定义:给定隐马尔科夫模型 λ \lambda λ,定义在时刻 t t t状态为 q i q_i qi条件下,从 t + 1 t+1 t+1到 T T T的部分观测序列为 o t + 1 , o t + 2 , . . . , o T o_{t+1},o_{t+2},...,o_{T} ot+1,ot+2,...,oT的概率为后向概率:
β t ( i ) = P ( o t + 1 , o t + 2 , … , o T ∣ i t = q i , λ ) \beta_{t}(i)=P\left(o_{t+1}, o_{t+2}, \ldots, o_{T} \mid i_{t}=q_{i}, \lambda\right) βt(i)=P(ot+1,ot+2,…,oT∣it=qi,λ)
观测序列概率的后向算法
输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O
输出:观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
初值: β T ( i ) = 1 , i = 1 , 2 , . . . , N \beta_{T}(i) = 1, i=1,2,...,N βT(i)=1,i=1,2,...,N
递推:对 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T−1,T−2,...,1
β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) , i = 1 , 2 , ⋯ , N (4) \beta_{t}(i)=\sum_{j=1}^{N} a_{i j} b_{j}\left(o_{t+1}\right) \beta_{t+1}(j), \quad i=1,2, \cdots, N \tag{4} βt(i)=j=1∑Naijbj(ot+1)βt+1(j),i=1,2,⋯,N(4)终止: P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) (5) P(O \mid \lambda)=\sum_{i=1}^{N} \pi_{i} b_{i}\left(o_{1}\right) \beta_{1}(i) \tag{5} P(O∣λ)=i=1∑Nπibi(o1)β1(i)(5)
![]()
问题:(不理解可以跳过)
公式(5)的证明和上述前向算法证明类似。
公式(4)证明:
q t = j q_t=j qt=j与前述 i t = q j i_t=q_j it=qj等价, o 1 t \mathbf{o}_{1}^{t} o1t与 o 1 , o 2 , . . . , o t o_1,o_2,...,o_t o1,o2,...,ot等价
β t ( i ) = P ( o t + 1 T ∣ q t = i ) = P ( o t + 1 T , q t = i ) P ( q t = i ) = ∑ j = 1 N P ( o t + 1 T , q t = i , q t + 1 = j ) P ( q t = i ) = ∑ j = 1 N P ( o t + 1 T ∣ q t = i , q t + 1 = j ) P ( q t = i , q t + 1 = j ) P ( q t = i ) = ∑ j = 1 N P ( o t + 1 T ∣ q t + 1 = j ) P ( q t = i , q t + 1 = j ) P ( q t = i ) = ∑ j = 1 N P ( o t + 2 T , o t + 1 ∣ q t + 1 = j ) a i j = ∑ j = 1 N P ( o t + 2 T ∣ q t + 1 = j ) P ( o t + 1 ∣ q t + 1 = j ) a i j = ∑ j = 1 N β t + 1 ( j ) b j ( o t + 1 ) a i j \begin{aligned} \beta_{t}(i) &=P\left(\mathbf{o}_{t+1}^{T} \mid q_{t}=i\right) \\ &=\frac{P\left(\mathbf{o}_{t+1}^{T}, q_{t}=i\right)}{P\left(q_{t}=i\right)} \\ &=\frac{\sum_{j=1}^{N} P\left(\mathbf{o}_{t+1}^{T}, q_{t}=i, q_{t+1}=j\right)}{P\left(q_{t}=i\right)} \\ &=\frac{\sum_{j=1}^{N} P\left(\mathbf{o}_{t+1}^{T} \mid q_{t}=i, q_{t+1}=j\right) P\left(q_{t}=i, q_{t+1}=j\right)}{P\left(q_{t}=i\right)} \\ &=\sum_{j=1}^{N} P\left(\mathbf{o}_{t+1}^{T} \mid q_{t+1}=j\right) \frac{P\left(q_{t}=i, q_{t+1}=j\right)}{P\left(q_{t}=i\right)} \\ &=\sum_{j=1}^{N} P\left(\mathbf{o}_{t+2}^{T}, \mathbf{o}_{t+1} \mid q_{t+1}=j\right) a_{i j} \\ &=\sum_{j=1}^{N} P\left(\mathbf{o}_{t+2}^{T} \mid q_{t+1}=j\right) P\left(\mathbf{o}_{t+1} \mid q_{t+1}=j\right) a_{i j} \\ &=\sum_{j=1}^{N} \beta_{t+1}(j) b_{j}\left(\mathbf{o}_{t+1}\right) a_{i j} \end{aligned} βt(i)=P(ot+1T∣qt=i)=P(qt=i)P(ot+1T,qt=i)=P(qt=i)∑j=1NP(ot+1T,qt=i,qt+1=j)=P(qt=i)∑j=1NP(ot+1T∣qt=i,qt+1=j)P(qt=i,qt+1=j)=j=1∑NP(ot+1T∣qt+1=j)P(qt=i)P(qt=i,qt+1=j)=j=1∑NP(ot+2T,ot+1∣qt+1=j)aij=j=1∑NP(ot+2T∣qt+1=j)P(ot+1∣qt+1=j)aij=j=1∑Nβt+1(j)bj(ot+1)aij
已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)和观测序列 O = ( o 1 , o 2 , . . . , o T ) O=(o_1,o_2,...,o_T) O=(o1,o2,...,oT), b j ( o t ) b_j(o_t) bj(ot)可以是离散的也可以是连续的,计算使概率 P ( I ∣ O ) P(I|O) P(I∣O)最大的状态序列 I = ( i 1 , i 2 , . . . , i T ) I=(i_1,i_2,...,i_T) I=(i1,i2,...,iT).
用动态规划求概率最大路径(最优路径),一个路径对应一个状态序列。最有路径的特性:如果最优路径在时刻 t t t通过节点 i t ∗ i_t^* it∗,那么这一路径从节点 i t ∗ i_t^* it∗到终点 i T ∗ i_T^* iT∗的部分路径,对于从 i t ∗ i_t^* it∗到 i T ∗ i_T^* iT∗的所有可能路径来说必须是最优的。
只需从时刻 t − 1 t-1 t−1开始,递推的计算在时刻 t t t状态为 i i i的各条部分路径的最大概率,直至得到时刻 t = T t=T t=T状态为 i i i的各条路径的最大概率,时刻 t = T t=T t=T的最大概率即为最优路径的概率 P ∗ P^* P∗,最优路径的终节点 i T ∗ i_T^* iT∗也同时的到。
之后为了找出最优路径的各个结点,从终结点 i T ∗ i_T^* iT∗开始,由后向前逐步求得节点 i T ∗ , . . . , i 1 ∗ i_T^*,...,i_1^* iT∗,...,i1∗,得到最优路径。
首先引入两个变量 δ \delta δ和 ψ \psi ψ。定义在时刻 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it)中概率最大为:
δ t ( i ) = max i 1 , i 2 , ⋯ , i t − 1 P ( i t = i , i t − 1 , ⋯ , i 1 , o t , ⋯ , o 1 ∣ λ ) , i = 1 , 2 , ⋯ , N \delta_{t}(i)=\max _{i_1, i_{2}, \cdots, i_{t-1}} P\left(i_{t}=i, i_{t-1}, \cdots, i_{1}, o_{t}, \cdots, o_{1} \mid \lambda\right), \quad i=1,2, \cdots, N δt(i)=i1,i2,⋯,it−1maxP(it=i,it−1,⋯,i1,ot,⋯,o1∣λ),i=1,2,⋯,N
由定义可得变量 δ \delta δ的递推式:
δ t + 1 ( i ) = max i 1 , i 2 , ⋯ , i t P ( i t + 1 = i , i t , ⋯ , i 1 , o t + 1 , ⋯ , o 1 ∣ λ ) = max 1 ⩽ j ⩽ N [ δ t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , ⋯ , N ; t = 1 , 2 , ⋯ , T − 1 \begin{aligned} \delta_{t+1}(i) &=\max _{i_1, i_2, \cdots, i_t} P\left(i_{t+1}=i, i_{t}, \cdots, i_{1}, o_{t+1}, \cdots, o_{1} \mid \lambda\right) \\ &=\max _{1 \leqslant j \leqslant N}\left[\delta_{t}(j) a_{j i}\right] b_{i}\left(o_{t+1}\right), \quad i=1,2, \cdots, N ; t=1,2, \cdots, T-1 \end{aligned} δt+1(i)=i1,i2,⋯,itmaxP(it+1=i,it,⋯,i1,ot+1,⋯,o1∣λ)=1⩽j⩽Nmax[δt(j)aji]bi(ot+1),i=1,2,⋯,N;t=1,2,⋯,T−1
定义在时刻 t t t状态为 i i i的所有单个路径 ( i 1 , i 2 , . . . , i t ) (i_1,i_2,...,i_t) (i1,i2,...,it)中概率最大的路径的第 t − 1 t-1 t−1个节点为:
ψ t ( i ) = arg max 1 ⩽ j ⩽ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , ⋯ , N \psi_{t}(i)=\arg \max _{1 \leqslant j \leqslant N}\left[\delta_{t-1}(j) a_{j i}\right], \quad i=1,2, \cdots, N ψt(i)=arg1⩽j⩽Nmax[δt−1(j)aji],i=1,2,⋯,N
Viterbi算法
输入:隐马尔科夫模型 λ \lambda λ,观测序列 O O O
输出:最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)
初始化:
δ 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , ⋯ , N ψ 1 ( i ) = 0 , i = 1 , 2 , ⋯ , N \begin{array}{c} \delta_{1}(i)=\pi_{i} b_{i}\left(o_{1}\right), \quad i=1,2, \cdots, N \\ \psi_{1}(i)=0, \quad i=1,2, \cdots, N \end{array} δ1(i)=πibi(o1),i=1,2,⋯,Nψ1(i)=0,i=1,2,⋯,N递推,对于 t = 2 , 3 , . . . T t=2,3,...T t=2,3,...T
δ t ( i ) = max 1 ⩽ j ⩽ N [ δ t − 1 ( j ) a j i ] b i ( o t ) , i = 1 , 2 , ⋯ , N ψ t ( i ) = arg max 1 ⩽ j ⩽ N [ δ t − 1 ( j ) a j i ] , i = 1 , 2 , ⋯ , N \begin{array}{ll} \delta_{t}(i)=\max _{1 \leqslant j \leqslant N} \left[\delta_{t-1}(j) a_{j i}\right] b_{i}\left(o_{t}\right), & i=1,2, \cdots, N \\ \psi_{t}(i)=\arg \max _{1 \leqslant j \leqslant N}\left[\delta_{t-1}(j) a_{j i}\right], & i=1,2, \cdots, N \end{array} δt(i)=max1⩽j⩽N[δt−1(j)aji]bi(ot),ψt(i)=argmax1⩽j⩽N[δt−1(j)aji],i=1,2,⋯,Ni=1,2,⋯,N终止
P ∗ = max 1 ⩽ i ⩽ N δ T ( i ) i T ∗ = arg max 1 ⩽ i ⩽ N [ δ T ( i ) ] \begin{array}{c} P^{*}=\max _{1 \leqslant i \leqslant N} \delta_{T}(i) \\ i_{T}^{*}=\arg \max _{1 \leqslant i \leqslant N}\left[\delta_{T}(i)\right] \end{array} P∗=max1⩽i⩽NδT(i)iT∗=argmax1⩽i⩽N[δT(i)]最优路径回溯,对于 t = T − 1 , T − 2 , . . . , 1 t=T-1,T-2,...,1 t=T−1,T−2,...,1
i t ∗ = ψ t + 1 ( i t + 1 ∗ ) i_t^* = \psi_{t+1}(i_{t+1}^*) it∗=ψt+1(it+1∗)
求得最优路径 I ∗ = ( i 1 ∗ , i 2 ∗ , . . . , i T ∗ ) I^*=(i_1^*,i_2^*,...,i_T^*) I∗=(i1∗,i2∗,...,iT∗)
再吃个栗子:
还是考虑盒子和球模型 λ = ( A , B , π ) \lambda = (A,B,\pi) λ=(A,B,π),状态集合 Q = { 1 , 2 , 3 } Q=\{1,2,3\} Q={ 1,2,3},观测集合 V = { 红 , 白 } V=\{红,白\} V={ 红,白}
A = [ 0.5 0.2 0.3 0.3 0.5 0.2 0.2 0.3 0.5 ] , B = [ 0.5 0.5 0.4 0.6 0.7 0.3 ] , π = ( 0.2 , 0.4 , 0.4 ) T A=\left[\begin{array}{lll}0.5 & 0.2 & 0.3 \\ 0.3 & 0.5 & 0.2 \\ 0.2 & 0.3 & 0.5\end{array}\right], \mathrm{B}=\left[\begin{array}{ll}0.5 & 0.5 \\ 0.4 & 0.6 \\ 0.7 & 0.3\end{array}\right], \pi=(0.2,0.4,0.4)^{T} A=⎣⎡0.50.30.20.20.50.30.30.20.5⎦⎤,B=⎣⎡0.50.40.70.50.60.3⎦⎤,π=(0.2,0.4,0.4)T
设T=3,O=(红,白,红),试用维特比算法求最优状态序列。
(1)初始化。 δ 1 ( i ) = π i b i ( o 1 ) \delta_1(i) = \pi_i b_i(o_1) δ1(i)=πibi(o1),带入数据: δ 1 ( 1 ) = 0.1 \delta_1(1) = 0.1 δ1(1)=0.1, δ 1 ( 2 ) = 0.16 \delta_1(2)=0.16 δ1(2)=0.16, δ 1 ( 3 ) = 0.28 \delta_1(3)=0.28 δ1(3)=0.28,记 ψ 1 ( i ) = 0 , i = 1 , 2 , 3 \psi_1(i)=0, i=1,2,3 ψ1(i)=0,i=1,2,3
(2)递推计算: δ 2 ( i ) = max 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] b i ( o 2 ) \delta_2(i) = \max _{1 \le j \le3}[\delta_1(j)a_{ji}]b_i(o_2) δ2(i)=max1≤j≤3[δ1(j)aji]bi(o2),同时记录概率最大路径的前一个状态j, ψ 2 ( i ) = arg max 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] j = 1 , 2 , 3 \psi_2(i) = \arg \max _{1 \le j \le 3}[\delta_1(j)a_{ji}] \quad j=1,2,3 ψ2(i)=argmax1≤j≤3[δ1(j)aji]j=1,2,3。
计算:
δ 2 ( 1 ) = m a x ( 0.1 × 0.5 , 0.16 × 0.3 , 0.28 × 0.2 ) × 0.5 \delta_2(1)=max(0.1\times0.5,0.16\times 0.3,0.28\times 0.2) \times 0.5 δ2(1)=max(0.1×0.5,0.16×0.3,0.28×0.2)×0.5 = 0.028
ψ 2 ( 1 ) = 3 \psi_2(1) = 3 ψ2(1)=3
δ 2 ( 2 ) = 0.0504 , ψ 2 ( 2 ) = 3 \delta_2(2) = 0.0504,\psi_2(2) = 3 δ2(2)=0.0504,ψ2(2)=3
δ 2 ( 3 ) = 0.042 , ψ 2 ( 3 ) = 3 \delta_2(3) = 0.042,\psi_2(3) = 3 δ2(3)=0.042,ψ2(3)=3
当t=3时,
δ 3 ( i ) = max 1 ⩽ j ⩽ 3 [ δ 2 ( j ) a j i ] b i ( o 3 ) \delta_{3}(i)=\max _{1 \leqslant j \leqslant 3}\left[\delta_{2}(j) a_{j i}\right] b_{i}\left(o_{3}\right) δ3(i)=max1⩽j⩽3[δ2(j)aji]bi(o3)
ψ 3 ( i ) = arg max 1 ⩽ j < 3 [ δ 2 ( j ) a f ] \psi_{3}(i)=\arg \max _{1 \leqslant j<3}\left[\delta_{2}(j) a_{f}\right] ψ3(i)=argmax1⩽j<3[δ2(j)af]
δ 3 ( 1 ) = 0.00756 , ψ 3 ( 1 ) = 2 \delta_{3}(1)=0.00756, \quad \psi_{3}(1)=2 δ3(1)=0.00756,ψ3(1)=2
δ 3 ( 2 ) = 0.01008 , ψ 3 ( 2 ) = 2 \delta_{3}(2)=0.01008, \quad \psi_{3}(2)=2 δ3(2)=0.01008,ψ3(2)=2
δ 3 ( 3 ) = 0.0147 , ψ 3 ( 3 ) = 3 \delta_{3}(3)=0.0147, \quad \psi_{3}(3)=3 δ3(3)=0.0147,ψ3(3)=3
(3)用 P ∗ P^* P∗表示最优路径的概率,则 P ∗ = max 1 ≤ i ≤ 3 δ 3 ( i ) = 0.0147 P^*=\max _{1 \le i \le 3} \delta_3(i) = 0.0147 P∗=max1≤i≤3δ3(i)=0.0147
最优路径的终点 i 3 ∗ = arg max i [ δ 3 ( i ) ] = 3 i_3^*=\arg \max _{i}[\delta_3(i)] = 3 i3∗=argmaxi[δ3(i)]=3
(4)由最优路径的终点回溯:
i 2 ∗ = ψ 3 ( i 3 ∗ ) = ψ 3 ( 3 ) = 3 i_{2}^{*}=\psi_{3}\left(i_{3}^{*}\right)=\psi_{3}(3)=3 i2∗=ψ3(i3∗)=ψ3(3)=3
i 1 ∗ = ψ 2 ( i 2 ∗ ) = ψ 2 ( 3 ) = 3 {i}_{1}^{*}=\psi_{2}\left(i_{2}^{*}\right)=\psi_{2}(3)=3 i1∗=ψ2(i2∗)=ψ2(3)=3
HMM学习算法参考下篇文章