김승일

모두의연구소 연구소장

모두의연구소 DeepLAB 랩짱


Deep Belief Network(DBN)과 Restriced Boltzmann Machine(RBM) 논문을 보면, Graph Theory로 중무장한 어려운 글들을 볼 수 있습니다. DBN을 좀 쉽게 설명해주는 글은 없을까? 찾아보았지만 헛수고.. 털썩..

뭐 그렇다면 직접 쓰는 수 밖에..


DBN/RBM  을 Graph Theory가 아닌 비교적 쉬운 Gradient Descent 관점에서 제맘대로 설명해봅니다. 

그냥 제 머릿속에서 나온거라 당연히 틀릴 수 있고, 틀린 부분을 알고계시다면 댓글로 토론 격하게 환영합니다.


그럼 자 들어갑니다.


기존의 Neural Network 구조

먼저 아래 그림 1 및 그림 2와 같은 back-propagation 기반의 기존의 neural network 구조를 먼저 살펴보죠. 이 구조에서는 weight를 learning 시키기 위해서 출력값(y)와 target값(yd)간의 차이(error signal)을 이용합니다. 그래서 상위 layer부터 하위 layer쪽으로 weight를 learning해 나가죠. 그래서 back-propagation이라는 이름이 붙었구요.




그림 1. 기존의 Neural Network




그림 2. Back Propagation Process



이 과정을 매우 간략화 해서 보면 다음 그림 3과 같습니다.우리는 입력 x와 출력 타겟값 yd 를 알고 있는 상태에서 w를 구합니다. 이건 아주 쉬운 문제죠. 왜냐하면 미지수는 w 하나이고, x 와 yd 가 이미 주어져 있기 때문입니다. 3*w=6 이라고 하면 w=2라고 쉽게 알수 있는것과 같은 이치입니다. 그래서 우리는 Backpropagation 논문은 그리 어렵지 않게 읽을 수 있었던 거죠. 




그림 3. 기존의 Neural Network System


발상의 전환

그런데, Deep Belief Network(DBN)에서는 좀 이상한 방식으로 weight를 구하려고 합니다. 기존에는 그림 2와 같이 상위 layer부터 하위 layer로 weight를 구해왔습니다. 그런데 DBN은 하위 layer부터 상위 layer를 만들어 나가겠다! 라는 저로써는 상상도 못할 놀라운 발상의 전환에서 출발합니다.어떻게 이게 가능할까요? 답은 Unsupervised Learning에 있습니다.

DBN에서는 입력 x ( Hinton 교수님의 논문에서는 visible node, v, 라고 표현됩니다. ) 만을 알고 있다고 가정합니다. 그리고 그 입력이 어떤 h(더 나아가 y)로부터 만들어졌을까??? 추론을 하게 됩니다. 즉, 입력 x만을 알고 있지만, 우리는 w와 h ( 더 나아가 y )를 구해야 하죠. 이게 간단하지는 않은 것이 그림 3의 쉬운 문제가 이제 그림 4와 같은 매우 어려운 문제로 바뀌게 됩니다. 3*w=h 가 나오는데, w랑 h가 어떤 값인지 구할 수 있나요? 없죠.. 이 조건을 만족하는 무수히 많은 해가 존재합니다. 그래서 Hinton 교수님은 이 문제를 풀기위해 Restricted Boltzmann Machine 이라는 개념을 가져옵니다. 




그림 4. Deep Belief Network




Restricted Boltzmann Machine

어쨌건 우리는 그림 4의 입력 x , 필터가 w, 출력이 h 인 시스템의 해를 풀어야 합니다. 말이 안되겠지만 그래도 풀어야 하니, ( 어쩔 수 없이 w와 h는 아무값이나 넣어서 초기화 시켜두었다고 한다면 ) h로부터 어떻게든 말이 되든 안되는 x를 만들어내고, 그 x로부터 다시 h를 만들어내고, 그러게 만들어낸 h로부터 다시 x를 만들어내고.. 이 과정을 무수히 반복해서 점점 올바른 h와 w를 찾아나갑니다. 그 과정이 Restricted Boltzmann Machine가 되며, 그림 5처럼 표현할 수 있습니다. 





그림 5. Restricted Boltzmann Machine


그림 5의 가장 윗 블럭을 한번 살펴보죠. 입력이 h0, 필터 w, 출력이 x1입니다. 여기에서는 사실 x1의 target값(x0)을 알고 있습니다. target값은 사실은 neural network의 입력값, 즉 visible node, 입니다. 따라서 가장 윗 블럭은 h0가 입력(비록 엉터리 h0일지라도)되고, 필터 w를 통과하면 출력 x1이 나오게 되는데, 이 출력이 최대한 x0와 같아지게끔 w를 learning 시킵니다. 그 때 사용하는 learning rule은 물론 Gradient Descent 이구요. 아마도 아래와 같은 식으로 learning 될 것입니다. 그 중 epsilon에 붙는 E{ } 부분을 learning rule 이라고 불러보죠.


그러면 learning rule은

가 됩니다.


그러면, 이제 그림 5의 두번째 블럭을 볼까요? 두번째 블럭은 입력이 x1이고, 필터는 w, 출력이 h1인 문제로 바뀌게 됩니다. 마찬가지로 Gradient Descent로 이 문제를 풀어보면, 그 때의 learning rule 은


가 되겠죠.

잘 보면, 첫번째 블럭의 learning rule과 두번째 블럭의 learning rule을 더하면 h0*x1 term은 사라지게 됩니다. 이렇게 RBM을 무수히 반복해서 update해 나가면 결국,



와 같은 learning rule을 얻을 수 있습니다.


주의해야 할 사항은 이 과정이 입력 layer와 바로 하나 위 hidden layer 간의 weight update 과정이라는 것입니다. 이렇게 update를 시키면 이것을 freeze 시켜놓고 다음 layer도 마찬가지로 RBM을 통해 학습시킵니다. 이과정을 끝까지 진행하면 되겠죠? 


이상, 제 맘대로 이해해서 적어본 DBN과 RBM 이었습니다.



모두의연구소 DeepLAB연구실은 딥러닝연구에 관심있는 분들의 참여를 기다립니다.

연구실 소개 : http://www.modulabs.co.kr/#!deeplab/c1dzk


모두의연구소 페이지와 모두의연구소 커뮤니티에 오시면 더 많은 정보를 만나보실 수 있습니다.

모두의연구소 페이스북 페이지 : https://www.facebook.com/lab4all

모두의연구소 커뮤니티 그룹 : https://www.facebook.com/groups/modulabs



저작자 표시 비영리 변경 금지
신고
  1. EGOIST 2016.11.21 11:58 신고

    좋은 설명 감사합니다. ^^ 이해가 쏙되네요

  2. June 2016.12.06 16:09 신고

    좋은 글 잘 읽었습니다. 어떤 내용인지 대략 파악은 되었는데, 하나 여쭙고 싶은 것이 있습니다.

    이 DBN이 다른 인공 신경망 보다 좋은 점은 무엇이 있나요?

    • shindoh 2017.01.02 18:57 신고

      잘은 모르지만 PCA나 autoencoder같이 그냥 입력값보다 RBM을통해 featured된 값을 만들어 내고 실제 NN으로 학습하기 때문에 성능이 좋다고 알고있습니다.

+ Recent posts