私は、与えられた観測シーケンスを放出する特定のHMMの確率を計算するために、HMMのフォワードアルゴリズムを実装しています。私のアルゴリズムをアンダーフローに強くしたい。フォワードアルゴリズムは、乗算と確率の加算を必要とするため、ログ空間では作業できません。アンダーフローを避ける最良の方法は何ですか?HMMのフォワードアルゴリズムのアンダーフロー
私はこれに関するいくつかの情報源を読んだことがありますが、私が得る最良の提案は各時間ステップで確率をスケーリングすることですSection 6 Here。アルゴリズムの終わりまでに、(観察シーケンスの)あなたが望む正確な確率を残すことはありません。また、私が間違っていない限り、上記の参考文献で提案されているように各時間ステップで確率をスケーリングすると、2つの異なるHMMから得られた観測シーケンスの確率を有意に比較することはできません。 1つはシーケンスを出力する可能性が高い)。助言がありますか?
完璧 - 私は今それを見る。私はそれが動作すると思う、ありがとう! – akobre01
私はここで死者を復活させているかもしれませんが、順誘導ステップは 'i'に依存していますので、ダイナミックプログラミングマトリックスでは' t + i * sequnece'のところにアルファ[i] [t] $ C_t $を計算することが不可能な 'alpha [i + 1] [t]'をまだ持っていないのですか? –
alpha [i] [t](すべてi)と時刻tで計算された他の情報を使って、alpha [i] [t + 1](iのすべての値に対して)を計算します。ここでのalpha [i] [t]の値は、オーバーフローが心配であるときにC_tでスケーリングされます。 alpha [i] [t + 1]を計算した後、これらの値を使ってC_ {t + 1}を計算し、それを使ってalpha [i] [t + 1]のスケーリングされた値を計算することができます。 C_ {t + 1}は計算されたスケーリングされていない値の最後であり、アルファ値のスケーリングに使用されるまでは必要ありません。 (私は内側のループで変化し、外側のループでは変化することを忘れないでください)。 – mcdowella