TensorFlow
TensorFlow - Epoch, Training Data(학습 데이터)와 Validation Data(밸리데이션 데이터) 그리고 Overfiting (과대적합)
Cong_S
2022. 6. 13. 17:44
인공지능의 성능을 높이기 위해서 많은 데이터가 필요한데
텐서플로우에선 같은 데이터셋을 여러번 반복 사용하여 학습시킬 수 있는 Epoch라는 기능이 있다.
아래는 Epoch를 이용해 성능을 높이려 하는 상황이다.
이렇게 했을 때 무언가 이상한 점이 눈에 띈다.
학습에 사용된 데이터로 확인된 정확도인 accuracy는 정확도가 점점 오르는데
신규 데이터(위에서는 test 데이터, 밸리데이션 데이터) 의 정확도인 val_accuracy 는 계속 제자리 걸음인 모습이다.
차트로 확인해보자.
plt.plot(epoch_history.history['loss'])
plt.plot(epoch_history.history['val_loss'])
plt.legend(['train_loss', 'validation_loss'])
plt.show()
plt.plot(epoch_history.history['accuracy'])
plt.plot(epoch_history.history['val_accuracy'])
plt.legend(['train_accuracy', 'validation_accuracy'])
plt.show()
확인해보니
학습할 때에 training 데이터에 대한 정확도는 오르는데
새로운 데이터에 대한 정확도는 오르지 않는 것을 확인할 수 있다.
학습 데이터는 정확도가 높은데 신규 데이터는 유의미하지 않은 결과를 가지는 경우에
이런 현상을 Overfiting (과대적합)이라 한다.
간단히 말하면 의미없는 Epoch가 반복된 것이다.
이에서 알 수 있는 점은 Epoch를 많이 한다하여 인공지능의 성능이 오르지는 않는다는 것이다.
결국 학습에 사용된 데이터의 정확도보다
신규 데이터(validation data)의 정확도를 파악하는 것이 훨씬 중요하다는 것을 알 수 있다.
반대로 학습 데이터가 적어 예측이 무의미한 경우에는 Underfiting(과소적합)이라 한다.
학습 데이터 정확도도 높고, 신규 데이터 또한 잘 맞는 이상적인 경우에는 Generaleation (일반화)라고 한다.