В чем разница между алгоритмами прямого-обратного и Витерби?


44

Я хочу знать , что разница между вперед-назад алгоритма и алгоритма Витерби для вывода в скрытых марковских моделей (СММ) являются.


2
Будут ли описания алгоритмов ( здесь и здесь ) отвечать на ваш вопрос или вы ищете что-то еще? Вам интересно, когда использовать какой алгоритм? Ищете обсуждение их достоинств?
MånsT

Ответы:


65

Сначала немного фона, может быть, это немного прояснит ситуацию.

Говоря о HMM (скрытых марковских моделях), обычно нужно учитывать 3 проблемы:

  1. Проблема оценки

    • Проблема оценки отвечает на вопрос: какова вероятность того, что конкретная последовательность символов создается конкретной моделью?
    • Для оценки мы используем два алгоритма: прямой алгоритм или обратный алгоритм (НЕ путайте их с прямым-обратным алгоритмом).
  2. Проблема декодирования

    • Проблема декодирования отвечает на вопрос: учитывая последовательность символов (ваши наблюдения) и модель, какая последовательность состояний наиболее вероятна для этой последовательности.
    • Для декодирования мы используем алгоритм Витерби .
  3. Проблема обучения

    • Задача обучения отвечает на вопрос: учитывая структуру модели и набор последовательностей, найдите модель, которая наилучшим образом соответствует данным.
    • Для этой задачи мы можем использовать следующие 3 алгоритма:
      1. MLE (оценка максимального правдоподобия)
      2. Обучение Витерби (НЕ путать с декодированием Витерби)
      3. Баум Уэлч = алгоритм прямого и обратного хода

Подводя итог, вы используете алгоритм Витерби для задачи декодирования и Baum Welch / Forward-backward, когда тренируете свою модель на наборе последовательностей.


Баум Уэлч работает следующим образом.

Для каждой последовательности в обучающем наборе последовательностей.

  1. Рассчитать прямые вероятности с прямым алгоритмом
  2. Рассчитать обратные вероятности с помощью обратного алгоритма
  3. Рассчитайте вклады текущей последовательности в переходы модели, рассчитайте вклады текущей последовательности в вероятности выбросов модели.
  4. Рассчитать параметры новой модели (начальные вероятности, переходные вероятности, вероятности выбросов)
  5. Рассчитайте новую логарифмическую вероятность модели
  6. Остановитесь, когда изменение вероятности записи в журнале меньше заданного порога или когда пройдено максимальное количество итераций.

Если вам нужно полное описание уравнений для декодирования Витерби и алгоритма обучения, дайте мне знать, и я могу указать вам правильное направление.


24

Вперед-назад дает предельную вероятность для каждого отдельного состояния , Витерби дает вероятность наиболее вероятной последовательности состояний . Например, если ваша задача HMM состоит в том, чтобы предсказать солнечную или дождливую погоду для каждого дня, Forward Backward сообщит вам вероятность того, что она будет «солнечной» для каждого дня, Viterbi даст наиболее вероятную последовательность солнечных / дождливых дней, а вероятность этой последовательности.


15

Я считаю, что эти два следующих слайда из {2} действительно хороши для размещения алгоритмов прямого-обратного и Витерби среди всех других типичных алгоритмов, используемых с HMM:

введите описание изображения здесь

введите описание изображения здесь

Заметки:

  • xπ
  • путь = последовательность выбросов
  • декодирование = вывод
  • обучение = обучение = оценка параметров
  • В некоторых работах (например, {1}) утверждается, что Баум-Уэлч такой же, как алгоритм прямого-обратного хода, но я согласен с Masterfool и Википедией: Баум-Уэлч - это алгоритм максимизации ожидания, который использует алгоритм прямого-обратного хода. Две иллюстрации также отличают Баума-Уэлча от алгоритма прямого и обратного хода.

Ссылки:


12

Ответ Мората неверен в одном: Баум-Уэлч - это алгоритм ожидания-максимизации, используемый для обучения параметров HMM. Он использует алгоритм «вперед-назад» во время каждой итерации. Алгоритм прямого-обратного хода - это просто комбинация прямого и обратного алгоритмов: один прямой проход, один обратный проход. Сам по себе алгоритм прямого и обратного хода используется не для обучения параметров HMM, а только для сглаживания: вычисления предельных вероятностей последовательности состояний.

https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm

https://en.wikipedia.org/wiki/Baum%E2%80%93Welch_algorithm


2

@ Ярослав Булатов дал точный ответ. Я хотел бы добавить один пример, чтобы показать различия между алгоритмами прямого-обратного и Витерби.

Предположим, у нас есть этот HMM (со страницы Википедии HMM). Обратите внимание, что модель уже дана, поэтому здесь нет задачи изучения данных.

введите описание изображения здесь


Предположим, что наши данные представляют собой последовательность длиной 4. (Walk, Shop, Walk, Clean), Два алгоритма дадут разные вещи.

  • 1

введите описание изображения здесь

  • 24=16SunnyRainy

введите описание изображения здесь


Вот Rкод для демонстрации

library(HMM)
# in education setting,
# hidden state: Rainy and Sunny
# observation: Walk, Shop, Clean

# state transition
P <- as.matrix(rbind(c(0.7,0.3),
                     c(0.4,0.6)))

# emission prob
R <- as.matrix(rbind(c(0.1, 0.4, 0.5),
                     c(0.6,0.3, 0.1)))


hmm = initHMM(States=c("Rainy","Sunny"),
              Symbols=c("Walk","Shop", "Clean"),
              startProbs=c(0.6,0.4),
              transProbs=P,
              emissionProbs=R)
hmm


obs=c("Walk","Shop","Walk", "Clean")
print(posterior(hmm,obs))
print(viterbi(hmm, obs))
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.