Ich möchte wissen, was die Unterschiede zwischen dem Vorwärts-Rückwärts-Algorithmus und dem Viterbi-Algorithmus für die Inferenz in Hidden-Markov-Modellen (HMM) sind.
Ich möchte wissen, was die Unterschiede zwischen dem Vorwärts-Rückwärts-Algorithmus und dem Viterbi-Algorithmus für die Inferenz in Hidden-Markov-Modellen (HMM) sind.
Antworten:
Ein bisschen Hintergrundwissen zuerst, vielleicht klärt es die Dinge ein bisschen auf.
Wenn es um HMMs (Hidden Markov Models) geht, sind im Allgemeinen drei Probleme zu berücksichtigen:
Bewertungsproblem
Dekodierungsproblem
Trainingsproblem
Um es zusammenzufassen, Sie verwenden den Viterbi-Algorithmus für das Dekodierungsproblem und Baum Welch / Vorwärts-Rückwärts, wenn Sie Ihr Modell auf einer Reihe von Sequenzen trainieren.
Baum Welch arbeitet folgendermaßen.
Für jede Sequenz im Trainingssequenzsatz.
Wenn Sie eine vollständige Beschreibung der Gleichungen für die Viterbi-Dekodierung und des Trainingsalgorithmus benötigen, lassen Sie es mich wissen, und ich kann Sie in die richtige Richtung weisen.
Vorwärts-Rückwärts gibt die Grenzwahrscheinlichkeit für jeden einzelnen Zustand an , Viterbi gibt die Wahrscheinlichkeit für die wahrscheinlichste Folge von Zuständen an . Wenn Ihre HMM-Aufgabe beispielsweise darin besteht, für jeden Tag sonniges oder regnerisches Wetter vorherzusagen, gibt Forward Backward die Wahrscheinlichkeit an, dass es für jeden Tag "sonnig" ist, und Viterbi gibt die wahrscheinlichste Abfolge von Sonnentagen und Regentagen an Wahrscheinlichkeit dieser Sequenz.
Ich finde diese beiden folgenden Folien von {2} wirklich gut, um die Vorwärts-Rückwärts- und Viterbi-Algorithmen unter allen anderen typischen HMM-Algorithmen zu positionieren:
Anmerkungen:
Verweise:
Morats Antwort ist in einem Punkt falsch: Baum-Welch ist ein Expectation-Maximization-Algorithmus, mit dem die Parameter eines HMM trainiert werden. Es nutzt den Vorwärts-Rückwärts - Algorithmus während jeder Iteration. Der Vorwärts-Rückwärts-Algorithmus ist eigentlich nur eine Kombination aus Vorwärts- und Rückwärtsalgorithmus: ein Vorwärtsdurchlauf, ein Rückwärtsdurchlauf. Der Vorwärts-Rückwärts-Algorithmus wird allein nicht zum Trainieren der Parameter eines HMM verwendet, sondern nur zum Glätten: Berechnen der Grenzwahrscheinlichkeiten einer Folge von Zuständen.
https://en.wikipedia.org/wiki/Forward%E2%80%93backward_algorithm
@ Jaroslaw Bulatow hatte eine genaue Antwort. Ich möchte ein Beispiel hinzufügen, um die Unterschiede zwischen Vorwärts-Rückwärts- und Viterbi-Algorithmen zu erläutern.
Angenommen, wir haben ein solches HMM (aus der Wikipedia-HMM-Seite). Beachten Sie, dass das Modell bereits angegeben ist, sodass hier keine Datenaufgabe gelernt werden kann.
Angenommen, unsere Daten sind eine Sequenz der Länge 4. (Walk, Shop, Walk, Clean)
. Zwei Algorithmen ergeben unterschiedliche Dinge.
Sunny
Rainy
Hier ist ein R
Code für die Demo
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))