건조젤리의 저장소

MNIST 예제의 정확도가 너무 낮게 나온다면? (정규화의 중요성) 본문

공부 기록/인공지능

MNIST 예제의 정확도가 너무 낮게 나온다면? (정규화의 중요성)

건조젤리 2020. 1. 6. 14:27

다들 MNIST Dataset 을 이용하여 딥러닝 모델을 테스트 한 적이 있을 것입니다.

 

MNIST Dataset

 

아무리 단순한 모델이더라도 정확도는 약 80%이상이 나오게 되는데요,

 

테스트 결과 정확도 : 95%

정확도가 20% 이하가 나오게 되면 무슨 문제일까요?

테스트 결과 정확도 : 10%

 

 

정확도가 낮게 나오는 이유는 여러가지가 있겠지만,

대표적인 문제 중 하나는 입력 데이터의 정규화를 거치지 않으면 생기는 문제입니다.


tensorflow 1.x 하위 버전에서는 tensorflow.examples.tutorials.mnist.input_data 라는 모듈이 존재하여,

mnist 이미지를 손쉽게 불러올 수 있었고, 각 픽셀값이 0과 1사이로 정규화가 되어 있습니다.

 

하지만 상위 버전에서는 tf.keras.datasets.mnist.load_data() 모듈을 사용해야 합니다.

불러온 데이터들은 정규화 과정을 거치지 않은 상태이기 때문에 픽셀값은 0과 255사이의 값을 가집니다.

따라서 아래와 같이 전체 픽셀값을 255로 나누어 정규화를 시켜야 합니다.

 

데이터 load 및 정규화

 

만약 tf.keras.datasets.mnist.load_data() 모듈을 사용하거나,

MNIST Dataset을 직접 다운받아 사용하면서 정확도가 매우 떨어지는 현상이 발생한다면,

정규화를 하지 않았는지 확인해보시기 바랍니다.


정규화를 거치지 않으면 왜 위와같은 현상이 발생하는 것일까요?

 

출처 : Andrew Ng 교수님의 머신러닝 강의 슬라이드

 

왼쪽 그림과 같이 각 feature값의 범위의 차이가 크다면,

오차함수 J가 최저점에 수렴하는데 오랜 시간이 걸리게 됩니다.

또한 Learning Rate를 크게 설정한다면 값이 발산할 위험이 있어 까다롭습니다.

 

하지만 오른쪽 그림과 같이 비슷한 범위로 정규화를 시킨다면,

오차함수의 수렴이 빠르게 이루어지고 안정적입니다.

 

 

 

 

Comments