도구스개발

비터비 알고리즘(HMM) 계산기

은닉 마르코프 모형에서 관측열로부터 가장 그럴듯한 상태열을 찾습니다. 모든 경로를 더하는 전향 확률을 나란히 계산해 두 문제가 어떻게 다른지 보여주고, 확률을 그냥 곱하면 언제 0이 되어 버리는지도 직접 확인할 수 있습니다.

상태·관측·시작·전이·방출 다섯 줄. 전이와 방출은 상태마다 «/» 로 나눕니다.

공백으로 나눕니다. 「어지러움*300」처럼 되풀이 횟수를 붙일 수 있고 1,200걸음까지 다룹니다.

가장 그럴듯한 상태열 (3걸음)

건강 → 건강 → 열

이 경로의 로그 확률은 -4.1917입니다. 관측열이 길어지면 확률 자체는 아주 작아지므로 로그로 견줍니다.

비터비 확률 (가장 좋은 경로 하나)0.01512
전향 확률 (모든 경로의 합)0.03628
비터비 로그 확률-4.191737
로그 없이 그냥 곱하면1.5120e-2
상태 / 관측 종류2개 / 3개
모든 상태열을 훑으면8가지
그중 가장 큰 확률0.01512
비터비와 같은지일치합니다
무식하게 훑은 결과와 같습니다. 상태열 후보 8가지를 모두 계산해 가장 큰 것을 골랐더니 비터비의 답과 같고, 모두 더한 값이 전향 확률과 같습니다. 원리가 겹치지 않는 두 방법이라 서로를 검산해 주는 셈입니다. 관측열이 길어지면 경우의 수가 폭발해(200,000가지가 넘으면) 이 대조는 건너뜁니다.

걸음마다의 로그 확률

상태 \ 걸음1. 정상2. 추움3. 어지러움
건강-1.20-2.48-5.14
-3.22-3.61-4.19

각 칸은 「그 걸음에 그 상태로 오는 가장 좋은 길」의 로그 확률입니다. 파란 칸이 마지막 칸에서 되짚어 얻은 답의 경로입니다. 걸음마다 상태 수만큼만 남기고 나머지 후보를 버리기 때문에, 경우의 수가 상태 수의 거듭제곱으로 폭발해도 한 번만 훑으면 끝납니다.

비터비와 전향은 다른 문제입니다. 비터비는 가장 좋은 경로 «하나» 의 확률이고 전향은 모든 경로의 확률을 «다 더한» 값입니다. 표를 채우는 모양은 똑같고 최댓값을 쓰느냐 합을 쓰느냐만 다릅니다. 그래서 비터비 확률은 언제나 전향 확률보다 작거나 같습니다 — 이 둘을 섞는 것이 가장 흔한 실수입니다.
음성 인식, 품사 태깅, 유전자 영역 찾기, 통신 부호의 복호에 쓰입니다. 「보이지 않는 상태가 있고 그것이 내놓은 신호만 보인다」는 꼴이면 대체로 이 틀에 들어맞습니다. edu/markov-steady-state는 상태가 보이는 마르코프 연쇄의 «오래 두면 어디에 머무는가» 를 보는 것이라 다른 계산입니다.

사용 방법

  1. 1모형을 「상태·관측·시작·전이·방출」 다섯 줄로 적습니다.
  2. 2관측열을 적습니다. 어지러움*300처럼 되풀이 횟수를 붙일 수 있습니다.
  3. 3가장 그럴듯한 상태열과 그 확률을 확인합니다.
  4. 4전향 확률(모든 경로의 합)과 견줍니다.
  5. 5관측열을 길게 늘여 그냥 곱한 값이 언제 0이 되는지 봅니다.

자주 묻는 질문

상태는 보이지 않고 그 상태가 내놓은 관측만 보이는 모형입니다. 예를 들어 건강한지 열이 났는지는 직접 볼 수 없고 「정상·추움·어지러움」이라는 증상만 볼 수 있는 상황입니다. 상태끼리 옮겨 다니는 확률(전이)과 상태마다 어떤 관측을 내놓을 확률(방출)로 이뤄집니다.

관측열이 주어졌을 때 가장 그럴듯한 상태열 하나를 찾습니다. 걸음마다 「이 상태로 오는 가장 좋은 길」만 남기고 나머지는 버리는 동적계획법이라, 경우의 수가 상태 수의 관측 길이 제곱만큼 폭발하는데도 한 번만 훑으면 끝납니다. 1967년 앤드루 비터비가 통신 부호의 복호를 위해 만들었습니다.

비터비는 가장 좋은 경로 하나의 확률이고 전향은 모든 경로의 확률을 다 더한 값입니다. 표를 채우는 모양은 똑같고 최댓값을 쓰느냐 합을 쓰느냐만 다릅니다. 그래서 비터비 확률은 언제나 전향 확률보다 작거나 같습니다. 이 둘을 섞는 것이 가장 흔한 실수입니다.

확률을 그냥 곱하면 금세 0이 되어 버리기 때문입니다. 걸음마다 1보다 작은 수가 거듭 곱해져 이 도구의 기본 모형이라면 200걸음에 10⁻⁸⁹, 1,000걸음이면 배정밀도로도 그냥 0이 됩니다. 그러면 어느 경로가 나은지 가릴 수 없습니다. 로그를 취하면 곱셈이 덧셈이 되어 이 문제가 사라집니다.

음성 인식, 품사 태깅, 유전자 서열에서 유전자 영역 찾기, 통신 부호의 복호에 쓰입니다. 「보이지 않는 상태가 있고 그것이 내놓은 신호만 보인다」는 꼴이면 대체로 이 틀에 들어맞습니다.

각 줄의 합으로 나눠 1이 되게 고친 뒤 계산하고, 고쳤다는 것을 알려줍니다. 비율만 적어도 되도록 한 것인데, 원래 확률을 넣었다면 합이 1인지 확인하는 것이 좋습니다.

전송되지 않습니다. 계산은 모두 브라우저 안에서 이뤄지고, 입력한 모형과 관측열은 이 기기에만 남습니다.

알아두면 좋은 점

  • 정답지는 가능한 모든 상태열을 무식하게 훑은 결과입니다. 그 가운데 가장 확률이 큰 것이 비터비의 답과, 모두 더한 값이 전향 확률과 같아야 합니다. 상태 2개·3개 모형에서 열두 가지 관측열로 확인했습니다.
  • 널리 인용되는 예제(건강·열 두 상태, 정상·추움·어지러움 세 증상)에서 「정상 추움 어지러움」의 답이 「건강 건강 열」이고 확률이 0.01512인 것을 검산값으로 고정했습니다. 전향 확률 0.03628도 함께 확인합니다.
  • 비터비 확률이 전향 확률을 넘지 않는 것을 관측열 길이 1부터 12까지 검사합니다.
  • 되짚어 만든 경로를 실제로 따라가며 확률을 곱해 표의 값과 같은지도 검사합니다. 되짚기에서 한 칸만 어긋나도 여기서 잡힙니다.
  • 언더플로가 실제로 일어나는 것을 검사에 넣었습니다. 200걸음에서는 0이 아니고 1,000걸음에서는 0이 되며, 그때도 로그 값은 멀쩡하게 남아 있습니다. 「로그를 써야 한다」를 말로만 적지 않으려는 것입니다.
  • 확률 줄의 합이 1이 아니면 그 줄의 합으로 나눠 맞추고, 고쳤다는 사실을 화면에 알립니다.
  • 상태는 8개까지, 관측 종류는 12개까지, 관측열은 1,200걸음까지 다룹니다. 무식하게 훑는 검산은 경우의 수가 20만을 넘으면 건너뜁니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.