三大基本问题:
1. 概率计算问题:已知模型参数=(
,A,B)和观测序列O,求P(O|
);
2. 学习问题:已知O,求最优的模型参数,使得P(O|
)最大;
3. 预测问题(decode):已知模型参数和观测序列O,求使得P(I | O,
)最大的状态序列I
1. 概率计算问题:前向or后向算法
如果直接枚举所有I,时间复杂度是O(T * N^T),(N是状态总数,T是序列长度),太慢了!
前向算法:从前往后动态规划。定义=P(o1,o2,...,ot,
=
|
), 初值
=
; 可以写出
和
的递推关系式;最终P(O|
)=所有i的
之和
后向算法:从后往前动态规划。定义=P(o(t+1),o(t+2),...,o(T), |
=
,
); 初值
都等于1;可以写出
和
的递推关系式;最终P(O|
)=所有i的(
)之和
注意:和
的
=
位置不同!另外
包含o(t),
不包含o(t);
3. 预测问题(decode):P(I | O,)=P(I,O |
) / P(O |
), 分母对所有I都一样所以消去,等价于求最优I使得P(I,O |
)最大化;
解法:Viterbi, 其实也是动态规划,把前向算法里的sum变成max即可。
2. 学习问题:Baum-Welch算法
附录:P(O, =
∣λ),
,
的由来是推导出来的,不是拍脑袋想出来的!
有监督学习(也就是I都给定了),直接统计频率即可得到(,A,B)
无监督学习(I未知), Baum-Welch算法 : 带有隐变量的极大似然法,套用EM算法的框架(I就是z)。
E步:Q(I)=P(I | O,)=P(I,O|
) / P(O|
);
是上一轮的参数;此处不求解,在M步会用到;
M步:最大化sum_I Q(I)*lg(P(O,I | )/Q(I));
是本轮待训练的参数;lg分母Q(I)和
无关,所以消去;Q(I)展开以后,分母P(O|
)对所有I都一样(我:但是对不同的样本是不同的啊?),消去;化简为最大化sum_I P(I,O|
)*lgP(O,I |
), 把lgP(O,I |
)展开成(
,A,B)们连乘的形式,转成3组lg相加的形式;分别找最优的(
,A,B)使得式子最大化;以
为例:因为
(i)在所有i上加和是1,所以求解带等式约束的最优化问题,拉格朗日法,写个式子,对
(i)求偏导另其等于0,求解得到
(i)
本文深入探讨隐马尔可夫模型(HMM)的三大核心问题:概率计算、学习与预测。通过前向/后向算法解决概率计算问题,Baum-Welch算法应对学习挑战,Viterbi算法实现最优状态序列预测。文章详细解释了各算法原理及应用。
1661

被折叠的 条评论
为什么被折叠?



