在隐马尔科夫模型中,评估和解码都是需要在已知模型参数的情况下进行的,但是我们往往并不知道这个模型参数,只有能够得到的观察序列,因而我们需要对模型参数进行估计,这便是隐马尔科夫模型的学习问题。
前向-后向算法,通过一个给定的观察序列,对模型参数进行估计,并通过迭代计算不断地对模型参数进行调整,直到达到最优,即使得在该模型参数下给定的观察序列概率达到最大。
前向算法在隐马尔可夫模型之前向算法和维特比算法中已有介绍,后向算法和前向算法类似。
再次定义一下前向算法中的局部概率,将其称为前向变量,后向算法中同样有后向变量为β_t (i)。
β_t (i) = P(O_t+1, O_t+2, ..., O_T | q_t = i, ϕ);ϕ表示为一个HMM模型。
1. 初始化
β_T (i) = a_iE,1 <= i <= N;E为终止状态,a_iE = 1;
2. 递归
,1 <= i <= N, 1 <= t <= T;
3. 终止
P(O | λ) = a_T (q_E) = β_1(q_0) =
重估转移概率a_ij:
a_ij = C(q_i -> q_j) / ∑_k▒ C(q_i -> q_k);C(q_i -> q_j)表示从q_i转移到q_j的数目。
定义在给定模型ϕ和观察序列O_1...T时,t时刻处在状态i,t+1时刻处在状态j的概率为ξ_t:
ξ_t (i,j) = P(q_t = i, q_t+1 = j | O, λ)
ξ_t (i,j) = a_t(i) * b_t(i) / (a_T (a_F));
转移概率:
重估混淆矩阵B:
定义在给定模型和观察序列下,在时刻t处在状态j的概率为γ_t (j):
混淆矩阵:
(PS:前向-后向算法理解的并不是很好,大多公式都是从网上截图下来的。。)