Baum-Welchアルゴリズム

Baum-Wehlch アルゴリズムは、入力データを学習して、HMM のパラメーターを推測すめに用いられる。

n 個の入力配列 S = {s1, s2, ..., sn} が与えられた時、これらのデータから、尤もらしい状態遷移確率 A と文字出力確率 E 推測する(θ*(A,E))。これを数式で書き表すと、次のようになる。

\[ \theta^{*} = argmax_{\theta} \sum_{i=1}^{n}\log P(s_{i}|\theta) \]

n 個の入力配列から、次のように状態遷移確率 A を計算することができる。ただし、fk(i) は、状態 k のときに配列 s[1...k] を出力する確率を前向きアルゴリズムで計算した値を表す。また、bk(i) は、後向きアルゴリズムで計算した値を表す。

\[ A_{kl} = \sum_{j=1}^{n}\frac{1}{P(s_{j}|\theta )}\sum_{i}f_{k}^{j}(i)\cdot a_{kl}\cdot e_{l}(s_{j}[i+1])\cdot b_{l}^{j}(i+1) \]

また、次の文字出力確率 E は次のように計算できる。

\[ E_{k}(b) = \sum_{j=1}^{n}\frac{1}{P(s_{j}|\theta )} \sum_{s_{j}[i]=b}f_{k}^{j}(i)\cdot b_{k}^{j}(i) \]

これらのパラメーターを次の式に従って、EM アルゴリズムと同様に、極大値になるまで更新する。

\[ \hat{a}_{kl} = \frac{A_{kl}}{\sum_{l'}A_{kl'}} \] \[ \hat{e}_{k}(b) = \frac{E_{k}(b)}{\sum_{b'}E_{k}(b')} \]