假设有一个房间,一个人在房间里投掷硬币,你在房间的外面,只能看见结果,例如:TTHTHHTT(T代表反面,H代表正面),这个结果被称为观察序列,但是你却不知道房间里的人是一直在投掷一个硬币,还是投掷不同的硬币,你也不知道硬币是均匀的,还是有偏差的。下图给出四个例子,a代表投掷一个均匀的硬币,b代表两个均匀的硬币,c代表两个有偏差的硬币,d代表三个有偏差的硬币。
可以看出,输出的序列取决于几个方面:每个状态独立发生的概率,状态转化的概率,状态导致现象的概率。这就是隐马尔科夫模型研究的问题。
2.0 问题的定义
N 代表模型中状态的数量
M 代表观察现象的数量(例如之前的T和H)
T 观察序列的长度,通常认为是时间
V 所有可能的观察现象的离散集合
it 时间t时的状态
初始时状态i的概率
时间t时状态为i,时间t+1时状态为j的概率,通常假设状态跳转的概率与时间独立。
时间t状态为j导致的观察结果为vk的概率
Ot t时的观察结果
HMM的定义
3.0 HMM的三个问题
研究HMM主要关注在三个问题上:
问题一:给定一个HMM,计算,观察序列O=O1,,OT发生的概率
问题二:给定一个HMM,怎样选择一个状态序列I=i1,i2,,,iT,使观察序列和状态序列的联合概率最大
问题三:怎样调整HMM的参数,使
或者
最大化
其中,问题1与问题2可以认为是分析型的问题,问题3可以认为是一个训练问题。
4.0 问题的解决
问题一:用最直接的方式
然后,我们用全概率公式:
其中
但是,从公式(4)中我们不难看出,这个公式包含了2T个乘法,然后有N的T次方种不同的状态序列,所以这个公式要进行次的乘法,这是一个天文数字,为了解决这个问题,引入forward-backward 过程。
forward 过程
令前向变量定义为:
给定HMM,时间t时状态为i,从t=1到t部分观察序列出现的概率,计算过程如下:
其中第一步有N个乘法,第二步有(N+1)N(T-1)个乘法,第三步没有乘法。总共的计算开支比之前的算法要好很多。
Backward 过程
后向过程可以完全类比与前向过程,后向变量定义为
给定HMM,时间t时状态为i,从t+1到T部分观察序列出现的概率,计算过程如下:
计算代价为N^2*T