详细推导HMM算法+直观例子+项目应用(二):forward算法与backward算法
HMM模型介绍
本文将帮您深入浅出的彻底理解HMM模型架构和其中用于参数估计的forward算法与backward算法,全文阅读大约需要10分钟,如果您希望亲自手推公式,则总耗时约20分钟。
本文为HMM系列的第二篇,第一篇请见
RNN的开端!最详细推导HMM算法推导+例子(一):维特比算法和模型建立
本文为贪心学院课程的学习笔记,讲师为李文哲博士。
阅读本文需要概率论中的概率相关与不相关的基础知识。
HMM参数估计
在第一篇文章中,我们介绍了如何通过complete case,即已知所有参数的情况下,求解维特比算法,从而获得隐藏状态z的序列。
现在我们将介绍,如何通过incomplete case转换成complete case,算法即是forward算法和backward算法,分别简称为F算法和B算法。
FB算法的目标和拆分
Forward and Backward算法目标:计算P(
|x)
拆分成两个算法:
F算法:P(
)联合概率
B算法:P(
|
)
接下来对这两个概率进行一点处理:
- p(zk|x)正比于p(zk,x),只差常数项
- P( | ),希望知道条件独立从而简化P。条件独立要求x1到k的全部信息全包含到了zk上,假设xk+1和x1到k条件独立于zk。
根据D-seperation判断出无关,则P(
|
)可做如下简化:
同理P(zk|x)也可以做简化:
实际项目应用:Change Detection
假设通过HMM,在风控里关心组团记账,风险的东西,那么需要知道,在哪些时间节点里,网络结构经过了很大变化,变化的时候就存在风险
方法1:直接比较网络图之间的相似度,如果相似度小于某个阈值,那么久说明网络经过了很大的变化
方法2:HMM模型法,隐式变量无法观测到,能观察到的是网状结构,现在想知道那些地方出现了很大的变化。现在未必计算相似度,而是计算不同状态下,生成网状图的可能性,用0,1序列表示状态,0表示好,1表示风险高
只要评估 是否超过阈值,就能知道k到k+1是否发生了突变。为了计算 ,可用FB算法
Forward算法详解
在计算 时,用递归的思想,想拆分成子问题 乘以某个数。
则先边缘化,再提取
:
右边的式子目前仍然比较复杂,希望进一步简化
其中,p(zk|zk-1,x1:k-1)很好算,第三个式子很像生成概率,接下来只要确认条件独立,进行拆分
考虑概率独立性,判断zk是否依赖于zk-1和前面x1:k-1?
显然是的,zk和x1:k-1条件独立,因为x1:k-1已经把一切都传给了zk-1,因此把x1:k-1划掉
同理,一旦包含zk,没必要包含zk-1和前面一系列x
分别是:子问题+A矩阵可算+B矩阵可算,则此刻可以递归计算
同时注意 base case,即初始是什么
Forward算法结束
Backward算法详解
目标:计算和F算法相反的p(xk+1:n|zk),同样希望拆分成子问题
同样进行展开和提取
仍然采用边缘化性质,zk和zk+1之后的xk+1:n无关
与F算法相反,从后往前算
该算法的复杂度:O(n*m2)
至此,forward和backward算法结束,HMM模型中我们获得了概率。