본문 바로가기

딥러닝/머신러닝(ML)

Machine Learning에서 Overfitting과 Underfitting은 뭘까..?

머신러닝이 하는 일은 크게 두 가지로 구분될 수 있습니다.

  1. 학습: 데이터로부터 모델을 학습시킨다.
  2. 추론: 학습된 모델로 새로운 데이터에 대하여 예측한다.

모델에는 학습과 추론이라는 두 가지 행동이 있습니다. 학습은 Train Data로부터 데이터의 패턴을 배우는 것으로 학습을 진행하면서 데이터에 대한 Loss를 줄이게 됩니다. 일반적으로 학습이 제대로 이루어 진다면 다음과 같은 Loss Graph가 그려집니다.

학습이 진행되면 Train data에 대한 Loss가 줄어든다. 

 

그런데 학습을 하다보면 Loss가 0에 가까이 떨어지지만, 0까지 떨어지지 않는 경우도 볼 수 있습니다. 이는 모델의 학습방법 및 구조와 관련되어 있습니다. -> Loss 가 0 근처에서 더이상 떨어지지 않는 것은 모델의 사이즈 보다 데이터의 정보가 크기 때문입니다. 모든 데이터를 커버할 수 없는 것이죠. 

 

 

모델의 구조는 단순한 선형모델부터 수많은 파라미터를 가진 딥러닝까지 다양한 복잡성을 가지고 있습니다. 모델의 구조가 단순한 경우, 데이터의 패턴을 모두 다 기억하기에는 용량이 작습니다. 그러나 데이터의 공통된 패턴을 찾기에는 적합하며, 일반화 (Generalization)을 하는데 용이합니다.

 

Generalization은 모델이 보지 못한 Test 데이터에 대해서 예측을 잘하는 경우를 나타냅니다. "일반화가 잘 되었다" 라고 표현합니다.

 

모델의 구조가 복잡한 경우, 학습 데이터의 모든 패턴을 다 기억할 수 있습니다. 그러나 데이터의 수가 부족한 경우, 모들 파라미터를 적절하게 훈련시키지 못 할 수도 있습니다.

 

일반적으로 모델의 구조가 복잡해서 학습 데이터를 모두 기억하는 게 더 좋을 것 같은데, 실제로는 그렇지 않습니다. 그 이유는 모델의 두 번째 역할인 추론에 있습니다. 학습데이터로부터 학습을 잘하는 것은 좋지만 모델은 새로운 데이터가 왔을 때, 예측을 잘하는 게 중요합니다.

 

모델 구조의 복잡성을 (단순, 적절, 복잡) 세 가지로 나눠서 생각해보겠습니다.

  1. 단순: 모델이 학습 데이터에 대해서 충분히 배우지 못한다.
  2. 적절: 학습 데이터에 대해서 어느 정도 충분하게 배운다.
  3. 복잡: 학습 데이터에 대해서 모든 것을 배운다.

 

Train 데이터와 모델 구조의 관계.

 

단순한 모델은 학습데이터를 정확하게 예측하지 못 할 수도 있습니다. 복잡한 모델은 Noise에 지나치게 반응할 수 있습니다. 결국, 둘 다 좋지 않습니다. 적절한 게 제일 좋습니다. 

 

딥러닝의 Model Complexity 

Neural Network는 모델 구조가 복잡합니다. 파라미터의 수가 굉장히 많기 때문이죠. 또한 Universal Function Approximation 이론에 의하면 Activation을 가진 Function은 이론적으로 모든 함수를 근사할 수 있습니다. 이 경우, 파라미터 수로 모델의 구조의 복잡성을 줄일 수 있습니다.

 

딥러닝과 같이 파라미터를 업데이트 하는 방식은 학습하는 과정에서도 Generalization이 얼마나 잘 일어났는지 확인할 수 있습니다. Train data에 대해서 학습하면 Loss는 당연히 줄어들게 됩니다. 그렇다면 Validation data는 어떨까요?

 

Validation는 Loss가 줄어들다가, Train data에 너무 적합하게 훈련된다면 Loss가 증가하게 됩니다. 이 현상을 Overfitting이라고 합니다. (Train 데이터에 Overfit 된다는 의미입니다.)

 

점선을 기준으로 오른쪽(Overfitting), 왼쪽(Underfitting)

 

 

이와 다른게, Train data에 대해서 충분히 학습하지 못하는 경우도 높은 Loss를 가지게 되는데, 이를 Underfitting이라고 합니다. (Train data에 under fit 된다는 의미입니다.)


그래서. 

머신러닝 학습의 목적은 데이터로부터 패턴을 학습해서 예측하는데 있습니다. 따라서 Test Data에 대한 예측률을 높이는 것이 가장 좋습니다. 모델의 적절한 복잡성을 찾는 것은 데이터에 대해서 학습해보는 방법이나 데이터의 분포를 토대로 머신러닝 모델을 선택해야 합니다.