07-2. Model evaluation: Training and test data sets

2020. 5. 4. 23:35AI/모두를 위한 딥러닝

이 포스트는 모두를 위한 딥러닝 - Tensor Flow를 정리한 내용을 담았습니다.
누구나 이해할 수 있는 수준으로 설명하고자 하였으며 LAB의 코드는 TF2.0에 맞추어 재작성되었습니다.

 

이번 포스트에서는 Data set을 활용하여 학습 모델이 얼마나 잘 동작하는지를 확인하는 방법에 대해 알아보겠습니다. 먼저 size(x)와 price(Y)를 feature, label로 하는 하나의 data set을 보겠습니다.

 

·Data set -> Training / test set

size price
2104 400
1600 300
2400 369
3000 540
1985 300
1534 315
1380 212
1494 243

 이후 우리는 모델에 Data set을 학습시켜 "학습 완료된 모델"을 얻을 수 있습니다. 이제 모델을 평가해봅시다. 학습이 완료된 모델은 학습한 Data set을 기억하고 있기 때문에 그것들 중에서 하나의 데이터 쌍을 뽑아 테스트하면 항상 100% 정확한 결과(Y=Ŷ)가 나올 것입니다. 따라서 기존의 Data set으로 모델을 평가하는 것은 좋은 방법이 아니며, 모델을 평가하기 위해서는 학습되지 않은 새로운 feature와 label이 필요합니다. 하지만 우리는 매번 새로운 데이터들이 주어질 거라고 확신할 수 없습니다. 그러므로 우리는 앞으로 Data set을 Training set과 test set으로 나누어 사용할 것입니다. 여기서 Training set과 test set은 단어 그대로 모델에 학습시킬 데이터와 모델을 평가할 데이터를 말합니다. 아래의 도식을 통해 자세히 알아보겠습니다.

도식 1.1. Data set -> Training / test setd

먼저 표의 Data set을 Training set과 test set으로 나눈 모습을 볼 수 있습니다. 이후 Training set을 모델에 학습시켜 학습 완료된 모델을 만들고, test set을 학습 완료된 모델에 넣어 label(Y)과 predicted(Ŷ)을 비교하는 식으로 모델을 평가합니다. 어쩌면 학습 데이터가 이전에 비해 줄어들었기 때문에 모델의 weight에 영향을 주고 정확도가 낮아질 것을 우려할 수도 있지만, 어느 정도 이상의 Training set에서 데이터들은 어떤 분포를 따른다고 보기 때문에 weight은 보통은 수렴하게 되어 정확도는 변하지 않는다고 봐도 무방합니다. 이 개념은 뒤에 나올 online learning에서도 중요하기 때문에 미리 알아두길 바랍니다.

·Data set -> Training / Validation / test set

하지만 저번 포스트에서 봤던 것처럼 때때로는 learning rate를 조절하거나 overfitting을 피하기 위해 Regularization이 필요한 경우도 있습니다. 이럴 때는 어떻게 하면 좋을까요? 아래의 사진을 보겠습니다.

그림 1.1. Validation set (출처 : 모두를 위한 딥러닝)

위의 막대는 먼저 소개한 방식대로 Original set을 Training set과 Testing set으로 나누었지만, 아래 막대는 Training set을 다시 Training set과 Validation set으로 나눈 것을 볼 수 있습니다. 이렇게 나눈 Validation sset의 데이터들로 우리는 모델의 learning rate와 Regularization 식의 lambda값을 적절하게 튜닝하여 사용합니다. 이렇게 하는 것은 쉽게 본시험(Testing set으로 모델을 평가) 이전에 모의고사(Validation set으로 learning rate / lambda를 조절)를 치러 조금 더 의미 있는 모델을 만드는 과정이라고 이해할 수도 있습니다.

 

·Online learning

이번에는 Training set이 굉장히 많은 경우에 모델을 학습시키는 방법에 대해 알아보겠습니다. 먼저 Training set이 굉장히 많을 때, 이것들을 한번에 학습시키는 것(Offline learning)은 메모리 용량이나 속도에 영향을 주는 등 시스템 자원을 많이 소모하기 때문에 무리가 있습니다. 따라서 우리는 모델에 Training set의 데이터들을 순차적으로 한 개씩 또는 미니 배치(Mini-Batch)라 부르는 작은 묶음 단위로 나누어 학습시킬 것입니다. 이러한 학습 방법을 Online learning이라 부르는데, 이 방법은 새로운 데이터가 들어왔을 때도 이전에 학습한 모델에 새로운 데이터만 추가로 학습하면 되기 때문에, 전체 데이터를 사용하여 처음부터 다시 훈련해야 하는 Offline learning에 비해 훨씬 빠르고 비용이 적게 듭니다. 따라서 Online learning은 새로운 데이터가 계속 유입되고 변화가 빠른 시스템에 적합한 학습 방법입니다. 또한 학습이 끝난 데이터는 다시 학습할 필요가 없기 때문에 때에 따라 버려도 무관하기 때문에 컴퓨팅 자원이 제한된 경우에도 적합합니다. Online learning을 조금 더 살펴보자면, learning rate는 학습에 매우 중요한 파라미터입니다. learning rate가 높으면 모델이 새로운 데이터에 빠르게 적응하지만 예전 데이터를 금방 잊어버리게 됩니다. 반면 learning rate가 낮으면 모델의 학습 속도가 느리지만 새로운 데이터들에 덜 민감하게 반응해 몇몇의 아웃라이어들에 모델의 대표성을 잃어버리는 것을 피할 수 있습니다.

·MNIST Dataset / Accuracy

이제 마지막으로 기계학습 분야에서 실제로 사용되는 Dataset인 MNIST Dataset울 보고, 정확도(Accuracy)에 대해 다시 한번 짚고 포스트를 마치겠습니다. MNIST Dataset은 손글씨 숫자를 정확히 컴퓨터 숫자로 인식할 수 있도록 만든 모델의 Training set입니다. 미국에서 손글씨로 쓴 우편번호를 자동으로 인식하고 처리해 효율을 높이기 위해 고안한 모델에서 기인한 것으로, 현재 6만여개의 Training set 이미지와 1만여 개의 Test set 이미지를 포함하고 있습니다. MNIST Dataset의 샘플 이미지는 아래와 같습니다.

그림 2.1. MNIST Dataset sample

이번에는 정확도(Accuracy)에 대해 간단히 짚고 포스트를 마치겠습니다. 정확도는 모델을 통해 예측한 값이 얼마나 실제의 값과 일치하는지에 대해 나타낸 값으로, label(Y)과 prediction(Ŷ)의 차이로 나타냅니다. 위의 MNIST Dataset을 분류하는 것처럼 최근 이미지 분석의 정확도는 95 - 99 %로 굉장히 높은 수치를 보여 실생활에서도 유용하게 쓰이고 있습니다.