본문 바로가기

Machine Learning/Algorithms

Deep learning



 Deep learning refers to a sub-field of machine learning that is based on learning several levels of representations, corresponding to a hierarchy of features or factors or concepts, where higher-level concepts are defined from lower-level ones, and the same lower-level concepts can help to define many higher-level concepts. <wikipedia-deep learning>




Deep Learning이라는 것은 간단하게 이야기해서, Raw데이터의 feature들을 hierarchical하게 representation한다는 것을 의미한다. higher level일수록 concept과 같은 뭔가 abstraction된 feature가 representation된다는 것이다.


1. Boltzmann machine


이전에 쓴 글을 참고(http://abipictures.tistory.com/726)하여, Boltzmann machine의 특성을 정리하면

(1) A type of stochastic recurrent neural network

>> 에너지 모델을 확률로 해석하였고, 아래의 좌측 그림에서 보듯이 v(visible layer)와 h(hidden layer)가 학습과정에서 에너지 함수를 가지고 재귀적으로 학습되기 때문에 recurrent neural network라고 한다.


(2) weights are symmetric

>> 그림처럼 각 layer사이의 edge들은 bi-direction(양방향성)이기때문에 노드들 사이의 가중치 값은 symmetric하다.


(3) weights adjusted through stochastic update rule based on simulated annealing

>> 노드간 연결된 edge들의 weight들은 확률에 기반하여 학습된다. 에너지 기반 모델의 확률적 해석과도 의미를 같이한다.


(4) a network of units with an 'energy' defined for the network

>>boltzmann machine은 하나의 visible layer와 하나의 hidden layer로 구성되어 있는데, 이 네트워크를 하나의 에너지 모델로 본다.




2. Restricted Boltzmann Machine

위 그림처럼 같은 layer내에서는 각 노드간의 커넥션을 없앤 BM을 RBM이라고 한다.

(1) Restrict the connectivity to make learning easier

- only one layer of hidden units

- no connections between hidden units


이런 성질때문에 hidden layer에 있는 각 unit들은 서로 conditionally independent하다.

따라서, visible unit들과 hidden unit들의 joint configuration이라는 것을 다음과 같이 정의할 수 있다.



에너지가 높다는 것은 결국 joint configuration 확률이 낮다는 것을 의미한다. 열역학 제2법칙에 따라, 에너지는 낮은 방향으로 이동하기 때문에 확률은 점점 커지는 방향으로 움직이게 된다. 이 RBM의 학습또한 엔트로피 법칙에 의거하여 에너지가 낮은 방향으로 정상상태(equilibrium point)에 도달할 때까지 학습되면 된다. RBM의 에너지 함수는 아래와 같다. visible node의 값과 hidden node의 값, weight의 값의 곱의 sum 값을 에너지 함수로 표현한다. 




visible 노드들에 입력 데이터가 들어오면 hidden node들의 값은 아래와 같은 값으로 표현된다. visible node들도 물론 계산될때



hidden 노드도 그렇고, visible 노드도 그렇고.. 그 노드가 가지는 값은 확률로 표현이 되기때문에, 위 식은 각 node가 activation될 확률을 의미한다. weight와 node값, bias값의 summation의 sigmoid function을 통과한 값이 결국 node의 activation 확률값으로 보는 것이다.


이 RBM의 학습하는 방법에 대해서 설명은 여러 문서에도 나와있고, 아래 사이트를 읽어보면 쉽게 이해가 될 것이다.

http://imonad.com/rbm/restricted-boltzmann-machine/


가지고 있는 모든 Training sample에 대해서 다음의 과정을 수행하게 되는데,

(1) Propagate it from visible to hidden units, random initial weights

>> boltzmann machine에서 입력은 training sample에서 주어지는 값이고, weights는 랜덤으로 초기화하여, 위에서 본 식처럼 hidden unit들이 activation될 확률을 계산할 수 있게된다. p(h|v).


(2) sample from the conditional P(h|v)

>> hidden node들의 확률값을 알았으니, 그 확률값을 기반으로 랜덤 샘플을 구한다. (positive phase)


(3) propagate the sample in the opposite direction using p(v|h)

>> RBM의 네트워크 구조가 symmetric하기 때문에 위에서 hidden layer로 propagation을 한번 하고 난뒤에, 네트워크를 뒤집어도 동일한 구조를 가진다. propagation을 반대방향으로(visible layer방향으로) 동일하게 한번더 계산한다. 이때의 출력을 confabulation, reconstruction이라고 하여, 원래 입력 데이터가 한번 확률적으로 복구(reconstruction)된 것이라 본다. (negative phase)


(4) update the hidden units once more using the confabulation

>>이제 다시 hidden nodes값을 업데이트하게된다.


위의 과정을 반복하여 학습을 하게 된다. 언제까지? 원하는 epoch만큼 또는 error가 특정 threshold값을 만족할 때까지.. RBM학습과 관련하여 자료를 읽다보면 'Contrastive Divergence'라고 나오는데, RBM에서는 아래 수식에서 표현된 것처럼 <vh>로 표현하고, 의미는 i번째 visible node와 j번째 hidden node의 product의 expectation값이라는 말이다. 아래식에서 처럼 업데이트되는 weight라는 것은 original data에 대한 CD와 reconstruction된 CD 사이의 에러에 learning rate를 곱한값을 기존 weight값에 합해져서 업데이트되는 것이다.




<python example>

pyRBM.py


참고로 2010년 Hinton의 'A Practical guide to training restricted boltzmann machine'을 참고. 

guideTR.pdf



3. Deep Belief Network

DBN은 RBM을 여러층으로 쌓은것이다. Higher level들의 각 node들이 입력 데이터의 abstraction된 값으로 표상된다라고 한다.





위에서 보는 것처럼 RBM이 여러층으로 쌓여있는 형태이다. 하단의 directed belief nets라고 되어있어서 RBM과 다른것이 아닌가 하지만, 학습하는 중에는 RBM학습 방법과 동일하다. 하지만 학습이 끝난후에는 그림처럼 direction이 있다. 이것은 fine tuning을 할때 단순하게는 error back propagation을 사용하는데 그때에만 다시 weight를 다시 업데이트 해주기 위해서 인것.


학습방법중 greedy layer-wise unsupervised training방법에 대해서 설명을 하자면, 이 학습 방법은 크게 두 부분으로 나뉜다. 첫번째는 unsupervised pretraining이고 두번째는 supervised fine-tuning이다. 첫번째의 pretraining방법의 역할은 네트워크상의 weights의 initial value를 결정하기 위함인데, 결국 입력데이터의 log-likelihood의 lower-bound를 최대화 하기위함인것이다. supervised fine-tuning은 multi-layer perceptron에서 많이 사용하는 error backpropagation을 사용한다. 이 방법으로 error를 minimize하는 방향으로 weights를 튜닝해 나가는 방식이다.


좀더 자세히 설명을 하자면, 총 학습은 4 step으로 나눠서 설명할 수 있을것 같다.


(1) First step

RBM을 하나 세우고 학습.



(2) Second step

위에서 학습한 W1 weights를 고정시킨채로 RBM을 하나 더 올려서 학습. 두번째 RBM을 학습하기위한 입력은 Q(h1|v)에서 샘플된 h1이 된다. h1에 있는 노드의 값이라는것이 RBM에서 설명하였던 P(h=1|v)의 확률이지 어떤 대표될 수 있는 값이 아니기때문에 샘플되어 입력으로 들어가는 것. 이렇게 윗츠의 W2도 학습.




(3) Third step

이렇게 계속 layer를 올리면서 동일한 방법으로 학습한다.


(4) Fourth step : discriminative fine-tuning

마지막이 위에서 학습하여 결정된 weights이 neural network의 초기값이 된다. 여기에 error back propagation 알고리즘으로 마지막 튜닝을 하는것이 fine-tuning이라는 과정인것이다. 아래그림이 3 hidden RBM layer를 가지는 DBN모델인데, 하나씩 RBM을 학습을 하고 난뒤에 마지막에 fine-tuning을 하는 과정을 나타내고 있다. 이렇게 학습하는 방법을 greedy layer-wise training이라고 한다.