Baum-Welch 许多可能的观察
Baum-Welch many possible observations
我已经在 python 中实现了 baum-welch 算法,但我现在在尝试训练 HMM(隐马尔可夫模型)参数 A
、B
和pi
。问题是我有很多观察序列Y = (Y_1=y_1, Y_2=y_2,...,Y_t=y_t)
。每个观察变量 Y_t
可以取 K
可能的值,在我的例子中是 K=4096
。幸运的是我只有两个状态 N=2
,但是我的发射矩阵 B
是 N by K
所以 2 行乘 4096 列。
现在初始化B时,每一行的总和必须为1。由于两行各有4096个值,所以数字很小。如此之小,以至于当我去计算 alpha
和 beta
时,随着 t
的增加,它们的行最终接近 0。这是一个问题,因为您无法计算 gamma
,因为它试图计算 x/0
或 0/0
。我怎样才能 运行 算法不崩溃并且不永久改变我的值?
这听起来像是标准的 HMM 缩放问题。看看 "A Tutorial on Hidden Markov Models ..."(Rabiner,1989),第 V.A "Scaling".
部分
简而言之,您可以每次重新缩放 alpha
以求和为 1,并使用与相应 [=10] 相同的 因子重新缩放 beta
=],一切正常。
我已经在 python 中实现了 baum-welch 算法,但我现在在尝试训练 HMM(隐马尔可夫模型)参数 A
、B
和pi
。问题是我有很多观察序列Y = (Y_1=y_1, Y_2=y_2,...,Y_t=y_t)
。每个观察变量 Y_t
可以取 K
可能的值,在我的例子中是 K=4096
。幸运的是我只有两个状态 N=2
,但是我的发射矩阵 B
是 N by K
所以 2 行乘 4096 列。
现在初始化B时,每一行的总和必须为1。由于两行各有4096个值,所以数字很小。如此之小,以至于当我去计算 alpha
和 beta
时,随着 t
的增加,它们的行最终接近 0。这是一个问题,因为您无法计算 gamma
,因为它试图计算 x/0
或 0/0
。我怎样才能 运行 算法不崩溃并且不永久改变我的值?
这听起来像是标准的 HMM 缩放问题。看看 "A Tutorial on Hidden Markov Models ..."(Rabiner,1989),第 V.A "Scaling".
部分简而言之,您可以每次重新缩放 alpha
以求和为 1,并使用与相应 [=10] 相同的 因子重新缩放 beta
=],一切正常。