本文介绍常见的机器学习模型隐马尔科夫模型HMM。
HMM也是generative model。
原始论文:(1971 The Annals of Mathematical Statistics) A Maximization Technique Occurring in the Statistical Analysis of Probabilistic Functions of Markov Chains
1. 概率与随机过程的区别
概率是反映随机事件发生的可能性。若随机事件发生的概率随时间而改变,我们在考虑时间因素或空间因素的情况下去分析随机事件发生的概率,称为随机过程。
若我们每次抛掷硬币且正面向上的概率为0.5,正面向上的概率不随抛掷次数而改变,我们可以用概率来描述这一事件,如P(X),其中X表示硬币正面向上的随机事件。
若我们每次抛掷硬币,硬币落在地上会导致形状的改变,正面向上的概率随抛掷次数的改变而改变,我们用随机过程来描述这一事件,如
P
(
X
1
,
X
2
,
…
,
X
i
)
P(X_1,X_2,\dots,X_i)
P(X1,X2,…,Xi),其中
X
i
X_i
Xi表示第i次抛掷硬币正面向上的随机事件。
笼统的讲,概率是分析一个随机变量,而随机过程是分析一组随机变量。
2. HMM概念
隐马尔科夫模型 Hidden Markov models (HMMs) 是时间序列的概率模型,变量variables可以在状态states之间转换,各种转换的概率(switch probability)不同。每个状态都能以某一概率(output probability)产生输出output之一。状态和输出的集合已知,输出已知,状态转换概率和输出概率等信息未知(隐)。
需要解决的问题:
- 推理:根据输出序列计算candidate state-switch sequences的概率
- 模式匹配:根据输出序列计算最可能是的state-switch sequence(Viterbi算法:信号处理领域)
- 训练:给出输出序列(训练)数据,计算最可能出现的state-switch/output probabilities (ie, system internals)
- 已知观测序列O和模型参数 λ \lambda λ,如何求解观测序列O出现的概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
模式匹配和训练任务事实上就是Naive Bayesian推理1延伸到了序列数据上。
假设:
- 状态序列(标注序列)符合马尔科夫链假设,状态转换的概率取决于前N个状态。最简单的N=1就是‘first-order’ case,仅基于当前状态决定(马尔科夫过程2)
- 生成输出结果的概率仅取决于当前概率
- 观测序列是相互独立的
给定state-switch sequence和对应的observed-output sequence,可以直接用每个概率通过乘法计算出整体的概率。
马尔科夫模型与隐马尔科夫模型的区别:是否含有隐变量
3. HMM参数介绍和求解方法
观测序列:观测概率矩阵B(状态生成观测的概率)
未观测的状态序列:初始状态概率向量
π
\pi
π(处于状态的概率) + 状态转移概率矩阵A
λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π)
HMM:
P
(
O
∣
λ
)
=
∑
I
P
(
O
,
I
∣
λ
)
=
∑
I
P
(
O
∣
I
,
λ
)
P
(
I
∣
λ
)
P(O|\lambda)=\sum\limits_IP(O,I|\lambda)=\sum\limits_IP(O|I,\lambda)P(I|\lambda)
P(O∣λ)=I∑P(O,I∣λ)=I∑P(O∣I,λ)P(I∣λ)(其中I为标注序列)
给定模型参数,生成观测的概率→引入隐变量状态序列辅助求解
- 训练,已知
O
O
O求
λ
\lambda
λ:其中I为标注序列,在公式中是隐变量,因此可用EM算法3求解上式的模型参数
λ
\lambda
λ。具体步骤:
- 初始化 λ ‾ \overline\lambda λ
- 观测变量和隐变量的对数似然函数: log P ( O , I ∣ λ ) = π i 1 b i 1 ( o 1 ) a i 1 i 2 b i 2 ( o 2 ) ⋯ a i T − 1 i T b i T ( o T ) \log P(O,I|\lambda)=\pi_{i_1}b_{i_1}(o_1)a_{i_1i_2}b_{i_2}(o_2)\cdots a_{i_{T-1}i_T}b_{i_T}(o_T) logP(O,I∣λ)=πi1bi1(o1)ai1i2bi2(o2)⋯aiT−1iTbiT(oT)(初始状态×生成观测的概率×状态转移概率×生成观测的概率…)
- E:对隐变量求期望 Q ( λ , λ ‾ ) = ∑ I log P ( O , I ∣ λ ) P ( O , I ∣ λ ‾ ) = ∑ I log π i 1 P ( O , I ∣ λ ‾ ) + ∑ I ( ∑ t = 1 T − 1 log a i t i t + 1 ) P ( O , I ∣ λ ‾ ) + ∑ I ( ∑ t = 1 T log b i t ( o t ) ) P ( O , I ∣ λ ‾ ) Q(\lambda,\overline\lambda)=\sum\limits_I\log P(O,I|\lambda)P(O,I|\overline\lambda)=\sum\limits_I\log\pi_{i_1}P(O,I|\overline\lambda)+\sum\limits_I(\sum\limits_{t=1}^{T-1}\log a_{i_ti_{t+1}})P(O,I|\overline\lambda)+\sum\limits_I(\sum\limits_{t=1}^T\log b_{i_t}(o_t))P(O,I|\overline\lambda) Q(λ,λ)=I∑logP(O,I∣λ)P(O,I∣λ)=I∑logπi1P(O,I∣λ)+I∑(t=1∑T−1logaitit+1)P(O,I∣λ)+I∑(t=1∑Tlogbit(ot))P(O,I∣λ)
- M:求使
Q
Q
Q取极大值的
λ
=
(
A
,
B
,
π
)
\lambda=(A,B,\pi)
λ=(A,B,π)
求偏导数并使其等于0,有: ∂ Q ( λ , λ ‾ ) ∂ π i = ∂ Q ( λ , λ ‾ ) ∂ a i j = ∂ Q ( λ , λ ‾ ) ∂ b j ( k ) 0 \dfrac{\partial Q(\lambda,\overline\lambda)}{\partial\pi_i}=\dfrac{\partial Q(\lambda,\overline\lambda)}{\partial a_{ij}}=\dfrac{\partial Q(\lambda,\overline\lambda)}{\partial b_j(k)}0 ∂πi∂Q(λ,λ)=∂aij∂Q(λ,λ)=∂bj(k)∂Q(λ,λ)0
约束条件为初始状态概率分布的和等于1,即: ∑ i = 1 N π i = 1 \sum\limits_{i=1}^N\pi_i=1 i=1∑Nπi=1
状态已知的情况下,观测概率分布的和等于1,即: ∑ k = 1 M b j ( k ) = 1 \sum\limits_{k=1}^Mb_j(k)=1 k=1∑Mbj(k)=1
得到 π i , a i j , b j ( k ) \pi_i,a_{ij},b_j(k) πi,aij,bj(k)的值,即更新 λ \lambda λ - 重复步骤3、4
- 计算观测序列出现的概率(N是总的状态数)
- 枚举法:
O
(
T
N
T
)
O(TN^T)
O(TNT)
- 递推法:
O
(
T
N
2
)
O(TN^2)
O(TN2)
状态为 q i q_i qi的前向概率 α t ( i ) \alpha_t(i) αt(i)(生成给定长度为t的观测序列,且t状态是 q i q_i qi的概率): α t ( i ) = P ( o 1 , o 2 , … , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,…,ot,it=qi∣λ)
t=1时: α 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , … , N \alpha_1(i)=\pi_ib_i(o_1),i=1,2,\dots,N α1(i)=πibi(o1),i=1,2,…,N(初始得到该状态×该状态生出该观测)
P ( o 1 ∣ λ ) = ∑ i = 1 N α 1 ( i ) P(o_1|\lambda)=\sum\limits^N_{i=1}\alpha_{1}(i) P(o1∣λ)=i=1∑Nα1(i)(在所有状态下生成该观测的概率加总)
递推,对于 t = 1 , 2 , … , T − 1 t=1,2,\dots,T-1 t=1,2,…,T−1
α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , … , N \alpha_{t+1}(i)=\Bigg[\sum\limits_{j=1}^N\alpha_t(j)a_{ji}\Bigg]b_i(o_{t+1}),i=1,2,\dots,N αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1),i=1,2,…,N(上一次生成状态j,状态j转移为状态i,状态i生成观测的概率)
P ( o 1 , o 2 , … , o t + 1 ∣ λ ) = ∑ i = 1 N α t + 1 ( i ) P(o_1,o_2,\dots,o_{t+1}|\lambda)=\sum\limits_{i=1}^N\alpha_{t+1}(i) P(o1,o2,…,ot+1∣λ)=i=1∑Nαt+1(i)
当t=T时:
P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) P(O|\lambda)=\sum\limits_{i=1}^N\alpha_T(i) P(O∣λ)=i=1∑NαT(i)
算法复杂度(感觉图把i写成j了):
α t + 1 ( i ) = ∑ j = 1 N α t ( j ) a j i \alpha_{t+1}(i)=\sum\limits_{j=1}^N\alpha_t(j)a_{ji} αt+1(i)=j=1∑Nαt(j)aji(a是状态转移概率)
因此从t到t+1时刻的计算量为 O ( N 2 ) O(N^2) O(N2)
对于观测序列长度为T: O ( T N 2 ) O(TN^2) O(TN2)
- 枚举法:
O
(
T
N
T
)
O(TN^T)
O(TNT)
- 模式匹配中的维特比Viterbi算法(动态规划)
给定 λ \lambda λ(模型参数)和 O O O(观测序列),预测最有可能的状态序列
算法思想:若 t 时刻最有可能的状态序列 I = ( i 1 , i 2 , … , i t ∗ ) I=(i_1,i_2,\dots,i_t^*) I=(i1,i2,…,it∗)通过 i t ∗ i_t^* it∗,则从t时刻到T时刻的最优路径一定包括 i t ∗ i_t^* it∗。我们利用这一思想确定了最优状态序列的最后一个时刻的状态 i T i_T iT,然后利用该状态回溯时刻 t = 1 , 2 , … , T − 1 t=1,2,\dots,T-1 t=1,2,…,T−1的最优状态
示例:
已知模型 λ = ( A , B , π ) \lambda=(A,B,\pi) λ=(A,B,π),观测集合 V = { O 1 , O 2 } V=\{O_1,O_2\} V={O1,O2},状态集合 Q = { 1 , 2 , 3 } Q=\{1,2,3\} Q={1,2,3}
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.2 ) T A=\begin{bmatrix} 0.5,0.2,0.3 \\ 0.3,0.5,0.2 \\ 0.2,0.3,0.5 \end{bmatrix},B=\begin{bmatrix} 0.5,0.5\\ 0.4,0.6\\ 0.7,0.3 \end{bmatrix},\pi=(0.2,0.4,0.2)^T A= 0.5,0.2,0.30.3,0.5,0.20.2,0.3,0.5 ,B= 0.5,0.50.4,0.60.7,0.3 ,π=(0.2,0.4,0.2)T
若观测序列 O = ( O 1 , O 2 , O 1 ) O=(O_1,O_2,O_1) O=(O1,O2,O1),求最优状态序列 I = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) I=(i_1^*,i_2^*,i_3^*) I=(i1∗,i2∗,i3∗)
解:
定义 δ t ( i ) \delta_t(i) δt(i)是所有长度为t、最终状态为i的、能得到指定观测序列的路径中,概率最大的路径的概率。
定义 Ψ t ( i ) \Psi_t(i) Ψt(i)是所有长度为t、最终状态为i的、能得到指定观测序列的路径中,最有可能的倒数第二个节点(倒数第二个时间点概率最大的状态): Ψ t ( i ) = arg max i ≤ j ≤ N [ δ t − 1 ( j ) a j i ] \Psi_t(i)=\argmax\limits_{i\le j\le N}\big[\delta_{t-1}(j)a_{ji}\big] Ψt(i)=i≤j≤Nargmax[δt−1(j)aji]
根据维特比算法的核心思想,我们计算观测序列下的最优路径:- t=1时,
δ
1
(
i
)
\delta_1(i)
δ1(i)是观测为
o
1
o_1
o1、状态为i的概率:
δ 1 ( i ) = π i b i ( O 1 ) , i = 1 , 2 , 3 \delta_1(i)=\pi_ib_i(O_1),\ i=1,2,3 δ1(i)=πibi(O1), i=1,2,3
得 δ 1 ( 1 ) = 0.2 ∗ 0.5 = 0.1 , δ 1 ( 2 ) = 0.16 , δ 1 ( 3 ) = 0.28 \delta_1(1)=0.2*0.5=0.1,\delta_1(2)=0.16,\delta_1(3)=0.28 δ1(1)=0.2∗0.5=0.1,δ1(2)=0.16,δ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 - t=2时:
δ 2 ( i ) = max 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] b i ( o 2 ) \delta_2(i)=\max\limits_{1\le j\le3}\big[\delta_1(j)a_{ji}\big]b_i(o_2) δ2(i)=1≤j≤3max[δ1(j)aji]bi(o2)
Ψ 2 ( i ) = arg max 1 ≤ j ≤ 3 [ δ 1 ( j ) a j i ] , i = 1 , 2 , 3 \Psi_2(i)=\argmax\limits_{1\le j\le3}\big[\delta_1(j)a_{ji}\big],i=1,2,3 Ψ2(i)=1≤j≤3argmax[δ1(j)aji],i=1,2,3
δ 2 ( 1 ) = max j { 0.1 ∗ 0.5 , 0.16 ∗ 0.3 , 0.28 ∗ 0.2 } , Ψ 2 ( 1 ) = 3 \delta_2(1)=\max\limits_j\{0.1*0.5,0.16*0.3,0.28*0.2\},\Psi_2(1)=3 δ2(1)=jmax{0.1∗0.5,0.16∗0.3,0.28∗0.2},Ψ2(1)=3
类似: δ 2 ( 2 ) = 0.0504 , Ψ 2 ( 2 ) = 3 , δ 2 ( 3 ) = 0.042 , Ψ 2 ( 3 ) = 3 \delta_2(2)=0.0504,\Psi_2(2)=3,\delta_2(3)=0.042,\Psi_2(3)=3 δ2(2)=0.0504,Ψ2(2)=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\limits_{1\le j\le3}\big[\delta_2(j)a_{ji}\big]b_i(o_3) δ3(i)=1≤j≤3max[δ2(j)aji]bi(o3)
Ψ 3 ( i ) = arg max 1 ≤ j ≤ 3 [ δ 2 ( j ) a j i ] , i = 1 , 2 , 3 \Psi_3(i)=\argmax\limits_{1\le j\le3}\big[\delta_2(j)a_{ji}\big],i=1,2,3 Ψ3(i)=1≤j≤3argmax[δ2(j)aji],i=1,2,3
δ 3 ( 1 ) = 0.00756 , Ψ 3 ( 1 ) = 2 , δ 3 ( 2 ) = 0.01008 , Ψ 3 ( 2 ) = 2 , δ 3 ( 3 ) = 0.0147 , Ψ 3 ( 3 ) = 3 \delta_3(1)=0.00756,\Psi_3(1)=2,\delta_3(2)=0.01008,\Psi_3(2)=2,\delta_3(3)=0.0147,\Psi_3(3)=3 δ3(1)=0.00756,Ψ3(1)=2,δ3(2)=0.01008,Ψ3(2)=2,δ3(3)=0.0147,Ψ3(3)=3
最有可能的路径以 i 3 ∗ = arg max i [ δ 3 ( i ) ] i_3^*=\argmax_i\big[\delta_3(i)\big] i3∗=argmaxi[δ3(i)]为最终状态 - 回溯其他时刻的最优节点:
t=2时, i 2 ∗ = Ψ 3 ( i 3 ∗ ) = Ψ 3 ( 3 ) = 3 i_2^*=\Psi_3(i_3^*)=\Psi_3(3)=3 i2∗=Ψ3(i3∗)=Ψ3(3)=3
t=1时, i 1 ∗ = Ψ 2 ( i 2 ∗ ) = Ψ 2 ( 3 ) = 3 i_1^*=\Psi_2(i_2^*)=\Psi_2(3)=3 i1∗=Ψ2(i2∗)=Ψ2(3)=3
因此最优状态序列是: I = ( i 1 ∗ , i 2 ∗ , i 3 ∗ ) = ( 3 , 3 , 3 ) I=(i_1^*,i_2^*,i_3^*)=(3,3,3) I=(i1∗,i2∗,i3∗)=(3,3,3)
- t=1时,
δ
1
(
i
)
\delta_1(i)
δ1(i)是观测为
o
1
o_1
o1、状态为i的概率:
4. HMM用法
-
标注学习/序列标注 sequence tagging:对已观测到的数据序列O进行标注,标注序列I相当于隐变量
-
语音识别:waveform是输出序列,匹配音素(状态)序列
-
词性标注
-
文本分析