Je veux savoir quelles sont les différences entre l' algorithme avant-arrière et l' algorithme de Viterbi pour l'inférence dans les modèles de Markov cachés (HMM).
Je veux savoir quelles sont les différences entre l' algorithme avant-arrière et l' algorithme de Viterbi pour l'inférence dans les modèles de Markov cachés (HMM).
Réponses:
Un peu d’arrière-plan d’abord peut-être éclaircit un peu les choses.
Quand on parle de HMM (modèles de Markov cachés), il y a généralement 3 problèmes à prendre en compte:
Problème d'évaluation
Problème de décodage
Problème de formation
Pour résumer, vous utilisez l'algorithme de Viterbi pour le problème de décodage et Baum Welch / Forward-backward lorsque vous entraînez votre modèle sur un ensemble de séquences.
Baum Welch fonctionne de la manière suivante.
Pour chaque séquence de l'ensemble de séquences d'apprentissage.
Si vous avez besoin d'une description complète des équations pour le décodage de Viterbi et de l'algorithme d'apprentissage, faites-le moi savoir et je pourrai vous orienter dans la bonne direction.
Forward-Backward donne une probabilité marginale pour chaque état , Viterbi donne une probabilité de la séquence d'états la plus probable . Par exemple, si votre tâche HMM consiste à prévoir le temps ensoleillé par rapport au temps pluvieux pour chaque jour, Avant en arrière vous indiquera la probabilité qu'il soit ensoleillé pour chaque jour, Viterbi donnera la séquence la plus probable de jours ensoleillés / pluvieux, et probabilité de cette séquence.
Je trouve ces deux diapositives suivantes de {2} très utiles pour situer les algorithmes de transfert ascendant et précédent et de Viterbi parmi tous les autres algorithmes classiques utilisés avec HMM:
Remarques:
Les références:
La réponse de Morat est fausse sur un point: Baum-Welch est un algorithme d'espérance-maximisation, utilisé pour entraîner les paramètres d'un HMM. Il utilise l'algorithme avant-arrière lors de chaque itération. L'algorithme avant-arrière n'est en réalité qu'une combinaison des algorithmes avant et arrière: une passe avant, une passe arrière. À lui seul, l'algorithme avant-arrière n'est pas utilisé pour l'apprentissage des paramètres d'un HMM, mais uniquement pour le lissage: calcul des probabilités marginales d'une séquence d'états.
https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm
@Yaroslav Bulatov avait une réponse précise. J'en ajouterais un exemple pour faire la différence entre les algorithmes avant-arrière et Viterbi.
Supposons que nous ayons ce HMM (extrait de la page Wikipedia HMM). Remarque, le modèle est déjà donné, il n'y a donc pas d'apprentissage à partir de la tâche de données ici.
Supposons que nos données sont une séquence de longueur 4. (Walk, Shop, Walk, Clean)
. Deux algorithmes donneront des choses différentes.
Sunny
Rainy
Voici du R
code pour la démo
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))