本文详解paper "A Tutorial on HMMs and Selected Applications in Speech Recognition"并进行matlab实现(尽量用其他编程语言通用的实现)
举个简单的HMM例子
天气:
状态转移矩阵A size:state*state:
问接下来的7天天气依次是”sun sun rain rain…”的概率,也就是说observation
O = {S3, S3, S3, S1, S1, S3, S2, S3}的概率,对应时间t=1~8
给定model,要决定O的概率
再举个最简单的HMM模型:
几个碗,每个碗里几种不同颜色的球,每次随机选一个碗,再从选的碗里随机抽一个球,记下球的颜色
每个碗相当于state,每个碗中球的颜色概率相当于概率分布
每次随机选碗由状态转移矩阵决定
观测序列就是颜色
由此看出
HMM元素:
-
N: state个数,每个state记为S={S1, S2, …, Sn},时间t处的state为qt
-
M: 每个state有多少个observation symbols, 定义每个symbol为V={v1, v2, …, vM}
-
状态迁移概率分布A={aij}
-
state j下observation symbol概率分布B={bj(k)}
-
初始state分布
给出上述5个值,HMM模型就可以按如下步骤产生observation序列
每个Ot是V中一个symbol,步骤如下
- 根据初始state分布pai选择初始q1 = S1
- t = 1
- 根据stateSi中的symbol概率分布选择Ot=vk,即bi(k)
- 根据迁移概率分布aij,从Si迁移到一个新的state qt+1=Sj
- t=t+1, 如果t<T返回步骤3, 反之结束
可以看出一个HMM需要2个模型参数N,M,3个概率参数A,B, pi, 记为
HMM设计的3个基本问题:
- 给定一个HMM模型,一个观测信号序列,估计出序列的概率
给出observation序列, 模型lambda=(A,B,pi), 计算P(O | lambda)
即模型与Observation有多匹配 - 决定最好的模型states
给出observation序列,模型lambda=(A,B,pi), 选择state序列Q=q1q2…qT
即探索隐性状态 - 调整模型参数来最好地解释观测到的信号
调整lamba=(A,B,pi)使P(O | lambda)最大
即用observation进行训练
problem 1的解法
给出observation序列, 模型lambda=(A,B,pi), 计算P(O | lambda)
最直观的解法,列举每个可能的state,长度为T(observation个数)
q1为初始state, state序列为Q=q1q2…qT
假设observation间统计独立
state序列的概率
联合概率
相当于初始q1概率 × q1下观测到O1的概率 × q1迁移到q2的概率 ×
q2下观测到O2的概率 …
它的计算量是2T.NT,所以需要减小计算量的方法forward-backward法
forward-backward法
定义变量
即部分观测序列O1~Ot, 并且在时间t处state=Si, 模型是lambda
归纳求解alpha_t(i)
注意alpha是从上一个不同state i 转移到一个state j
回忆变量
其中第2步,表示所有可能的Si迁移到Sj后,t+1时刻观测到Ot+1,
即O=O1~Ot+1的概率
backward变量
相当于给定模型,t时刻的state是Si, 在这个条件加从t+1~T的观察序列的概率
归纳解
初始化变量
每次迭代都要T时刻所有state下的初始状态都设为1
归纳
beta_t(i)代表t时刻是state Si,而倒推回t的t+1时刻的Sj可以是所有可能的state
那么从Si到Sj迁移概率是aij, 同时在Sj下的观测是Ot+1, 而Ot+1往后就是beta_t+1(j)
求和所有可能的state就得到上式
计算量N2T