TigerCow.Door


안녕하세요. 문범우입니다.

이번 포스팅에서는 우리가 만든 모델에 대한 Learning rate 를 설정하는 방법과 evaluation을 해보는 과정을 진행해보도록 하겠습니다.


* 해당 포스트의 모든 내용은 김성훈 교수님의 '모두를 위한 딥러닝'을 바탕으로 제작되었습니다.

관련한 상세 내용은 아래 링크를 참고해주세요.

https://hunkim.github.io/ml/




1. Training and Test data sets


이번에 알아볼 내용은 우리가 가진 데이타셋을 training 과 test로 나눠보는 것입니다.

이전까지의 실습에서는 이런 구분 없이 우리가 가진 모든 데이터를 통해 traning을 하고 test를 했는데, 엄밀히 말해서 이는 틀린 방법입니다.


이제부터는 반드시 데이타셋을 나눠서 진행합니다.

즉, 우리가 가진 데이터셋을 Training datasets과 Test datasets으로 나눠서 진행하는 것입니다.

그럼 이것을 어떻게 나눌까요?

이는 생각보다 매우 쉽습니다.

우리가 가진 데이터를 10개라고 했을때, 이중 7개정도는 그동안 했던 것처럼 x_data와 y_data로 설정을 하고 나머지 3개에 대해서 x_test, y_test로 설정을 해둡니다.



그리고 위와 같이 우리가 지난 실습에서 했던 것처럼 코드를 작성하고, 빨간색 밑줄쳐져 있는 부분처럼, 학습할때는 x_data 와 y_data 를 이용하며, 이후 prediction에서는 x_test와 y_test를 이용합니다.



2. Learning rate


두번째로 우리가 알아보아야 하는 것은 Learning rate 입니다.

이전 실습에서는 우리가 learning rate를 단순히 0.1 또는 0.01 이라는 식으로 진행했는데 이번에는 이에 대해서 좀 더 자세히 알아보도록 하겠습니다.


Learning rate를 잘못 설정했을때 야기되는 문제는 크게 2가지가 있습니다.

위의 그림에서 왼쪽 그래프와 같이 Learning rate가 클때는 overshooting 이라는 문제가 생길 수 있으며 Learning rate가 작을 때는 왼쪽 그래프와 같은 문제가 발생할 수 있습니다.


그럼 실제로 확인해보도록 하겠습니다.



위 코드는 이전과 같은 모델에 대한 코드입니다. 단지 learning rate를 1.5로 매우크게 설정해보았습니다.

이에 대한 결과는 오른쪽 초록색글씨로 되어 있는데, 초반부터 cost가 매우 큰것을 확인할 수 있는데, 5번째 스텝을 보시면 cost가 무한대가 되고 이후에는 nan 값으로 학습되지 않는 것을 볼 수 있습니다.


반대로 아래코드와 같이 learning rate 를 매우작게 해보면,



오른쪽 결과와 같이 학습이 제대로 이루어지지 않고 있는 것을 볼 수 있습니다.



3. Normalization


그런데, learning rate 조차 제대로 설정한 것 같은데 제대로 결과가 나오지 않을때가 있습니다. 이럴땐 데이터의 normalization을 확인해봐야 합니다.



위와 같이 xy 데이터가 존재하는데 값을 살펴보시면, 데이터끼리 매우 큰 차이가 나고 있습니다.

이는 그 아래의 그래프와 같은 형태를 띄게 되어서 학습을 하면서 약간의 움직임만으로도 cost가 튕겨져 나가는 현상이 발생될 수 있습니다.



이런 데이터를 위의 코드처럼 간단한 linear regression을 구현해보았는데 오른쪽 결과와 같이 제대로된 학습이 되지 않는 것을 볼 수 있습니다.

즉, 데이터간의 차이가 너무 커서 발생되는 문제인데 이러한 데이터는 normalization을 진행해야 합니다.



normalization 을 하는 방법은 다양하지만 그 중 minmaxscaler 함수를 위와 같이 이용해보면 데이터간의 큰차이가 존재하지 않게 됨을 볼 수 있습니다.



그리고 이전과 동일한 코드를 통해 학습을 해보면 오른쪽 결과와 같이 학습이 매우 잘 이루어 지는 것을 확인할 수 있습니다.

블로그 이미지

Tigercow.Door

Back-end / Python / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요