본문 바로가기

Enginius/Machine Learning

Gaussian Process

Gaussian Process(GP)는 무엇일까? 


 일단 GP는 supervised learning의 일종이다. 즉 label이 된 data를 가지고 train시킨 후에 새로운 data가 들어왔을 때 그 data에 해당하는 label, 혹은 output을 estimate하는 것이다. 여기까지는 여느 supervised learning과 다르지 않다. 이제부터 GP만의 특성에 대해서 알아보겠다. 

 본 포스팅은 다음 문서를 바탕으로 만들어졌다.  

A Tutorial on Gaussian Processes.pdf


 먼저 GP에 쓰일 용어들에 대해서 먼저 알아보자. 이러한 용어들은 관용적으로 공통되게 사용되는 것이지 규칙으로 정해진 것은 아니다. 

 X: input data

 Y: output data

 f: X를 Y space로 mapping하는 함수 

 p: 확률 (posterior)



 먼저 non linear regression에 대해서 생각해보자. 우리는 어떤 X,Y의 dataset이 있고, 이 둘 사이의 관계가 linear하지 않을 때, 서로의 관계성에 대해서 알고 싶을 때가 있다. 이럴 경우 Least Square를 이용한 여러 fitting이 있겠지만, GP 역시 좋은 방법이 될 수 있다. 

 GP는 X와 Y의 관계를 나타내는 어떤 nonlinear한 함수 f에 distribution을 구한다. 사실 이게 쉽게 이해되는 개념은 아니다. 함수의 distribution이라니..

 그래도 여기서 유추할 수 있는 것은 이 distribution을 알고 있을 때, 새로운 data X'에 대한 이 함수에 대한 distribution의 mean이 우리가 알고자 하는 Y'에 대한 추정값이 될 것이라는 거다. 또한 Gaussian이기 때문에 이 함수의 covariance가 uncertainty를 나타낼 것이다. 



 앞서서도 말했듯이 GP는 X->Y인 f의 distribution을 구하게 된다. 이 때 N개의 (X, Y) data set을 가지고 있다면, p(f)는 multivariate Gaussian distribution을 갖는다고 가정을 한다. 

MVG




 우리가 p(f)가 MVG을 따른다고 가정하였기 때문에 p(f)는 mean과 covariance로 나타내질 수 있다. 이 때 distribution of function이기 때문에 각각 mean function과 covariance function이라고 부른다. 그러면 GP는 이러한 mean function과 covariance function을 찾는 작업으로 변한다. mean이야 그냥 구할 수 있다고 하지만 covariance를 구하는 것이 어렵다. 그래서 covariance function이 특정한 형태(parameter)를 갖고 있을 것이라고 가정하고, 이 형태의 함수를 kernel K(x, x')이라고 부른다. 



 위의 예는 자주 사용되는 kernel 중 하나이다. 이렇듯 GP는 이 covarance function의 parameter를 찾는 일로 바뀌었다. 이러한 kernel의 parameter를 hyper-parameter라고 부른다. 만약 mean function과 covariance function이 정의되었다면 GP는 MVG의 기본 법칙들을 따른다. 이 법칙은 conditional distribution일 때 mean과 covariance에 대한 것이다. 


 뒤에서 나올 GP의 prediction 값은 위의 식 형태를 따르게 된다. 



 먼저 n 개의 data가 있다면, 우리는 이 dataset을 이용해서 f를 구할 수 있다. 그리고 이렇게 구한 f, 엄밀히는 f에 대한 distribution과 기존에 n개의 data의 distribution을 이용해서 새롭게 들어온 data x*에 대한 output y*의 예측이 가능하다. 

 우리는 또한 현재 GP로 구한 f가 얼마나 믿을만한지를 나타내는 marginal likelihood를 계산할 수 있다. 







  이 marginal likelihood를 최대로 하는 hyper-parameter를 구하는 것도 하나의 방법이다. 즉 log-likelihood를 최대로 하는 gradient-ascent로 hyper-parameter를 tune해야한다. 그런데 이 marginal-likelihood는 항상 zero-mean인가? 노노, X를 E(X)로 빼줘서 zero-mean으로 만들고 나서 gp를 수행한다. 새로운 data가 들어왔을 때 역시 E(X)를 빼서 regression이나 classification을 한다.