새소식

Study/Today_I_Learned

[딥러닝] 핵심개념(3) Overfitting 피하기

  • -
728x90

3편까지 쓰게 될 줄 몰랐던 딥러닝 핵심개념 수업 정리입니다! 
딥러닝의 최대 적수인 overfitting을 피하는 방법에 대해 알아보겠습니다.   

1) Dropout 

 신경망 training을 진행하면서, dropout은 매 batch마다 레이어 단위에서 일정 비율만큼의 신경망 Neuron을 꺼뜨리는 방식입니다. 

출처:t.ly/SJeg

 그림의 맨 아래는 input layer, 맨 위는 output 입니다. 오른쪽의 dropout을 적용한 신경망을 나타낸 그림의 첫 번째와 세 번째 레이어에서는 40% 의 dropout을 적용하였고, 두 번째 레이어에서는 60%가 적용되었습니다.  
주의할 점은 test 및 inference 단계에서는 dropout 을 적용하지 않고, 전체 neuron이 살아있는 채로 진행해야 한다는 점입니다. 

아래 코드와 같이 구현할 수 있습니다. (출처: tensorflow docu.)

tf.keras.layers.Dropout(
    rate, noise_shape=None, seed=None, **kwargs
)

 

 

랜덤하게 neuron을 꺼뜨림으로써 학습을 방해하기 때문에, 동일한 데이터에 대해 다른 모델을 학습시키는 것과 비슷한 효과를 얻을 수 있는 방법입니다. 일종의 Model ensemble 효과를 얻어, overfitting을 방지하고 모델의 성능을 높일 수 있습니다. 
 Dropout의 또다른 장점은 가중치 값이 큰 특정 neuron의 영향력이 커져 다른 neuron들의 학습 속도에 문제를 발생시키는 Co-adptation을 피할 수 있다는 것입니다. Co-adaptation 이란 두개의 노드가 한번 비슷한 연결 강도를 가지게 되면, 그 두 노드는 비슷한 방식으로 업데이트 되면서 마치 하나의 노드처럼 작동하는 것을 말합니다. 이렇게 구성된 신경망은 메모리를 낭비하게 되어 바람직하지 않는데, dropout을 통해 랜덤하게 neuron을 작동하지 않게 하면서 방지할 수 있습니다. 

2) Batch Normalization

 데이터 내 column들의 scale 차이에 모델이 너무 민감해지는 것을 막아주기 위해 data에 normalization (e.g Min-max, standardization) 을 적용해주는 방법입니다. 머신러닝에서는 이렇게 scale이 다른 데이터를 SVM 모델에 적용시켜주면 overfitting이 심해지기도 하고, 딥러닝에서는 학습 속도가 느려진다고 합니다. 게다가 시각화를 시킬 경우 데이터 자릿수가 큰 column으로 인해 비교적 작은 scale의 column은 한 눈에 보기가 어렵다는 단점도 있습니다. 

출처: t.ly/An0G

 Batch normalization이 왜 모델의 성능을 높여주는지 위 그림으로 확인해 볼 수 있습니다. $x$, $y$축은 각 column의 scale이고, 동심(타)원들은 cost function입니다. Normarlization 전에는 가중치의 업데이트가 두 column의 다른 scale로 인해 다소 산발적으로 진행되는 것을 볼 수 있는 반면, 정규화를 시켜준 오른쪽 그림에서는 최소 cost 지점을 향해 최적의 경로로 업데이트 되고 있는 것을 볼 수 있습니다. 
 이런 normarlization을 input data 뿐만 아니라, hidden layer에도 적용시켜 신경망의 각 레이어마다 dat를 정규화 시켜주는 것을 batch normalization이라고 합니다. Activation function 이전에 적용시키는 것이 더 좋은지, 이후에 적용시키는 것이 더 좋은지는 아직 실험이 계속 진행되고 있다고 합니다. 
 각 레이어에서 standardization을 통해 batch normalization을 진행하는 수식은 아래와 같습니다. 

original paper: https://arxiv.org/abs/1502.03167

 이과라면 고등학교 확률과 통계 시간에 봤기 때문에 구면인 식입니다. 먼저 mini batch의 평균과 표준편차를 구해 데이터들을 표준화시키고, scaling ($\gamma$) 과 shifting($\beta$) 을 적용시킵니다. 이는 sigmoid 같은 activation function에 평균이 0으로 normalized 된 데이터가 들어갈 경우 다시 선형성을 띠는 데이터로 변환되는 것을 막기 위함입니다. 이 때 $\gamma$와 $\beta$는 파라미터로, 모델이 적당한 값을 찾아줍니다. 

Batch normalization 의 장점

  • 학습 속도과 학습 결과가 개선됨
  • 가중치 초기값에 크게 의존하지 않음 (매 layer마다 정규화를 진행하므로)
  • overfitting 일부 억제 

하지만 batch size가 너무 작을 경우 평균과 분산이 각 iteration 마다 들쭉날쭉일 수도 있으므로, 그 대안을 위해서 Group normalization이라는 개념도 발표 되었다고 합니다. 관련해 국문으로 포스팅된 글도 있으니 나중에 이 논문을 이해할 때가 되면 다시 한 번 시도해보겠습니다. (지금은 모르겠다는 뜻)

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.