概率图模型
概率图模型是一类用图来表达变量相关关系的概率模型。它以图为表示工具,最常见的是用一个结点表示一个或一组随机变量,结点之间的边表示变量间的概率相关关系,即“变量关系图”。根据边的性质不同,概率图模型可大致分为两类:第一类是使用有向无环图表示变量间的依赖关系,称为有向图模型或贝叶斯网;第二类是使用无向图表示变量间的相关关系,称为无向图模型或马尔可夫网。
隐马尔可夫模型
隐马尔可夫模型是结构最简单的动态贝叶斯网,是一种最著名的有向图模型,主要用于时序数据建模,在语音识别、自然语言处理等领域有广泛应用。
1.变量
如上图所示,隐马尔可夫模型中的变量分为两组:
- 第一组是状态变量 { y 1 , y 2 , ⋯ , y n } \{y_1,y_2,\cdots,y_n\} {y1,y2,⋯,yn},其中 y i ∈ Y y_i\in\mathcal{Y} yi∈Y表示第 i i i时刻的系统状态。通常假定状态变量是隐藏的、不可被观测的,因此状态变量也称为隐变量。
- 第二组是观测变量 { x 1 , x 2 , ⋯ , x n } \{x_1,x_2,\cdots,x_n\} {x1,x2,⋯,xn},其中 x i ∈ X x_i\in\mathcal{X} xi∈X表示第 i i i时刻的观测值。
- 在隐马尔可夫模型中,系统通常在多个状态 { s 1 , s 2 , ⋯ , s N } \{s_1,s_2,\cdots,s_N\} {s1,s2,⋯,sN}之间转换,因此状态变量 y i y_i yi的取值范围 Y \mathcal{Y} Y通常是有 N N N个可能取值的离散空间。
- 观测变量 x i x_i xi可以是离散型也可以是连续型,为了便于讨论,我们仅考虑离散型观测变量,并假定其取值范围 X \mathcal{X} X为 { o 1 , o 2 , ⋯ , o M } \{o_1,o_2,\cdots,o_M\} {o1,o2,⋯,oM}。
2.依赖
上图中的箭头表示变量间的依赖关系:
- 在任一时刻,观测变量的取值仅依赖于状态变量,即 x t x_t xt由 y t y_t yt确定,与其他状态变量以及观测变量的取值无关。
- 同时, t t t时刻的状态 y t y_t yt仅依赖于 t − 1 t-1 t−1时刻的状态 y t − 1 y_{t-1} yt−1,与其余 n − 2 n-2 n−2个状态无关。这就是所谓的“马尔科夫链”,即:系统下一个时刻的状态仅由当前状态决定,不依赖与以往的任何状态。
- 基于以上依赖关系,所有变量的联合概率分布为
P ( x 1 , y 1 , ⋯ , x n , y n ) = P ( y 1 ) P ( x 1 ∣ y 1 ) ∏ i = 2 n P ( y i ∣ y i − 1 ) P ( x i ∣ y i ) P(x_1,y_1,\cdots,x_n,y_n)=P(y_1)P(x_1|y_1)\prod^{n}_{i=2}P(y_i|y_{i-1})P(x_i|y_i) P(x1,y1,⋯,xn,yn)=P(y1)P(x1∣y1)i=2∏nP(yi∣yi−1)P(xi∣yi)
3.参数
除了结构信息,欲确定一个隐马尔可夫模型还需要三组参数:
- 状态转移概率:模型在各个状态间转换的概率,通常记为矩阵
A
=
[
a
i
j
]
N
×
N
\boldsymbol{A}=[a_{ij}]_{N\times N}
A=[aij]N×N,其中
a i j = P ( y t + 1 = s j ∣ y t = s i ) , 1 ≤ i , j ≤ N , a_{ij}=P(y_{t+1}=s_j|y_t=s_i),\quad1\leq i,j\leq N, aij=P(yt+1=sj∣yt=si),1≤i,j≤N,
表示在任意时刻 t t t,若状态为 s i s_i si,则在下一时刻状态为 s j s_j sj的概率。 - 输出观测概率:模型根据当前状态获得各个观测值的概率,通常记为矩阵
B
=
[
b
i
j
]
N
×
M
\boldsymbol{B}=[b_{ij}]_{N\times M}
B=[bij]N×M,其中
b i j = P ( x t = o j ∣ y t = s i ) , 1 ≤ i ≤ N , 1 ≤ j ≤ M b_{ij}=P(x_t=o_j|y_t=s_i),\quad1\leq i\leq N,1\leq j\leq M bij=P(xt=oj∣yt=si),1≤i≤N,1≤j≤M
表示在任意时刻 t t t,若状态为 s i s_i si,则观测值 o j o_j oj被获取的概率。 - 初始状态概率:模型在初始时刻各状态出现的概率,通常记为
π
=
(
π
1
,
π
2
,
⋯
,
π
N
)
\boldsymbol{\pi}=(\pi_1,\pi_2,\cdots,\pi_N)
π=(π1,π2,⋯,πN),其中
π i = P ( y 1 = s i ) , 1 ≤ i ≤ N , \pi_i=P(y_1=s_i),\quad1\leq i\leq N, πi=P(y1=si),1≤i≤N,
表示模型的初始状态为 s i s_i si的概率。
综上,通过指定状态空间
Y
\mathcal{Y}
Y、观测空间
X
\mathcal{X}
X和上述三组参数,就能确定一个隐马尔可夫模型,通常用其参数
λ
=
[
A
,
B
,
π
]
\lambda=[\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi}]
λ=[A,B,π]来指代。
方便理解实例可参考https://blog.csdn.net/mingzai624/article/details/52399235
隐马尔可夫模型的三个基本问题和解法
在实际应用中,人们常关注隐马尔科夫模型的三个基本问题:
- 给定模型参数
λ
=
[
A
,
B
,
π
]
\lambda=[\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi}]
λ=[A,B,π],如何有效计算其产生观测序列
x
=
{
x
1
,
x
2
,
⋯
,
x
n
}
\boldsymbol{x}=\{x_1,x_2,\cdots,x_n\}
x={x1,x2,⋯,xn}的概率
P
(
x
∣
λ
)
P(\boldsymbol{x}|\lambda)
P(x∣λ)?换言之,如何评估模型与观测序列之间的匹配程度?
估计问题,一般使用前向算法,参考https://blog.csdn.net/ppn029012/article/details/8923501 - 给定模型参数
λ
=
[
A
,
B
,
π
]
\lambda=[\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi}]
λ=[A,B,π]和观测序列
x
=
{
x
1
,
x
2
,
⋯
,
x
n
}
\boldsymbol{x}=\{x_1,x_2,\cdots,x_n\}
x={x1,x2,⋯,xn},如何找到与此观测序列最匹配的状态序列
y
=
{
y
1
,
y
2
,
⋯
,
y
n
}
\boldsymbol{y}=\{y_1,y_2,\cdots,y_n\}
y={y1,y2,⋯,yn}?换言之,如何根据观测序列推断出隐藏的模型状态?
解码问题,一般使用维特比算法,参考https://www.zhihu.com/question/20136144 - 给定观测序列
x
=
{
x
1
,
x
2
,
⋯
,
x
n
}
\boldsymbol{x}=\{x_1,x_2,\cdots,x_n\}
x={x1,x2,⋯,xn},如何调整模型参数
λ
=
[
A
,
B
,
π
]
\lambda=[\boldsymbol{A},\boldsymbol{B},\boldsymbol{\pi}]
λ=[A,B,π]使得该序列出现的概率
P
(
x
∣
λ
)
P(\boldsymbol{x}|\lambda)
P(x∣λ)最大?换言之,如何训练模型使得其能最好地描述观测数据?
学习问题,使用EM算法,参考https://blog.csdn.net/continueOo/article/details/77893587
另有参考:
1.机器学习(西瓜书)