인공지능관련/EM

혼합모형(Mixture Model)

학위논문통계 2016. 12. 3. 12:11

 

 

1.

 

먼저 복잡한 수식을 하기 전에 현실에서 나올 수 있는 문제를 한번 생각해 보죠. 야구 선수가 딱 A, B, C 3명만 있다고 하죠. 각 선수가 게임에서 홈런을 칠 확률은 A는 0.2, B는 0.1, C는 0.05라 하죠. 그리고 홈런을 첬을 경우 비거리는 A는 N(110, 10), B는 N(120, 15), C는 N(140, 20)이라 하죠. 즉 A는 비거리 평균이 100이고 표준편차가 10인 정규분포를 한다고 하죠.

 

그런데 특정 게임에서 그날 홈런이 하나 나왔는데 비거리는 130이라는 이야기를 들었습니다. 그럼 이 홈런이 누구에서 나온 홈런인지 알 수 있겠습니까? 물론 알 수 없죠. 확률적으로 이야기할 수 밖에 없죠. 이 문제를 어떻게 풀까요? 생각보다 간단합니다. 상식적으로 생각하시면 됩니다.

 

비거리만 보면 B나 c일 가능성이 높고, 홈런 칠 확률를 보면 A가 가장 가능성이 높죠.

 

 

먼저 홈런칠 확률을 정규화합니다. 합이 1이 되도록 하는 것이죠.

 

그럼 A=0.2/(0.2+0.1+0.05)=0.57, B=0.2/(0.2+0.1+0.05)=0.29, C=0.2/(0.2+0.1+0.05)=0.14는 이렇게 되겠죠.

 

그럼 다음 각 선수마다 홈런 130m를 칠 확률을 구합니다. 즉

 

선수 A는 prA=N(Y=130, 110, 10),

 

선수 B는 prB=N(Y=130, 120, 15),

 

선수 C는 prC=N(Y=130, 140, 20)이고요.

 

정규분포는 연속형이기 때문에 정확한 확률은 아니지만 확률개념처럼 사용해도 됩니다.

 

그럼 그날 홈런 친 것에 대한 선수 세 명의 상대적 기여도, 또는 비중이 나오겠죠.

 

A 기여도=(0.57*prA)/(0.57*prA+0.29*prB+0.14*prC)

 

B 기여도=(0.29*prB)/(0.57*prA+0.29*prB+0.14*prC)

 

C 기여도=(0.17*prC)/(0.57*prA+0.29*prB+0.14*prC)

 

이게 상식적인 판단이겠죠.

 

 

이걸 우리가 하는 EM 문제의 표현으로 바꿀죠.

 

U는 홈런 친 선수, Y는 홈런 비거리가 됩니다.

 

Pr(U=A)=a, Pr(U=B)=b, Pr(U=C)=c

 

그런데 이게 합하면 1이 되지 않기 때문에 정규화 했다고 해요. 그리고 관찰된 변수 Y는 홈런 비거리입니다.

 

그리고

 

Pr(Y|U=A)=N(110, 10), Pr(Y|U=B)=N(120, 15), Pr(Y|U=C)=N(140, 20)

 

이 됩니다.

 

그럼 Pr(Y)는 어떻게 될까요. 지난번 조건부 확률 공식에서

 

Pr(Y)=Pr(Y|U=A)*Pr(U=A)+Pr(Y|U=B)*Pr(U=B)+Pr(Y|U=C)*Pr(U=C)

 

가 되죠. 여기서 Y=130m로 관찰되었으니까

 

Pr(Y=130)=prA*a+prB*b+prC*c

 

가 됩니다. 즉 앞에서 직관적으로 구한 식의 분모에 해당됩니다.

 

그래서

 

Pr(U|Y=130)=Pr(U, Y=130)/Pr(Y=130)=Pr(Y=130|U)*Pr(U)/Pr(Y=130)이니까

 

 

Pr(U=A|Y=130)=Pr(Y=130|U=A)*Pr(U=A)/Pr(Y=130)=(prA*a)/(prA*a+prB*b+prC*c)

 

Pr(U=B|Y=130)=Pr(Y=130|U=A)*Pr(U=B)/Pr(Y=130)=(prB*b)/(prA*a+prB*b+prC*c)

 

Pr(U=C|Y=130)=Pr(Y=130|U=C)*Pr(U=C)/Pr(Y=130)=(prC*c)/(prA*a+prB*b+prC*c)

 

 

이게 바로 관찰된 변수 Y가 특정 값 y로 관찰되었을 때 히든 변수일 조건부 확률분포 f(u|y)입니다. 이와 같이 모수(홈런 칠 확률, 비거리 분포)만 알면 관찰변수 Y의 홈런 비거리에서 모르는 변수 U, 누가 홈런을 쳤을까 하는 확률을 알 수 있다는 것이죠. 그럼 이 모수들의 값을 우선 추정해야 하겠죠. 이때 EM 알고리즘을 사용하자는 것이죠.

 

즉, 히든변수 U의 확룰 분포, 특정 U가 주어졌을때 Y의 확률 f(y|u)가 모형에 전제가 되었을 때 여기서 f(u|y)를 구한 다음 EM 공식에서 E[log(f(y, u)]를 U|Y 즉, 확률분포 f(u|y)에 대해 기댓값을 취해서 최대화 되는 모수들을 구하는 것입니다.

 

다시 한번 읽어 보시고 생각보다 직관적이니까 이게 이해가 되면 EM 전개에서 복잡한 수식을 쉽게 이해할 수 있습니다. 이건 다음의 Pet 모형, 뇌사진 촬영에서도 그대로 적응됩니다.

 

 

2.

 

그래서 E[log(f(y, u)]에서 U|Y에 대해 기댓값을 취하는 것 중 U|Y의 확률분포 f(u|y)는 위에서 구해 문제를 해결했습니다. 그러나 log(f(y, u)) 즉, U와 Y의 결합 확률분포 f(y, u)는 여전히 못 구했습니다. 이걸 구해야 하는데 U가 다항분포일 경우는 그리 쉽지 않습니다.

 

이항분포의 경우는 쉽습니다. 다항분포의 경우 왜 쉽지 않는지 지금부터 이야기 하겠습니다.

 

처음 베르누이 시행부터 이야기 해보죠. 동전 한번 던지는 실험이죠. 아니면 얘를 나을 때 아들이나 딸이나 하는 그럼 문제이죠. 이 경우 확률분포는 동전이 앞면이 나오면 x=1, 뒷면이 나오면 x=0

 

f(x;p)=px+(1-p)(1-x)

 

입니다.

 

그럼 동전을 여러번, n번 던지면 이 분포는 어떻게 될까요? 동전을 던지는 것이니까 이건 그냥 위 분포를 곱하면 됩니다. 즉

 

f(x1, x2, ..., xn;p)=f(x1;p)*f(x2;p)*...,*f(xn;p)

 

이걸 log를 취하면

 

logf(x1, x2, ..., xn;p)

=log(f(x1;p))+log(f(x2;p))+...+log(f(xn;p))

=Summation(logf(xi;p))

 

그래서 굉장히 간단한 식이 됩니다. EM에서도 처음 수식을 전개할 때 하나의 데이터 X가 관찰할 경우를 많이 합니다. 그래서 나중에 로그 가능성 함수(LLF) 구할 때 일반화해서 데이터가 X1, X2, ..., Xn이 있는 경우로 전개합니다. 왜냐하면 위에서 본 것와 확률분포를 곱하고 그리고 나중에 log 취하면 summation이 되어 미분하기가 편하거든요.

 

 

이와 같이 베르누이 시행을 여러번 했을 때를 책에서는 이항분포를 한다고 되어 있고, 확룰분포를 위와 같은 식으로 하지 않습니다. n번 시행 중 동전이 앞면에 나오는 횟수를 Y라 하고 Y의 분포를 이항분포의 확률분포로 합니다. 즉 Y=X1+X2+,...,+Xn=Summation(Xi)라고 정의하고 이 Y의 분포를 통상 사용합니다. Xi가 나오는 값이 0과 1이기 때문에 Y=Summation(Xi)은 동전의 앞면이 나오는 횟수가 됩니다.

 

그럼 Y의 분포는

 

f(y;p)=nCy*py+(1-p)(n-y)

 

가 됩니다. 사실 이 식이나 위의 베르누이 시행을 곱한 식이랑 앞의 nCy만 제외하고 똑같습니다. 이 상수항은 확률을 1로 만들어 주는 숫자에 불과하고 MLE에서 모수 추정 과정에서는 아무런 역할을 못합니다. 위 베르누이 시행을 곱한 식을 전개하면 그 식 안에 summation(xi)가 나오고 이걸 y로 치환하면 바로 위 식이 됩니다.

 

 

 

3.

 

그럼 다항 분포는 어떻게 될까요? 다항 분포는 취하는 범주가 3개 이상일 때 사용합니다. 예를 들어 위의 야구선수 A, B, C라든지, 남성, 여성, 동성애자 등으로 나눌 때라든지 이런 경우에 사용한다는 것이죠. 이 경우 한번만 관찰했다고 해보죠. 즉 관찰된 변수 X는 1, 2, 3의 값을 취하고 각각 나올 확률이 p1, p2, p3(1-p1-p2)라고 하죠. 이 경우 확률분포를 쓰기가 간단하지 않습니다. 즉 복잡하게 일일이 적어야 합니다. 즉,

  

f(x=1)=p1, f(x=2)=p2, f(x=3)=p3=(1-p1-p2)

 

이렇게 일일이 써야 한다는 것이죠. 이렇게 경우를 나눠서 쓰면 앞에서 나온, n번 관찰한 경우인 결합확률분포를 쓰기가 힘듭니다. 그래서 이 경우는 책에서는

 

Y1=범주 1이 관찰된 횟수, Y2=범주 2가 관찰된 횟수, Y3=범주 3이 관찰된 횟수 이렇게 정의합니다. 그럼 당연히 n=Y1+Y2+Y3가 되겠죠.

 

그럼 Y1, Y2, Y3의 분포는

 

f(y)=nC(y1,y2,y3)*p1y1*p2y2*(1-p1-p2)(n-y1-y2)

 

이렇게 된다는 것이죠. 그럼 이걸 사용하면 되는데 이게 문제가 있다고 하는 것일까요. EM 문제에서는 이 Y 값들이 관찰이 안된다는 변수인데 이렇게 전개하면 Y1, Y2, Y3이 세 개의 변수가 히든변수가 되고 나중에 관찰변수와의 결합분포를 전개하기가 힘듭니다.

 

 

그럼 원래 다항분포 X 하나만 관찰된 변수를 다른 방식으로 써 보죠. 이때 indicator라는 함수를 사용합니다. indicator 함수는 이진변수로 어떤 특정 경우에는 0, 나머지는 1로 하는 변수입니다. indicator(A)라고 하면 집합 A인 경우는 1, 집합 A가 아니면 0이라고 정의하는 함수입니다. 그럼 처음 다항분포의 식은 이 함수를 I라고 표시하죠.

 

f(x;p1,p2,p3)=p1I(x=1)*p2I(x=2)*p3I(x=3)

 

이렇게 간단하게 쓸 수 있습니다. 그럼 일반화해서 n번 던진 경우

 

f(x1,x2,...,xn;p1,p2,p3)=p1sum(I(xi=1))*p2sum(I(xi=2))*p3sum(I(xi=3))

 

여기서 log을 취하면

 

log(f(x;p))=y1*log(p1)+y2*log(p2)+y3*log(p3)

 

로 앞의 다항분포 확률분포 정의에서 nC(y1, y2, y3)를 제외하고는 정확하게 일치합니다.

 

 

하여간 이 문제를 풀때 바로 표본수가 n인 경우로 일반화해서 f(x1,x2,...,xn,u1,u2,...,un) 이렇게 풀지 않고

하나의 (X, U)에 대해 결합분포 f(x,u)를 구하고 그런 다음 표본수가 n인 경우로 확장한

 

f(x1,x2,...,xn,u1,u2,...,un)=f(x1,u1)*f(x2,u2)*...*f(xn,un)

 

를 구합니다.

 

 

표본수가 하나인 경우 f(x,u)는 구하기 쉽습니다. 위의 야구 예에서 타자가 특정 선수일때 홈런 비거리는 정규분포 N(뮤, 시그마)를 한다고 가정했습니다.

 

f(x|p1,p2,p3)=p1I(x=1)*p2I(x=2)*p3I(x=3)

   

f(x,u)=f(x|u)*f(u)

=N(x,뮤=110,시그마=10)I(u=1)*p1I(u=1)*N(x,뮤=120,시그마=15)I(u=2)*p1I(u=2)*N(x,뮤=140,시그마=20)I(u=3)*p1I(u=3)

 

 

이걸 n번 곱해서 그리고 log를 취해야 log(f(x,u))가 나옵니다. 그런 다음 여기에 U|Y에 대해 기댓값을 구해야 합니다. 이걸 일일이 다하기 불편하니까 Davison 책에 있는 전개 과정을 다시 보여 드리겠습니다.

 

 

1)

 

  

 

위 식이 (Y, U) 즉 표본수가 1인 경우 f(y,u)를 구한 다음 log 취한 것입니다. indicator 함수가 보이고요. 여기 파이는 특정 야구선수가 홈런을 칠 확률 Pr(U=r)이고, fr(y)는 특정 야구선수가 홈런을 첬을 경우 비거리 분포입니다. 즉 f(y|u=r)입니다. 우리의 경우 정규분포이지요.

 

 

2)

  

  

이 식이 홈런 비거리 Y를 관찰했을 경우 각 선수의 홈런에 대한 기여도, 또는 비중입니다. 처음에 Y=130m라고 관찰했을 경우 실제로 한번 구해 봤죠. 복잡하게 보이지만 우리의 상식에 일치되는 결과입니다.

그럼 2개의 수식을 구했으니 ELLF인 EY|U[log(f(y,u))]를 구하고 그 다음 이것을 최대화하는 모수값을 구해야 하겠죠.

 

 

 

 

 

3)

  

 

이 식이 ELLF 즉 log(f(y,u,세타))를 U|Y, 세타*에 대해 기댓값울 취한 결과입니다. 세타*는 EM 과정에서 이전에 구한 모수의 추정값이고요, 이 식 자체는 첫 번째과 두 번째 식을 곱한 다음 표본수가 n일 경우로 일반화한 것입니다. 표본수가 n인 경우 확률분포의 곱하기로 나오고 이걸 log 취하면 summation이 된다고 해죠. 식의 처음에 n까지 summation 한것이 표본의 수가 n이라는 것입니다.

 

 

 

4)

 

마지막으로 세 번째에서 구한 ELLF를 모수 세타에 대해 미분을 해서 0으로 놓고 이 방정식을 풀어야 합니다. 이게 다음의 내용입니다. 여기서 구한 모수 추정치를 다시 첫 번째 단계의 ELLF의 세타*에 대입합니다.

 

  

 

 

 

 

5.

 

EM 알고리즘을 적용해 모수를 추정한다는 것이 매우 복잡하다는 것을 알 수 있죠. 그럼 통계프로그램에 메뉴식으로 클릭만 하면 쉽게 할 수 있을가요. 완전하게 못하죠. 온갖 현실적인 문제가 있는데 이걸 다 고려해서 자동화를 할 수 없죠. 그러나 혼합모형(Micture model)은 흔하게 때문에 구현할 수 있겠죠.

 

여기서는 관찰변수 Y는 정규분포라고 했지만, 포아송 분포, 지수분포 등 다양한 분포의 경우 위와 같이 풀어서 구현해서 메뉴에 넣을 수 있을 겁니다. 히든변수는 설정할 필요가 없고요. 관찰되지 않은 변수이기 때문에 아예 데이터에 없는 변수라는 것이죠.

 

그래서 히든변수가 성별, 관찰변수가 키라고 하면 메뉴에 키만 설정하고 히든변수의 집단 수가 지정하면 됩니다. 메뉴에 성별을 지정하지 않았는데 어떻게 통계 프로그램이 히든 변수가 성별인 줄 알까요? 전혀 모릅니다. 히든 변수의 집단을 2개 지정하면 이게 성별인지, 아니면 미성년자, 성인, 아니면 환자, 정상인지 통계프로그램은 모른다는 것이죠. 단지 관찰된 키의 분포를 보면 무조건 두 집단으로 생각하고 모수를 추정한다는 것이죠.

 

그럼 성별도 관찰되고, 이에 따른 키 값도 관찰되고, 즉 현실에서 자주 보는 데이터의 경우 이걸 EM으로 무엇을 할 수 있을가요. 이 경우 성별을 히든으로 상정하고 키를 관찰된 변수로 하여 EM을 돌릴 경우 이 EM 알고리즘이 잘 작동하는지 검증은 할 수 있습니다. 실제 데이터에 나온 남자의 비율, 남자의 경우 평균과 표준편차의 추정치, 여자의 비율, 여자의 평균과 표준편차의 추정치하고 EM에서 구한 추정치하고 비슷하지 검증 정도는 할 수 있습니다.

 

 

 

6.

 

그럼 어떤 경우에 EM이 잘되고 어떤 경우에 EM이 잘 안될까요?

 

 

집단의 경우 우리가 관찰이 안되니까 오로지 관찰변수 Y만 보고 풀어나갈 수 밖에 없습니다. 그래서 집단별로 분포가 잘 식별되면 EM도 잘 추정할 거라 생각할 수 있고, 집단별로 분포가 잘 식별이 되지 않으면 EM의 결과도 매우 안 좋을거라 생각할 수 있습니다.

 

 

식별이 잘 되는 경우는 집단간 분포의 평균이 차이가 많이 나는 대신 표준편차는 작고, 식별이 잘 안되는 경우는 집단간 분포의 평균이 비슷하고 이에 반해 표준편차가 큰 경우입니다. 아래 그림을 한번 보죠.

 

 

 

 

 

왼쪽의 파란색 두 분포의 경우 잘 식별이 되는 경우이고 오른쪽 빨간색 두 분포는 잘 식별이 안되는 경우입니다. 그래서 이 경우 EM을 써도 모수 추정이 매우 안 좋은 결과가 나올 수 있습니다.

 

이런 생각은 t 검증이나 분산분석(ANOVA)에서도 그대로 적용됩니다. 왼쪽의 경우 t 검증이나 분산분석하면 두 집단이 유의적인 차이가 있다고 나오고 오른쪽의 경우 집단간에 유의적인 차이가 없다고 나옵니다.

'인공지능관련 > EM' 카테고리의 다른 글

PET, 뇌촬영, EM2  (0) 2016.12.12
PET, 뇌촬영  (0) 2016.12.11
EM 공식 이해하기  (0) 2016.11.29
EM 이해하기4  (0) 2016.11.28
EM3  (0) 2016.11.14