[TensorFlow] Lab-07-3-1 application and tips 모두의 딥러닝 시즌 2 정리...
시즌2 강의가 부실하다고 판단되어 시즌 1 lec 07-2: Training/Testing 데이타 셋 강의 내용 추가 정리
목차
- Data sets
- Evaluation using training set?
- Training and Test sets
- Trainig / Validation / Testing
- Learning
- Online Learning vs Batch Learning
- Fine tuning
- Efficient Models
- Sample Data
- Fashion MNIST / IMDB / CIFAR-100
Performance Evaluation : is this good?
지금까지 우리는 배운 내용을 통해 머신러닝 모델을 Data를 갖고 학습을 시켰다. 그렇다면 이렇게 학습을 시킨 모델은 얼마나 학습이 잘 되었는지? 얼마나 성공적으로 예측을 하는지 어떻게 평가를 할까?
Evaluation using training set?
예를 들어 다음과 같은 데이터 셋이 있다고 해보자.
우리는 위와 같은 Data set을 통해 모델을 학습시켜왔다. 그렇다면 만약 이렇게 학습한 모델에게 이 Data set에 포함된 데이터를 입력으로 주면 어떻게 될까?
이때는 매우 정확한 100% 완벽한 예측 값을 출력할 것이다.
앞서 말했다 시피, 모델은 이 Data set을 기반으로 학습을 진행하였고 모델은 당연하게도 학습한 내용을 기억하고 있기 때문에 이미 알고 있는 것에 대한 질문을 하게 된다면 이미 기억하고 있는 실제 값을 출력할 것이기 때문이다.
따라서 이와 같이 Test를 진행할 때, 이미 학습에 사용한 Data set에 포함된 Data를 갖고 테스트를 하는 것은 무의미한 행위라고 할 수 있다.
예를 들자면, 학교에서 시험을 볼때, 이미 한 번 시험을 봤던 문제와 동일한 문제를 그것도 답을 알려준 상태에서 재시험을 보는 것과 유사하다. 이때는 이미 시험 답을 알고 있기 때문에 사람은 무의식적으로 답을 외우고 재시험을 보게 된다.
그렇다면 학습시킨 모델을 Test하는 좋은 방법은 무엇일까?
Training and Test sets
일반적으로, 활용할 수 있는 전체 데이터를 7:3 으로 나눠 구분 짖고, 70%를 모델 학습을 위한 training data set, 30%를 테스트를 위한 test data set 으로 구분지어 활용하는 것이다.
이렇게 구분한 뒤에 test set은 절대로 학습 과정에 포함시키지 않고 존재하지 않는 데이터라고 생각해야 한다.
이렇게 70%에 해당하는 데이터, training set을 통해 우리의 모델을 학습시키는 과정이 완벽히 끝났다고 생각될 때, 나머지 30%에 해당하는 test set을 학습이 완료된 모델에 입력을 주고, 모델이 test set의 x_data에 대해 예측하는 Y hat 값과 test set 의 실제 y_data 값을 비교하여 정확도를 예측할 수 있으며 이것이 올바른 모델 평가 방법이다.
마찬가지로 여기에 비유하자면, training set은 교과서라고 볼 수 있고 test set은 실제로 시험장에 들어가서 마주하는 시험지의 문제라고 볼 수 있다.
따라서 머신 러닝 모델도 training set과 test set을 반드시 나누어 적용하고 평가해야 한다는 것이다.
Trainig / Validation / Testing
앞서 얘기했다시피 Data set은 Training set과 Test set 이렇게 두 가지로 데이터를 구분하는 것이 일반적이다.
하지만 그림에서 보는 것과 같이 이 Training set을 또 두 가지로 나누는 경우도 존재한다.
일반적으로 우리가 갖고 있는 Training set으로 모델을 학습 시킨 다음에 Validation을 가지고 learing rate(α) 혹은 lambda(λ) 와 같은 학습에 필요한 상수 값을 tuning할 필요가 있을 때, 이를 주로 평가하기 위한 목적으로 사용된다.
즉, Validation 모의 평가는 학습 과정에서 learning rate, lambda 와 같은 이런 상수 값들 또한 학습에 영항을 미치게 되므로 이들 또한 올바른 값을 가져야 하기 때문에 이를 조율하기 위한 데이터를 별도로 분리하는 것이다.
비유를 하자면, 교과서를 통해 우리가 열심히 공부를 하고(Training set) 실제로 시험장에 들어가서 시험을 보기 전에 (Test set), 실전 모의고사를 푸는 것을 Validation set 으로 빗대어 생각해볼 수 있을 것이다.