Алгоритм Витерби — различия между версиями
Tindarid (обсуждение | вклад) |
Tindarid (обсуждение | вклад) |
||
Строка 8: | Строка 8: | ||
|definition='''Путь Витерби''' (англ. ''Viterbi path'') {{---}} наиболее правдоподобная (наиболее вероятная) последовательность скрытых состояний. | |definition='''Путь Витерби''' (англ. ''Viterbi path'') {{---}} наиболее правдоподобная (наиболее вероятная) последовательность скрытых состояний. | ||
}} | }} | ||
+ | '''Предположения, которые делает алгоритм:''' | ||
+ | #Скрытые и наблюдаемые события должны быть последовательностью, которая чаще всего упорядочена по времени. | ||
+ | #Каждое скрытое событие должно соответствовать только одному наблюдаемому. | ||
+ | #Вычисление наиболее вероятной скрытой последовательности до момента <tex>t</tex> зависит только от наблюдаемого события в этот момент времени и наиболее вероятной последовательности до момента <tex>t − 1</tex> (динамическое программирование). | ||
+ | |||
+ | == Алгоритм == | ||
+ | '''Входные данные:''' | ||
Пусть задано пространство наблюдений <tex>O =\{o_1,o_2 \ldots o_N\}</tex>, пространство состояний <tex>S =\{s_1,s_2 \ldots s_K\}</tex>, последовательность наблюдений <tex>Y =\{y_1,y_2 \ldots y_T\}</tex>, матрица <tex>A</tex> переходов из <tex>i</tex>-того состояния в <tex>j</tex>-ое, размером <tex>K \times K</tex>, матрица эмиссии <tex> B </tex> размера <tex>K \times N</tex>, которая определяет вероятность наблюдения <tex>o_j</tex> из состояния <tex>s_i</tex>, массив начальных вероятностей <tex>\pi</tex> размером <tex>K</tex>, показывающий вероятность того, что начальное состояние <tex>s_i</tex>. Путь <tex>X =\{x_1,x_2 \ldots x_T\}</tex> {{---}} последовательность состояний, которые привели к последовательности наблюдений <tex>Y</tex>. | Пусть задано пространство наблюдений <tex>O =\{o_1,o_2 \ldots o_N\}</tex>, пространство состояний <tex>S =\{s_1,s_2 \ldots s_K\}</tex>, последовательность наблюдений <tex>Y =\{y_1,y_2 \ldots y_T\}</tex>, матрица <tex>A</tex> переходов из <tex>i</tex>-того состояния в <tex>j</tex>-ое, размером <tex>K \times K</tex>, матрица эмиссии <tex> B </tex> размера <tex>K \times N</tex>, которая определяет вероятность наблюдения <tex>o_j</tex> из состояния <tex>s_i</tex>, массив начальных вероятностей <tex>\pi</tex> размером <tex>K</tex>, показывающий вероятность того, что начальное состояние <tex>s_i</tex>. Путь <tex>X =\{x_1,x_2 \ldots x_T\}</tex> {{---}} последовательность состояний, которые привели к последовательности наблюдений <tex>Y</tex>. | ||
− | + | '''Алгоритм:''' | |
+ | |||
Создадим две матрицы <tex>TState</tex> и <tex>TIndex</tex> размером <tex>K \times T</tex>. Каждый элемент <tex>TState[i,j]</tex> содержит вероятность того, что на <tex>j</tex>-ом шаге мы находимся в состоянии <tex>s_i</tex>. Каждый элемент <tex>TIndex[i,j]</tex> содержит индекс наиболее вероятного состояния на <tex>{j-1}</tex>-ом шаге. | Создадим две матрицы <tex>TState</tex> и <tex>TIndex</tex> размером <tex>K \times T</tex>. Каждый элемент <tex>TState[i,j]</tex> содержит вероятность того, что на <tex>j</tex>-ом шаге мы находимся в состоянии <tex>s_i</tex>. Каждый элемент <tex>TIndex[i,j]</tex> содержит индекс наиболее вероятного состояния на <tex>{j-1}</tex>-ом шаге. | ||
Строка 21: | Строка 29: | ||
'''Доказательство корректности:''' | '''Доказательство корректности:''' | ||
− | # | + | |
− | # | + | Наиболее вероятная последовательность скрытых состояний получается следующими реккурентными соотношениями: |
− | # | + | |
+ | <tex> | ||
+ | #V_{1,k} = \mathrm{P}(y_1 \mid k) \cdot \pi_k \\ | ||
+ | #V_{t,k} = \max_{x \in S} \left( \mathrm{P}( y_t \mid k) \cdot a_{x,k} \cdot V_{t-1,x}\right) \\ | ||
+ | #x_T = \arg\max_{x \in S} (V_{T,x}) \\ | ||
+ | #x_{t-1} = \mathrm{Ptr}(x_t,t) | ||
+ | </tex> | ||
+ | Где <tex>V_{t,k}</tex> это вероятность наиболее вероятной последовательностельности, которая ответственна за первые <tex>t</tex> наблюдений, у которых <tex>k</tex> является завершающим состоянием. | ||
== Псевдокод == | == Псевдокод == |
Версия 15:22, 2 апреля 2018
Содержание
История
Алгоритм Витерби (англ. Viterbi algorithm) был представлен в 1967 году для декодирования сверточных кодов, поступающих через зашумленный канал связи. В 1969 году Омура (Omura) показал, что основу алгоритма Витерби составляет оценка максимума правдоподобия.
Описание
Алгоритм Витерби позволяет сделать наилучшее предположение о последовательности состояний скрытой Марковской модели на основе последовательности наблюдений. Эта последовательность состояний называется путем Витерби.
Определение: |
Путь Витерби (англ. Viterbi path) — наиболее правдоподобная (наиболее вероятная) последовательность скрытых состояний. |
Предположения, которые делает алгоритм:
- Скрытые и наблюдаемые события должны быть последовательностью, которая чаще всего упорядочена по времени.
- Каждое скрытое событие должно соответствовать только одному наблюдаемому.
- Вычисление наиболее вероятной скрытой последовательности до момента зависит только от наблюдаемого события в этот момент времени и наиболее вероятной последовательности до момента (динамическое программирование).
Алгоритм
Входные данные:
Пусть задано пространство наблюдений
, пространство состояний , последовательность наблюдений , матрица переходов из -того состояния в -ое, размером , матрица эмиссии размера , которая определяет вероятность наблюдения из состояния , массив начальных вероятностей размером , показывающий вероятность того, что начальное состояние . Путь — последовательность состояний, которые привели к последовательности наблюдений .Алгоритм:
Создадим две матрицы
и размером . Каждый элемент содержит вероятность того, что на -ом шаге мы находимся в состоянии . Каждый элемент содержит индекс наиболее вероятного состояния на -ом шаге.Шаг 1. Заполним первый столбец матриц
на основании начального распределения, и нулями.Шаг 2. Последовательно заполняем следующие столбцы матриц
и , используя матрицы вероятностей эмиссий и переходов.Шаг 3. Рассматривая максимальные значения в столбцах матрицы
, начиная с последнего столбца, выдаем ответ.Доказательство корректности:
Наиболее вероятная последовательность скрытых состояний получается следующими реккурентными соотношениями:
Где это вероятность наиболее вероятной последовательностельности, которая ответственна за первые наблюдений, у которых является завершающим состоянием.
Псевдокод
Функция возвращает вектор
: последовательность номеров наиболее вероятных состояний, которые привели к данным наблюдениям.viterbi() for to for to for to // функция arg max() ищет максимум выражения в скобках и возвращает аргумент // (в нашем случае ), при котором достигается этот максимум for downto return
Таким образом, алгоритму требуется
времени.Применение
Алгоритм используется в CDMA и GSM цифровой связи, в модемах и космических коммуникациях. Он нашел применение в распознавании речи и письма, компьютерной лингвистике и биоинформатике, а также в алгоритме свёрточного декодирования Витерби.