본문 바로가기
데이터 분석

[머신러닝] 과적합(Overfitting) 해소 방법 - 모델 단순화

by 데이널 2023. 9. 7.

이번 포스팅에서는 과적합을 해소시키는 방법을 좀 더 상세히 알아보도록 하겠습니다. 먼저 더 많은 데이터를 확보하는 방법과 모델의 복잡도를 제어하는 방법에 대해 다루겠습니다.

 

 

데이터 증대(Augmentation)

새로운 데이터를 더 구하는 방법이 있겠지만 현실에서는 만만치 않습니다. 그래서 원본 데이터를 이용하여 데이터를 확장하는 방법을 사용합니다. 이런 방법을 데이터 증대라고 하고 이미지 분류(CNN)에서 특히 많이 사용하며 효과도 좋습니다. 만약 동물 사진을 분류하는 모델이라고 한다면, 원래 이미지 뿐만 아니라 그 사진들을 회전시키거나 약간 찌그러뜨린 수정본들도 함께 학습 시키게 되면 실제 많은 데이터를 확보하는 것 같은 효과가 나타납니다. 이 방법은 훈련 데이터에서만 사용하는 것이며, 테스트 데이터에서는 사용하면 안됩니다. 

모델 성능을 향상시키는 좋은 방법은 무엇이 있을까요? 모델의 데이터의 자연적인 구조로 인한 결과이므로 가장 중요한 것은 훌륭한 데이터 확보하고 데이터의 대한 이해를 하는 것이 중요합니다. 데이터 큐레이션, 특성 공학 등을 이용하여 더 좋고, 더 많은 데이터 훈련하는 것이 포인트 입니다.

 

데이터 양에 대한 영향도는 Machine Learning > Small neural network > Medium neural network > Large neural network 순서 입니다. 더 복잡한 계산을 하는 깊은 층을 가진 딥러닝(deep learning) 모델일 수록 영향이 크다는 것을 알 수 있습니다. 질 좋은 데이터를 더 확보하기 불가능하면 차선책은 모델이 저장할 있는 정보량을 조정 하는 방법이 있습니다. 이것이 모델 단순화 입니다. 또 모델 곡선의 매크러움을 제약하는 방법, 즉 정규화라고 하기도 합니다. 

 

데이터양에 따른 모델 성능
데이터양에 따른 모델 성능


모델 단순화(Simplifying the model) 

데이터를 더 확보하는 방법 외에 모델을 단순화 하는 방법이 있습니다. 보통 하이퍼파라미터를 이용하여 모델을 단순화 할 수 있습니다. 첫번째 하이퍼파라미터를 더 큰 값으로 지정할수록 복잡도가 낮은 평평한 모델이 됩니다. 두번째 머신러닝에서 Feature 수 줄이기는 방법이 있습니다. 이는 주요한 Feature만 남기고 모두 제거하는 것입니다. Feature Selection이라고도 합니다. 최종적인 Feature Combinations(피쳐 조합)을 줄이게 됩니다.

 

만약, 54% 긍정, 46% 부정 feature의 경우, 차이는 완전 우연일 수 있습니다. 모델 분류 측면에서 보면 상관도가 0.54면 높게 나오기 때문에 상관도 측면에서는 활용 가능성이 높습니다. 이런 것이 과대적합의 보편적인 원인 중 하나 입니다. 


딥러닝 측면에서 보면 첫번째 출력층 직전 은닉층의 노드 수 줄이는 방법이 있습니다. 출력층 직전 은닉층 노드는 설명변수 이므로 의미 있는 설명변수들을 남기고 줄이는 것입니다. 이렇게 되면 모델이 단순해지는 효과가 있습니다. 두번째는 가중치 감소하는 방법입니다. 이 부분은 L1, L2 정규화 이용하는 방법으로 다음 포스팅에서 더 자세히 이야기 하도록 하겠습니다. 

 

조기 중단(Early stopping)

모델을 과적합이 되기 전에 중단하는 방법입니다. 이것은 학습 횟수를 낮추는 방법으로 Python 패키지에 따라 기능으로 제공하기도 합니다. 여기서 학습 횟수를 줄이는 것이지 학습률(Learning rate)을 조정하는 것은 아닙니다. 혼동하지 않기 바랍니다. 가끔 시험 문제에서 과접합을 줄이는 방법 중 학습률을 조정하는 것이 예시로 나와 헷갈리게 하기도 합니다.

 

조기 종료는 정해진 학습 횟수(epochs) 전에 검증 데이터셋(dataset)의 손실이 감소하지 않고, 증가하기 시작한다면(혹은 정체한다면) 학습을 중단시키는 기법입니다. epoch가 끝날때 마다 모델을 저장하고 최선의 epoch를 찾은 후 저장된 모델을 재사용하는 방법을 사용합니다. 여기서 epoch라는 단어가 나오는데, '에포크'라고 읽고 전체 데이터셋을 학습한 횟수를 의미합니다. 예를 들어, 전체 Dataset이 3000건 있다고 가정할 때 3000건을 3번 반복 학습하면 epoch 3이 됩니다. 더 자세한 개념은 딥러닝 학습방법을 참고하시기 바랍니다. 

드롭아웃(Drop-out)

드롭아웃은 딥러닝에서 사용하는 방법으로 미니배치 수행시 각 layer마다 확률을 넣어 Neuron의 활성화 멈추게 하는 방법입니다. 매번 미니배치마다 다른 아키텍쳐(Network)를 학습하게 만드는 방법이라고 할 수 있습니다. 이런 방식으로 데이터 독립적으로 만들 수 있습니다. 어느 특정 Neuron이 큰 가중치 값을 가지지 않게 해서 규제 효과가 있습니다. 미니배치마다 달라 여러가지 모델(다양성) 학습하는 것 같아 앙상블 모델 효과도 있습니다. 더 자세한 내용은 드롭아웃 개념 내용을 참고하시기 바랍니다. 

 

일부 뉴런을 활성화하지 않기 때문에 학습 속도는 더 좋아진다는 장점이 있습니다. 훈련 모델에서는 dropout=0.5로 하면 50% 비율로 비활성화 된다면 실제 추론 모델에서는 뉴런을 삭제하지 않습니다. 이 것은 추론시 원래 5명이 일하던 작업을 10명이 일하는 것과 같은 효과를 냅니다. 이 외에도 딥러닝에서는 '배치 정규화'는 방법도 사용합니다. 학습 과정에서 각 배치 단위 별로 데이터가 다양한 분포를 가지더라도 각 배치별로 평균과 분산을 이용해 정규화합니다.

 

드롭아웃(dropout)
드롭아웃(dropout)