Machine Learning

How to Reduce Overfitting?

VL_HD 2020. 2. 22. 13:53

머신러닝, 딥러닝에 있어서 빈번하게 일어나는 문제는 overfitting과 underfitting일 것이다. 

overfitting이란, 알고리즘이 train set에서는 잘 작동하지만 새로운 데이터인 valid set, train set에서는 제대로 작동하지 않을때 이 알고리즘은 overfitting 되었다고 할 수 있다. 

underfitting이란, 알고리즘이 train set에서부터 학습이 제대로 되지 않았다고 생각할 수 있다. 이는 현재 딥러닝 모델에서는 거의 일어나지 않는다. 기본적으로 network의 layer의 수가 많고, feature들이 어느정도 학습이 될 수 있기 때문이다.  Network의 구조가 복잡해지고, deep 해질 수 록 Over fitting 현상이 많이 발생한다. 따라서 이번 포스트에서는 overfitting을 어떻게 줄일 수 있는지 알아 볼 것이다. 

참고로 본인은 pytorch를 이용한다. 

 

Overfitting을 막기위해서 어떤 방법들이 있는지 먼저 소개하겠다. 

  • Data Augmentation 
  • Reduce Network size
  • Weight Regularization 
  • Dropout

위와 같은 4가지를 대표적인 예로 들수 있겠다. 위 4가지 방법을 하나씩 살펴 보겠다. 

 

1. Data Augmentation 

Data augmentation에는 아주 많은 방법들이 있다. 이는 사용자가 원하는 augmentation 기법을 하나 혹은 그 이상을 써도 무방하다. Computer Vision과 관련된 문제에서는 Rotation, Crop, Flip과 같은 방법을 사용할 수 있다. 이는 이미지를 조금씩 변화해 데이터를 부풀리는 방식이다. 

 

Pytorch data augmentation

 위의 코드는 본인이 작성한 코드중 간단한 augmentation을 가져온 것이다. pytorch는 기본적인 data augmentation 관련 함수들을 제공한다 위의 코드를 간단히 분석하여 보자. 

 먼저 Resize이다. CIFAR data set과 같은 데이터는 크기가 32x32 이다. Network에 32x32 크기 그대로 input으로 넣어줘도 무방하지만, ImageNet과 같은 data와 함께 사용하기 위해 224 x 224로 resize를 해주었다. Resize 방법을 사용하는 것은 augmentation이라고 볼 수는 없지만, Network 내부의 parameter들을 input의 크기가 변화 할때마다 바꾸어 주는 것보다 input의 크기를 바꾸어 주는 것이 더 간단하게 학습 시킬 수 있는 방법이다. 

 두번째로는 Randomrotation이다. 이 함수는 input으로 들어갈 data를 함수 이름처럼 회전하는 역할을 한다. RandomHorizontalFlip은 대칭변환에 대한 augmentation 방법이다. 

 Transfroms.ToTensor() 함수는 pytorch에서 사용되는 tensor 자료형으로 input을 변환하는 코드이다. 

 

2. Reduce Network Size 

 다음으로는 network의 size를 줄이는 것이다. 네트워크가 더 커지고 복잡해 질 수록 overfitting이 더 자주 발생하게 된다. 이전의 포스트에서 설명한 것처럼 2개의 linear layer를 연달아 작업하는것은 1개의 linear layer를 사용하는 것과 같은 효과를 볼 수 도 있기 때문에 computational cost가 큰 linear layer를 많이 사용하는것은 지양하여야 한다. 

ResNet, VGG paper를 예로 들면 각각의 paper에는 다양한 layer의 개수가 존재한다. 강아지와 고양이 2개의 class로 구성된 train set이 있다고 생각하여 보자. 또한 train data가 많이 없다면 이를 ResNet 152 으로 학습 시 Overfitting이 일어날 가능성이 매우 높다. 이를 만약 overfitting이 일어나게 된다면, ResNet 50이나 그 보다 더 적은 개수의 layer를 가지고 있는 네트워크를 이용하여 학습하는 것을 추천한다. 

 

3.  Weight Regularization 

Overfitting을 방지하는 가장 근본적인 방법은 network의 size를 줄이는 것이긴 하나, 추가적으로 다른 종류의 방법이 있다. Weight가 너무 커지는 것을 방지하는 방법이다. Weight Regularization에는 대표적으로 2가지 방법이 있다. 

 

  • L1 Regularization

  • L2 Regularization 

Optimizer with weight decay

 

Pytorch에서는 optimizer의 weight decay 매개변수를 설정하여 L2 Regularization을 사용 할 수 있다. L1, L2 regularization은 이후의 포스트에서 다르도록 하겠다. 

 

4. Dropout

Dropout은 딥러닝에서 가장 일반적으로 사용되는 Weight Regularization 방법이다. Pytorch에서는 이를 layer 형태로 제공한다. 

 Drop out

 

위와 같이 nn.Dropout을 layer형태로 적용 가능하다. Dropout layer는 임계값을 설정 할 수 있는데, 0~1의 임계값 설정이 가능하다. 예를 들어 nn.Dropoout(0.2) 로 설정한다면, 바로 위 layer의 출력 값중 20% 를 랜덤으로 선정하여 선정된 출력에 0을 할당한다. 

 

 

 

'Machine Learning' 카테고리의 다른 글

Network Implementation Details  (0) 2020.02.22
Introduction of ML  (0) 2020.02.22