2018년 9월 2일 일요일

180902 CMU 음성인식 ppt 노트 - 8. HMMs

Link: http://www.cs.cmu.edu/afs/cs/user/bhiksha/WWW/courses/11-756.asr/spring2013/

The scalar gaussian function

  • gaussian의 장점: 샘플 데이터로부터 평균과 분산을 구할 수 있음 (이 이유 때문에 쓰는 건가?? Central Limit Theorem 때문이 아닌가?)

The HMM as a generator

  • 제목 그대로

Viterbi and DTW

  • Viterbi 알고리즘은 DTW에서 수행하던 알고리즘과 같다

Training by segmentation: Hard assignment with Gaussian mixtures

  • HMM의 파라미터 재추정을 위해 앞서 DTW에서 봤던 segmental K-means 알고리즘을 적용할 수 있다.
  • 템플릿을 가지고 트레이닝 데이터에 대해 best path를 찾아 segmentation 하고, 그걸로 템플릿의 각 segment를 모델링하고, 다시 best path를 찾고, 다시 segment를 모델링하고…
  • hard assignment로 진행된다.
    • 한 segment를 모델링하기 위해 사용되는 feature set은 다른 segment에는 사용되지 않음
  • 그런데 segment가 Gaussian이 아니라 GMM이면 어떻게 모델링할 수 있을까?

Gaussian mixtures: a "hard" perspective

The K-means algorithm

  • 초기 K개의 클러스터(mixture)를 정하고, 주어진 feature들에 대해 거리를 계산하여 가장 가까운 클러스터에 속하게 한다.
  • 주어진 모든 feature에 대해 수행하고, 각 클러스터에 속한 feature들에 대해 평균과 분산을 다시 계산한다

A better technique

  • Segmental K-means 알고리즘은 주어진 특정 feature가 어떤 state에 가장 가까운 거리면 '당연히 100%' 속하는 것으로 봤다
  • 하지만 특정 feature가 100% 어떤 state에 속할리가 없다. 확률적으로 '어느 정도로만' 속한다고 봐야 한다
  • Soft assignment를 사용한 segmentation을 하자

Training by segmentation: soft assignment(1 Gaussian case)

  • state의 gaussian의 평균을 구할 때 feature들을 그냥 더하지 않고 state, 시간별로 확률 값 f를 다르게 주어 구하자.
  • 그럼 이 f는 어떻게 구하나?
  • f = P(state(t) = s, x1, x2, … , x_T) 가 된다.
    • 이거 완전 forward/backward algorithm으로 alpha, beta 구하라는 소리다
    • 이게 Baum-welch다

Case 2: State output densities are Gaussian mixtures

  • GMM으로 가면 mixture weight까지 추정해야 한다
  • 음… 수식이 너무 커서(그냥 너무 크다) 솔직히 한 30분 동안 쳐다보지 않으면 파악 못할 것 같아서 이 부분은 스킵한다
  • 병렬적으로 충분통계량을 계산할 수 있는 장점이 있다
  • iteration을 돌면서 mixture 하나가 너무 큰 variance를 가지면 그걸 둘로 쪼갠다.
  • 이 때 mixture weight는 둘로 쪼개진 각각의 mixture가 반씩 가지는 것으로 한다.

Transition by soft counting

  • state의 분포말고 transition probability도 hard/soft counting이 있다
  • hard는 관찰 결과가 best path의 한 state에서만 나왔다고 보는 것이고, soft는 확률적으로 나왔다고 보는 것이다.

Implementation of BW: underflow

  • forward, backward algorithm에서 alpha(혹은 beta)를 계산하려면 많은 곱셈이 필요하여 underflow가 일어나 버린다.
  • 각 time step마다 alpha를 스케일링 한다(이래도 되나?)
  • log domain에서 alpha와 beta를 계산하는 방법도 있다. 확실치는 않다
  • (CTC 책에 소개된 바 있다)

Implementation of BW: pruning

  • forward, backward 알고리즘 계산은 매우 부담이 되므로, 각 time step마다 pruning을 적용하여 해결한다
  • convergence 판정과 테스트 성능에 영향을 미칠 수 있다(자세한 내용은 뒤에…)

How many Gaussians

  • 경험적으로 고립단어 인식에 최소 4개는 필요하다

Isolated word recognition: Final thoughts

  • 이 내용은 고립단어인식에만 국한된 것이다. 연속음성인식에 대해서는 아무 얘기도 하지 않았다(;;;)

댓글 없음:

댓글 쓰기