아마도 머신러닝을 공부하는 여러분은 주어진 데이터에서 Train, Dev, Test set의 적절한 비율에 대해서 보통 Train : Test를 7:3 정도, 혹은 Train : Dev : Test를 6:2:2 정도의 비율로 나누는 것이 적절하다는 얘기를 많이 들어보았을 것이다. 이는 전통적인 머신러닝 방법론에서 말하는 얘기이다. 대략 10여 년 전만 해도 확보 가능한 데이터의 수가 지금처럼 많지 않았다. 데이터의 수가 100개, 1000개, 10000개 정도의 수준일 때는 이렇게 7:3, 6:2:2의 비율을 유지하며 Test set의 수량도 확보하여 유의미한 Test를 하는 것이 필요하다.
하지만 최근의 딥러닝의 관점에서 보았을 때 이러한 방법론은 더 이상 불필요하다고 볼 수 있다. 학습에 사용할 수 있는 데이터의 양이 수백만 단위로 늘어난다고 해보자. 이럴 때도 과연 6:2:2의 비율로 나눌 필요가 있을까?
백만 개의 많은 데이터 셋이 확보가 되었을 때는 오히려 극단적으로 Train에 데이터를 많이 사용하는 것이 좋다. 예를 들어 98%를 Train에, 1%,1%씩을 각각 Dev, Test에 사용한다고 했을 때, 1%의 수량은 10,000개이다. 충분히 Test에 사용하기에 많은 양의 데이터이며 데이터의 분포 측면에서도 10,000개 정도면 통계적으로도 여러 가지 분포를 충분히 포함할 수 있을 것이다. 98만 개의 데이터를 Train에 사용함으로써, 모델이 최대한 많은 데이터를 학습하고 파라미터를 최적화 시키는 것이 중요하다.
이러한 관점에서도 Dev set(validation set) 또한 반드시 전체의 20%를 사용할 필요는 없다. Dev set은 Train을 통해 생성된 여러 알고리즘 중에 베스트를 찾아내고 튜닝을 하는 목적으로 사용되는 데이터이다. 따라서 이 여러 알고리즘 간에 차이만 명확히 구별해낼 수 있는 정도의 데이터양이면 무방하다는 것이다.
Test set은 최종적으로 선정된 모델의 성능을 평가하기 위함이다. 모델의 파라미터를 튜닝하기 위한 것이 아니다. 이러한 관점에서 사실은 많은 경우 Test set이라고는 하지만 실제로는 Dev set으로 데이터를 사용하는 경우를 볼 수가 있다. 사실 데이터의 양이 많다면 아예 Test set 자체를 없애고 모든 데이터를 Train과 Dev에 나누어 사용을 해도 잘못되었다고 볼 수는 없다. (물론 추천하는 방법론은 아니지만)
핵심을 마지막으로 정리하자면, 딥러닝과 빅데이터의 시대에 있어서 반드시 전통적인 7:3 방법론을 따를 필요가 없다는 것이다. 데이터가 많다면 Train에 최대한 많은 데이터를 사용하고, 상대적으로 적은 비율을 Dev, Test로 사용하는 것이 훨씬 효율적인 머신러닝의 방법론이라 할 수 있을 것이다.
참조 : 강의 원본 출처 (앤드류 응 교수 딥러닝 강의)
Sizeof Dev and Test Sets (C3W1L06)
https://www.youtube.com/watch?v=_Fe5kKmFieg&index=6&list=PLkDaE6sCZn6E7jZ9sN_xHwSHOdjUxUW_b