18. Training-Testing 데이타 셋 (lec 07-2)


이전 글에서 overfitting을 피할 수 있는 방법으로 제안한 것 중에 "training dataset이 많으면 좋다"라고 얘기한 부분이 있었다. 이번 동영상은 데이터가 충분하지 않으면 사용할 수 없다는 것을 전제로 한다.


모델을 만들었다면 성능이 어떤지 평가해야 한다. 모델을 만들 때도 데이터가 필요하지만, 평가할 때도 데이터가 필요하다.


전체 데이터를 training data로 사용했다면, 현재 데이터에 대해 모두 기억을 하고 있다면, 현재 데이터에 대해서 100%의 정확도를 가질 수 있다. 그런데, 이게 의미가 있을까?

우리의 목표는 새로 들어오는 입력에 대해 결과를 예측하는 것인데, 그런 상황에서도 100% 정확도로 예측할 수 있을까? 의미는 조금 다르지만, 이런 경우 overfitting 되었다고 얘기할 수 있을 것이다.


전체 데이터를 2개 영역으로 나누어서 적용하는 것이 중요하다. 70% 정도는 학습을 시키기 위한 training set으로, 30% 정도는 학습 결과를 확인하기 위한 test set으로 구성하고 있다. 학습 과정에서 잘 나왔다고 test set에 대해서도 잘 동작할지는 알 수 없다. 여러 번에 걸쳐 학습(train)하고, 검증(test)하는 작업을 반복해야 한다.

학습한 결과를 토대로 test set에 대해 예측하고, test set의 실제 값과 결과를 비교해서 "목표로 하는 95% 수준에 도달했는지", "사용할 수 있는 수준이 되었는지"에 대해서 판단하게 된다.


데이터 영역별 구성도다. 데이터가 충분하다면 validation set을 구성하지 않을 이유가 없다. 쉽게 보면 test를 한번 더 한다고 생각해도 좋을 것이다. 머신러닝의 교과서에 해당하는 mnist 예제는 train 55,000개, validation 5,000개, test 10,000개의 dataset으로 구성되어 있다.


데이터가 너무 많아도 문제다. 이럴 경우에는 전체를 한번에 처리하지 않고 조금씩 나누어서 처리할 수도 있다. 이것을 online learning이라고 한다. 데이터가 너무 많거나 신규 데이터가 지속적으로 유입되는 상황에서 사용하는 모델이다.


Online Learning은 머신러닝의 대표 예제인 mnist dataset을 통해서 확인할 수 있다. 이 경우는 데이터가 너무 크다고 판단해서 10개의 구간으로 나누어서 처리를 하는 방식을 택할 수 있다. 다음 동영상에서 김성훈 교수님께서 이 부분을 코드로 구현해서 보여준다.

mnist 예제는 내부적으로는 앞서 얘기한 것처럼 3개의 dataset으로 구분되어 있지만, 코드 상에서는 training과 testing의 두 가지 dataset만 사용한다. 그리고, 그림을 구분하기 위한 label 파일을 별도로 제공하고 있다.