I2DL(Introduction to Deep Learning): Overfitting 개념 및 방지 기법 소개
이번주는 뮌헨공대의 유명 수업 I2DL의 시험주간을 맞아 I2DL에서 가장 중요하게 다룬 주제 중 하나인 Overfitting에 대해 공부한 내용으로 WIL을 작성해보았습니다.
1. Overfitting이란 무엇인가?
Overfitting이란, 신경망이 Train 데이터에만 지나치게 적응되어 제대로 대응하지 못하는 상태를 말합니다.
데이터는 크게 Train 데이터/Validation 데이터/Test 데이터로 나뉩니다.
Train 데이터에만 지나치게 적응하는 경우는 아래와 같은 상황에서 발생합니다.
case1) 매개변수가 많고, 표현력이 높은 모델(too deep한 경우 포함)
case2) Train 데이터가 적은 경우
위 그래프에서와 같이 Train 데이터에서는 loss가 0에 수렴하지만 Test 데이터에서 loss가 줄어들지 않거나 오히려 상승하는 경우를 Overfitting한 상황으로 해석할 수 있습니다.
Overfitting 문제를 해결하기 위해서, Overfitting을 방지하는 Regulization techinique이 필요합니다.
2. Overfitting 방지기법
(1) Data Augmentation
훈련에 사용되는 데이터가 적으면, 모델은 해당 데이터에 너무 의존하게 되어 다른 데이터에 일반화되지 않을 수 있어 overfitting이 발생합니다. 따라서, 기존의 training data를 변형하여 데이터의 양을 늘리는 Data Augmentation은 과적합을 막는 방법 중 하나라고 할 수 있습니다.
주의할 사항은, 변형한 데이터들이 원본 데이터와 같은 데이터 분포에 포함되어야 한다는 것입니다.
예를 들어, 숫자를 손글씨로 쓴 이미지 데이터셋인 MNIST에서 2, 4와 같이 대칭이 아닌 숫자를 horizontal flip하는 방식으로 data augmentation을 적용한다면, 올바르지 않은 data augmentation이 됩니다.
(2) Weight Decay
가중치 W에 regularization term을 더하여 가중치 업데이트 시 노이즈를 주는 방식으로 Overfitting 문제를 해결할 수도 있습니다. 특히, L2 방식을 선택한다면 해당 regularization term을 가중치의 제곱에 비례하는 값으로 정할 수 있습니다. 가중치에 일정 값을 더하여, 작은 가중치 값이 더 작은 값을 유지하도록 하여 Overfitting의 위험을 감소시키는 방법입니다.
주의할 사항은, 만약 regularization term이 너무 크다면 오히려 underfitting을 초래할 수 있다는 것입니다. 이 경우 train loss와 validation loss가 모두 높은 상태에서 줄지 않고 유지될 것이므로 주의해야합니다.
(3) Dropout
Dropout은 서로 연결된 연결망(layer)에서 0~1사이의 확률로 뉴런을 제거(drop)하는 기법입니다. Dropout을 통해 꺼지는 뉴런의 종류와 개수는 하이퍼파라미터인 drop-out rate에 따라 랜덤하게 결정됩니다. Drop-out rate는 일반적으로 0.5로 설정합니다.
모델이 다양한 구조의 서브네트워크들을 학습하면서, 모델이 일부 소수 노드에만 의존하는 것이 방지되므로, Overfitting 위험이 감소됩니다. 모든 노드가 역할 분담을 잘 하게 되어 일반화 성능이 향상되는 효과가 생기는 것입니다. 따라서 outlier의 범주에 해당하는 일부 뉴런이나 input의 약간의 변화에 의존하지 않게 됩니다.
주의할 사항은, test시에는 Drop-out rate를 활용해서 scale보정을 거친 모든 뉴런을 사용한다는 점입니다.
Drop-out rate를 활용한 scaling을 통해 학습 시, 적은 뉴런을 활용했을 때와 여러 뉴런을 활용했을 때 같은 scale을 갖도록 보정할 수 있습니다.
(4) Early Stopping
Early Stopping이란, 학습 과정에서 모델의 일반화 성능이 더 이상 개선되지 않을 때 학습을 조기에 종료시키는 방법입니다. 즉 Overfitting이 발생할 시점을 감지하여 적절한 시점에서 학습을 멈추는 것입니다. 이를 통해 모델이 훈련데이터에 Overfitting되는 것을 막고, 더 일반화된 모델을 얻을 수 있습니다.
학습 종료 시점은, 검증 데이터 세트에 대한 성능이 더 이상 개선되지 않거나 감소하기 시작하는 시점으로 파악할 수 있습니다.
(5) Increase Learning rate
Learning rate 학습률을 높이는 것 역시 Overfitting을 방지할 수 있는 하나의 방법이 됩니다. 더 큰 학습률을 취하여 학습의 한스텝 한스텝이 커진다면 더 많은 노이즈가 적용되는 것이므로 Overfitting 위험이 감소합니다.
여담.
저는 안타깝게도 Train data인 시험 족보에 too much overfitted 되는 바람에 Test data인 시험 문제를 받아보았을 때 Poor한 성능을 보이고 말았습니다... 다행인 것은 저 말고도 수많은 model(학생)들이 같은 실수를 저질렀다는 것이겠죠.
딥러닝 모델을 구현할 때 항상 Overfitting 문제를 염두에 두고 방지 기법을 적절히 사용할 수 있게 되면 좋겠습니다.