본문 바로가기

Enginius/Machine Learning

[Deep Learning ]RBM trained with Contrastive Divergence

Boltzmann Machine은 [0,1]의 값을 갖는 binary unit들로 이루어진 network를 의미한다.



 위의 Figure1은 Boltzmann Machine을 안다면 누구나 한번쯤 봤을 그림이다. 먼저 왼쪽의 모형이 general BM이다. 이 BM의 특징은 full-connectivity에 있다. 그리고 오른쪽에 모형이 restricted BM이다. 이 모형은 visible node와 hidden node를 분리시켰다. 이것이 BM과 RBM의 차이이다. 이 간단한 차이로 RBM은 실제 구현이 가능하고, BM은 구현이 매우 어렵다. 


 앞서 설명하였듯이 BM에서 node는 0또는 1의 binary한 값을 갖는다. 그리고 각 node사이에는 symmetric하게 link가 있는데, 이 link에는 weight가 존재한다. 이 weight의 값은 굳이 양수일 필요 없이 모든 값을 가질 수 있다. RBM의 경우 각 node를 visible과 hidden으로 나눠 놓았고, 여기서 visible node는 우리의 data가 들어가는 곳을 의미하고, hidden의 경우 우리는 각 node가 1이 될 확률만을 알게된다. 


BM의 상태는 에너지를 통해서 설명될 수 있는데 엔트로피와 마찬가지로 에너지가 높을 수록 그 존재 확률이 낮아지게 된다. 먼저 특정 상태의 에너지는 다음과 같이 표시된다. 


 그리고 이때 해당 상태의 확률은 다음과 같다. 

 여기서 Z는 단순히 normalizing constant이지만 문제는 이 Z의 계산이 매우 어렵다. 그 이유는 뒤에서 나오는데 쉽게 풀어 말하자면 가능한 모든 경우에 대해서 계산을 해봐야하기 때문이다. 이렇게 구해진 확률의 log-likelihood를 계산해서 그 값이 최대한 크게 하는 gradient ascent방식을 사용하는 것이 일반적인 RBM을 학습시키는 방법이다. 이때 log-likelihood는 다음과 같다. 


 이 식에서 알 수 있듯이 우리가 알고자하는 link의 weight는 주어진 data로 구해진 expectation value에서 model 전체에 대한 expectation value를 빤 값이다. 보통 전자를 positive phase라고 부르고, 후자를 negative phase라고 부른다. 


 이러한 RBM을 train 시키는 다른 방법으로는 Contrastive Divergence(CD)라는 방법이 있다. 이 CD는 간략화 된 학습이라고 보면 되는데, positive phase를 주어진 data에 대한 expectation으로 보고, negative phase를 n번 gibbs sampling을 통해서 얻어진 distribution의 expectation으로 보는 것이다. 말은 어렵지만 gibbs sampling이 무엇인지 안다면 대충 이해가 갈 것이다. 

 

 *gibbs sampling에 대한 포스팅: http://enginius.tistory.com/296


 여튼 내가 구한 소스에는 1-CD를 사용했다. 무슨 말인고 하니 gibbs sampling을 한번만 한 것을 distribution으로 생각하겠다는 것이다.

 만약 n번 gibbs sampling을 할 경우 n-CD가 된다. 간단하다. 


 실험은 매트랩으로 하였고, dataset은 MNSIT digit을 사용하였다. MNIST는 10000개의 train image와 6000개의 test image를 갖는 dataset이다. dataset은 다음 사이트에서 구할 수 있다. 


 http://yann.lecun.com/exdb/mnist/


 여튼 전체적인 실험 과정은 이렇다. 이 dataset을 이용해서 RBM을 train시키고, 이렇게 train된 RBM에 노이즈가 섞인 data를 넣어주었을 때 어떤 결과를 보이는지를 확인하는 것이다. RBM의 경우 unsupervised learning이라 이 자체로 classification 문제를 풀긴 어렵다. 


<매트랩 코드>


실험 결과










 - 이런식으로 epoch가 커질수록 원래 이미지에 더 가까이 가는 것을 알 수 있다. 이제 테스트를 위해 이 image에 gaussian noise를 입혔을 때 어떤 결과가 나오는지 확인해보자. 


1. 원래 이미지


2. 노이즈를 추가한 이미지 


3. RBM을 거친 후의 이미지 


 RBM을 거친 후의 이미지에서 노이즈가 줄어든 것을 알 수 있다. 


 * 참고로 DBN은 이 RBM을 여러 층 cascade한 것을 의미한다. 


 매트랩 프로젝트


8. Restricted Boltzmann Machine on MNIST.z01


8. Restricted Boltzmann Machine on MNIST.zip



'Enginius > Machine Learning' 카테고리의 다른 글

Documentation for GPML Matlab Code version 3.1  (0) 2012.06.28
Gaussian Process  (4) 2012.06.21
내가 만든 LDA in Matlab  (3) 2012.06.10
LDA로 headPoseEstimate하기  (0) 2012.06.09
Linear Discriminant Analysis Matlab Example  (0) 2012.06.09