HMM学习最佳范例五:前向算法1

五、前向算法(Forward Algorithm)

计算观察序列的概率(Finding the probability of an observed sequence)

1.穷举搜索( Exhaustive search for solution)
  给定隐马尔科夫模型,也就是在模型参数(pi, A, B)已知的情况下,我们想找到观察序列的概率。还是考虑天气这个例子,我们有一个用来描述天气及与它密切相关的海藻湿度状态的隐马尔科夫模型(HMM),另外我们还有一个海藻的湿度状态观察序列。假设连续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)
  用这种方式计算观察序列概率极为昂贵,特别对于大的模型或较长的序列,因此我们可以利用这些概率的时间不变性来减少问题的复杂度。

2.使用递归降低问题复杂度
  给定一个隐马尔科夫模型(HMM),我们将考虑递归地计算一个观察序列的概率。我们首先定义局部概率(partial probability),它是到达网格中的某个中间状态时的概率。然后,我们将介绍如何在t=1和t=n(>1)时计算这些局部概率。
  假设一个T-长观察序列是:
     t-long 序列
  
 2a.局部概率(alpha‘s)
  考虑下面这个网格,它显示的是天气状态及对于观察序列干燥,湿润及湿透的一阶状态转移情况:
   trellis.1
  我们可以将计算到达网格中某个中间状态的概率作为所有到达这个状态的可能路径的概率求和问题。
  例如,t=2时位于“多云”状态的局部概率通过如下路径计算得出:
   paths.to.cloudy
  我们定义t时刻位于状态j的局部概率为at(j)——这个局部概率计算如下:
  alphat ( j )= Pr( 观察状态 | 隐藏状态j ) x Pr(t时刻所有指向j状态的路径)
  对于最后的观察状态,其局部概率包括了通过所有可能的路径到达这些状态的概率——例如,对于上述网格,最终的局部概率通过如下路径计算得出:
   alphas.at.t_eq_3
  由此可见,对于这些最终局部概率求和等价于对于网格中所有可能的路径概率求和,也就求出了给定隐马尔科夫模型(HMM)后的观察序列概率。
  第3节给出了一个计算这些概率的动态示例。

未完待续:前向算法2

本文翻译自:http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/html_dev/main.html
部分翻译参考:隐马尔科夫模型HMM自学

转载请注明出处“我爱自然语言处理”:www.52nlp.cn

本文链接地址:http://www.52nlp.cn/hmm-learn-best-practices-five-forward-algorithm-1

此条目发表在隐马尔科夫模型分类目录,贴了, , , , , 标签。将固定链接加入收藏夹。

HMM学习最佳范例五:前向算法1》有 7 条评论

  1. n说:

    那真是太好了

    [回复]

  2. Mr Gao说:

    讲解真是太妙了~我看书感觉好混乱,一经您分解讲出来真过瘾哈

    [回复]

  3. sysu512说:

    能否讲解下这个表达式 — “alphat ( j )= Pr( 观察状态 | 隐藏状态j ) x Pr(t时刻所有指向j状态的路径)” 的含义 不太懂 谢谢了

    [回复]

    Eclipse 回复:

    “我们定义t时刻位于状态j的局部概率为at(j)”
    at ( j )= Pr( 观察状态 | 隐藏状态j ) * Pr(t时刻所有指向j状态的路径)

    这里的中间状态是不是应该做一点更具体的说明呢?我的理解是计算模型中所有的概率计算都以观察序列为基础,因为观察序列是既定的事实,可以作为模型的参数来处理。
    所以这个式子用自然语言可以这样表达:
    Pr(观察状态 & 隐藏状态j )=Pr( 观察状态 | 隐藏状态j ) * Pr(t时刻出现状态j)

    以图示为例:
    Pr(damp & cloudy)=Pr( damp | cloudy ) * Pr(cloudy)
    —–Pr(cloudy)是第二天cloudy的概率

    不知道理解的对不对,希望能和博主探讨~

    [回复]

  4. 林羽飞扬说:

    “我们定义t时刻位于状态j的局部概率为at(j)”
    这个状态j是指观察状态吗?

    [回复]

  5. Jiaqi说:

    你好,请问下这里为什么用条件概率求和,而不是联合概率求和 ?
    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)

    我以为应该是:
    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)

    [回复]

    唯弗居 回复:

    同问???

    [回复]

发表评论

电子邮件地址不会被公开。 必填项已用*标注