과적합란?
일반적으로 과적합이란 만들어진 모델이 지나치게 복잡하여 학습 데이터에 대해서는 올바른 결과를 출력하지만 실제 데이터가 입력되었을 때 올바른 결과를 출력하지 못하는 것을 말합니다. 머신러닝에서 데이터가 너무 많다고해서 좋은 것만은 아닙니다. 학습 알고리즘은 적절한 수준을 유지할 필요가 있습니다. 즉, 만들어진 모델이 지나치게 단순하거나 지나치게 복잡하다면 실제 데이터가 입력되었을 대 정확한 출력을 기대하기 어렵다는 것입니다.
동일한 학습데이터로 학습된 3개의 모델을 비교해본다면 위와 같습니다. 모델 1은 너무 단순화 되어있고 모델 3은 과적합이 되어 있습니다. 위에서 설명한 바와 같이 학습데이터에 대해서는 정확한 결과를 출력하지만, 실제 데이터에 대해서는 부정확한 결과를 출력합니다. 모델 2와 같이 어느 정도 단순하면서도 복잡한 모델을 만드는 것이 중요합니다.
과적합 정의
모델의 복잡성이 높을 수록 훈련데이터에 대해서는 오류가 적어지지만 실제 데이터에 대해서 일정 수준 이상의 복잡성은 오류를 증가시킵니다. 정확한 모델을 생성하기 위해서는 복잡성을 적절한 수준으로 유지할 필요가 있습니다. 따라서, 아래 그림과 같이 학습을 반복하면서 테스트 데이터의 오류가 증가되는 지점이 적합한 모델의 적합 수준이라고 할 수 있겠습니다.
아래 그림과 같이 실제 데이터에 대한 혹은 검증 데이터에 대한 실제 값과의 오차가 증가할 때, 학습을 멈춰줘야 합니다. 이는 파이썬 알고리즘으로 구현할 수 있으며, 차후에 추가 포스팅하겠습니다.
과적합 발생 원인
학습 데이터는 실제 데이터의 샘플이기 때문에 실제 데이터의 모든 특성을 가지고 있지 않을 수 있습니다. 또한, 학습 데이터는 실제 데이터에서 편향된 부분만을 가지 있을 수 있으며 오류가 포함된 값이 있을 수 있기 때문에 이러한 데이터를 모두 반영해서 모델을 만들게 되면 과적합 문제가 발생합니다. 모든 학습 데이터를 커퍼하는 모델을 만들지 않아야 한다는 것입니다.
과적합 해결이 어려운 이유
학습 데이터는 실제 데이터의 샘플이기 때문에 실제 데이터를 모두 수집하는 것을 불가능하며, 모든 데이터를 수집하더라도 모든 데이터를 학습시키는 것이 불가능합니다. 학습 데이터 만으로는 실제 데이터와의 오차가 커지는 지점을 정확하게 알기 어렵기 때문에 과적합 해결이 어렵습니다.
일반화란?
일반화는 실제 데이터가 학습 데이터와 차이가 있더라도 생성된 모델의 성능 차이가 나지 않게 하는 것입니다. 학습한 결과와 실제 데이터를 입력한 결과가 같게 만든다고 할 수 있겠습니다. 과적합을 피하고 일반화를 잘하기 위해서는 속성 줄이기, 정규화, 검증과 같은 방법이 사용됩니다. 실제로 머신러닝 알고리즘을 적용해서 학습된 모델을 생성하게되면 학습한 데이터에는 잘 맞지만 실제 값을 입력했을 때 출력이 잘 맞지 않는 경우가 발생합니다. 따라서, 일반화는 머신러닝 모델을 학습함에 있어 중요한 요소입니다.
일반화 방법 #1 : 속성 줄이기 (Attribute Reduction)
오컴의 면도날이라는 이야기가 있습니다. 같은 두개의 이론이 있다면 간단한 쪽을 선택하라는 말인데요 이를 일반화에 적용할 수 있습니다. 복잡성이 너무 높은 경우에 과적합이 될 확률이 높기 때문에 결과에 크게 영향을 주지 않는 속성을 제거함으로써 비교적 간단한 쪽의 모델을 선택합니다.
일반화 방법 #2 : 정규화 (Regularization)
속성 단위가 서로 달라서 결과에 미치는 영향이 달라지는 것을 막기 위해 입력 값을 정규화하는 것입니다. 입력 A의 범위가 1~2, 입력 B의 범위가 10000~20000이라면 동일한 단위인 0~1 사이로 정규화 해주는 것이 일반화에 도움이 됩니다.
일반화 방법 #3 : 검증 (Validation)
검증을 통해서 일반화의 오류 정도를 측정하고 그 겨라과를 바탕으로 모델의 성능을 개선하는 방법입니다. 모델을 생성하고 모델을 검증하는 작업을 반복함으로써 모델을 일반화시키고 실제 적용하는 방법입니다.
학습, 검증데이터 분할 → 모델 학습 → 성능 평가 → 적용 결정 → 반복
이를 위해서는 학습데이터와 검증데이터를 나눠줘야 합니다. 이후에 학습데이터로 모델을 학습시키고 검증데이터로 모델의 성능을 평가합니다. 검증 결과에 따라서 모델을 다시 학습시킬지 학습된 모델을 적용할지 결정합니다. 과적합을 방지하는 검증 방법에는 교차 검증이 있습니다. 학습데이터와 검증데이터가 고정되어 있다면 과적합될 가능성이 크기 때문에 데이터를 k개로 나누고 교차 검증을 해주면 과적합된 모델을 생성하는 것을 방지할 수 있습니다.
댓글