2021SC@SDUSC
前向算法
对于评估问题(Evaluation)
给定 HMM,即,求某个观察序列的概率。
例如:给定一个天气的隐马尔可夫模型,包括第一天的天气概率分布,天气转移概率矩阵,特定天气下树叶的湿度概率分布。求第一天湿度为 1,第二天湿度为 2,第三天湿度为 3 的概率。
思路一:找到所有状态序列,得到各状态概率,得到每种状态概率对应的观察概率,求和。
即:找到每一个可能的隐藏状态,并且将这些隐藏状态下的观察序列概率相加。
对于上面那个(天气)例子,将有 3^3 = 27 种不同的天气序列可能性,因此,观察序列的概率是:Pr(dry,damp,soggy | HMM) = Pr(dry,damp,soggy | sunny,sunny,sunny) + Pr(dry,damp,soggy | sunny,sunny ,cloudy) + Pr(dry,damp,soggy | sunny,sunny ,rainy) + . . . . Pr(dry,damp,soggy | rainy,rainy ,rainy)
用这种方式计算观察序列概率极为昂贵,特别对于大的模型或较长的序列,因此我们可以利用这些概率的时间不变性来减少问题的复杂度。
思路二:采用动态规划——前向算法
基本思想:定义前向变量 :t 时刻状态为且观察状态为 的概率
如果可以高效地计算,就可以高效地求得。
蓝色部分是:从 t 时刻的各个状态得到 t 时刻的观察状态的概率
黑色部分是:从 t 时刻的各个状态得到 t+1 时刻的各个状态
即:
- 初始化:
- 循环计算:
- 结束,输出:
后向算法
定义后向变量是在给定了模型 和假定在时间 t 状态为的条件下,模型输出 观察序列 的概率:
算法图解:
蓝色部分是:从 t+1 时刻的各个状态得到 t+1 时刻的观察状态的概率
黑色部分是:从 t+1 时刻的各个状态得到 t 时刻的各个状态
即:
- 初始化:
- 循环计算:
- 结束,输出: