Python과 확률

조건부 확률부터 마르코프까지 - 5-1) HMM 기초

Yoo Sung Hyun 2021. 12. 31. 12:15
728x90

2021.12.25 - [Python과 확률] - 조건부 확률부터 마르코프까지 - 4) 마르코프 체인

 

조건부 확률부터 마르코프까지 - 4) 마르코프 체인

2021.12.20 - [Python과 확률] - 조건부 확률부터 마르코프까지 - 3) 나이브 베이즈 분류 (근데 간단한) 조건부 확률부터 마르코프까지 - 3) 나이브 베이즈 분류 (근데 간단한) 2021.12.19 - [Python과 확률] -

shyu0522.tistory.com

일단 Forward Algorithm부터 아티클을 작성해놨었는데, 귀인분의 유투브 강의를 보다가 내가 설명한 부분에 빠진 부분들도 많고, 잘못 설명한 부분도 있어서, 기초부터 차근차근 정리하기위해 아티클을 다시 작성한다.

 

함께 읽으면 좋을 스탠포드 대학교 강의노트 추가합니다. (꼭 읽어보시는 것 추천!)

https://web.stanford.edu/~jurafsky/slp3/A.pdf

관련해서 또 귀인분을 만나게되어 추가합니다. 유투브 강의로 정말 친절하고 이해하기 쉽게 설명해주셨네요.

정말 강추입니다. 제 아티클 읽을 필요 없을지도...?

이 분 강의에 입각해서, 제가 잘못 설명해놓은 부분은 수정해놓고, 내용 추가해놓겠습니다.

(정리를 필기로해서, 스캔해서 올려야겠네요.)

https://www.youtube.com/watch?v=HB9Nb0odPRs 

김성범님의 [핵심 머신러닝] Hidden Markov Models - Part 1 (개념, Evaluation) Youtube 강의

유투브 정리 내용

아래 내용과 함께 보길 바란다.

마르코프 체인에서 베이지안 네트워크와 헷깔렸던 기억이 나는가?

사실 매우 간단한 이유 중에 하나였던 것은, 둘 다 '상태'를 가지고 그 것의 확률로 무언가를 알아내고자 할 때 사용된다는 점이다.

EX)

과거의 온도는 ....이랬고, 오늘은 더웠다. 내일 추울까?

 

하지만 우리 현실이 그렇게 녹록할까?

 

여기서 문제.

우리가 알고있는 사실은 성현이가 아이스크림을 먹은 관측값 뿐이다!

이 때 우리는 온도를 예측할 수 있겠는가?

문제) 성현이가 1일엔 아이스크림 3개, 2일엔 1개, 3일엔 3개 먹었다. 3일째의 온도는?

 

마르코프 체인과는 분명 문제가 다르다. 마르코프 체인은 적어도 날씨는 알았다.

하지만 현재 문제는 1일의 날씨조차 모른다. 성현이는 더울때 아이스크림을 많이먹을까? 해당 가설을 보장하고 온도를 구해도 과연 적합한가?

 

이 문제는 놀랍게도 Hidden Markov Model로 풀이할 수 있다.

Markov Model과 Hidden Markov Model의 차이를 알겠는가?

일단 순차 데이터의 확률적 해석과 활용이라는 점에서는 분명 비슷하나,

MM은 숨겨진 정보가 없다.

다만 HMM은 숨겨진(Hidden) 상태(State)가 있고, 그것을 알기위한 관측치만 주어진다는 것이다.

 

이해를 쉽게하기 위해 예제를 들어보면, 유투브 강의에서도 나오지만, 아래와 같다. (이미지 첨부 예정)

 

정리해보면, HMM을 다루기 위해서는,

과거의 어떤 순차적 데이터가 주어졌는데, 그것과 관련된(종속된) 조건을 가지는 숨겨진 값을 알고싶을때 적용해볼만 하다.

즉, 모델을 학습시키고자 하는 포인트과거의 관측치로 얼마나 숨겨진 상태를 잘 Estimate(추정)하느냐를 고민하면 된다는 이야기이다.

단순히 빈대떡 소비량으로 그 시점의 날씨를 추정해보자고 가정하자.

HMM에서는 아래와 같은 사항을 고려하면, 예측을 잘 하는 모델이 된다고 제안한다.

    1) 시작시점 (파이라고 표현되는 초기확률 Start Transition)

        => 닭이먼저냐 달걀이먼저냐...? 시작은 어땠는데?

    2) 시작시점 이후의 관측치가 주어진 기간동안의 날씨 변동 (알파라고 표현되는 전이확률 행렬 Transition)

        => 우리가 알고 싶어하는 값의 근간이 될, 숨겨진 상태들의 변화를 데이터들로 어떻게 잘 정의내릴까?

    3) 그리고 그 날씨 변동별 빈대떡 소비량이 알맞게 변화되는지. 이렇게 3가지를  (베타라고 표현되는 방출행렬 Emission)

        => 2번에서의 각 상태들의 정의에 영향을 미칠, 실제 관측값들과의 조건부 정의를 내려보자!

 

사실 스탠포드 대학교의 강의노트를 보면, HMM의 문제(Problems)를 아래와 같이 정의한다.

(나는 해결할 수 있는, 우리가 선행해야할 Task라고 표현하고 싶다.)

로렌스 라비너가 제안한 HMM의 활용 문제들

로렌스 라비너의 HMM을 근간으로한 음성처리 논문을 보고 싶다면,

https://web.ece.ucsb.edu/Faculty/Rabiner/ece259/Reprints/tutorial%20on%20hmm%20and%20applications.pdf

    1) 모델이 있을 때, 관측치가 Input되었을 때, 해당 관측치의 확률은? (Forward Algorithm에서 자세히 다루겠다.)

    2) 모델이 있을 때, 관측치가 Input되었을 때, 가장 최적의 Hidden State Sequence는 무엇인가?

        => 우리가 알고자 하는 Hidden을 찾는 다는 점에서, HMM의 핵심이라고 볼 수 있다.

        => Viterbi Algorithm에서 자세히 다루겠다.

    3) 관측치의 데이터가 주어졌을때, 모델은 어떻게 만들껀데?

        => 모델을 만드는 학습과정. 정확히는 필요한 모델의 파라미터들을 최적화시키는 과정이다.

        => Forward-Backward, Baum-Welch Algorithm에서 자세히 다루겠다.

사실 이론을 이해하기에는 해당 순서가 맞을 수 있겠는데, 내 생각에 실제로 현업에서 사용할라면 Learning이 가장 먼저 되어야한다.

 

뭐 이 과정을 도식화하면 아래와 같겠다. (우측 하단 이미지 파란 동그라미 참고)

HMM에 대해서 기본적인 지식과 어떤 문제를 해결할 수 있겠고, 그러기 위해서는 어떤 것들이 필요한지 알아보았다.

어찌보면 이전의 학자들과 연구자들이 밝혀놓은 성과를 순서대로 따라가고 있는 형편이라, 구체적인 원리와 이해를 원한다면, 통계적, 수학적 접근이 필요할 수 있겠다. (증명을 보면 되는데...)

 

일단은, 학자나 석박을 목적으로 서술되기보단, 모델의 특징과 해석, 사용성 측면에서 작성하다보니, 원리는 눈에 잘 안들어올 수도 있다. 이런 경우라면, 한번 통계적으로 증명을 보는 것도 방법이겠다.

 

이후에는 Forward Algorithm을 이용해서 1번째 Task인 관측치의 확률을 구하는 방법과

이걸 구해서 어쩔건데?를 톺아보겠다.

 

728x90