Хочу знати, чим відрізняються алгоритм вперед-назад і алгоритм Вітербі для висновку в прихованих марківських моделях (HMM).
Хочу знати, чим відрізняються алгоритм вперед-назад і алгоритм Вітербі для висновку в прихованих марківських моделях (HMM).
Відповіді:
Спочатку трішки фону, можливо, це трохи розмиває справи.
Якщо говорити про HMM (Hidden Markov Models), зазвичай, слід враховувати 3 проблеми:
Проблема оцінювання
Проблема розшифровки
Проблема навчання
Підсумовуючи це, ви використовуєте алгоритм Вітербі для проблеми декодування та Баум Уелч / Вперед-назад, коли ви тренуєте свою модель на наборі послідовностей.
Баум Уелч працює таким чином.
Для кожної послідовності в навчальному наборі послідовностей.
Якщо вам потрібен повний опис рівнянь для декодування Вітербі та алгоритм тренувань, дайте мені знати, і я можу вказати вам у правильному напрямку.
Вперед-назад відбувається гранична ймовірність для кожного окремого стану , Вітербі дає ймовірність найбільш ймовірної послідовності станів . Наприклад, якщо ваше завдання HMM - передбачити сонячну проти дощової погоди на кожен день, Forward Backward скаже вам ймовірність того, що вона буде "сонячною" на кожен день, Вітербі дасть найбільш ймовірну послідовність сонячних / дощових днів і ймовірність цієї послідовності.
Ці два наступні слайди з {2} я вважаю дуже гарними для розташування алгоритмів вперед-назад та алгоритму Вітербі серед усіх інших типових алгоритмів, які використовуються з HMM:
Примітки:
Список літератури:
Відповідь Мората є помилковою в одному пункті: Баум-Велч - алгоритм очікування-максимізації, який використовується для тренування параметрів HMM. Він використовує алгоритм вперед-назад під час кожної ітерації. Алгоритм вперед-назад дійсно є лише комбінацією алгоритмів вперед та назад: один прохід вперед, один прохід назад. Сам по собі алгоритм вперед-назад використовується не для підготовки параметрів HMM, а лише для згладжування: обчислення граничної ймовірності послідовності станів.
https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm
@Ярослав Булатов мав точну відповідь. Я додав би один приклад цього, щоб розповісти про відмінності між алгоритмами вперед-назад та Вітербі.
Припустимо, у нас є цей HMM (зі сторінки HMM у Вікіпедії). Зауважте, модель вже задана, тому тут немає навчання з даних даних.
Припустимо, наші дані - це послідовність довжиною 4. (Walk, Shop, Walk, Clean)
. Два алгоритми дадуть різні речі.
Sunny
Rainy
Ось 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))