Алгоритм Витерби — различия между версиями
Строка 38: | Строка 38: | ||
for <tex>i=2 .. T</tex> | for <tex>i=2 .. T</tex> | ||
for <tex>j=1..K</tex> | for <tex>j=1..K</tex> | ||
− | <tex>T_1[j,i]\longleftarrow\max_{k}{(T_1[k,i-1]\cdot A[k,j]\cdot B[j,y_i])}</tex> | + | <tex>T_1[j,i]\longleftarrow\max_{1 \leqslant k\leqslant K}{(T_1[k,i-1]\cdot A[k,j]\cdot B[j,y_i])}</tex> |
− | <tex>T_2[j,i]\longleftarrow\arg\max_{k}{(T_1[k,i-1]\cdot A[k,j]\cdot B[j,y_i])}</tex> | + | <tex>T_2[j,i]\longleftarrow\arg\max_{1 \leqslant k\leqslant K}{(T_1[k,i-1]\cdot A[k,j]\cdot B[j,y_i])}</tex> |
− | <tex>x_T\longleftarrow\arg\max_{k}{(T_1[k,T])}</tex> | + | <tex>x_T\longleftarrow\arg\max_{1 \leqslant k\leqslant K}{(T_1[k,T])}</tex> |
for <tex>i=T...2</tex> | for <tex>i=T...2</tex> | ||
<tex>x_{i-1}\longleftarrow T_2[x_i,i]</tex> | <tex>x_{i-1}\longleftarrow T_2[x_i,i]</tex> |
Версия 03:09, 14 января 2013
Содержание
История
Алгоритм Витерби был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия.
Применение
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби.
Описание
Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний скрытой модели на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби.
Определение: |
Путь Витерби — наиболее правдоподобная последовательность скрытых состояний. |
Пусть задано пространство наблюдений , пространство состояний , последовательность наблюдений , матрица переходов из -того состояния в -ое, размером , матрица эмиссии В размера , которая определяет вероятность наблюдения из состояния , массив начальных вероятностей размером , показывающий вероятность того, что начальное состояние . Путь — последовательность состояний, которые привели к последовательности наблюдений .
Скрытая марковская модель.
Модель представляет из себя марковскую цепь, для которой нам известны начальная вероятность и матрица вероятностей переходов. Скрытой она называется потому, что мы не имеем информации о ее текущем состоянии. Мы получаем информацию на основе некоторого наблюдения, в рассмотренном ниже алгоритме мы будем использовать просто натуральное число от 1 до
, как индекс наблюдаемого события. Для каждого состояния скрытой марковской модели задан вектор вероятности эмиссии, который характеризует вероятность наблюдени каждого события, когда модель находится в этом состоянии. Совокупность таких векторов образует матрицу эмиссии.Пример скрытой марковской модели.
Рассмотрим пример скрытой марковской модели. У Деда Мороза есть три мешка с подарками в разноцветной упаковке: красной, синей, зеленой и фиолетовой. Ночью Дед Мороз пробирается в квартиру и тайком выкладывает подарки под елкой в ряд, доставая по одному подарку из мешка. Наутро мы обнаруживаем упорядоченную последовательность из пяти подарков и хотим сделать наилучшее предположение о последовательности мешков, из которых он доставал эти подарки. Дед Мороз с мешками — скрытая марковская модель. При этом 4 цвета - пространство из
наблюдений, 3 мешка — количество состояний , 5 подарков — наши наблюдений, каждое из которых представлено цифрой — номером цвета — от 1 до 5. Мы знаем, каковы вероятности того, что Дед Мороз начнет доставать подарки из мешка с номером – вектор . Мы также знаем матрицу переходов , какова вероятность того, что от мешка с номером Дед Мороз переходит к мешку с номером . Мешки Деда Мороза бесконечны, но мы точно знаем, каково соотношение цветов подарков в кажом мешке ему загрузили на заводе в Великом Устюге. Это матрица вероятностей эмиссии .Алгоритм
Создадим две матрицы
и размером . Каждый элемент содержит вероятность того, что на -ом шаге мы находимся в состоянии . Каждый элемент содержит индекс наиболее вероятного состояния на -ом шаге.Шаг 1. Заполним первый столбец матриц
на основании начального распределения, и нулями.Шаг 2. Последовательно заполняем следующие столбцы матриц
и , используя матрицы вероятностей эмиссий и переходов.Шаг 3. Рассматривая максимальные значения в столбцах матрицы
, начиная с последнего столбца, выдаем ответ.Псевдокод
//функция возвращает вектор- последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям. function viterbi for for for for return
Таким образом, алгоритму требуется времени.