프로젝트/2021 한이음(probono)

[프로보노프로젝트/딥러닝] 훈련 / 검증 / 평가 데이터 셋 분할과 홀드아웃 검증(Hold-out validation)

pxatd 2021. 8. 26. 16:22
728x90

1. 데이터 셋을 분할해야 하는 이유

모델을 올바르게 학습시키기 위해서는 데이터 분할이 필수적이다. 모든 데이터를 학습에 사용하게 되면 과대적합 (over fitting)이 발생하며 성능이 좋지 못하며 어떤 문제를 갖고 있는지 파악할 수 없다.

쉬운 예로, 학생이 시험을 치루는데 정답을 모두 알려준 오픈북 시험이나 다름 없는 것이다. 그렇게 되면 학생의 능력을 제대로 알 수 없게되는 것과 비슷하다.

따라서, 데이터의 일부를 학습에서 제외하여 학습을 완료한 후 현재 모델이 학습하지 않은 데이터에 대해서도 잘 예측할 수 있는지 확인하는 것이 필요하다.


2. 데이터 셋 종류

Train 데이터셋(학습 데이터 셋):

-모델을 학습시킬 때 사용하는 데이터 셋


Validation 데이터셋 (검증 데이터 셋):

-Train set으로 학습한 모델의 성능을 평가하기 위한 데이터 셋

Test 데이터셋 (평가 데이터 셋):

-모델의 성능을 최종적으로 측정하기 위한 데이터 셋
-Test 데이터셋은 마지막에 모델의 성능을 측정하는 용도로 한 번만 사용되어야 함
-학습과 평가를 반복하다보면 모델이 검증 때 사용한 데이터셋에 과적합되어 새로운 데이터에 대한 성능이 떨어진다.
-그렇기 때문에 데이터셋을 세 가지로 나누어 train, validation으로 모델을 최적화 한 뒤 마지막에 한 번 test 데이터 셋으로 최종 평가를 해야한다.


3. 데이터 분할 (학습 / 평가 데이터 셋)

우선, 학습데이터(Train data)와 평가 데이터(Test data)로 분할한다. 데이터 셋 분할에 정해진 비율은 없지만 일반적으로 전체 7:3=학습 데이터 : 평가 데이터의 비율을 많이 사용한다.



4. 데이터 한 번 더 분할 (학습 / 검증 / 평가 데이터 셋)

데이터를 한 번 더 분할하는 이유는 학습하는 과정에서 모델이 정상적으로 학습되고 있는지를 검증하기 위함이다.
평가데이터를 검증데이터로 지정해도 상관없지만, Early stopping을 사용하여 일찍 모델을 종료하는 경우 미래에 발생한 데이터의 성능이 가장 좋은 상황에서 모델의 학습이 멈추기 때문에 학습데이터 중 일부를 분할하여 사용하는 것이 좋다.
일반적으로 3:2:5 = 학습 데이터셋 : 검증 데이터셋 : 평가 데이터셋의 비율을 사용한다.



5. 단순 홀드아웃 검증 (Hold-out validation)

아주 기본적인 검증 방법으로 단순히 훈련데이터와 테스트 데이터로 나누고, 나눠진 훈련데이터에서 다시 검증 데이터셋을 따로 떼어내는 방법이다. 아마 우리 프로젝트에서도 이 검증방법으로 엔진을 학습시킬 예정이다.

그러나, 데이터가 적을 때는 각 데이터셋이 전체 데이터를 통계적으로 대표하지 못할 가능성이 높다. 즉, 하나의 데이터셋에 다양한 특징을 지닌 데이터들이 포함되지 않을 수 있다는 것이다. 이를 확인하는 방법은 간단하다. 새롭게 데이터를 셔플링하여 다시 모델을 학습시켰을 때 모델의 성능이 많이 차이가 나면 이 문제라고 볼 수 있다.

728x90