Ich implementiere den Vorwärtsalgorithmus für HMMs, um die Wahrscheinlichkeit zu berechnen, mit der ein bestimmtes HMM eine bestimmte Beobachtungssequenz aussendet. Ich möchte, dass mein Algorithmus robust gegenüber Unterläufen ist. Ich kann nicht im Log-Space arbeiten, da der Forward-Algorithmus die Multiplikation UND Addition von Wahrscheinlichkeiten erfordert. Was ist der beste Weg, um Unterlauf zu vermeiden?Unterlauf im Vorwärtsalgorithmus für HMMs
Ich habe einige Quellen darüber gelesen, aber der beste Vorschlag, den ich bekomme, ist die Skalierung der Wahrscheinlichkeiten bei jedem Zeitschritt Section 6 Here. Am Ende des Algorithmus werden Sie nicht mit der genauen Wahrscheinlichkeit (der Beobachtungssequenz) belassen. Wenn Sie sich nicht irren, wenn Sie die Wahrscheinlichkeiten bei jedem Zeitschritt skalieren, wie in der obigen Referenz vorgeschlagen, können Sie auch keinen aussagekräftigen Vergleich der Wahrscheinlichkeit einer gegebenen Beobachtungssequenz von zwei verschiedenen HMMs durchführen (um herauszufinden, welche es ist wahrscheinlicher, dass die Sequenz ausgegeben wurde). Irgendwelche Vorschläge?
Perfekt - Ich sehe es jetzt. Ich denke, das funktioniert, danke! – akobre01
Ich kann die Toten hier wieder auferstehen lassen, aber der Vorwärtsinduktionsschritt hängt von 'i' ab, also hast du in deiner dynamischen Programmiermatrix' alpha [i] [t] 'auf der' t + i * Länge von sequence' Schritt, aber haben Sie noch nicht das 'alpha [i + 1] [t]', was es unmöglich macht, das $ C_t $ zu berechnen, oder verwenden Sie einfach den Forward-Algorithmus und skalieren ihn am Ende? –
Die Berechnungen berechnen Alpha [i] [t + 1] (für alle Werte von i) mit Alpha [i] [t] (für alle i) und andere für die Zeit t berechnete Informationen. Die Alpha [i] [t] -Werte werden hier um C_t skaliert, wenn der Überlauf ein Problem ist. Nach der Berechnung von Alpha [i] [t + 1] können wir diese Werte verwenden, um C_ {t + 1} zu berechnen und daraus die skalierten Werte von Alpha [i] [t + 1] zu berechnen. C_ {t + 1} ist der letzte der unskalierten Werte, die berechnet werden und wird nicht benötigt, bis er zur Skalierung der Alpha-Werte verwendet wird. (Denken Sie daran, dass ich in einer inneren Schleife und t in einer äußeren Schleife variiert). – mcdowella