Strona głównaArtykułyWiarygodność

Modely Markowa ukryte: stany, obserwacje i Viterbi

Stany nigdy nie są widoczne, tylko ich szumowe odciski - przód oszacowuje prawdopodobieństwa, podczas gdy algorytm Viterbi odzyskuje najlepsze wyjaśnienie.

mysimulator teamZaktualizowano — czerwiec 2026≈ 8 min czytania▶ Otwórz symulację

Nakładka stanów, których nie możesz zobaczyć

Klasyczna łańcuch Markova przechodzi między stanami, które można obserwować bezpośrednio, a prawdopodobieństwa przejść opisują całą historię. Model ukryty Markova dodaje warstwę odrobinę indirekcyjności: stany nadal istnieją i nadal przechodzą zgodnie z macierzą prawdopodobieństw, ale nigdy ich nie obserwujesz. W każdym kroku czasowym bieżący ukryty stan emituje obserwację widzialną, wybraną ze wstępnej rozkładu emisji dla danego stanu, a ta obserwacja jest jedynym, czym dysponujesz. Pogoda jest klasycznym przykładem - nie możesz bezpośrednio zobaczyć, czy podstawowy rząd jest słoneczny lub deszczowy, tylko czy ktoś nosił parasol tamtej dnia, a parasole są tylko zniekształconym wsparciem.

demo na żywo · powiązana symulacja● LIVE

Trzy pytania, trzy algorytmy

Model jest pełnookreślony trzema elementami: macierzą przejść między ukrytymi stanami, rozkładem emisji dla każdego stanu oraz rozkładem początkowego dystrybucji stanów. Dany model pozwala na odpowiedzię trzy klasyczne pytania, każde z nich ma dedykowany algorytm dynamicznego programowania. Ocena - jak prawdopodobne jest ta sekwencja obserwacji pod względem modelu? - jest odpowiadana przez algorytm przód. Odszyfrowywanie - jaki jest najbardziej prawdopodobny ciąg ukrytych stanów, który wygenerował te obserwacje? - jest odpowiadane przez algorytm Viterbi. Nauczanie - dając tylko obserwacje, jakie są parametry modelu? - jest odpowiadane przez procedurę Baum-Welch, która jest formą maksymalizacji oczekiwania.

Algorytm przódowy

Obliczanie całkowitej prawdopodobieństwa szeregu obserwacji metodą siłą zmuszaną polega na sumowaniu nad każdym możliwym szeregiem stanów ukrytych, co powoduje eksponencjalny wzrost z czasem. Algorytm przódowy uniknie tego poprzez budowanie tabeli alpha, gdzie alpha w chwili t i stanie i to prawdopodobieństwo, że znajdujemy się w stanie i na chwili t, mając do dyspozycji wszystkie obserwacje do chwili t. Każdy kolumna zależy tylko od poprzedniej kolumny, więc cała tabela wypełnia się w czasie O(kwadratu stanów razy etapów czasowych) zamiast eksponencjalnego czasu - to samo struktura drzewa, która sprawia, że algorytm Viterbi poniżej jest przyswojemy.

Viterbi: suma staje się maksimum

Viterbi rozwiązuje inny problem na tym samym diagramie zwiastunkowym: zamiast całkowitej prawdopodobieństwa, chce najbardziej prawdopodobnej ścieżki. Każdy sumator w rekurencji w przód jest zastąpiony maksimum, a przy każdym komórce algorytm dodatkowo rejestruje wskaźnik do poprzedniego stanu, który wygenerował to maksimum. Gdy tabela zostanie wypełniona, śledzenie wskaźników od najbardziej prawdopodobnego końcowego stanu z powrotem do chwili zerowej odtwarza najprawdopodobniejszą sekwencję ukrytych stanów w jednym przebiegu.

delta[0][i] = initial[i] * emit[i][obs[0]];
for (let t = 1; t < T; t++)
  for (let i = 0; i < N; i++) {
    let best = -Infinity, arg = -1;
    for (let j = 0; j < N; j++) {
      const score = delta[t-1][j] * trans[j][i];
      if (score > best) { best = score; arg = j; }   // max, not sum
    }
    delta[t][i] = best * emit[i][obs[t]];
    backptr[t][i] = arg;
  }
// trace backptr from argmax(delta[T-1]) back to t=0 for the best state path

Gdzie ukryte modele Markowa wykorzystywane są

Systemy rozpoznawania mowy dawno używaly UKM z fonemami jako ukrytymi stanami i cechach akustycznymi jako obserwacjami. Bioinformatyka wykorzystuje je do znalezienia genów, porównując ciąg base’ów DNA z ukrytymi stanami takimi jak ekon i intron. Tagowanie części mowy traktuje kategorie gramatyczne jako ukryte stany emiting słowa w zdaniu. W każdym przypadku wspólna struktura pozostaje taka sama: łańcuch niezobserwowanych stanów generujący łańcuch zjawisk, które można obserwować, a dekodowanie Viterbi jest tym, co przekształca łańcuch zjawisk znowu w najlepsze odgadywanie ukrytych stanów.

Często zadawane pytania

Co czyni model Markova ukrytym?

W prostym modelu Markowa obserwujemy bezpośrednio sekwencję stanów. W modelu Markowa ukrytej tylko odgłosy z każdego stanu są widoczne, a stany nigdy nie są obserwowane - więc musisz przypuszczać lub wnioskować stany na podstawie odglosów korzystając z praw przejścia i emisji modelu.

Jak się różnią algorytm forward i Viterbi?

Oba są dynamicznymi programami nad tym samym drzewem, a oba działają w czasie O(kwadratu stanów razy kroki). Algorytm forward sumuje po każdym ścieżce do obliczenia całkowitej prawdopodobieństwa obserwacji, czy prawdopodobieństwa bycia w każdym stanie na każdym etapie. Viterbi zastępuje każdą sumę maksimum, więc zamiast całkowitego zwraca jedno najlepsze ścieżki stanów.

Jak są uczone prawdopodobieństwa przejścia i emisji?

Gdy podczas trenowania jest znana sekwencja rzeczywistych stanów, prawdopodobieństwa to tylko częstotliwości liczone. Gdy nie, algorytm Baum-Welch, specjalny przypadek maksymalizacji oczekiwania, alternuje między szacowaniem prawdopodobieństw stanów za pomocą algorytmu forward-backward a ponownym szacowaniem parametrów przejścia i emisji na podstawie tych szacowań, aż parametry przestaną się zmieniać.

Wypróbuj na żywo

Wszystko powyżej działa bezpośrednio w Twojej przeglądarce — otwórz Hidden Markov Model — States & Observations i zmieniaj parametry podczas działania. Nic nie jest instalowane ani przesyłane na serwer, cały model działa w jednej karcie.

▶ Otwórz symulację Hidden Markov Model — States & Observations

Co znalazłeś?

Dodaj kroki odtworzenia (opcjonalnie)