闲言碎语
以前一直在看和复现 cv 方向的论文,最近有需求所以去接触了一些 DL-EEG(深度学习-脑电图)的论文和模型,由于这一方向基本没有开源代码,所以从基础学起方便以后自己搭建模型;
而 GMM-HMM 是一个语音识别系统常用的的模型,对于 EEG 这样的时序数据也同样适用,所以今天就看一下 GMM-HMM 模型;
课件地址:
链接: https://pan.baidu.com/s/1T-oApPtrDADrdRr6-BsXtw
提取码: 5q8y
什么是马尔可夫性?
在马尔可夫性的定义中,在已知“现在”的条件下,“将来”与“过去”无关,这种特性就叫强马尔可夫性,具有这种性质的马尔可夫过程叫强马尔可夫过程;
在数学上定义为:
设
X(t),t∈T 是一个随机过程,
E 为其状态空间,若对任意
t1<t2<…<tn<t,有任意的
x1,x2,…,xn,x∈E,随机变量
X(t) 在已知变量
X(t1)=x1,…,X(tn)=xn 之下的条件分布函数就至于
X(tn)=xn 有关,即条件分布式满足等式:
F(x,t∣xn,xn−1,…,x2,x1,tn,tn−1,…,t2,t1)=F(x,t∣xn,tn)
即
P{X(t)≤x∣X(t1)=x1,…,X(tn)=xn}=P{X(t)≤x∣X(tn)=xn}
一个简单的例子
举一个简单的股票市场的例子(来自徐亦达老师,附上链接 https://github.com/roboticcam):
我们称在
t 时刻观测到的值/事件记为
yt∈{Y1,Y2,…,YL} ,这
L 个值分别代表了
L 种可能事件(图中为 up,down,unchanged 三种可能事件,即
L=3);
同时这个过程中也有一些隐藏的离散的状态量
qt∈{Q1,Q2,…,QK},被称为隐状态,这
K 个值分别代表了
K 种可能隐状态(图中为Bull,Bear,Even 三种无法直接观测的隐状态,即
K=3);
以下图的时序数据为例:
根据马尔可夫性则有:
P(qt∣q1,...,qt−1,y1,...,yt−1)=P(qt∣qt−1)
P(yt∣q1,...,qt−1,qt,y1,...,yt−1)=P(yt∣qt)
其中:
- 称
P(qt∣qt−1) 为转换概率(transition probability),即从隐状态
qt−1 到
qt 的概率;
- 称
P(yt∣qt) 为输出概率(emission probability),即在隐状态
qt 下观测到
yt 的概率;
为了方便计算,我们将这些概率记为矩阵的形式:
A=⎩⎨⎧a0,0a1,0a2,0a0,1a1,1a2,1a0,2a1,2a2,2⎭⎬⎫
B=⎩⎨⎧b0,0b1,0b2,0b0,1b1,1b2,1b0,2b1,2b2,2⎭⎬⎫
其中:
-
A 的大小为
K×K,
B 的大小为
K×L;
-
ai,j 表示从
Qi 转移到
Qj 的概率,
bi,j 表示在
Qi 下观测到
Yj 的概率;
由第一张图我们可以分别写出这些概率,例如:
- 从隐状态 EVEN 到 BULL 的概率为 0.4,可以写作
P(qt=BULL∣qt−1=EVEN)=0.4,即
a3,1=0.4;
- 在隐状态 BEAR 下观测到 DOWN 的概率为 0.6,可以写作
P(yt=DOWN∣qt=BEAR)=0.6,即
b2,2=0.6;
为了方便书写,我们令:
qt∈{BULL,BEAR,EVEN}={1,2,3}
yt∈{UP,DOWN,UNCHANGED}={1,2,3}
同时我们可以分别写出
A 和
B:
A=⎩⎨⎧0.60.50.40.20.30.50.20.20.1⎭⎬⎫
B=⎩⎨⎧0.70.10.30.10.60.30.20.30.4⎭⎬⎫
并且我们记
λ={A,B},称之为隐马尔可夫模型的参数;
引入隐状态的公式推理
直观上可以看到,原来相互依赖的观测值都变成相互独立了,相互依赖的量变成了
qt−1→qt→qt+1,我们就称这样一条链为马尔可夫链;
那么就有:
P(yt+1,yt,...,y1)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1,yt,...,y1,qt+1,qt,...,q1)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1∣yt,yt−1,qt+1,qt,qt−1)×P(yt,yt−1,qt+1,qt,qt−1)
由马尔可夫性可以化简为:
P(yt+1,yt,...,y1)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1∣qt+1)×P(yt,yt−1,qt+1,qt,qt−1)
同样可以继续化简为:
P(yt+1,yt,...,y1)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1∣qt+1)×P(qt+1∣yt,yt−1,qt,qt−1)×P(yt,yt−1,qt,qt−1)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1∣qt+1)×P(qt+1∣qt)×P(yt,yt−1,qt,qt−1)=...(注意到这是递归式)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1∣qt+1)×P(qt+1∣qt)×...×P(y1∣q1)×P(q1)
当然我们还可以注意到,式子中有一项
P(q1) 是未知的,那我们就给它一个初始化值,称之为
π,这样我们的隐马尔可夫模型完整的参数就写作:
λ={A,B,π}
那么在参数
λ 下完整的隐马尔可夫概率模型就可以表示为:
P(yt+1,yt,...,y1∣λ)=qt+1=1∑Kqt=1∑K...q1=1∑KP(yt+1∣qt+1)×P(qt+1∣qt)×...×P(y1∣q1)×P(q1)
更具体一点,对于一组观测值
YT={y1,y2,...,yT},隐马尔可夫模型对它的概率预测为:
P(yT,yT−1,...,y1∣λ)=qT=1∑KqT−1=1∑K...q1=1∑KP(yT∣qT)×P(qT∣qT−1)×...×P(y1∣q1)×P(q1)=qT=1∑KqT−1=1∑K...q1=1∑Kπ(q1)t=2∏Taqt−1,qtbqt(yt)
简化推理式
虽然我们得到了上述式子,但是存在的问题就是它的计算复杂度较高,对于长度为
T 的序列,需要进行
KT 次计算;
为了简化推理式,我们首先定义如下概念:
定义一:
αi(t)=P(y1,y2,...,yt,qt=i∣λ),为
qt=i 和它的所有观测值
y1,y2,...,yt 的联合概率;
定义二:
βi(t)=P(yt+1,...,yT∣qt=i,λ),为
qt=i 条件下其他的观测值
yt+1,...,tT 的联合概率;
那么我们可以写出:
(1)
αi(1)=P(y1,q1=i)=P(y1∣q1=i)×P(q1=i)=bi(y1)×π
(2)
αj(2)=P(y1,y2,q2=j)=i=1∑KP(y1,y2,q1=i,q2=j)=i=1∑KP(y2∣q2=j)×P(q2=j∣q1=j)×P(y1,q1=i)=P(y2∣q2=j)i=1∑KP(q2=j∣q1=i)×αi(1)=bj(y2)i=1∑Kai,jαi(1)
......
以此类推,我们就可以得到:
αj(T)=bj(yT)i=1∑Kai,jαi(T−1)
这样的递推关系中,由于每个
α(t) 只计算一次
sum,故计算复杂度为
K×T;
此时我们再看一下定义一:
αi(t)=P(y1,y2,...,yt,qt=i∣λ)
我们可以写出:
P(yT,yT−1,...,y1∣λ)=j=1∑Kαj(T)
这种算法就叫做 Forward Algorithm;
还有一种对应的算法 Backward Algorithm,可以在已知全部序列时算出所有事件的概率,即:
P(Y,qt=i)=P(Y∣qt=i)×P(qt=i)=P(y1,...,yt∣qt=i)×P(yt+1,...,yT∣qt=i)×P(qt=i)=αi(t)×βi(t)
如何获取参数值?
参数值可以通过最大似然估计获取,即对于给定的
n 个已知观测值的数据
YN={Y1,Y2,...,YN},我们可以通过以下方程求解参数
λ 的估计值:
λ^=λargmaxlogP(Y1,Y2,...,Yn∣λ)
通常这个估计方程的解会非常复杂,因此我们采用 EM 算法去估计参数值,EM 算法的详细解释和收敛性证明可以看我的这一篇:
【机器学习基础】EM算法详解及其收敛性证明
这里直接给出迭代步骤:
我们先假设隐藏参数
εt(i,j)=P(qt=i,qt+1∣Y,λ),表示对于给定的参数
λ 和 观测序列
Y∈YN,
Y={y1,...,yn},在
t 时刻为状态
i 并且在
t+1 时刻为状态
j 的概率;
展开为:
εt(i,j)=P(Y∣λ)P(qt=i,qt+1=j,Y∣λ)=P(YN∣λ)αt(i)ai,jbj(yt+1)βt+1(j)=∑i=1K∑j=1Kαt(i)ai,jbj(yt+1)βt+1(j)αt(i)ai,jbj(yt+1)βt+1(j)
并定义参数
γt(i)=∑i=1nεt(i,j),1≤t≤T,表示对于给定的
λ 和
Y 下
t 时为状态
i 的概率;
那么将
t 带入上式,就可以得到表示为状态
i 转移出去的次数的期望值
εt(i,j) ,和表示为从状态
i 到状态
j 的次数的期望值
γt(i);
因此就可以得到参数
λ 的估计值:
πi^=γ1(i)
a^i,j=∑t=1T−1γt(i)∑t=1T−1εt(i,j)
b^j(k)=∑t=1Tγt(j)∑t=1Tγt(j)δ(yt,k)
其中:
δ(x,k)={10x=kx!=k
迭代过程为:
- 初始化参数
λ={A,B,π};
- E-Step:由参数估计值
λi 计算
εt(i,j) 和
γt(i);
- M-Step:用期望
εt(i,j) 和
γt(i) 得到参数估计值
λi+1;
其中:
E-step 和 M-Step 循环迭代,直到参数
λ 收敛;