인공지능관련/MCMC, Gibbs Sampler

0715MCMC Gibbs Sampler1

학위논문통계 2019. 7. 15. 23:59



에... 이번에는 정규분포 경우 베이지안 추론에 관해 쓸라고 했는데 수식쓰기기 너무 힘들어 일단 깁스 샘플러에 관해 먼저 이야기하겠습니다. 물론 책에 나와 있는 수식을 이미지로 받아서 쓰면 간단하게 되겠지만 이건 너무 성의가 없는 것 같아서요.


하여간 일을 좀 해야 할 것 같아서 다음 MCMC 글은 한참 후에나 쓸 수 있을 것 같네요.


앞에서 이야기한 바와 같이 MCMC가 무슨 세상을 보는 새로운 이론을 만들어 낸 것이 아니고 단순히 컴퓨터로 확률분포에서 데이터를 임의로 생성하는 방법에 불과합니다. 단지 그 전에는 할 수 없었던 복잡한 확률분포를 우리가 다룰 수 있게 된 것이죠.



이 MCMC 방법은 기본적으로 Metropolis라는 알고리즘이고 이 중 특수한 케이스가 깁스 샘플러인데 이게 통계학, 특히 베이지안 통계학에 많이 사용됩니다.


먼저 두 개의 확률변수 X, Y의 확률분포 f(x,y)를 먼저 생각해보죠. 이 X, Y가 독립이면



f(x,y)=f(x)*f(y)


이렇게 되고 이 f(x,y)에서 표본을 뽑으려면 f(x)에서 x를 뽑고, 또 f(y)에서 y를 뽑으면 됩니다. 뽑은 x, y를 곱하거나 뽑은 x, y를 f(x), f(y)에 대입해 곱하는 것이 아닙니다. 뽑은 두 개의 값 (x, y)가 f(x,y)에서 나온 하나의 표본이라는 것이죠. 


만약 X, Y가 독립이 아니라면 조건부 확률 공식에서



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

 


이렇게 되죠. 그럼 먼저 f(x)에서 x1를 먼저 뽑습니다. 그런 다음 x1을 대입하여 f(y|x1)에서 y1을 뽑습니다. 그래서 나온 (x1, y1)은 f(x,y)에서 나온 하나의 샘플로 생각할 수 있다는 것이죠.



그러나 f(x)에서 x1를 뽑는 것이 힘들다고 하면 그럼 우리가 임의의 x1 값을 설정하고 시작할 수 있을 겁니다. 그럼 f(y|x)에 임의의 x1값을 넣은 f(y|x1)에서 y1을 뽑을 수 있을 겁니다. 그러나 앞의 경우와 달리 이번의 (x1, y1)는 f(x,y)에서 나온 샘플이라 생각할 수 없습니다. 왜냐하면 x1이 f(x)에서 나온 표본이 아니기 때문입니다.


그럼 어떻게 해야 할까요. 잠깐 머리를 굴려서 구한 y1은 위 식의 f(x|y)*f(y)의 f(y)에서 나온 표본이라 생각하고 다시 f(x|y)에 대입해서 f(x|y1)에서 x2를 구하면 조금 나겠다는 생각이 듭니다. 이 x2를 또 f(y|x)에 대입해서 f(y|x2)에서 y2를 뽑고요. 그럼 (x2, y2)는 처음 (x1, y1)보다 좀 더 f(x,y)에서 나온 샘플이 가능성이 높겠다는 생각이 든다는 것이죠.  


이렇게 조건부 확률에서 계속 데이터를 뽑아서 표본을 추출하는 방법을 깁스 샘플러라고 합니다. 



그럼 일반적으로 다음과 같이 A, B, C 세 개의 확률변수가 있다고 생각을 해보죠. 여기서 A, B, C는 주류통계학의 데이터 변수일 수도 있고, 아니면 사전확률이나 사후확률에서 나오는 모수 변수일수도 있습니다.


그럼 깁스 샘플러는


a1~f(a|b,c) : f(a|b,c)에서 a을 추출한다.


b1~f(b|a1,c) : f(b|a1,c)에서 b1을 추출한다.


c1~f(c|a1,b1) : f(c|a1,b1)에서 c1을 추출한다.


이런식으로 돌려가면서 한 천번 정도 계속 뽑아냅니다. 그래서 최종적으로 (a1000, b1000, c1000)이라는 표본이 하나 나오겠죠.


위 방식을 또 만번 정도 합니다. 그런 1번 표본=(a1000, b1000, c1000), ..., 만번 표본=(a1000, b1000, c1000)와 같이 (a,b,c) 표본을 만개 정도 뽑아냅니다. 이게 f(a,b,c) 확률분포에서 깁스 샘플러를 이용하여 만개의 표본을 뽑아낸 것입니다. 이게 기본 깁스 샘플러이고 이게 다입니다. 간단하죠.


그래서 문제는 조건부 확률분포만 알아내면 되겠죠. 그런데 이게 간단하지 않다는 것이죠. 통상 조건부 확률분포가 잘 알려져 있는 경우는 다변량 정규분포입니다. 즉, (X1, X2,..., Xk)가 다변량 정규분포를 하면 주변확률분포나 조건부확률분포 모두 다 정규분포를 한다는 것이 수식으로 정확하게 알려져 있습니다.



이렇게 다변량 정규분포의 경우 깁스 샘플러를 쓰면 쉽게 될 것 같은데 이렇게 깁스 샘플러를 쓰는 사람은 한 명도 없습니다. 왜냐하면 다변량 정규분포에서 표본을 뽑는 방법은 R이나 S 프로그램에서 그냥 명령문 하나면 바로 뽑혀 나옵니다.


이렇게 명령문을 쓰지 않아도 선형대수 이론에 나오는 Spectral Decomposition 정리를 사용하여 Cov=PDP'를 사용하면 쉽게 다변량 정규분포에서 표본을 뽑는 방법을 프로그램 할 수 있습니다.


그래도 이게 깁스 샘플링 하는 가장 간단한 방법이기 때문에 책에서는 bivariate 정규분포에서 깁스 샘플러를 이용하여 표본을 추출하는 방법을 예로 많이 듭니다. 여러분도 한번 직접 해보시기 바랍니다.



만약 위에서 제가 설명한 내용이 잘 이해가 안되고 직접 프로그램을 짜는 것이 힘들면 그럼 시간을 조금 길게 잡고 최소 2-3년 공부하신다고 생각하시고 기본 tool에 대한 공부를 더 충실히 하시기 바랍니다.


예를 들어 R을 다운로드해서 기본 프로그램하는 공부를 좀 하시고요. 그리고 선형대수, 또는 행렬 이론에 대해 수학과에서 배우시고요. 이게 좀 힘들다 하면 Johnsn & Wicheren의 Applied Multivariate Statistical Analysis를 다운로드해서 행렬 이론 부분을 속성으로 공부하시기 바랍니다. 다변량 정규분포의 조건부 확률분포와 주변확률분포 공식도 이 책에 다 나옵니다.


하여간 책에 나오는 이항정규분포의 경우 깁스 샘플러를 이용하여 표본을 뽑은 경우의 결과를 살펴보겠습니다.




bivariate 정규분포에서 200개이 표본을 뽑은 결과입니다. a)이 경우 두 변수 x, y가 상관관계가 낮은 경우인데 잘 뽑혔는데 b)의 경우 상관관계가 높은 경우 타원형의 양끝쪽에는 표본이 잘 안뽑혀 나왔다는 이야기입니다.


이 정도 결과물은 여러분이 R에서 뽑아 낼 수 있어야 합니다. 앞에도 이야기했지만 이게 지금 불가능하시면 조금 시간을 길게 잡으시고 2-3년 기본기에 더 충실해야 합니다.


그럼 여기서 우리가 좀 의심을 가져 볼 수 있습니다. 저렇게 조건부 확률분포에서 계속 뽑는다고 해서 저게 원래 우리가 뽑으려고 했던 f(x1, x2, ..., xk) 결합확률분포에서 나온 표본일까 하는 생각이 듣다는 것이죠.



여기서 우리가 마코프 체인 이론에서 조건부 확률인 전이행렬을 계속 곱하면 최종적으로 균형상태인 확률분포 모양이 나온다고 했죠. 

 


여기서 더 나아가 매우 중요한 Hammersley-Clifford 정리라는게 있습니다. 이걸 간단히 설명하겠습니다.



100*100 흑백이미지가 있다고 한번 생각을 해보죠. 즉 각 픽셀에서 데이터 X가 취하는 값이 0과 1입니다. 그럼 우리는 생각할 수 있는 모든 가능한 이미지의 수는 2의 100*100제곱의 경우가 생겨납니다. 즉 2의 100*100의 경우에 우리가 확률값을 줘야 f(x(1,1), x(1,2),...,x(100,100))의 결합확률분포를 만들 수가 있습니다.


즉 (i,j) 위치에 있는 픽셀의 값을 변수 X(i,j)라고 하면 데이터 변수도 100*100의 만개 확률변수를 생각해야 하고, 베이지안의 경우 진짜 픽셀의 값인 모수도 (a(1,1), a(1,2), ... , a(100,100)) 등 10000개의 변수를 생각해야 합니다.



그래서 이렇게 복잡하게 해서는 우리가 문제를 제대로 처리할 수 없다는 것이죠. 그래서 사람들이 좀 더 간단하게 문제를 처리하는 방법을 생각했습니다.


이 만개의 변수가 서로 영향을 미친다고 생각하지 않고 각 픽셀 (i,j)에 있는 변수 X(i,j)또는 모수 A(i,j)는 오직 주변의 픽셀의 값에만 영향을 받고 그 주변 외에는 영향을 안 받는다고 가정을 한 것이죠. (i,j)가 아닌 모든 위치를 -(i,j)라고 하죠. 그럼



Pr(X(i,j)|X-(i,j)) = Pr(X(i,j)|X(i,j+1), X(i, j-1), X(i+1, j), X(i-1, j)



이렇게 가정을 한 겁니다. 마코프 체인의 정리와 비슷하죠. 마코프체인에서는 현재 상태는 오로지 한 시점 이전에만 영향을 받지 그 이전에는 전혀 영향을 안 받는다고 했죠. 이와 마찬가지로 각 픽셀의 값은 오로지 그 픽셀의 주변(Neighborhood)에만 영향을 받지 그 주변이 아닌 위치의 픽셀의 값에는 전혀 영향을 안받는다고 가정을 한 것이죠.


이걸 Markov Random Field(MRF)라고 합니다. 또 이걸 MRF의 local Markov property라고 합니다.


그래서 전체 이미지의 변수를 한번에 다 다루지 않고 각 팩셀에서 각각 독립적으로 다루겠다는 이야기입니다. 그럼 100*100개의 프로세스가 있으면 계산 시간을 별로 중요한 문제가 아닙니다.



그럼 여기서 다시 문제가 생깁니다.


이렇게 각 픽셀에서 조건부 확률을 계산하면 이게 나중에 전체 이미지 픽셀 변수의 결합확률분포 f(x(1,1), x(1,2),...,x(100,100))를 결정할 수 있는가? 


결정할 수 있다면 이 경우 어떤 분포의 모양을 하는가?



이런 문제가 등장한다는 것이죠. 여기서 나온 정리가 앞의  Hammersley-Clifford 정리입니다. 대부분의 경우 결합확률분포를 결정할 수 있다고 하고 이 경우 Gibbs 또는 Bolzmann 분포를 하는 것으로 나옵니다. 여기서 Gibbs Sampler라는 말이 나옵니다. 이걸 Global Markov Property라고 합니다. 아마 그럴겁니다. 제가 확인해 봐야 하는데...


 


이 모형을 써서 대부분 책에 나오는 예가 물리학에서 나오는 Ising 모형입니다. 저는 물리학을 잘 몰라 이 Ising 모형의 의미를 잘 모르지만. 하여간 픽셀대신 입자를 대입하여 입자가 0, 1을 spin 한다고 가정을 합니다. 그럼 이 모형의 분포는 Gibbs 분포를 하고 이 경우 서로 옆에 가까이 있는 입자끼리 상호작용을 하면서 분포에 영향을 미칩니다. 나중에 정확한 공식을 보여 주겠습니다.


픽셀, 입자 말고 또 우리나라 지형을 바둑판 모양을 짜르면 각 지역의 다양한 변수들도 생각할 수 있습니다. 삼차원으로 가면 기후예측 모형에도 적용할 수 있을 것 같은데 매우 복잡해지겠죠. 기후는 시간의 흐름에 따라 변하는 것도 생각해야 하기 때문에 시간이 들어간 4차원 공간에서 MRF을 생각해야 할 겁니다.




앞에서 픽셀, 입자를 경우를 생각해서 설명하였는데 이걸 이젠 요새 나오는 인공지능에 나오는 뉴런이라고 생각해보죠. 그럼 이 각 뉴런이 0과 1의 값을 취한다고 하죠. 즉 어떤 뉴런은 activated되고 어떤 뉴런은 inhibited 되었다고 생각할 수 있죠. 그래서 이렇게 activated 되거나 inhibited 되거나 하는 뉴런들이 서로 가까이 있는 경우 상호영향을 미친다고 생각할 수 있다는 것이죠.


이게 Boltzamnn machine의 기본 생각이고 모형입니다. 앞에서 소개한 책


Aarts & Korst 의 “Simulated Annealing and Bolzmann Machines: A Stochastic Approach to Combinatorial Optimization and Neural Computing"


을 보시기 바랍니다.  일반 인공지능책 봐서는 뭔지 도저히 이해가 안될 겁니다. 이 책을 보시면 알 수 있습니다. 그리고 이 책에 나오는 예를 블로그 인공지능편에 한번 소개한 적이 있습니다.



그래서 최근 인공지능 이야기를 들은 사람들 머릿속이나 아니면 뇌과학 한다는 사람들이 머리 속의 인공지능 모형의 기본적인 형태가 바로 Bolzmann 모형입니다. 즉 각 뉴런들이 활성화되거나 억제되고 그래서 서로 상호작용을 해서 우리 인간이 어떤 인지 행동을 한다고 생각하는 것이죠.



그럼 이 Botzmann 모형이 잘 작동할까요. 앞에서 제가 이야기를 했죠. 제가 처음 배울 때가 1995년 정도 되었다고요. 이게 잘 풀렸으면 벌써 난리가 나겠죠. Deep Learning 이라는 것이 나올 이유가 없죠. 물론 제가 배운 후 최근까지 이론의 발전은 제가 알 수는 없지만요. 하여간 느낌에 그래요.


Gibbs Sampler에 나오는 f(x(i)|x-(i))에서 조건부에 나오는 X-(i), 즉 X(i)가 아닌 모든 다른 변수들 역시 일종의 Xi의 주변(Neighborhood)입니다. 가장 큰 주변이죠. 그럼 Hammersley-Clifford 정리와 연결 고리를 생각할 수 있습니다.



 


 




'인공지능관련 > MCMC, Gibbs Sampler' 카테고리의 다른 글

여행하는 세일즈 맨 문제1  (0) 2019.08.09
MCMC 암호 뽀개기  (0) 2019.08.04
0711MCMC2 베이지안 이해하기  (0) 2019.07.11
0706MCMC2  (0) 2019.07.05
mcmc1  (0) 2019.07.01