[참고] http://www.seanborman.com/publications/EM_algorithm.pdf
"EM 알고리즘은 어떤 정보가 hidden 되어 있는 경우 가장 그럴듯한 모델을 추정할 때 사용하는 효과적인 반복 알고리즘이다.
보통 Maximum Likelihood estimate 방법을 사용해서 관측된 데이터에 알맞은 모델의 변수(parameter)를 추정한다. "
즉, 어떤 모델의 변수를 모르는 경우에 이를 추정하는 방법이라는 건데,
초기에 랜덤하게 혹은 어떤 다른 방법으로 모델 변수를 설정한 상태에서, 관측데이터(X)가 이 모델(ramda_0)로부터 생성되었을 확률을
계산한다.
P(X | ramda_0 )
이제 모델 내부의 변수를 아주 조금 수정한 새로운 모델을 ramda_1 이라고 하자.
그리고 나서 다시 관측데이터의 posterior 확률을 구하면
P(X | ramda_1 )
자, 이제 어떤것이 더 큰지 결정한다.
만약 P(X | ramda_1 ) 이 더 크다면, 우리는 ramda_1이 ramda_0 보다 더 관측데이터(X)가 나올법한 모델이라는 것을 알 수 있다.
그 다음에는 어떻게 하는가?
위 작업을 계속 반복하는 것이다. 이것이 iterative procedure
그러면 언제 멈추는가? 새로운 모델 ramda에 대한
P( X | ramda ) 가 기존 모델보다 부적합한 경우(likelihood가 더 작은 경우)에 멈추면 된다.
음...
좀더 진행하면 현재보다 더 좋은 모델이 나올 가능성은 있지만 말이다. 그래서 local maximum을 찾는 다고 하는 것이다.
다시 본론으로 들어가서, 그러면 E-step, M-step은 무엇인가?
확실한 예가 없어서 이해하기 힘들기는 하다.
계속 살펴보도록 하자.
ramda 대신에 theta를 쓰면,
P( X | theta ) 는 관측데이터 X가 있을 경우, theta에 대한 likelihood 이며
로그 함수를 씌우면
L(theta) = ln P( X | theta )
이것을 일반적인 log likelihood function 이라고 부른다.
"우리가 원하는 것은 L(theta)를 최대로 하는 모델 theta를 찾자는 것이다."
EM 알고리즘의 iterative procedure에서는
L(theta_current_max) > L(theta_n)
theta_current_max가 현재까지 가장 L 값이 큰 모델이라면, 위와 같은 조건이 만족되는 경우, 정지하면 된다.
음... 현재까지는 hidden variable에 대해 고려하지 않고 수식을 전개했는데, 이를 포함시켜보자.
위 (10) 번 수식은 현재까지 언급되던 theta를 hidden variable Z , known variable theta 로 분리시킨 것이다.
( 이 수식 전개는 partition theory 를 참고하면 된다. )
이를 이용하면, 위 (9) 번 수식을 아래와 같이 쓸 수 있다.
음... 대충 수식 관련 눈팅만 했다.
이제부터는 E-step, M-step에 대해서 좀더 알아보자.
[참고] http://en.wikipedia.org/wiki/Expectation-maximization_algorithm
위에서 기술한 바와 같이,
P( X | theta ) 에서 theta는 hidden variable을 포함하고 있다. 따라서, 처음 시작은
그냥 아는 변수는 그대로 하고, 모르는 변수에 대해서만 랜덤하게 값을 설정해준다.
즉, 다시 theta를 hidden variable z 와 known variable theta 로 분리하면
P( X | Z, theta )
여기서, Z에 대해서만 랜덤으로 설정해 준다는 것이다.
그리고 나면,
current parameter estimate를 알고 있으니, 이를 이용해서 hidden variable에 대한 expectation 값을 계산할 수 있다.
즉, Z에 대한 expected estimate를 계산할 수 있다.
이게 먼 말인고?
간단히 얘기하면, Z=(z1, z2, z3) theta=(t1, t2, t3, t4)
이렇게 element가 있다고 하면
우리는 theta 값을 알지만, Z 값을 모르니
t1, t2, t3, t4, 초기에 설정된 z1, z2, z3 에 대해서 평균값으로
z1, z2, z3를 다시 설정하겠다는 것이다.
그림으로 표현해보면
초기에 swallow, bug, insect 는 모르는 변수이고, 그래서 전부 0으로 설정하고
나머지에 대해서만 관측되었다고 했을 때,
Expectation 단계에서는 (아는 것 + 모르는 것) 전체에 대한 평균값을 계산해서
모르는 값에 평균값을 설정하겠다는 의미이다.
이 부분은 사실 Maximum Entropy Model과 아주 비슷하다.
오캄의 면도칼(ocam's razer)이라는 건데, 여러가지 가설중에서 가장 간단한 가설이 진리일 확률이 높다는 얘기다.
즉, 잘 모르면 그냥 평균값을 사용하라는 것.
그렇다면, Maximization 단계는 멀 하는 걸까?
여기서는 앞서 Expectation 단계에서 우리가 모르는 Z값에 대해 추정해 뒀기 때문에, ln P( X | Z, theta ) 값을 새롭게
계산할 수 있을 것이다.
이렇게 계산된 ln P( X | Z, theta ) 값이 기존 likelihood 값보다 더 크다면, 이것이 더 관측데이터에 적합한 모델이므로
해당 모델을 교체한다.
아니면 반복 과정을 정지시키던가....
혹은, likelihood 값의 변화량이 어떤 음수값보다 더 커지면 정지하는 방법도 있다.
이것은 search space를 탐색하는 이론을 참조하면 될 것이다.
다른 그림을 이용해서 살펴보면 아래와 같다.
[참고] http://www.cs.jhu.edu/~jason/465/PowerPoint/lect26-em.ppt
동전던지기에 대한 EM 예제는 다음 URL을 참고하면 된다.
[참조] http://www.nature.com/nbt/journal/v26/n8/full/nbt1406.html
위의 2번 화살표 아래쪽에 있는 값들은 아래와 같이 계산되었다.
A를 던졌을 때,
앞면이 나올 확률 0.6
뒷면이 나올 확률 0.4
P( HTTTHHTHTH )
= 0.6^5 * 0.4^5 = 0.07776 * 0.01024 = 0.0007962624
B를 던졌을 때,
앞면이 나올 확률 0.5
뒷면이 나올 확률 0.5
P( HTTTHHTHTH )
= 0.5^5 * 0.5^5 = 0.03125 * 0.03125 = 0.0009765625
0.0007962624 0.0007962624
---------------------------- = ---------------- = 0.4491489261009364207373215482251
0.0007962624 + 0.0009765625 0.0017728249
따라서,
A를 0.449회
B를 0.551회
던졌을 것이다.
A를 0.45, B를 0.55 회 던졌다고 계산되었는데, 실제 H는 5회, T는 5회 나왔다.
그렇다면, A에 대해서
0.45 * 5 H = 2.2 H
0.45 * 5 T = 2.2 T
B에 대해서
0.55 * 5 H = 2.8 H
0.55 * 5 T = 2.8 T
위 그림을 프로그램으로 구현한 결과 참조 http://blog.daum.net/comefeel/6935672
(동료분이 구현해 주셨음 ㅋㅋ)
to be continued...
[출처 : http://blog.daum.net/hazzling/17067790]