본문 바로가기

인공지능 AI/딥러닝

Train / Test / Validation set의 차이

<Introduction>

딥러닝에서 신경망 모델을 학습하고 평가하기 위해 dataset이 필요하다.

이때 dataset을 성질에 맞게 보통 다음 3가지로 분류한다.

1. Train set

2. Validation set

3. Test set

 

이렇게 각각 모델을 학습하고 검증하고 평가하는데에 목적을 서로 다르게 두고있다.

이 세가지 dataset이 정확히 무엇이고 어떤 성질을 띄는지 살펴보자.

 


<Train set>

모델을 학습하기 위한 dataset이다. 한 가지 계속 명심해야할 중요한 사실은

 

"모델을 학습하는데에는 오직 유일하게 Train dataset만 이용한다"

 

보통 train set을 이용해 각기 다른 모델을 서로 다른 epoch로 학습을 시킨다.

여기서 각기 다른 모델이란 hidden layer 혹은 hyper parameter에 약간씩 변화를 줌을 뜻한다.


<Validation set & Test set>

validation set은 학습이 이미 완료된 모델을 검증하기위한 dataset이다.

test set학습과 검증이 완료된 모델의 성능을 평가하기위한 dataset이다.

보통 Train : Test 데이터를 8 : 2로 나누는데 여기서 Train 데이터 중 일부를 validation set으로 이용해

결국 Train : Validation : Test 을 일반적으로 6 : 2 : 2로 이용한다.

 

validation set과 test set의 공통점은 이 데이터를 통해 모델을 update 즉, 학습을 시키지 않는다는 것이다.

이렇게 validation set과 test set은 둘다 이미 학습을 완료한 모델에 대해 평가하고 학습을 시키지 않는데

 

"그렇다면 둘의 차이는 과연 무엇일까?"

 

결론부터 말하자면 둘의 차이는 

Validation set은 모델을 update, 즉 학습을 시키진 않지만 학습에 '관여'는 한다.

Test set학습에 전혀 관여하지 않고 오직 '최종 성능'을 평가하기 위해 쓰인다.

Validation set으로 학습을 하지 않는데 어떻게 학습에 관여하는지 아래 그림을 보면서 살펴보자.

https://scikit-learn.org/stable/auto_examples/model_selection/plot_underfitting_overfitting

그림에서 우측으로 갈수록 epoch를 늘려가면서 train set을 학습시키는 과정이다.

그림을 보면 알 수 있듯이 가운데 그림은 train set뿐만아니라 unseen data에 대해서도 좋은 성능을 보일것으로 보인다.

그러나 가장 우측그림을 보면 train set에 overfitting되어 다른 unseen data에 대해 안 좋은 성능을 보일 것이다.

즉, train set으로 학습을 할때 너무 높은 epoch로 학습시키면 overfitting의 문제가 있다.

overfitting

위 그림을 보면 파란색 baseline을 기준으로 더 학습시키면 overfitting되어 test set에 대한 결과가 점점 안 좋아진다.

따라서 우리는 파란색 baseline 까지만 학습을 해야한다. 다시말해, 파란색 baseline에 해당하는 epoch를 찾아야한다.

그러나 이때 test set은 '최종 성능' 평가할때만 사용하므로 학습에 이처럼 관여해서는 안된다.

결국 여기서 validation set이 사용되는 것이다.

 

validation set을 사용하여 train set에 대한 epoch를 바꿔가면서 위 그림과 같은 error 곡선을 그린다.

그 후 baseline에 해당하는 epoch를 찾으면 해당 epoch까지만 모델을 학습시켜 test set으로 '최종 성능'을 평가한다.

한마디로 위 그림에서의 test error를 validation set에 의한 validation error라고 생각하면된다.

 

이렇게 validation set은 train set에 의한 epoch뿐만 아니라 다른 hyperparameter, hidden layer를 조정할때도

사용될 수 있다. 예를 들어, learning rate와 hidden layer를 조금 변형해가면서

validation set에 대한 accuracy를 보면서 적절한 hyperparameter, hidden layer를 결정하는 것이다.

 

Validation set에 대한 accuracy가 중요한 이유는 학습에서

1) overfitting에 빠지지 않고

2) unseen data에 대한 좋은 성능

이 두가지가 핵심적이기 때문이다.

 

따라서 최종 성능 평가를 위한 test 이전에 validation으로 어떤 모델을 어떤 epoch로 학습시킬때

unseen data에 대해서 좋은 성능을 보이는 모델이 무엇인지 파악하야 한다.