HMMを実装する際に課題となるのが、forward-algorithm で \(\alpha\) を再帰的に求める際に、\(\alpha\left(\mathbf{z}_{n-1}\right)\) に \(p(\mathbf{z}_n|\mathbf{z}_{n-1})\) と \(p(\mathbf{x}_n|\mathbf{z}_n)\) をかけるため、値が非常に小さくなり、計算機のダイナミックレンジを超えてしまうことです。
そこで、ここでは \(\alpha\left(\mathbf{z}_{n}\right)\) と \(\beta\left(\mathbf{z}_{n}\right)\) にスケーリングを施し、それらの値が \(1\) のオーダーに止まるようにする手法を説明します。
forward-backward \(\alpha,\beta\)
forward-backward algorithm で用いられていた \(\alpha,\beta\) は以下のように定義されていました。
Scaling factors
まず、スケーリングされた \(\alpha,\beta\) は以下のように表されます。スケーリングによって、\(\alpha\) は高々 \(K\) 個の変数上の確率分布、\(\beta\) は2つの条件付き確率の比になることがわかります。
ここで、これらと \(\alpha,\beta\) を関連付けるためのスケーリング係数 \(c\) を導入します。
すると、
と展開することができるので、
と対応関係がわかります。
\(\gamma,\xi\)
続いて、\(\gamma,\xi\) と \(\widehat{\alpha},\widehat{\beta}\) の対応関係を求めます。
\(\alpha,\beta\)
\(\alpha,\beta\) を用いると、以下のように表されていました。
\(\widehat{\alpha},\widehat{\beta}\)
先の対応関係を用いれば、\(\widehat{\alpha},\widehat{\beta}\) を用いると、
と表されることがわかります。
Recursion
最後に、再帰式の対応関係も求めます。
\(\alpha,\beta\)
\(\widehat{\alpha},\widehat{\beta}\)
なお、ここで \((13.58)\) でどのようにして \(c_n\) を求めるかですが、
となることから、\((13.58)\) の右辺を \(\mathbf{z}_n\) について周辺化すれば、
となるので、\(c_n\) が求められることがわかります。
おまけ(尤度関数)
尤度関数はスケーリング係数 \(c\) を用いるだけで簡単に求められることがわかります。