Hidden Markov Model (HMM)
Ein verborgenes Markow-Modell (HMM) leitet aus verrauschten Beobachtungen eine Folge verborgener Zustände ab. Behandelt werden seine Parameter, der Viterbi-Algorithmus und Anwendungsbereiche.
Ein Hidden-Markov-Modell (HMM) ist ein Wahrscheinlichkeitsmodell für eine Sequenz, in der ein System zwischen Zuständen wechselt, die nicht direkt beobachtbar sind. Jeder verborgene Zustand erzeugt eine beobachtbare Ausgabe. Anhand einer Sequenz von Beobachtungen, etwa Audio-Frames oder DNA-Buchstaben, berechnet ein HMM die Wahrscheinlichkeit jeder Sequenz verborgener Zustände – zum Beispiel der Phoneme hinter dem Audio oder der Genregionen hinter den Buchstaben. „Markov“ bezieht sich auf die zentrale Annahme des Modells: Der nächste Zustand hängt nur vom aktuellen Zustand ab. Leonard Baum und seine Kolleginnen und Kollegen entwickelten die Theorie Ende der 1960er-Jahre. HMMs waren anschließend jahrzehntelang eine wichtige Grundlage für die Spracherkennung. Da sie vollständig auf expliziten Wahrscheinlichkeiten beruhen, sind sie weiterhin ein Standardwerkzeug für die Zeitreihenanalyse und Bioinformatik sowie ein klassisches Beispiel für statistische KI.
Bestandteile eines HMM#
Ein HMM mit N verborgenen Zuständen wird durch drei Wahrscheinlichkeitsmengen definiert:
- Anfangswahrscheinlichkeiten (π): Die Wahrscheinlichkeit, in jedem verborgenen Zustand zu beginnen.
- Übergangswahrscheinlichkeiten (A): Eine N × N-Matrix, deren Eintrag
A[i, j]die Wahrscheinlichkeit bezeichnet, in einem Schritt von Zustand i zu Zustand j zu wechseln. Dadurch bilden die verborgenen Zustände eine Markov-Kette. - Emissionswahrscheinlichkeiten (B): Die Wahrscheinlichkeit jeder Beobachtung unter Berücksichtigung des aktuellen Zustands. Für diskrete Beobachtungen wird eine Tabelle verwendet; kontinuierliche Beobachtungen, etwa akustische Merkmale, werden mit Verteilungen wie Gaußschen Mischverteilungen modelliert.
Zwei Annahmen halten das Modell handhabbar: Jeder Zustand hängt nur vom vorherigen Zustand ab, und jede Beobachtung hängt nur vom aktuellen Zustand ab. Über die Zeit aufgerollt bildet das Modell eine Kette verborgener Zustände, von denen jeder eine Beobachtung erzeugt:
Drei klassische HMM-Aufgaben#
Lawrence Rabiners viel zitierte Einführung von 1989 ordnete den Einsatz von HMMs anhand von drei Fragen. Für jede gibt es eine dynamische Lösung aus der dynamischen Programmierung, deren Aufwand bei T Beobachtungen mit N² × T wächst – statt mit den Nᵀ möglichen Zustandssequenzen:
- Auswertung: Wie wahrscheinlich ist eine Beobachtungssequenz unter einem bestimmten Modell? Der Vorwärtsalgorithmus summiert über alle verborgenen Pfade. So wählt ein Erkennungssystem das Wortmodell aus, das eine Äußerung am besten erklärt.
- Dekodierung: Welche Sequenz verborgener Zustände erklärt die Beobachtungen am besten? Der Viterbi-Algorithmus, den Andrew Viterbi 1967 zur Dekodierung von Faltungscodes veröffentlichte, findet den wahrscheinlichsten Pfad. Der Vorwärts-Rückwärts-Algorithmus liefert die Wahrscheinlichkeit jedes Zustands zu jedem Zeitschritt.
- Lernen: Welche Parameter passen am besten zu einer Menge von Beobachtungssequenzen? Der Baum-Welch-Algorithmus, ein Verfahren der Erwartungsmaximierung, schätzt π, A und B anhand nicht annotierter Sequenzen. Sind die Zustandssequenzen annotiert, genügt es, Übergänge und Emissionen zu zählen.
Die Viterbi-Dekodierung lässt sich mit wenigen Zeilen NumPy umsetzen. In diesem Modell ist die Aktivität einer Person – Gehen oder Laufen – verborgen. Ein Tracker erfasst pro Frame einen Geschwindigkeitsmesswert, und Aktivitäten bleiben tendenziell von Frame zu Frame bestehen:
import numpy as np
states = ["walk", "run"]
start = np.array([0.8, 0.2]) # Anfangswahrscheinlichkeiten der Zustände
trans = np.array([[0.9, 0.1], [0.1, 0.9]]) # Aktivitäten bleiben tendenziell über mehrere Frames hinweg bestehen
emit = np.array([[0.7, 0.25, 0.05], [0.1, 0.3, 0.6]]) # P(Geschwindigkeit | Zustand) für langsam, mittel, schnell
obs = [0, 0, 2, 0, 0, 1, 2, 2, 1, 2] # Geschwindigkeitsmesswerte pro Frame
# Viterbi: beste Log-Wahrscheinlichkeit, jeden Zustand zu erreichen, plus Rückverweise
logp = np.log(start) + np.log(emit[:, obs[0]])
back = []
for o in obs[1:]:
scores = logp[:, None] + np.log(trans) # Zeilen: vorheriger Zustand, Spalten: nächster Zustand
back.append(scores.argmax(axis=0))
logp = scores.max(axis=0) + np.log(emit[:, o])
# Die wahrscheinlichste Zustandssequenz ausgehend vom besten Endzustand rückwärts verfolgen
path = [int(logp.argmax())]
for pointers in reversed(back):
path.insert(0, int(pointers[path[0]]))
print("Speeds: ", " ".join(["slow", "medium", "fast"][o] for o in obs))
print("Decoded:", " ".join(states[s] for s in path))Der Code dekodiert walk walk walk walk walk run run run run run. Der hohe Messwert in Frame 3 bleibt „Gehen“, denn ein Wechsel zum Laufen und zurück würde zwei unwahrscheinliche Übergänge erfordern. Die mittleren Messwerte in den Frames 6 und 9 werden aufgrund der sie umgebenden hohen Messwerte als „Laufen“ eingestuft. Ein Klassifikator pro Frame, der Übergänge ignoriert, hätte Frame 3 als Laufen eingestuft.
HMMs im Vergleich zu verwandten Modellen#
- Kalman-Filter: Führt dieselbe Vorhersage- und Aktualisierungsrekursion für kontinuierliche Zustände mit linearer Dynamik und Gaußschem Rauschen aus. Der Vorwärtsalgorithmus des HMM ist das Gegenstück für diskrete Zustände.
- Bayessche Netze: Ein HMM ist das einfachste dynamische Bayessche Netz mit einer verborgenen und einer beobachteten Variable pro Zeitschritt.
- Markov-Entscheidungsprozess (MDP): Ergänzt eine Markov-Kette mit beobachteten Zuständen um Aktionen und Belohnungen. Das ist die Grundlage des bestärkenden Lernens.
- Rekurrente neuronale Netze und Transformer: Lernen anhand großer Datensätze weitreichende, nichtlineare Abhängigkeiten und haben HMMs bei den meisten Sprach- und Textaufgaben abgelöst. HMMs benötigen deutlich weniger Daten, und jede ihrer Wahrscheinlichkeiten lässt sich direkt ablesen.
- Zustandsraummodelle (SSMs): Deep-Learning-Schichten wie Mamba greifen die Zustandsraumidee aus der Regelungstechnik auf und aktualisieren einen kontinuierlichen verborgenen Vektor anhand erlernter, deterministischer Dynamik.
Anwendungen in der Praxis#
- Spracherkennung: Von den 1980er-Jahren bis Anfang der 2010er-Jahre modellierten die meisten Spracherkennungssysteme jedes Phonem als kleines HMM mit Gaußschen Mischverteilungen für die Emissionen. Anschließend übernahmen tiefe neuronale Netze in hybriden Systemen das Emissionsmodell, und später ersetzten End-to-End-Modelle das HMM vollständig.
- Bioinformatik: Profil-HMMs beschreiben Familien verwandter Protein- oder DNA-Sequenzen. HMMER nutzt sie, um in Sequenzdatenbanken nach weitläufig verwandten Sequenzen zu suchen, und bildet eine Grundlage der Proteinfamiliendatenbank Pfam. Außerdem kennzeichnen Genfinder mit HMMs Abschnitte eines Genoms als codierend oder nicht codierend.
- Wortartenbestimmung: Frühe statistische Verfahren der Sprachverarbeitung kennzeichneten Wörter durch Viterbi-Dekodierung von Tag-Sequenzen als Substantive, Verben und andere Wortarten.
- Aktivitätserkennung: Sequenzen von Körperhaltungen oder Messwerten tragbarer Sensoren werden zu Aktivitäten wie Stehen, Gehen oder Fallen dekodiert. Die Ultralytics-Lösung zur Trainingsüberwachung verfolgt eine solche Sequenz mit zwei Zuständen: Mithilfe eines Gelenkwinkels aus den Posenschätzung-Keypoints von YOLO26 – standardmäßig des Ellenbogens – kennzeichnet sie jede Person als „oben“ oder „unten“. Dabei wechselt sie oberhalb von 145° und unterhalb von 90° den Zustand und zählt bei jedem Wechsel von oben nach unten eine Wiederholung.










