Overfitting과 Dropout

Layer가 많아질 때 발생하는 대표적인 문제점은 overfitting입니다. 왼쪽 그림처럼 어느정도의 오차도 허용해야 하는데, 오른쪽 그림처럼 선을 지나치게 구부려서 잘 분류가 되는 것처럼 보일 때 이를 overfitting 이라고 합니다.

위의 x축은 weight(layer), y축은 error를 의미하는 그래프를 살펴보면 아래의 파란선은 training set에 대해 발생하는 오차(error)를 나타내고 주황선은 test set에 대해 발생하는 오차를 나타냅니다.

이 그래프에서 얻을 수 있는 정보는 overfitting된 모델은 layer의 갯수가 어느 정도일 때까지는 잘 동작하지만, 그 선을 넘어가는 순간부터는 오히려 오차가 증가하는 모습을 보입니다. training set에서는 99%의 예측을 하지만(맨 위의 오른쪽 그림과 같이), test set에서는 85% 정도의 빈약한 모습을 보여주고 있습니다.

이러한 Overfitting은 3가지 방법으로 방지할 수 있습니다.

  1. More training data!
    training data를 많이 모으는 것입니다. 데이터가 많으면 training set, validation set, test set으로 나누어 진행할 수 있으며, 영역별 데이터의 크기도 커지기 때문에 Overfitting 확률이 낮아지비니다. 달리 생각하면 overfitting을 판단하기가 쉬워지기 때문에 정확한 모델을 만들 수 있습니다.
  2. Reduce the number of features
    feature의 갯수를 줄이는 것입니다. 서로 비중이 다른 feature가 섞여서 weight에 대해 경합을 하면 오히려 좋지 않은 결과가 나왔었습니다. 그래서 feature의 갯수를 줄이는 것이 중요한데, 사실 이 부분은  dropout을 통해 feature를 스스로 줄일 수 있는 방법이 있기 때문에 deep learning에서는 크게 중요하지 않습니다.
  3. Regularization
    weight가 너무 큰 값을 갖지 못하도록 하는 방법입니다.

Dropout은 사전적 의미로 탈락, 낙오라는 의미를 가지고 있습니다. 전체 weight을 계산에 참여시키는 것이 아니라 아래 그림(b)와 같이 layer에 포함된 weight 중에서 일부만 참여시키는 것입니다.

어떻게 이게 좋은 생각일 수 있을까요?

한국 속담 중 “사공이 많으면 배가 산으로 간다” 라는 말 처럼 충분할 만큼의 전문가만 선출해서 반복적으로 결과를 낸다면, 오히려 균형 잡힌 훌륭한 결과가 나올 수 있습니다.

각각의 뉴런이 각각의 전문가를 나타낸다고 하면 학습을 할 때 몇몇 전문가는 쉬고 다른 몇명의 전문가로 학습을 하는 것입니다. 어떤 뉴런이 귀가 있는지, 꼬리가 있는지, 털이 많은지를 판단하는 전문가라면 몇명을 쉬게하고 나머지를 이용해서 고양이인지 학습하고 마지막에 모두를 이용해서 예측을 하는 것입니다.

손글씨데이터(MNIST): 필기체 숫자 인식용 표준 데이터, 28×28 gray scale image

1.60% ->0.79%
구글 스트릿뷰에 나타난 집주소 사진(SVHN): 구글의 Street View에 찍힌 집 주소, 28×28 color image

3.95% -> 2.55%

https://catalog.ldc.upenn.edu/ldc93s1

음성데이터(TIMIT): 잡음이 없는 상태에서 음성 인식을 위한 표준 데이터, 120 dimension, 21 frames

23.4% -> 21.8%

뉴스 분류(로이터): 로이터의 뉴스기사를 기존의 51개 카테고리에 자동 분류

31.05% -> 29.62%

답글 남기기