MY MEMO

[MACHINE LEARNING - Sung Kim] Learning Rate, Data Processing, Overfitting 본문

MACHINE LEARNING/Sung Kim - 이론

[MACHINE LEARNING - Sung Kim] Learning Rate, Data Processing, Overfitting

l_j_yeon 2017. 4. 5. 16:44

Lecture 7-1

Application & Tips : Learning rate,data preprocessing, overfitting


1. Learning rate



우리는 tensorflow에서 다음과 같이 코드를 구현하며 gradient descent function을 구할 수 있었다.

위의 알파 값을 우리는 코드에서 Learning Rate이라고 나타내었다.


적당한 Learning Rate을 구하는 것은 매우 중요하다

하지만 Learning Rate이 너무 크면 어떻게 될까?



위처럼 Learning Rate이 너무 클때 한 step에 많은 거리를 움직이고 결국 답으로 도달하지 못하고 계속 밖으로 나갈 수 있다.


그렇다면 Learning Rate이 너무 작으면 어떻게 될까?



너무 작은 Learning Rate은 답까지는 도달할 수 있지만 시간이 오래 걸린다.


이와 같이 적당한 Learning Rate을 구하는 것은 매우 중요하다.

따라서 우리는 Learning Rate의 적당한 값을 구하기 위하여 0.01부터 시작하고, 

너무 느리면 Learning Rate을 늘리고 값이 계속 증가하면 Learning Rate을 줄여야 한다.



2. data preprocessing


데이터값의 큰 차이가 있을 때에는 gradient descent graph에서 minimum값을 찾기 매우 힘들다.

Learning Rate가 적당하더라도 쉽게 그래프 밖으로 나갈 수 있다.



이렇게 데이터의 값이 큰 차이가 있을 때에는 data normalize를 하는 것이 좋다.


1. 원래의 데이터를 좌표에 나타내면 가장 왼쪽의 그래프와 같다

2. 중간의 그래프는 원래 데이터의 중심을 0으로 맞춰준 그래프이다.

3. 마지막 그래프는 data normalization을 수행한 그래프이다. 

   중심이 0이고 데이터의 분포범위가 작아져 훨씬더 쉽게 j function의 minimum을 구할 수 있다.


data normalization을 하는 방법은 아래와 같다.



새로운 x의 값 = (x의 값 - 데이터 평균값) / (max-min)


3. Overfitting




시험 데이터에 너무 딱 맞아 떨어지면 현실의 데이터를 넣어 구할때 정확하게 나오지 않을 수 있다.

아래의 예를 보자.



model1을 보자. 

조금의 오차가 있지만 normalization이 되어있어 실제로 값이 들어왔을 때도 정확하게 예측할 수 있다.


model2를 보자. 

현재에 주어진 test data에 치우쳐 너무 정확한 함수가 그려지고 있다. 이럴 때에는 실제 값이 들어왔을 때 일반적인 값을 구할 수 없다.



이러한 overfitting을 해결하는 방법은 무엇일까?



1. 많은 training data set을 가지고 있는 것이다.

2. 중복된 데이터는 줄인다.

3. Regularization 즉 일반화를 시킨다.


Regularization?



우리는 보통 많이 구부러진 함수를 overfitting이라고 한다.

(각 element의 값이 크면 클수록 함수가 구부러질 확률이 높다.)

이렇게 구부러진 함수를 펴는 것을 Regularization이라고 한다.




Regularization을 하는 방법은

cost function 뒤에 위와 같은 값을 더하는 것이다.


(w^2 = 각 element의 제곱을 한 값)

w를 제곱한 값을 모두 더한 후 앞에 상수를 곱해준다.

그 상수를 regularization strength라고 한다. 


만약 그 상수 값을 0으로 하면 regularization을 하지 않겠다는 뜻이고,

상수값이 큰 값이 될수록 regularization을 중요하게 생각한다는 뜻이다.



이것을 tensorflow로 나타내면 위와 같은 식이 나타난다.


tf.square(W) = matrix W 제곱

tf.reduce_sum() = 그것을 더함


이 식에서 상수는 0.001이다.

Comments