В предыдущей статье мы говорили об эффективных алгоритмах, необходимых для вычисления вероятностей и стат. распределений модели Маркова, которыми являются форвардный алгоритм и алгоритм Витерби. Форвардный алгоритм вычисляет вероятность данных полученных моделью по всем возможным последовательностям состояний. Алгоритм Витерби вычисляет вероятность данных полученных моделью по одной, наиболее вероятной, последовательности.
В этом посте будет много формул, но без этого не обойтись, чтобы создать хорошую стратегию, надо разбираться в математической модели, лежащей в ее основе. Следующие части будут более приближенными к практике.
Форвардный алгоритм.
Форвардный алгоритм позволяет эффективно рассчитать функцию вероятности p(O|λ). Форвардной переменной называется вероятность генерации моделью наблюдений до времени t, и состояние j в момент времени t определяется как:
αj(t)=p(o1,...,ot,x(t)=j|λ)
Это выражение вычисляется рекурсивно через форвардную переменную в момент времени t-1 , находясь в состоянии k, и затем вычисляется состояние j в момент времени t:
αj(t)=p(o1,...,ot,x(t−1)=k,x(t)=j|λ)=αk(t−1)akjbj(ot)
где akj - вероятность перехода из состояния k в состояние j, и bj(ot) - вероятность генерации вектора параметров ot из состояния t.
αj(t)=∑Nk=1p(o1,...,ot,x(t−1)=k,x(t)=j|λ)
1. Инициализация алгоритма.
α1(0)=1,αj(0)=0 для 1<j≤N и α1(t)=0 для 1<t≤T
2. Рекурсия.
Для t=1,2,...,T
.........для j=2,3,....,N−1
................αj(t)=bj(ot)[∑N−1k=1αk(t−1)akj]
3. Решение.
p(O|λ)=∑N−1k=2αk(T)akN
Алгоритм Витерби.
Форвардный алгоритм находит p(O|λ) суммированием по всем возможным последовательностям состояний, но иногда предпочтительней аппроксимировать p(O|λ) вероятностью ˆp(O|λ) которая вычисляется для одной, наиболее вероятной последовательности. Для этого применяется алгоритм Витерби:
ˆp(O|λ)=maxX[p(O,X|λ)], где X - наиболее вероятная последовательность состояний.
Вероятность лучшего пути длиной t по модели Маркова, заканчивающегося состоянием j определяется как:
ϕj(t)=maxXt−1[p(o1,...,ot,x(t)=j|λ)], где Xt−1 - лучший путь/последовательность состояний.
Форвардная переменная ϕ также может быть вычислена рекурсивно:
ϕj(t)=maxi[ϕi(t−1)aijbj(ot)]
1. Инициализация алгоритма.
ϕ1(0)=1,ϕj(0)=0 для 1<j<N и ϕ1(t)=0 для 1≤t≤T
2. Рекурсия.
Для t=1,2,...,T
...........для j=2,3,...,N−1
.....................ϕj(t)=max1≤k<N[ϕk(t−1)akj]bj(ot)
...................................сохранить предыдущее значение pred(j,t)=k
3. Решение.
p(O,X|λ)=max1≤k<Nϕk(T)akN
сохранить предыдущее значение pred(N,T)=k.
Наилучший путь находится путем следования по сохранненым значениям в обратном порядке по pred(j,t).
Ошибки малой разрядности
Прямое вычисление p(O|λ) может привести к ошибкам малой разрядности. Значение вероятности может быть таким маленьким, что компьютер не сможет рассчитать его верно. Вместо этого необходимо использовать вычисление натурального логарифма log(p(O|λ).
В следующей части цикла рассмотрим тренировку модели Маркова на сгенерированных входных данных с помощью реализации разобранных выше алгоритмов на языке R.
Спасибо за интересные переводы и исследования. А можно вас попросить еще и на сайт www.long-short.ru кросспосты делать?
Можно, в том случае, если в тексте статьи можно оставлять ссылки на мой сайт.
Разумеется можно.
Конечно, в следующей части это будет показано