티스토리 뷰
위 포스트는 정보문화사에서 출판한 책 '파이썬 딥러닝 파이토치'를 바탕으로 작성되었습니다.
우리는 전체 데이터가 아니라 샘플 데이터(표본)만 갖고 있다. 우리가 갖고 있는 샘플 데이터를 완벽하게 맞추는 모델을 만들었을 때, 우리가 보지 못한 데이터도 모두 잘 맞을거라 보장할 수 있을까? 우리가 갖고 있는 데이터를 더욱 완벽하게 맞추려고 노력할수록 우리가 보지 못한 데이터는 더 맞추지 못할 확률이 높다(과적합). 여기서 과적합이 발생하는 이유는 무엇일까?
1. 샘플 데이터 수의 부족
만약 전체 집단의 데이터를 갖고 있고 이 데이터에 잘 맞는 모델을 만들었다면 전혀 문제가 없다. 즉, 학습할 데이터의 수가 많을수록 모집단의 특성을 잘 반영할 확률이 높으며 우리가 갖고 있는 데이터가 모집단의 특성을 잘 반영할수록 과적합이 일어날 확률이 적어진다는 것이다. 반면 학습할 데이터의 수가 적을수록 과적합이 일어날 확률이 높다.
2. 풀고자 하는 문제에 비해 복잡한 모델을 적용
그렇다면 과적합을 방지하는 방법은 무엇일까? 가장 이상적인 방법은 데이터의 수를 늘려 모집단의 특성을 잘 반영한 데이터를 확보하고 풀고자 하는 문제에 적합한 모형을 선택하는 것이다. 그러나 이는 말처럼 쉽지 않을 뿐더러 현재 만든 모형이 과적합됐는지는 알기 어렵다. 그렇기 때문에 우리가 갖고 있는 데이터를 분할해 우리가 만든 모델의 과적합 정도를 판단해야 한다. 이를 '실험 설계를 통한 적합성 평가'라고 한다. 갖고 있는 데이터를 적절히 학습 데이터와 검증 데이터로 분할하고 학습 데이터로 모델을 학습한 후 검증 데이터에 모델을 적용시켜 과적합 여부를 판단해야 한다(일반적으로 4 : 3 : 3 비율로 갖고 있는 데이터를 학습, 검증, 테스트 데이터로 분할한다).
(1) 학습 데이터 : 머신러닝 모델 함수 f를 적합시킬 학습용 데이터
(2) 검증 데이터 : 학습 데이터를 적합시킨 함수를 검증시킬 데이터. 만든 모델의 파라미터를 설정해 검증하는 용도로 사용.
(3) 테스트 데이터 : 만든 모델의 성능을 최종적으로 측정하는 데이터.
*데이터 분할에 대한 추가적인 설명은 이 페이지를 참고하면 좋을 것 같다.
(4) K-Fold Cross Validation :
k-fold cross validation은 학습 데이터의 수가 많지 않을 때 사용하는 기법이다. 데이터를 랜덤하게 K개의 fold로 분할한 후 첫 번째 fold를 제외한 나머지 fold 데이터를 합쳐 학습 데이터로 사용하고, 첫 번째 fold를 검증(혹은 학습) 데이터로 사용한다. 이를 k번 반복하면 결국 모든 데이터를 학습 데이터와 검증 데이터로 사용할 수 있다. 그리고 각 Fold를 검증 데이터로 사용하여 측정한 성능값의 평균을 내면 모델의 평균적인 성능을 알 수 있다. 추가적인 설명은 이 페이지를 참고하자!
'딥러닝' 카테고리의 다른 글
[Deep Learning] Dropout, Activation Function, Batch Normalization (0) | 2021.07.16 |
---|---|
[AI Background] 인공 신경망 & MNIST 실습 (0) | 2021.07.13 |
[AI Background] 머신러닝의 정의와 종류 (0) | 2021.07.10 |
[AI Background] 인공지능의 사례 (0) | 2021.07.10 |
[파이토치 기초] 반드시 알아야 하는 파이토치 기본 스킬 - Autograd (0) | 2021.07.09 |