ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dropout
    Deep Learining/Deep Learning 기초지식 2016. 10. 3. 18:41

    Dropout




    Dropout은 딥러닝 학습에 있어서의 문제중 하나인 Overfitting을 해소하기 위한 방법이다. 요약하자면 hidden layer의 일부 유닛이 동작하지 않게 하여 overfitting 되는 것을 막는 방법이다. 


    1. Overfitting

    오버피팅이란 모델이 학습데이터(training data)에 대해서 지나치게 훈련되어 실험데이터(test data)에 대해서는 결과가 않좋은 경우이다. 

    Overfitting된 상황을 이해하기 쉽도록 다음 아래 그림을 보자.


    빨간색 점과 파란색 점을 분류하는 모델을 학습시켰다고 할 때, 학습이 잘 이루어진 경우 검은색 선과 같이 파란색 점과 빨간색 점을 나눈 경우 일 것이다. 그러나 학습데이터에 대해 지나치게 fitting이 일어났을 경우 녹색 선과같이 빨산색 점과 파란색 점이 나뉘어질 것이다. 이러한 오버피팅은 결과적으로 학습되지 않은 데이터에 대해서는 좋지 않은 분류를 하게 된다.


    1-1 Solution of Overfiiting

    오버피팅이 생기는 원인 중 하나는 데이터가 적기 때문에 일어난다. 데이터의 수가 한정되어 있으므로 보편적인 분류를 하지 못하고 훈련데이터에 너무 많은 영향을 받게 된다. 따라서 데이터의 수를 늘려주어서 이러한 오버피팅을 막을 수 있다. 그러나 훈련데이터의 수가 제한된 상황이라면 데이터를 늘려주기가 어려울 수 있다.


    다음으로 Regularization을 사용하는 것이다. regularization은 모델이 학습데이터에 지나치게 의존하지 않도록 페널티를 부과하는 것이다. Feed Forward Neural Network를 공부해봤다면 알 수 있듯이 L1, L2 regularization 등을 사용할 수 있다.

    Dropout 또한 이러한 regularization 중의 하나이다.


    2. Dropout

    Dropout이란 네트워크의 유닛의 일부만 동작하고 일부는 동작하지 않도록 하는 방법이다. 아래 그림을 보면 쉽게 이해할 수 있다.



    Model Combination을 하게 되면 학습의 성능을 개선할 수 가 있다. 서로 다른 학습데이터를 통해 모델을 학습시키거나 모델이 서로 다른 구조를 가지면 학습성능을 개선할 수 있다. 그러나 하나의 네트워크를 훈련시키는 것도 어려운데 여러개의 네트워크를 훈련시키는 것은 매우 어려운일이다. 더욱이 여러개의 네트워크를 훈련시켰더라도 사용시에 연산 시간이 소비되어 속도가 느려지는 문제가 생긴다.


     Dropout은 이 두 문제를 해결하기위해 개발되었다. 여러개의 모델을 만들지 않고 모델결합이 여러 형태를 가지게 하는 것이다. 네트워크를 학습하는 동안 랜덤하게 일부뉴런이 동작하는 것을 생략해버리면 뉴런의 조합만큼 지수함수적으로 다양한 모델을 학습시키는 것과 같다. n개의 유닛이 있다고 가정한다면 2^n개의 모델이 생성될 것이다.


    Dropout의 사용방법은 아래 그림처럼 일부 뉴런이 동작하지 않도록 하는 것이다. 각 뉴런이 존재할 확률 p를 가중치 w와 곱해주는 형태가 되어 존재할 확률이 0인 경우 동작하지 않게 된다. 


    이것을 수식으로 표현하면 다음과 같다


    맨 위 수식은 순거대로 Dropout의 베르누이 확률값이다. 이 확률값에 입력데이터를 곱함으로 일부 값들은 0이되어 동작하지 않을 것이다. 다음으로 가중치를 곱하고 bias를 더하고 최종적으로 f라는 activation function을 사용하여 뉴런의 output을 출력한다. 이것을 그림으로 표현하면 아래 그림과 같을 것이다.


    2-1 Dropout Nets의 학습

    Dropout Nets의 학습은 일반적인 Neural Nets의 학습과 같이 SGD(stochastic gradient descent)를 사용하여 학습을 할 수 있다. 단지 차이점은 mini-batch를 사용하는 각 학습 케이스에 대해서 unit들을 dropout하여 나타난 네트워를 학습킨다는 것이다. 논문에서는 이것을 thinned network라고 표현하고 있다. (일부 유닛이 작동하지 않아 얇아 진다고 표현한 것 같습니다.) 따라서 SGD를 이용해 backpropagation을 일반 네트워크와 동일하게 수행다. 이러한 Dropout은 좋은 regulation을 보여주는데 max-norm regularization과 large decaying learning rates, high momentum을 같이 사용하다면 더 dropout만을 사용했을 때 보다 더 좋은 성능을 보여준다고 한다.

    *(Max-norm regularization은 hidden layer로 들어오는 weight값이 특정 상수 c보다 작게(||w||₂ ≤ c) 하는 방법이다.)


    Dropout은 feed-forward network에 한정적으로 적용되지 않고 RBM이나 autoencoder, DBN 같은 모델에서도 좋은 성능을 보여준다. 이 모델들의 학습은 pretraining을 하고 finetuning을 한다. Dropout은 이렇게 학습된 모델에도 적용이 가능한데, dropout을 사용해 pretraining한 모델이 그렇지 않은 모델보다 더 좋은 성능을 보여준다.


    2-2 Dropout 확률p값 

    Dropout의 확률 p 즉 unit이 존재할 확률에 따른 test error를 비교해 본다면 어떠한 값을 사용하면 좋을지 알 수 있다.

    위 그림은 p값의 변화에 따른 test error와 training error를 나타낸 것이다. p값이 0.3 정도부터 0으로 낮아질 수록 error가 증가하는데 이것은 drop을 너무 많이 시키기 때문에 이러한 결과가 발생한 것이며 0.9에서 1.0으로 값이 커질때 또 error가 높아지는데 이러한 이유는 p값이 크면 Dropout을 한것과 차이가 없어진다. 1.0은 Dropout을 안한 것과 같은 결과이다. 결과적으로 Overfitting일 발생하였다고 볼 수 있다. 그 이류로 training error은 변화가 없는 반면, test error는 증가한 것을 볼 수 있다. 따라서 Dropout을 사용할 때 확률 p값을 0.5의 값을 사용하면 좋은 결과를 얻을 수 있다.



    3. Dropconnect

    Dropout이 발표된 이후, Dropout을 사용할 경우 성능을 향상시킬 수 있다는 것이 나타났다. 이러한 Dropout을 변형한 방식중 하나로 Dropout이 unit을 drop하는 것이라면 Dropconnect은 다른 레이어간의 유닛 사이의 연결을 Drop하는 방식이다. 이렇게 두 유닛 간의 연결을 drop함으로써 한 모델에서 여러 모델을 훈련시키는 것과 같은 결과를 얻을 수 있다.


    Dropconnect가 발표된 논문(Dropout은 2012년)은 2013년 뉴욕대의 Yann LeCun, Rob Fergus, Matthew Zeiler, Li Wan, Sixin Zhang이 작성한 "Regularization of Neural Networks using DropConnect" 이다. 특히 Deep Learning 분야의 대가중 한명인 Yann Lecun교수가 참여한 것을 본다면 Dropout이 딥러닝 분야에 큰 영햐을 끼친 것을 알 수 있다. 


    Dropconnect의 수식은 다음과 같다:

    각 알파벳이 가리키는 것은 먼저 a는 activation function, W는 Weight, v는 입력데이터이다. M은 베르누이 확률값이다. 방식은 Dropout과 매우 유사하다. Dropout이 M값을 먼저 v에 곱한 후 activation function에 입력한 것이라면 Dropconnect은 두 레이어 사이의 연결 값인 W값에 M값을 곱해줌으로서 둘 사이의 연결을 drop 시키는 방식이다. 


    4. Dropout과 Dropconnect의 성능비교


    위 그림은 Dropconnect 논문의 결과에 있는 결과표이다. Dropconnect이 히든 유닛의 갯수에 관계없이 항상 Dropout보다 좋은 성능을 보여준다는 것을 알 수 있으며 존재확률값(p)의 모든 구간에서도 더 좋은 성능을 보여주고 있다. 


    5. Residual Network

    최근(2016)에 나온 Overfitting을 줄이는 방식이다. 발표된 논문은 Deep Residual Learning for Image Recognition로 Kaiming He 외 3인이며 Mcrosoft Research에서 발표한 논문이다. Dropout의 Dropconnect과 다른 변형은 아니지만 비슷한 아이디어로 Network를 구성한 것이다. Dropout과 같은 regularization 방법은 아니고 CNN같은 Network이다.  Residual Network의 아이디어는 하나의 모델을 여러모델을 훈련 시킨 것과 같은 효과를 얻는 Dropout과 비슷하다. 물론 이 유닛을 CNN에도 적용 시킬 수 있을 것이다. Residual Network는 일부는 레이어를 건너 뛰는 방식을 취하고 일부는 그대로 넘어와서 두 값을 합치는 방식을 취한다. 




    수식은 다음과 같다:

    F(x, {W})는 레이어를 통과해서 온 결과이며 x는 레이어를 거치지 않은 값이다. 이때 x와 F이 차원이 동일해야 하는데 그렇지 않을 경우 다음과 같이 linear projection Ws를 x값에 곱해주어 차원을 맞출 수 있다.


    5-1 Residual Network의 영향

    Residual Network는 기존의 네트워크의 layer 수를 대폭 늘릴 수 있게 되었다. CNN의 대표적인 모델인 Alex Net의 경우 8개의 layer를 사용했으며 Google Net은 22개의 layer를 사용하였다. 많은 layer를 사용하지 않았던 이유는 layer가 많다고 더 좋은 성능을 낸 것이 아니기 때문에 비교적 적은 layer를 사용해왔다. 그러나 Residual Network를 사용하면 152개의 layer의 사용이 가능하다. 즉 layer를 늘렸을 때 성능이 더 좋아 진다는 것을 결과를 볼 수 있다.






    6. 결론

    2012년 일부 unit을 drop하겠다는 Dropout을 시작으로 Overfitting을 줄이기 위한 방식이 지속적으로 개발되고 있는 상황이다. 이러한 것을 볼 때 Deeplearning에서 오버피팅 문제를 줄이는 것이 중요한 문제중의 하나라는 것을 알 수 있다. Residual network가 CNN을 대체할지는 아직 모르는 일이며 좀더 지켜봐야할 것 같다. 하지만 코드를 open source로 git에 올려두었기 때문에 관심있는 사람이라면 쉽게 찾아 볼 수 있다.



    ※. 참고자료

    [1] Dropout: A Simple Way to Prevent Neural Networks from Overfitting, 2012

    [2] http://laonple.blog.me/220818841217 

    [3] Regularization of Neural Networks using DropConnect, 2013

    [4] Deep Residual Learning for Image Recognition, 2016







    'Deep Learining > Deep Learning 기초지식' 카테고리의 다른 글

    SVD(Singular Value Decomposittion)  (0) 2016.10.13
    Precision / Recall  (0) 2016.10.13
    generating 모델에 대하여  (0) 2015.11.27
Designed by Tistory.