Was ist der Unterschied zwischen dem Vorwärts-Rückwärts- und dem Viterbi-Algorithmus?


44

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.


2
Würden Beschreibungen der Algen ( hier und hier ) Ihre Frage beantworten oder suchen Sie etwas anderes? Fragen Sie sich, wann Sie welchen Algorithmus verwenden sollen? Auf der Suche nach einer Diskussion über ihre jeweiligen Vorzüge?
MånsT

Antworten:


65

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:

  1. Bewertungsproblem

    • Das Bewertungsproblem beantwortet die Frage: Wie groß ist die Wahrscheinlichkeit, dass eine bestimmte Folge von Symbolen durch ein bestimmtes Modell erzeugt wird?
    • Zur Auswertung verwenden wir zwei Algorithmen: den Vorwärtsalgorithmus oder den Rückwärtsalgorithmus (NICHT mit dem Vorwärts-Rückwärtsalgorithmus verwechseln).
  2. Dekodierungsproblem

    • Das Dekodierungsproblem beantwortet die Frage: Wenn eine Folge von Symbolen (Ihre Beobachtungen) und ein Modell gegeben ist, welche Folge von Zuständen die Folge am wahrscheinlichsten erzeugt hat.
    • Zur Dekodierung verwenden wir den Viterbi-Algorithmus .
  3. Trainingsproblem

    • Das Trainingsproblem beantwortet die Frage: Finden Sie anhand einer Modellstruktur und einer Reihe von Sequenzen das Modell, das am besten zu den Daten passt.
    • Für dieses Problem können wir die folgenden 3 Algorithmen verwenden:
      1. MLE (Maximum Likelihood Estimation)
      2. Viterbi-Training (NICHT mit Viterbi-Dekodierung verwechseln)
      3. Baum Welch = Vorwärts-Rückwärts-Algorithmus

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.

  1. Berechnen Sie Vorwärtswahrscheinlichkeiten mit dem Vorwärtsalgorithmus
  2. Berechnen Sie Rückwärtswahrscheinlichkeiten mit dem Rückwärtsalgorithmus
  3. Berechnen Sie die Beiträge der aktuellen Sequenz zu den Übergängen des Modells, berechnen Sie die Beiträge der aktuellen Sequenz zu den Emissionswahrscheinlichkeiten des Modells.
  4. Berechnen Sie die neuen Modellparameter (Startwahrscheinlichkeiten, Übergangswahrscheinlichkeiten, Emissionswahrscheinlichkeiten)
  5. Berechnen Sie die neue Log-Wahrscheinlichkeit des Modells
  6. Beenden Sie den Vorgang, wenn die Änderung der Protokollwahrscheinlichkeit einen bestimmten Schwellenwert unterschreitet oder wenn eine maximale Anzahl von Iterationen überschritten wird.

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.


24

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.


15

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:

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Anmerkungen:

  • xπ
  • Pfad = eine Folge von Emissionen
  • Dekodierung = Inferenz
  • Lernen = Training = Parameterschätzung
  • Einige Artikel (z. B. {1}) behaupten, dass Baum-Welch mit dem Vorwärts-Rückwärts-Algorithmus identisch ist, aber ich stimme Masterfool und Wikipedia zu: Baum-Welch ist ein Algorithmus zur Erwartungsmaximierung, der den Vorwärts-Rückwärts-Algorithmus verwendet. Die beiden Abbildungen unterscheiden Baum-Welch auch vom Vorwärts-Rückwärts-Algorithmus.

Verweise:


12

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

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


2

@ 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.

Bildbeschreibung hier eingeben


Angenommen, unsere Daten sind eine Sequenz der Länge 4. (Walk, Shop, Walk, Clean). Zwei Algorithmen ergeben unterschiedliche Dinge.

  • 1

Bildbeschreibung hier eingeben

  • 24=16SunnyRainy

Bildbeschreibung hier eingeben


Hier ist ein RCode 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))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.