Алгоритм "Вперед-Назад"

Материал из Викиконспекты
Перейти к: навигация, поиск

Пусть дана скрытая Марковская модель [math]\lambda = \{\bold{S}, \bold{\Sigma}, \bold{\Pi}, \bold{A}, \bold{B}\}[/math], где [math]\bold{S} = \{s_1, ..., s_n\}[/math] -- состояния, [math]\bold{\Sigma} = \{\omega_1, ..., \omega_m\}[/math] -- возможные события, [math]\bold{\Pi} = \{\pi_1, ..., \pi_n\}[/math] -- начальные вероятности, [math]\bold{A} = \{a_{ij}\}[/math] -- матрица переходов, а [math]\bold{B} = \{b_{i\omega_k}\}[/math] -- вероятность наблюдения события [math]\omega_k[/math] после перехода в состояние [math]s_i[/math].

За [math]T[/math] шагов в этой модели получилась последовательность наблюдений [math]O_{1,T} = {o_1, ..., o_T}[/math].

Алгоритм "вперед-назад" позволяет найти в скрытой Марковской модели вероятность попадания в состояние [math]s_i[/math] на [math]t[/math]-ом шаге при последовательности наблюдений [math]O[/math] и (скрытой) последовательности состояний [math]X[/math].

Вычисление

Пусть в момент [math]t[/math] мы оказались в состоянии [math]i[/math]: [math]X_t = i[/math]. Назовем [math]\alpha_{i}(t)[/math] вероятность того, что при этом во время переходов образовалась последовательность наблюдений [math]O_{1,t-1}[/math], а [math]\beta_{i}(t)[/math] — вероятность того, что после этого состояния мы будем наблюдать последовательность наблюдений [math]O_{t,T}[/math]:

[math]\alpha_{i}(t) \overset{def}{=} P(O_{1, t-1} | X_t = i) \\ \beta_i(t) \overset{def}{=} P(O_{t,T} | X_t = i)[/math]

Нам требуется найти [math]P(X_t = i | O) = P(X_t = i | O_{1,t-1} \cap O_{t,T})[/math]. Поскольку будущее Марковской цепи не зависит от прошлого, мы можем утверждать, что вероятность того, что мы будем наблюдать события [math]O_{t,T}[/math] не зависит от того, что в прошлом мы наблюдали последовательность [math]O_{1,t-1}[/math], и, следовательно:

[math]P(X_t = i | O_{1,t-1} \cap O_{t,T}) = \frac{P(X_t = i | O_{1,t-1}) \cdot P(X_t = i | O_{t,T})}{P(O)} = \frac{\alpha_{i}(t) \cdot \beta_{i}(t)}{P(O)}[/math]

Проход вперед

Заметим, что в [math]\{\alpha_i(t)\}[/math] в [math]t = 0[/math] мы можем считать равной [math]\pi_i[/math], так как на первом шаге распределение по определению будет равно начальному.

Следующие [math]t[/math] посчитаем рекуррентно:

[math]\alpha_{i}(t+1) = P(O_{1, t} | X_{t+1} = i) = \\ = \displaystyle\sum\limits_{j}P(O_{1, t} \cap X_t = j \cap X_t+1 = i) = \\ = \displaystyle\sum\limits_{j}P(O_{1, t-1} \cap X_t = j)\cdot P(o_t \cap X_{t+1} = i | O_{1, t-1} \cap X_t = j) = \\ = \displaystyle\sum\limits_{j}P(O_{1, t-1} \cap X_t = j)\cdot P(o_t \cap X_{t+1} = i | X_t = j) = \\ = \displaystyle\sum\limits_{j}P(O_{1, t-1} \cap X_t = j)\cdot P(X_{t+1} = i | X_{t} = j) \cdot P(o_t | X_{t+1} = i) = \\ = \displaystyle\sum\limits_{j}\alpha_j(t)a_{ji}b_{io_t}[/math]

Итак, вероятность попасть в состояние [math]s_i[/math] на </tex>t+1</tex>-ом шаге, учитывая, что после перехода произойдет событие [math]o_t[/math] будет равна вероятности быть в состоянии [math]s_j[/math] на [math]t[/math]-ом шаге, умноженной на вероятность перейти из состояния [math]s_j[/math] в [math]s_i[/math], произведя событие [math]o_t[/math]