AI & BigData/모두를 위한 딥러닝(정리)

머신러닝(ML) #9_ Learning rate, Data preprocessing, Overfitting

Tigercow.Door 2018. 4. 6. 22:34
728x90


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

이번 포스팅에서는 머신러닝에서 Learning rate를 조정하는 방법, 우리의 데이터를 선 처리하는 방법, 그리고 오버피팅을 다루는 방법에 대해서 알아보겠습니다.


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

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

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




1. Learning rate(학습률)


학습률, Learning rate 는 우리가 텐서플로우로 실습을 하면서도 직접 사용해보았습니다.


위의 그림과 같이, 우리가 Gradient descent, 즉 경사를 따라가면서 cost 를 최소화하는 단계에서 사용되었는데 쉽게말해서 경사를 얼만큼씩 이동할건지 정해주는 것이 learning rate 입니다.

learning rate를 우리는 그동안 랜덤하게 값을 정했지만 사실 그 값을 정하는 것은 매우 중요합니다.

예를 들어, learning rate가 매우 컸을때, 아래와 같은 상황이 벌어질 수 있습니다.




바로 overshooting 이라는 현상입니다.

위의 그림과 같이, 경사를 따라 내려가면서 최솟점에 도달하여, cost의 최소값을 얻을 수 있어야 하지만, learning rate가 너무 크면, 최솟값을 찾지 못하고, 왔다갔다 하고, 심지어 오히려 cost 가 증가하는, 그래프에서 튕겨져 나가는 듯한 상황이 올 수 있습니다.

즉, cost 를 최소화 하는 함수에 있어서 cost가 줄어들지 않고 오히려 점점 늘어나는 현상이 있다면 learning rate를 의심해 보아야 합니다.


그럼 반대로, learning rate가 매우 작을땐 어떨까요?

쉽게 예측할 수 있듯, cost의 변화가 매우 작아 그 최솟값을 찾는데 시간이 너무 오래 걸리는 등의 현상이 발생할 것입니다.



물론 이러한 Learning rate에 대해서 적절한 값을 찾는 정답은 없습니다.

슬프게도.. :(

각자의 환경이나 데이터들의 차이가 존재하기 때문에, 적절히 작은 값부터 천천히 실행해보는 시도가 필요합니다.

cost 값을 확인해보면서 그 값이 비정상적으로 발산하거나, 변화가 없을 때 learning rate를 의심해보기를 바랍니다.



2. Data preprocessing


먼저 데이터 전처리가 왜, 언제 필요한지를 생각해보겠습니다.


위와 같이, 어떤 값에 대한 3차원 그래프를 단순히 2차원으로 확인한다고 생각합니다. 우리가 1번에서 봤던 cost 함수와 같은 것인데 단순히 등고선처럼 표현된 것입니다. 즉 해당 그래프에서도 최소값은 중앙의 가장 작은 원입니다.




그런데, 위의 그림에 나와 있는 표를 확인해보면 x1과 x2의 데이터의 차이가 매우 큰 것을 볼수 있습니다. 이러한 경우 같은 방식으로 그래프를 그려보면 오른쪽 그림과 같이 타원형의 그래프가 그려지게 됩니다.

그런데 이때, 파란색점처럼, 우리가 어떤 값을 찾으려 점을 이동시킬때, 매우 작은 간격 때문에 약간의 이동이 매우 큰 변화를 가져올 수 있게 됩니다.

이러한 경우처럼, 데이터간에 차이가 매우 큰 경우 우리는 일반적으로 데이터에 대한 처리가 필요합니다.


일반적으로 우리는 이러한 데이터 선처리 방법을 normalize 라고 합니다.


위의 그림과 같이 normalize 에는 몇가지 방법이 있습니다.

가운데 초록색 그림처럼 중앙을 맞춰주는 zero-centered 방법과, 우리가 좀전에 알아본 것처럼, 데이터간의 차이가 클때 이용되는 normalized 방법이 있습니다.


이러한 데이터 처리는 어떻게 할까요?

생각보다 매우 간단합니다.



위의 방법은 다양한 방법중에 하나인 Standardization 입니다.

어떤 x 의 값들이 존재할 때 그 평균값을 빼주고 분산의 값으로 나누어서 값을 얻으면 됩니다. 파이썬의 경우 식의 아래에 있는 간단한 한줄로 구현할 수 있습니다.



3. Overfitting


먼저, 아래의 그래프를 봅시다.



우리가 학습데이터들에 의해서 +와 -를 구분하는 모델을 만든다고 생각합니다.

같은 데이터라도 구현하는 방법에 따라서 위 그림의 좌측과 같은 model_1과 우측과 같은 model_2가 구현될 수 있습니다.

과연 어떤 모델이 더 좋은 것 일까요?


우리는 보다 일반적이고 다른 데이터들에서도 예측을 수월하게 할 model_1이 더 좋다고 이야기합니다.

이럴때, model_2와 같이 모델이 만들어 지는 것이 Overfitting 입니다.


즉, 학습데이터에 대해 너무나 딱-! 잘 맞는 모델이 만들어지는 것입니다.

학습데이터에 대해서는 예측을 잘하지만, 실제적인 데이터에 대해서는 예측을 제대로 하지 못하게 되는 것입니다.


그럼 이러한 Overfitting을 어떻게 줄일 수 있을까요?


overfitting을 줄이는 가장 좋은 방법은, 많은 데이터입니다.

또한 데이터의 특징을 좀 줄여보는 방법도 있습니다.

그리고 더 기술적인 방법인 일반화(Regularization)도 있습니다.



일반화를 하는 방법은, 우리가 위에서 봤던 그래프에서 처럼 모델의 굴곡이 없도록, 보다 완만하도록 모델을 만드는 것입니다.

그러한 것을 식으로 생각해보면 위의 식과 같습니다.

cost (그림에서는 loss) 값을 구할때, 그 뒤에 w의 값을 제곱한 것들의 합에 상수를 곱해서 더해주는 방법입니다.

이때 이 상수를 regularization strength 라고 하는데 해당 상수의 값을 조절함으로써 우리가 일반화를 얼마나 시킬것인지 조절할 수 있습니다.



이렇게해서 우리가 Learning rate가 무엇이고, 왜 중요한지에 대해서 알아보았고 이어서 데이터 선처리과정이 필요한 이유와 어떻게 처리하는 것인지, 마지막으로 overfitting에 대해서 알아보고 regularization 이라는 방법까지 알아보았습니다.