본문 바로가기
Study/DL

Dropout 과 Batch Normalization

by 까망우동 2023. 6. 29.
반응형

Index

     

    Regularization

    • Dropout 이전에 Regularization에 대해 잠깐 알아보면, Regularization 이라는 것은 특정 가중치가 급격히 커지는것을 막기 위한 규제를 의한다. (특정 weight가 너무 크다는것은 입력데이터에 너무 민감하고, 복잡한 모델일 가능성이 크기 때문에 과적합 경향이 그만큼 크다고 말할 수 있다)
    • 주로 Cost함수에 weight를 넣어서 penalty를 부여하는 방식을 사용한다. 대표적으로 사용하는 L1, L2 방식은 각각 가중치의 절대값, 제곱값을 Cost함수에 추가하는 방법이다 

    Dropout 

    • Dropout의 목적은 overfitting을 막기위함으로, 일종의 *Regularization(=가중치 규제) 기법이라고 할 수 있다. 
    • NN을 학습시키다 보면, 같은 layer의 서로다른 node 간에 간섭(co-adapting)이 생기게 된다. 각각의 뉴런들은 본인만의 속성을 가지고 학습되야 하는데 옆에 node가 실수(cost를 높이는)하면 그것을 수정하는 방향으로 학습하려고 함
    • 즉 Dropout은 각 node들이 고유한 성질을 갖게 하기위해 Batch 단위로 Random하게 hidden node를 drop시켜서 노드간에 상호작용을 끊어주는 방법론이다. 

    Dropout (training)

    • 하이퍼 파라미터는 drop확률 p 이며, 얼만큼의 확률로 각 layer의 노드를 drop할지를 의미한다. 
    • Batch단위로 실행되기 떄문에 각 batch는 서로다른 모양의 네트워크를 학습하게된다. 그렇기 때문에 Ensemble과 비슷한 개념으로도 볼 수 있다.  
    • Dropout은 train set에만 진행되고, test set 에서는 적용하지 않는다. 대신, train에서 작아진 가중치의 합 (일부 노드를 버렸기 때문)에 대한 보정을 하기위해 test할때는 가중치에 (1-p)를 곱해준다. 

    • Dropout 의 변형된 모델로는, Gaussian dropout 기법(node를 완전 drop하는 대신 평균이 1이되게 조정, 어떤건*1.2 어떤건 *0.7...) Monte Carlo Dropout기법(test set에서도 dropout을 함으로써 어려번 예측하여 평균을 예측값으로 사용)등이 있다. 

     

    Batch Normalization 

    - 목적

    • Batch normalization 의 목적은 Internal Covariate Shift (ICS)문제를 해결하기 위함이다. 
    • ICS란, 각 layer의 입력데이터 들의 분포가 mini batch에 따라 변동하는 것을 말한다.
    • 각각의 hidden layer는 이전 layer의 계산으로 부터 input데이터의 분포가 매번 바뀌기 때문에 그 바뀐 입력으로 부터 변경된 weight를 사용하면 안좋을 방향으로 amplification이 발생한다. 그리고 이러한 문제로, amplification을 막기위해 learning rate를 줄이거나, weight initialization을 소극적으로 하면 학습속도가 너무 느리게 될 것이다. 
    • 따라서 BN은 마치 Input data 에 정규화를 했던 것 처럼, 모든 layer의 노드에 들어온 입력값을 nomarlization 함으로써 Input 데이터의 분포의 양을 작게 만드는 것이다. 

    Internal Covariate Shift & Batch Normalization

    - 장점

    • BN을 사용하면  learning rate 을 높여서 사용할 수 있다. 즉, 학습 속도가 빨라진다. 
    • Weight Initialization에 덜 조심해도 된다. amplification을 어느정도 막아주기 때문
    • dropout의 목적과 유사하기 때문에 dropout을 생략할 수 있다. 
    • 정규화된 값에 γ를 곱하고 β를 더해주는 과정이 일종의 noise로 약간의 regularization효과가 있다 

     

    - 동작방식

    <Train>

    1. 각 node의 input(x)은 1개의 batch에 batch size (m)만큼 있다. m개의 input에 대한 평균과 분산을 구한다. 
    2. 앞선 평균/분산 값을 활용해 정규화 한다. (평균이 0, 분산이 1이 되도록)
    3. 정규화된 값을 γ만큼 곱하고 β만큼 더해서 y를 만들고, 이를 activation에 취하면 해당 노드의 최종 output이다           (이미 정규화된 값을 다시한번 γ,β 로 선형결합하는 이유는 그렇지 않다면 대부분값이 0에 분포하기 때문)                    * γ,β 는 노드의 개수만큼 있는 training을 통해 최적화 해야하는 paramter이다 (w,b와 같이..)  

    <Test>

        test set에서는 batch의 개념이 없기 때문에 학습단계에서 저장한 각 배치의 평균,분산값의 이동평균을 사용한다 

     

     

     

    반응형

    댓글