【机器学习基础】一文读懂隐马尔可夫模型 HMM

闲言碎语

以前一直在看和复现 cv 方向的论文,最近有需求所以去接触了一些 DL-EEG(深度学习-脑电图)的论文和模型,由于这一方向基本没有开源代码,所以从基础学起方便以后自己搭建模型;

而 GMM-HMM 是一个语音识别系统常用的的模型,对于 EEG 这样的时序数据也同样适用,所以今天就看一下 GMM-HMM 模型;

课件地址:

链接: https://pan.baidu.com/s/1T-oApPtrDADrdRr6-BsXtw

提取码: 5q8y

什么是马尔可夫性?

在马尔可夫性的定义中,在已知“现在”的条件下,“将来”与“过去”无关,这种特性就叫强马尔可夫性,具有这种性质的马尔可夫过程叫强马尔可夫过程;

在数学上定义为:

X ( t ) , t T X(t),t\in T 是一个随机过程, E E 为其状态空间,若对任意 t 1 < t 2 < < t n < t t_1<t_2<…<t_n<t ,有任意的 x 1 , x 2 , , x n , x E x_1,x_2,…,x_n,x\in E ,随机变量 X ( t ) X(t) 在已知变量 X ( t 1 ) = x 1 , , X ( t n ) = x n X(t_1)=x_1,…,X(t_n)=x_n 之下的条件分布函数就至于 X ( t n ) = x n X(t_n)=x_n 有关,即条件分布式满足等式:

F ( x , t x n , x n 1 , , x 2 , x 1 , t n , t n 1 , , t 2 , t 1 ) = F ( x , t x n , t n ) F(x,t|x_n,x_{n-1},…,x_2,x_1,t_n,t_{n-1},…,t_2,t_1)=F(x,t|x_n,t_n)

P { X ( t ) x X ( t 1 ) = x 1 , , X ( t n ) = x n } = P { X ( t ) x X ( t n ) = x n } P\lbrace X(t)\le x|X(t_1)=x_1,…,X(t_n)=x_n\rbrace=P\lbrace X(t)\le x|X(t_n)=x_n\rbrace

一个简单的例子

举一个简单的股票市场的例子(来自徐亦达老师,附上链接 https://github.com/roboticcam):
图一
我们称在 t t 时刻观测到的值/事件记为 y t { Y 1 , Y 2 , , Y L } y_t\in\lbrace Y_1,Y_2,…,Y_L\rbrace ,这 L L 个值分别代表了 L L 种可能事件(图中为 up,down,unchanged 三种可能事件,即 L = 3 L=3 );

同时这个过程中也有一些隐藏的离散的状态量 q t { Q 1 , Q 2 , , Q K } q_t\in\lbrace Q_1,Q_2,…,Q_K\rbrace ,被称为隐状态,这 K K 个值分别代表了 K K 种可能隐状态(图中为Bull,Bear,Even 三种无法直接观测的隐状态,即 K = 3 K=3 );

以下图的时序数据为例:
在这里插入图片描述
根据马尔可夫性则有:

P ( q t q 1 , . . . , q t 1 , y 1 , . . . , y t 1 ) = P ( q t q t 1 ) P(q_t|q_1, . . . , q_{t-1}, y_1, . . . , y_{t-1}) = P(q_t|q_{t-1})

P ( y t q 1 , . . . , q t 1 , q t , y 1 , . . . , y t 1 ) = P ( y t q t ) P(y_t|q_1, . . . , q_{t-1},q_t, y_1, . . . , y_{t-1}) = P(y_t|q_{t})

其中:

  1. P ( q t q t 1 ) P(q_t|q_{t-1}) 为转换概率(transition probability),即从隐状态 q t 1 q_{t-1} q t q_t 的概率;
  2. P ( y t q t ) P(y_t|q_{t}) 为输出概率(emission probability),即在隐状态 q t q_{t} 下观测到 y t y_t 的概率;

为了方便计算,我们将这些概率记为矩阵的形式:

A = { a 0 , 0 a 0 , 1 a 0 , 2 a 1 , 0 a 1 , 1 a 1 , 2 a 2 , 0 a 2 , 1 a 2 , 2 } A= \left\{ \begin{matrix} a_{0,0} & a_{0,1} & a_{0,2}\\ a_{1,0} & a_{1,1} & a_{1,2}\\ a_{2,0} & a_{2,1} & a_{2,2}\\ \end{matrix} \right\}

B = { b 0 , 0 b 0 , 1 b 0 , 2 b 1 , 0 b 1 , 1 b 1 , 2 b 2 , 0 b 2 , 1 b 2 , 2 } B= \left\{ \begin{matrix} b_{0,0} & b_{0,1} & b_{0,2}\\ b_{1,0} & b_{1,1} & b_{1,2}\\ b_{2,0} & b_{2,1} & b_{2,2}\\ \end{matrix} \right\}

其中:

  1. A A 的大小为 K × K K×K B B 的大小为 K × L K×L
  2. a i , j a_{i,j} 表示从 Q i Q_i 转移到 Q j Q_j 的概率, b i , j b_{i,j} 表示在 Q i Q_i 下观测到 Y j Y_j 的概率;

由第一张图我们可以分别写出这些概率,例如:

  1. 从隐状态 EVEN 到 BULL 的概率为 0.4,可以写作 P ( q t = B U L L q t 1 = E V E N ) = 0.4 P(q_t=BULL|q_{t-1}=EVEN)=0.4 ,即 a 3 , 1 = 0.4 a_{3,1}=0.4
  2. 在隐状态 BEAR 下观测到 DOWN 的概率为 0.6,可以写作 P ( y t = D O W N q t = B E A R ) = 0.6 P(y_t=DOWN|q_t=BEAR)=0.6 ,即 b 2 , 2 = 0.6 b_{2,2}=0.6

为了方便书写,我们令:
q t { B U L L , B E A R , E V E N } = { 1 , 2 , 3 } q_t\in\lbrace BULL,BEAR,EVEN\rbrace=\lbrace 1,2,3\rbrace
y t { U P , D O W N , U N C H A N G E D } = { 1 , 2 , 3 } y_t\in\lbrace UP,DOWN,UNCHANGED\rbrace=\lbrace 1,2,3\rbrace

同时我们可以分别写出 A A B B

A = { 0.6 0.2 0.2 0.5 0.3 0.2 0.4 0.5 0.1 } A= \left\{ \begin{matrix} 0.6 & 0.2 & 0.2\\ 0.5 & 0.3 & 0.2\\ 0.4 & 0.5 & 0.1\\ \end{matrix} \right\}

B = { 0.7 0.1 0.2 0.1 0.6 0.3 0.3 0.3 0.4 } B= \left\{ \begin{matrix} 0.7 & 0.1 & 0.2\\ 0.1 & 0.6 & 0.3\\ 0.3 & 0.3 & 0.4\\ \end{matrix} \right\}

并且我们记 λ = { A , B } \lambda=\lbrace A,B\rbrace ,称之为隐马尔可夫模型的参数;

引入隐状态的公式推理

在这里插入图片描述
直观上可以看到,原来相互依赖的观测值都变成相互独立了,相互依赖的量变成了 q t 1 q t q t + 1 q_{t-1}\rightarrow q_{t}\rightarrow q_{t+1} ,我们就称这样一条链为马尔可夫链;

那么就有:
P ( y t + 1 , y t , . . . , y 1 ) = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 , y t , . . . , y 1 , q t + 1 , q t , . . . , q 1 ) = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 y t , y t 1 , q t + 1 , q t , q t 1 ) × P ( y t , y t 1 , q t + 1 , q t , q t 1 ) \begin{aligned} P(y_{t+1},y_t,...,y_{1}) & =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1},y_t,...,y_{1},q_{t+1},q_t,...,q_{1}) \\ & =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1}|y_t,y_{t-1},q_{t+1},q_t,q_{t-1})×P(y_t,y_{t-1},q_{t+1},q_t,q_{t-1}) \\ \end{aligned}
由马尔可夫性可以化简为:
P ( y t + 1 , y t , . . . , y 1 ) = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 q t + 1 ) × P ( y t , y t 1 , q t + 1 , q t , q t 1 ) \begin{aligned} P(y_{t+1},y_t,...,y_{1}) & =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1}|q_{t+1})×P(y_t,y_{t-1},q_{t+1},q_t,q_{t-1}) \\ \end{aligned}

同样可以继续化简为:

P ( y t + 1 , y t , . . . , y 1 ) = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 q t + 1 ) × P ( q t + 1 y t , y t 1 , q t , q t 1 ) × P ( y t , y t 1 , q t , q t 1 ) = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 q t + 1 ) × P ( q t + 1 q t ) × P ( y t , y t 1 , q t , q t 1 ) = . . . = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 q t + 1 ) × P ( q t + 1 q t ) × . . . × P ( y 1 q 1 ) × P ( q 1 ) \begin{aligned} P(y_{t+1},y_t,...,y_{1})& =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1}|q_{t+1})×P(q_{t+1}|y_t,y_{t-1},q_t,q_{t-1})×P(y_t,y_{t-1},q_t,q_{t-1}) \\ & =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1}|q_{t+1})×P(q_{t+1}|q_t)×P(y_t,y_{t-1},q_t,q_{t-1}) \\ &=...(注意到这是递归式)\\ & =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1}|q_{t+1})×P(q_{t+1}|q_t)×...×P(y_{1}|q_{1})×P(q_1) \\ \end{aligned}

当然我们还可以注意到,式子中有一项 P ( q 1 ) P(q_1) 是未知的,那我们就给它一个初始化值,称之为 π \pi ,这样我们的隐马尔可夫模型完整的参数就写作:

λ = { A , B , π } \lambda=\lbrace A,B,\pi\rbrace

那么在参数 λ \lambda 下完整的隐马尔可夫概率模型就可以表示为:

P ( y t + 1 , y t , . . . , y 1 λ ) = q t + 1 = 1 K q t = 1 K . . . q 1 = 1 K P ( y t + 1 q t + 1 ) × P ( q t + 1 q t ) × . . . × P ( y 1 q 1 ) × P ( q 1 ) \begin{aligned} P(y_{t+1},y_t,...,y_{1}|\lambda)& =\sum_{q_{t+1}=1}^K\sum_{q_{t}=1}^K...\sum_{q_{1}=1}^KP(y_{t+1}|q_{t+1})×P(q_{t+1}|q_t)×...×P(y_{1}|q_{1})×P(q_1)\\ \end{aligned}

更具体一点,对于一组观测值 Y T = { y 1 , y 2 , . . . , y T } Y_T=\lbrace y_1,y_2,...,y_T\rbrace ,隐马尔可夫模型对它的概率预测为:

P ( y T , y T 1 , . . . , y 1 λ ) = q T = 1 K q T 1 = 1 K . . . q 1 = 1 K P ( y T q T ) × P ( q T q T 1 ) × . . . × P ( y 1 q 1 ) × P ( q 1 ) = q T = 1 K q T 1 = 1 K . . . q 1 = 1 K π ( q 1 ) t = 2 T a q t 1 , q t b q t ( y t ) \begin{aligned} P(y_{T},y_{T-1},...,y_{1}|\lambda)&=\sum_{q_{T}=1}^K\sum_{q_{T-1}=1}^K...\sum_{q_{1}=1}^KP(y_{T}|q_{T})×P(q_{T}|q_{T-1})×...×P(y_{1}|q_{1})×P(q_1)\\ & =\sum_{q_{T}=1}^K\sum_{q_{T-1}=1}^K...\sum_{q_{1}=1}^K\pi(q_1)\prod_{t=2}^{T}a_{q_{t-1},q_{t}}b_{q_{t}}(y_t)\\ \end{aligned}

简化推理式

虽然我们得到了上述式子,但是存在的问题就是它的计算复杂度较高,对于长度为 T T 的序列,需要进行 K T K^T 次计算;

为了简化推理式,我们首先定义如下概念:

在这里插入图片描述

定义一: α i ( t ) = P ( y 1 , y 2 , . . . , y t , q t = i λ ) \alpha_i(t)=P(y_1,y_2,...,y_t,q_t=i|\lambda) ,为 q t = i q_t=i 和它的所有观测值 y 1 , y 2 , . . . , y t y_1,y_2,...,y_t 的联合概率;

定义二: β i ( t ) = P ( y t + 1 , . . . , y T q t = i , λ ) \beta_i(t)=P(y_{t+1},...,y_{T}|q_t=i,\lambda) ,为 q t = i q_t=i 条件下其他的观测值 y t + 1 , . . . , t T y_{t+1},...,t_T 的联合概率;

那么我们可以写出:

(1)
α i ( 1 ) = P ( y 1 , q 1 = i ) = P ( y 1 q 1 = i ) × P ( q 1 = i ) = b i ( y 1 ) × π \begin{aligned} \alpha_i(1)&=P(y_1,q_1=i)\\ &=P(y_1|q_1=i)×P(q_1=i)\\ &=b_i(y_1)×\pi \end{aligned}

(2)

α j ( 2 ) = P ( y 1 , y 2 , q 2 = j ) = i = 1 K P ( y 1 , y 2 , q 1 = i , q 2 = j ) = i = 1 K P ( y 2 q 2 = j ) × P ( q 2 = j q 1 = j ) × P ( y 1 , q 1 = i ) = P ( y 2 q 2 = j ) i = 1 K P ( q 2 = j q 1 = i ) × α i ( 1 ) = b j ( y 2 ) i = 1 K a i , j α i ( 1 ) \begin{aligned} \alpha_j(2)&=P(y_1,y_2,q_2=j)\\ &=\sum_{i=1}^K P(y_1,y_2,q_1=i,q_2=j)\\ &=\sum_{i=1}^K P(y_2|q_2=j)×P(q2=j|q_1=j)×P(y_1,q_1=i)\\ &=P(y_2|q_2=j)\sum_{i=1}^KP(q_2=j|q_1=i)×\alpha_i(1)\\ &=b_j(y_2)\sum_{i=1}^Ka_{i,j}\alpha_i(1) \end{aligned}

. . . . . . ......

以此类推,我们就可以得到:

α j ( T ) = b j ( y T ) i = 1 K a i , j α i ( T 1 ) \begin{aligned} \alpha_j(T)=b_j(y_T)\sum^K_{i=1}a_{i,j}\alpha_i(T-1) \end{aligned}

这样的递推关系中,由于每个 α ( t ) \alpha(t) 只计算一次 s u m sum ,故计算复杂度为 K × T K×T

此时我们再看一下定义一:

α i ( t ) = P ( y 1 , y 2 , . . . , y t , q t = i λ ) \alpha_i(t)=P(y_1,y_2,...,y_t,q_t=i|\lambda)

我们可以写出:

P ( y T , y T 1 , . . . , y 1 λ ) = j = 1 K α j ( T ) P(y_{T},y_{T-1},...,y_{1}|\lambda)=\sum_{j=1}^K\alpha_j(T)

这种算法就叫做 Forward Algorithm;

还有一种对应的算法 Backward Algorithm,可以在已知全部序列时算出所有事件的概率,即:

P ( Y , q t = i ) = P ( Y q t = i ) × P ( q t = i ) = P ( y 1 , . . . , y t q t = i ) × P ( y t + 1 , . . . , y T q t = i ) × P ( q t = i ) = α i ( t ) × β i ( t ) \begin{aligned} P(Y,q_t=i)&=P(Y|q_t=i)×P(q_t=i)\\ &=P(y_1,...,y_t|q_t=i)×P(y_{t+1},...,y_T|q_t=i)×P(q_t=i)\\ &=\alpha_i(t)×\beta_i(t) \end{aligned}

如何获取参数值?

参数值可以通过最大似然估计获取,即对于给定的 n n 个已知观测值的数据 Y N = { Y 1 , Y 2 , . . . , Y N } Y_N=\lbrace Y^{1},Y^{2},...,Y^{N}\rbrace ,我们可以通过以下方程求解参数 λ \lambda 的估计值:

λ ^ = arg max λ l o g P ( Y 1 , Y 2 , . . . , Y n λ ) \hat{\lambda}=\argmax_{\lambda}logP(Y^{1},Y^{2},...,Y^{n}|\lambda)

通常这个估计方程的解会非常复杂,因此我们采用 EM 算法去估计参数值,EM 算法的详细解释和收敛性证明可以看我的这一篇:

【机器学习基础】EM算法详解及其收敛性证明

这里直接给出迭代步骤:

我们先假设隐藏参数 ε t ( i , j ) = P ( q t = i , q t + 1 Y , λ ) \varepsilon_t(i,j)=P(q_t=i,q_{t+1}|Y,\lambda) ,表示对于给定的参数 λ \lambda 和 观测序列 Y Y N Y\in Y_N Y = { y 1 , . . . , y n } Y=\lbrace y_1,...,y_n\rbrace ,在 t t 时刻为状态 i i 并且在 t + 1 t+1 时刻为状态 j j 的概率;

展开为:

ε t ( i , j ) = P ( q t = i , q t + 1 = j , Y λ ) P ( Y λ ) = α t ( i ) a i , j b j ( y t + 1 ) β t + 1 ( j ) P ( Y N λ ) = α t ( i ) a i , j b j ( y t + 1 ) β t + 1 ( j ) i = 1 K j = 1 K α t ( i ) a i , j b j ( y t + 1 ) β t + 1 ( j ) \begin{aligned} \varepsilon_t(i,j)&=\frac{P(q_t=i,q_{t+1}=j,Y|\lambda)}{P(Y|\lambda)} \\ &=\frac{\alpha_t(i)a_{i,j}b_j(y_{t+1})\beta_{t+1}(j)}{P(Y_N|\lambda)}\\ &=\frac{\alpha_t(i)a_{i,j}b_j(y_{t+1})\beta_{t+1}(j)}{\sum_{i=1}^K\sum_{j=1}^K\alpha_t(i)a_{i,j}b_j(y_{t+1})\beta_{t+1}(j)}\\ \end{aligned}

并定义参数 γ t ( i ) = i = 1 n ε t ( i , j ) , 1 t T \gamma_t(i)=\sum_{i=1}^n\varepsilon_t(i,j),1\le t\le T ,表示对于给定的 λ \lambda Y Y t t 时为状态 i i 的概率;

那么将 t t 带入上式,就可以得到表示为状态 i i 转移出去的次数的期望值 ε t ( i , j ) \varepsilon_t(i,j) ,和表示为从状态 i i 到状态 j j 的次数的期望值 γ t ( i ) \gamma_t(i)

因此就可以得到参数 λ \lambda 的估计值:

π i ^ = γ 1 ( i ) \hat{\pi_i}=\gamma_1(i)
a ^ i , j = t = 1 T 1 ε t ( i , j ) t = 1 T 1 γ t ( i ) \hat{a}_{i,j}=\frac{\sum_{t=1}^{T-1}\varepsilon_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)}
b ^ j ( k ) = t = 1 T γ t ( j ) δ ( y t , k ) t = 1 T γ t ( j ) \hat{b}_j(k)=\frac{\sum_{t=1}^{T}\gamma_t(j)\delta(y_t,k)}{\sum_{t=1}^{T}\gamma_t(j)}

其中:

δ ( x , k ) = { 1 x=k 0 x!=k \delta(x,k)= \begin{cases} 1& \text{x=k}\\ 0& \text{x!=k} \end{cases}

迭代过程为:

  1. 初始化参数 λ = { A , B , π } \lambda=\lbrace A,B,\pi\rbrace
  2. E-Step:由参数估计值 λ i \lambda_i 计算 ε t ( i , j ) \varepsilon_t(i,j) γ t ( i ) \gamma_t(i)
  3. M-Step:用期望 ε t ( i , j ) \varepsilon_t(i,j) γ t ( i ) \gamma_t(i) 得到参数估计值 λ i + 1 \lambda_{i+1}

其中:

E-step 和 M-Step 循环迭代,直到参数 λ \lambda 收敛;

发布了115 篇原创文章 · 获赞 198 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_44936889/article/details/104867896