Алгоритм Витерби
Содержание
История
Алгоритм Витерби (англ. Viterbi algorithm) был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия.
Описание
Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний скрытой Марковской модели на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби.
Определение: |
Путь Витерби (англ. Viterbi path) — наиболее правдоподобная (наиболее вероятная) последовательность скрытых состояний. |
Пусть задано пространство наблюдений , пространство состояний , последовательность наблюдений , матрица переходов из -того состояния в -ое, размером , матрица эмиссии размера , которая определяет вероятность наблюдения из состояния , массив начальных вероятностей размером , показывающий вероятность того, что начальное состояние . Путь — последовательность состояний, которые привели к последовательности наблюдений .
Алгоритм
Создадим две матрицы
и размером . Каждый элемент содержит вероятность того, что на -ом шаге мы находимся в состоянии . Каждый элемент содержит индекс наиболее вероятного состояния на -ом шаге.Шаг 1. Заполним первый столбец матриц
на основании начального распределения, и нулями.Шаг 2. Последовательно заполняем следующие столбцы матриц
и , используя матрицы вероятностей эмиссий и переходов.Шаг 3. Рассматривая максимальные значения в столбцах матрицы
, начиная с последнего столбца, выдаем ответ.Доказательство корректности:
- Скрытые и наблюдаемые события должны быть последовательностью, которая чаще всего упорядочена по времени.
- Каждое скрытое событие должно соответствовать только одному наблюдаемому.
- Вычисление наиболее вероятной скрытой последовательности до момента зависит только от наблюдаемого события в этот момент времени и наиболее вероятной последовательности до момента (динамическое программирование).
Псевдокод
Функция возвращает вектор
: последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям.viterbi() for to for to for to // функция arg max() ищет максимум выражения в скобках и возвращает аргумент // (в нашем случае ), при котором достигается этот максимум for downto return
Таким образом, алгоритму требуется
времени.Применение
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби.