본문 바로가기
AI/[DLBasic]모두의 딥러닝(딥러닝의 기본)

[DLBasic] 7-1. Application & Tips: Learning rate, data preprocessing, overfitting

by 쵸빙 2020. 1. 16.

     이번 시간에는 학습률을 어떻게 결정하면 좋을지, 데이터에 대한 전처리는 어떻게 할지, 머신 러닝에서 가장 큰 문제 중 하나인 overfitting 문제를 어떻게 해결할 것인지 배우도록 하겠다.

 

     learning rate는 cost function을 최소화하기 위해 사용했던 gradient descent 알고리즘에서 사용되었다.

cost function에서 미리 설정했던 learning rate

     위와 같이 실제 코드를 짤 때도 learning rate를 미리 정해주었었다.

learning rate가 너무 클 때의 문제점

     만약 learning rate를 너무 크게 설정했다면 step이 너무 커서 최소값을 제대로 찾지 못하고 지나치는 문제가 생길 수 있다. 심한 경우에는 그래프 바깥으로 튀어나가기까지 해서 제대로 된 학습을 하지 못할 수 있다. 코드의 결과는 숫자가 아닌 값까지 출력될 수도 있으며, 이 현상을 Overshooting이라고 한다.

 

learning rate가 너무 작을 때의 문제점

    만약 learning rate를 너무 작게 설정했다면 최소값을 찾으려 너무 느리게 내려가기 때문에 시간이 너무 오래 걸려서 최소점에 아직 도달하지 않았는데 멈춰서 올바른 최소값을 구하지 못할 수도 있다. 코드에서는 시간이 지날 때마다 cost function 값을 print해서 값이 너무 조금씩 줄어든다면 learning rate를 좀 늘리는 방법으로 문제를 해결할 수 있겠다.

 

올바른 learning rate 설정하는 법

     너무 크지도, 너무 작지도 않은 learning rate를 설정하기 위해서는 위의 방법을 사용하면 되겠다.

 

데이터 전처리 방법들

     다음으로 볼 것은 데이터의 전처리이다. 만약 우리가 가지고 있는 데이터들의 값의 차이가 너무 크게 난다면 등고선을 그렸을 때 옆으로 길쭉한, 왜곡된 형태로 나타날 것이다. 그럴 떄 alpha 값이 아무리 좋더라도 쉽게 데이터 바깥으로 나가버릴 수도 있다. 가장 많이 사용하는 방법들에는 zero-centered data(가운데로 모이도록)와 normalized data(어떤 범위 내에 데이터가 들어갈 수 있게 전처리)가 있다.

 

     x의 값들이 있으면 x의 값을 평균과 분산의 값을 이용해서 normalization을 할 수 있고, 이 방법을 Standardization이라고 한다. 직접 코드를 구현하려면 위 그림의 아래 부분 코드를 이용하면 된다.

 

Overfitting

    다음으로 알아볼 것은 머신 러닝에서 가장 큰 문제인 Overfitting이다. 

학습 데이터에게만 딱 맞는 모델을 만들어서 다른 테스트 데이터셋으로 적용했을 때 정답을 이끌어내지 못할 수도 있다는 것이다.

 

왼쪽 : 일반적인 모델, 오른쪽 : overfitting된 모델

     왼쪽의 모델은 조금의 오차가 있긴 하더라도 일반적으로 잘 짠 모델이고, 오른쪽의 모델은 주어진 훈련 데이터셋에 너무 잘 맞추고 싶은 나머지 overfitting되어버렸다.

 

Overfitting Solution

     Overfitting을 해결하기 위해서는 더 많은 훈련 데이터를 확보하고, 중복된 feature을 줄이거나 일반화(Regularization)시킨다.

 

Overfitting을 해결하는 Regularization

     일반화(Regularization)시킨다는 것은 weight을 너무 크게 하지 말자는 것이다.

보통 decision boundary를 주어진 training dataset에만 맞게 정하면 overfitting되는데 구부리지 말고 펴자는 것이다.

weight이 좀 작은 값을 가지는 것이 펴자는 말이다.

 

Regularization하는 법

     regularization을 위해서는 cost 함수의 뒤에 이 term을 추가해준다. W가 vector니까 각각의 element의 합이 최소가 될 수 있도록 위처럼 식을 세운다. 이 때 람다를 regularization strength라고 하고, 이 람다값이 0이 되면 regularization을 하지 않겠다고 하는 것이고, 최대인 1으로 하면 regularization에 신경을 많이 쓰겠다는 것이다.

Regularization 구현

     regularization은 위와 같은 코드로 구현해낼 수 있다.

 

     지금까지 learning rate를 어떻게 설정할지, data preprocessing이 필요한 경우가 언제인지, overfitting을 어떻게 피할 수 있을지를 알아보았다.

 

다음 시간에는 training과 testing set에 대해서 알아보도록 하겠다.