logo

머신러닝에서 훈련/검증/테스트 집합이란? 📂머신러닝

머신러닝에서 훈련/검증/테스트 집합이란?

정의

훈련 중에 쓰이는 데이터 집합:

  • 모델의 파라매터를 최적화하는데 쓰이는 데이터 집합을 트레이닝 셋training set, 훈련 집합이라 한다.
  • 모델의 하이퍼 파라매터를 최적화하는데 쓰이는 데이터 집합을 밸리데이션 셋validation set, 검증 집합이라 한다.

훈련 후에 쓰이는 데이터 집합:

  • 훈련이 끝나고 모델의 성능을 평가하기 위해 쓰이는 데이터 집합을 테스트 셋test set이라 한다.

트레이닝/밸리데이션/테스트 집합에 대한 손실 함수의 함숫값을 트레이닝/밸리데이션/테스트 로스loss라 한다.

설명

훈련 집합: 훈련 집합은 말 그대로 훈련에 쓰이는 집합으로, 백프로파게이션으로 (신경망의) 파라매터를 최적화하는 데 쓰인다. $$ $$

검증 집합: 디자인한 모델을 훈련 집합으로 최적화할 때, 잘 훈련되고 있는지 확인하는데 쓰이는 것이 검증 집합이다. 따라서 백프로파게이션에는 영향을 미치지 않는다. 만약 에포크가 충분히 지났고 훈련 집합에 대한 성능이 충분히 높음에도 검증 집합에 대한 성능이 낮다면, 층이나 노드의 수를 바꾸어 다시 훈련을 시킨다. 즉 검증 집합이란 거창하게는 모델의 디자인, 담백하게는 하이퍼 파라매터를 최적화하기 위해 쓰이는 집합이다. 따라서 엄밀하게는 모델의 훈련에 관여하고 있다. 파라매터 최적화에 쓰이지 않을 뿐, 훈련에 쓰이지 않는다고 말하기엔 어렵다.

실제로 딥러닝을 할 때 검증 집합에 대한 성능을 추적하며 이것이 충분히 높게 나올 때까지 하이퍼 파라매터를 이리저리 바꿔보게된다. 결과적으로 검증 집합에 대한 성능이 높게 나올 때까지 모델의 디자인을 계속 수정할 것이므로 검증 집합에 대한 성능이 좋은 것은 당연하다. 따라서 모델의 최종 성능을 평가하기 위해 쓰이는 데이터가 따로 필요하다. $$ $$

테스트 집합: 훈련 집합은 모델의 파라매터를, 검증 집합은 모델의 하이퍼 파라매터를 최적화하는데 관여하였으므로 성능을 측정하는데 쓰기에 적합하지 않다. 따라서 훈련 집합에도, 검증 집합에도 속하지 않은 데이터를 가지고 최종적으로 모델의 성능을 측정한다. 이 때 쓰이는 데이터를 테스트 집합이라 한다. $$ $$

각 데이터 셋이 어떻게 쓰이는지 수도코드로 나타내면,

$$ \begin{align*} &\text{{\bf for} $1 \le$epoch$\le N$ {\bf do}} \\ &\qquad \text{training loss $\leftarrow$ LOSS(model($x_{train}$), $y_{train}$)} \\ &\qquad \text{backprogation for training loss} \\ &\qquad \text{validation loss $\leftarrow$ LOSS(model($x_{valid}$), $y_{valid}$)} \\ &\qquad \text{print and check training and validation losses } \\ &\textbf{end for} \\ &\text{test loss $\leftarrow$ LOSS(model($x_{test}$), $y_{test}$)} \end{align*} $$