본문 바로가기
  • 기술을 이야기하지만 사람을 생각합니다.
20. 인공지능과 딥러닝

[딥러닝개념] 딥러닝 효과적으로 학습하기(1) (ft. regularization)

by WE DONE IT. 2019. 1. 13.

이 글은 최성준 박사님의 <논문으로 짚어보는 딥러닝의 맥> 강의 중 'Overfitting을 막는 regularization' 강의와 여러 자료들을 모아 정리했습니다. 잘못된 부분이 있다면 알려주세요!




Overfitting을 막는 Regularization


딥러닝을 실제로 적용하는 데 초점을 둔다면 이번에 소개하는 기법들이 매우 중요하다!
이 글에서는 오버피팅이 발생하는 이유와 이를 해결할 수 있는 기법인 정규화(regularization)에 대해 설명한다.

Regularization이란?

정규화(regularization)이란 오버피팅(overfitting)을 피하는 게 목적이다!
오버피팅이란 학습 데이터를 너무 믿는 나머지, 테스트 데이터를 맞추지 못하는 문제이다.
오버피팅이 발생한다는 건 간접적으로 밖에 알 수 없다.

Overfitting(과적합)이란?


underfitting, overfitting[그림] Underfitting과 Overfitting



오버피팅은 학습 데이터를 지나치게 학습하여, 학습 데이터는 잘 맞추지만 실제로 모델이 맞추어야 할 검증 데이터는 에러가 많은 경우를 의미한다. 따라서, 모델에 에러가 많을 때(=데이터에 노이즈가 있을 때) 일반적으로 맞추고 싶었던 목적 함수가 복잡할수록 더 악화될 가능성이 있다. 예를 들어서, 10차 방정식을 학습셋으로 사용하는 게 2차 방정식을 사용하는 것보다 항상 나쁜 건 절대! 아니다. 

하지만 데이터에 노이즈가 많다면 10차 함수는 노이즈에 영향을 많이 받기 때문에 2차 함수를 사용하는 게 더 좋은 결과를 얻을 수 있다. (딥러닝에도 이 개념을 똑같이 적용할 수 있다.) 또한, 모델을 학습시킬 때 오차함수 E값을 최소화하다보면 오버피팅될 수 있으므로, 학습셋 결과에 비해 검증셋 결과가 좋지 않다면 오버피팅이 발생하여 일반화가 성능이 떨어진 것일 수 있다.

* Stochastic Noise (비결정적 노이즈)

오버피팅이 일어나는 대표적인 이유는 노이즈때문이며, 노이즈에는 관측 에러가 있다.

* Deterministic Noise (결정적 노이즈)

이 노이즈는 모델(objective function)의 복잡도(차원)가 커질 수록 증가하며, 이에 오버피팅이 발생할 확률이 높아진다.

이 유형의 노이즈는 모델링을 할 수 없다. 

* underfitting(과소적합)

학습셋이 적거나 학습이 제대로 되지 않아 n=1처럼 목적 함수와 학습 데이터 간의 오류가 많은 경우를 의미한다. 


[그림] Overfitting에 대한 개념 

(출처: https://hackernoon.com/memorizing-is-not-learning-6-tricks-to-prevent-overfitting-in-machine-learning-820b091dc42)

  • VC dimension: 모델의 복잡도 (예: 딥러닝에서 뉴런의 수)
  • Training error:in-sample error
  • Testing error: out-of-sample error 
  1. 데이터가 부족할 경우, data agumentation을 이용해서라도 늘리자! (예: 좌우 반전, 이미지 자르기, 밝기 조절)
    * Data agumentation: 데이터를 늘려 모델의 성능을 좋게하는 과정 (CNN의 대표 모델 중 하나인 VGG에서 많이 사용함)
  2. 적절한 능력(capacity)을 갖는 모델을 활용하자
  3. 서로 다른 앙상블(ensemble)을 활용하자

* 앙상블(ensemble)

데이터를 나누어 여러 모델을 만들어서 나온 결과 중 가장 많이 나온 결과를 선택함 (=bagging)

예를 들어 10,000개 데이터 중 8,000개씩 다섯 개의 모델을 만들고 가장 많이 나온 결과를 선택하는 것을 뜻하며, 대회에서 우승했던 모델들 모두 앙상블을 이용했다.


Limiting the Capacity

1. Architecture

네트워크의 수(hidden layers, units per layer)를 줄이는 것

추가) 딥러닝에서 은닉층(hidden layer) 수를 늘리는 것만으로는 좋은 성능을 내기 어렵다. 모델이 깊어질 수록 분류할 수 있는 패턴이 많아지지만, 경사 소실 문제(vanishing gradient problem), 오버피팅(overfitting) 등의 문제가 발생하기 때문에 좋은 결과가 나오지 않을 수 있다.


* 경사 소실 문제(vanishing gradient problem)

: 딥러닝 모델을 학습할 때 최적해를 구하고 오차함수의 값을 줄이기 위해 파라미터의 경사를 구하는 데, 이 변수의 경사가 '0'이 되어버리는 문제

2. Early Stopping (조기 종료)

Epoch 수(학습 횟수)가 클수록 학습셋에 대한 오차는 줄어들지만 에폭 수가 늘어날 수록 오차가 증가하며 오버피팅이 발생할 수 있다. 따라서, 이전 에폭과 비교해서 오차가 증가하면 오버피팅이 발생하기 전에 학습을 멈추는 것을 'early stopping'이라고 한다.

3. Weight-decay

파라미터(weight) 자체를 너무 커지지 않게 패널티(L1, L2)를 추가하는 것

4. Dropping Out (드롭 아웃)

Dropout은 오버피팅 문제를 해결하고자, 일반화(generalization) 성능을 향상시키기 위한 방법이다.


학습할 때 뉴런의 일부를 네트워크 상에 존재하지 않는 것처럼 랜덤으로 '0'으로 만든다(= 비활성화). 드롭아웃의 확률은 일반적으로 p=0.5를 사용하며, 학습할 때만 드롭아웃을 하며 테스트할 때는 모든 뉴런을 사용한다.

Q. 드롭아웃을 하면 왜 일반화 성능이 향상될까?

하나의 모델로 학습하면 오버피팅이 발생할 수 있지만, 드롭아웃을 통해 앙상블 학습(ensemble learning)처럼 마치 여러 모델을 학습시킨 것과 같은 효과를 주어 오버피팅 문제를 해결할 수 있다. (드롭아웃은 딥러닝계의 '집단지성'으로도 볼 수 있다.)

5. DropConnect

드롭아웃할 때 노드를 끄는 것처럼 노드 간의 웨이트(weight)를 끄는 것

6. Batch Normalization(배치 정규화)

Batch Normalization은 각 미니배치별로 사전 정규화 처리를 수행하는 기법이다. 데이터 셋 전체를 정규화하는 것보다 학습에 사용하는 미니배치별로 정규화하기 때문에 학습하는 과정 전체에서 효과가 나타난다. 

미니배치에 있는 값에서 평균을 빼고 variance로 나눠준다. (정말 중요하며 웬만하면 사용하는 게 좋다. 모든 논문에서 사용한다!)


데이터 전처리보다 배치 정규화가 학습 과정 전체에 효과적인 이유를 <정석으로 배우는 딥러닝> 책에서는 아래와 같이 설명하였다.

데이터의 전처리로 데이터 셋을 정규화(백색화)하고 웨이트의 초깃값을 정리함으로써 학습이 잘 진행되기는 하지만, 학습시킬 때는 네트워크 내부에서 분산이 편중돼버리므로 이렇게 정리한 효과가 한정적입니다.

이와 달리, 배치 정규화는 학습에 사용하는 각 미니배치별로 정규화하므로 학습 과정 전체에서 효과가 발휘됩니다.


Batch Normalization 의 장점

  1. Increase learning rate
    일반적으로는 러닝 레이트가 크면 발산하지만, BN은 데이터를 정규화 시키기 때문에 커도 괜찮다.
  2. Remove Dropout
  3. Reduce L2 weight decay
  4. Accelerate learning rate decay
  5. Remove Local Response Normalization

결론

오버피팅은 항상 발생한다! 어떤 문제를 풀던 발생하기 때문에 정규화를 항상 고려해야 한다.

    1. 데이터를 늘린다.
    2. 샘플을 조금씩 늘려가면서 레이어를 늘린다 (예: 64 -> 128.. 512-> 1024...)
      데이터 수가 적을 땐 더욱 중요하다.
    3. Data augmentation을 잘 해야한다!
    4. 이 분야는 아트의 영역(?)이다. 감이 중요하기 때문에 문제를 풀어본 자만이 잘 알 수 있다...(a.k.a 노하우)




다음 글<[딥러닝개념] 딥러닝 효과적으로 학습하기(2) (ft. regularization)>에서는 Ian Goodfellow의 Deep Learning 책에서 Regularization 챕터에서 나온 기법들에 대해서 소개합니다.


댓글