簡體   English   中英

Baum Welch 算法中的 Gamma 和浮點精度

[英]Gamma in the Baum Welch algorithm and float precision

我目前正在嘗試用 C 實現 Baum Welch 算法,但我遇到了以下問題:伽馬函數:

gamma(i,t) = alpha(i,t) * beta(i,t) / sum over `i` of(alpha(i,t) * beta(i,t))

不幸的是,對於足夠大的觀察集,隨着t增加,alpha 迅速下降到 0,隨着t減少,beta 迅速下降到 0,這意味着,由於四舍五入,永遠不會有 alpha 和 beta 都非零的地方,這使事情變得相當有問題。

有沒有辦法解決這個問題,還是我應該嘗試提高值的精度? 我擔心如果我嘗試這種方法,問題可能會再次出現,因為每次觀察的 alpha 和 beta 下降大約一個數量級。

您應該在對數空間中進行以下計算,並且通常應進行概率模型的所有計算:

lg_gamma(i, t) = (lg_alpha(i, t) + lg_beta(i, t)
                  - logsumexp over i of (lg_alpha(i, t) + lg_beta(i, t)))

其中lg_gamma(i, t)表示gamma(i, t)等的對數, logsumexp此處描述的函數 在計算結束時,可以根據需要使用exp轉換為概率(通常只需要顯示概率,但是甚至最好有日志)。

對數的底數並不重要,只要您在各處使用相同的底數即可。 我更喜歡自然對數,因為log相比,節省了打字log2 :)

我認為您應該對使alphabeta顯着小於1的每個觀察結果執行縮放程序。 它將系數乘以alphabeta ,使其保持可比范圍。
您應該將系數乘以c使每個alpha變量保持在可比較的范圍內,該c的形式應為:

c(t) = 1 / sum(alpha(t,i)) , i=1... number of states , t=time step ( observation)

請注意,在每個時間步長上,您都將計算c(t)乘以該時間步長上所有狀態的所有alpha 接下來對beta執行相同的步驟。

關於HMM的很好的教程可以很好地解釋此過程: 有關隱藏的markov模型和語音識別中所選應用程序的教程(rabiner 1989)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM