ГоловнаСтаттіЙмовірність

Приховані марковські моделі: стани, спостереження та алгоритм Вітербі

Стани ніколи не бачать, лише їхні шумні відбитки - прямий прохід оцінює ймовірності, Вітербі відновлює найкраще пояснення.

mysimulator teamОновлено — червень 2026≈ 8 хв читання▶ Відкрити симуляцію

Послідовність станів, які ви не можете побачити

Звичайний марківський ланцюг переходить між станами, якими можна спостерігати безпосередньо, і лише за перехідними ймовірностями можна дізнатися все про нього. Прихований марківський мовлене додає шар непрямості: стани все ще існують та переходять відповідно до матриці ймовірностей, але ви ніколи їх не спостерігаєте. На кожному кроці поточний прихований стан генерує видиме спостереження згідно з розподілом випромінювання для кожного стану, і це спостереження є усього, що ви бачите.

Приклад із погодою – класична модель: ви не можете безпосередньо побачити, чи перебуває система в стані «сонце» або «дощ», лише те, чи хтось взяв з собою парасолю в той день, а парасолі є лише шумним сигналом.

жива демонстрація · пов'язана симуляція● LIVE

Три питання, три алгоритми

Модель повністю визначається трьома компонентами: матрицею переходу між прихованими станами, розподілом випромінювання для кожного стану та початковим розподілом станів. Враховуючи цю модель, три основні питання мають відповідні динамічні алгоритми. Оцінка - наскільки ймовірна ця послідовність спостережень під моделлю? - відповідає алгоритму прямого розрахунку (forward algorithm). Декодування - яка єдина найімовірніша послідовність прихованих станів, що призвела до цих спостережень? - відповідає алгоритму Вітербі (Viterbi algorithm). Навчання - з огляду лише на спостереження, які параметри моделі? - відповідає алгоритму Баум-Вельш (Baum-Welch), процедурі ітерації очікування-максимізації (expectation-maximisation procedure).

Залікова алгоритм

Обчислення загальної ймовірності послідовності спостережень шляхом грубого підрахунку передбачає сумування по кожній можливій послідовності прихованих станів, що зростає експоненціально з часом. Залікова алгоритм уникає цього, будуючи таблицю альфа, де альфа в момент часу t та стану i є ймовірністю перебування в стані i в момент часу t, маючи на обліку всі спостереження до t. Кожний рядок залежить лише від попереднього рядка, тому вся таблиця заповнюється за час O(кількість станів помножено на кількість кроків часу) замість експоненційного часу - така ж структура решітки, що робить алгоритм Вітербі нижче, також обчислювально ефективною.

Viterbi: сума стає максимумом

Viterbi вирішує інше питання над ідентичною триманням: замість загальної ймовірності, воно хоче найоднозначніший шлях. Кожна сума у зведеній рекурсії замінюється на максимум, і в кожній клітинці алгоритм додатково записує покажчик зворотного зв’язку, який вказує попередній стан, що спричинив цей максимум. Після заповнення таблиці відстеження покажчиків зворотного зв’язку від найімовірнішого кінцевого стану до часу нуль відновлює найбільш ймовірний ланцюжок станів прихованої змінної одним проходом.

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

Применение скрытых марковских моделей

Системы распознавания речи давно использовали HMM с фонемами в качестве скрытых состояний и акустических признаков как наблюдений. Биоинформатика использует их для поиска генов, выравнивая последовательность ДНК на основе скрытых состояний, таких как экзон и интрон. Разметка частей речи рассматривает грамматические категории как скрытые состояния, которые испускают слова предложения. В каждом случае структура одинакова: цепь состояний, которые вы не видите, генерирующая цепь вещей, которые вы можете видеть, а Viterbi декодирование — это то, что превращает видимую цепь обратно в лучшую оценку скрытой.

В каждом случае общая структура одна и та же: цепь состояний, которые вы не видите, генерирующая цепь вещей, которые вы можете видеть, а Viterbi декодирование - это то, что превращает видимую цепь обратно в лучшую оценку скрытой.

Frequently asked questions

Що робить марківський модел прихованим?

У простому марківському ланцюгу ви спостерігаєте послідовність станів безпосередньо. У прихованому марківському моделі стани ніколи не спостерігаються – лише шумне випромінювання з кожного стану – тому вам доводиться робити висновки або здогадки щодо станів на основі випромінювань, використовуючи ймовірності переходу та випромінювання моделі.

Яка різниця між алгоритмом Forward і Viterbi?

Обидва є динамічними програмами над одним і тим же решіткою, і обидва виконуються за часом O(кількість станів у квадраті помножено на кількість кроків часу). Алгоритм Forward підсумовує всі шляхи для обчислення загальної ймовірності спостережень або ймовірності перебування в певному стані на кожному етапі. Viterbi замінює кожне підсумовування на максимум, тому замість загальної ймовірності він повертає єдиний найкращий шлях стану.

Як навчаються ймовірності переходу та випромінювання?

Коли справжня послідовність станів відома під час навчання, ймовірності обчислюються як частоти. Якщо ж вони невідомі, алгоритм Баум-Велш, особливий випадок алгоритму очікування-максимізації, чергує між оцінкою ймовірностей станів за допомогою алгоритму Forward-Backward та переоцінкою параметрів переходу та випромінювання на основі цих оцінок до тих пір, поки параметри не зміняться.

Спробуйте наживо

Усе, що вище, працює прямо у вашому браузері — відкрийте Hidden Markov Model і змінюйте параметри під час роботи. Нічого не встановлюється, нічого не завантажується на сервер, уся модель живе в одній вкладці.

▶ Відкрити симуляцію Hidden Markov Model

Що ви знайшли?

Додати кроки відтворення (опційно)