ML lec 07-1: 학습 rate, Overfitting, 그리고 일반화 (Regularization)

2021. 7. 2. 20:18

출처 : 모두를 위한 머신러닝/딥러닝 https://hunkim.github.io/ml/

 

모두를 위한 머신러닝/딥러닝 강의

 

hunkim.github.io

 


머신러닝 알고리즘을 실제로 사용하는데 있어서의 몇가지 팁들을 이야기할 것.

 

cost function을 정의하고 cost function을 최소화하는 값을 찾기 위해 사용했던 Gradient descent 알고리즘. 경사를 타고 고 내려감. 이 때 알파라는 learning rate 값을 임의로 정의해줬었음. 

 


이 learning rate의 값을 값을 잘 정하는 것이 중요함. 만일 이 값을 크게 정한다고 가정해보자. RL은 내려가는 스텝의 크기라고 볼 수 있음. 그렇기 때문에 아래의 그림처럼 내려가는 형태임. 또, 지나치게 클 경우에는 진행하다가 바깥으로 튕겨져나갈 수도 있게 됨. 튕겨져나갈 경우에는 cost function에서 숫자가 아닌 값들이 출력됨. 

 

이런식으로 learning rate의 값들을 크게 지정해줬을 때 발생하는 문제를 Overshooting이라고 함.

 


만일 굉장히 작은 값을 learning rate으로 지정해주었다고 가정해보자. 그러면 아주 조금의 스텝 간격으로 내려가게 될 것. 이 때는 train을 모두 마쳤을 경우에 최저점이 아님에도 train을 마쳐버리는 경우가 생길 것. 

 

그래서 learning rate의 값을 적절하게 선택하기 위해서는 훈련 중간에 cost 함수를 출력해본 뒤 거의 변화가 없다면 learning rate의 값을 조금 키워서 훈련시켜보는 것이 좋음.

 


learning rate을 설정하는 것에는 크게 정해진 것은 없음. 보통 0.01로 설정하여 진행함. 

 

 


 

우리가 가지고 있는 data x를 선처리해야하는 경우가 가끔 있음. 우리가 가장 많이 사용하는 알고리즘인 gradient descent 알고리즘은 오른쪽의 파란색 그림과 같은데, 이것을 2차원 상으로 표현하게 되면 등고선처럼 초록색 모양으로 나타나게 됨. 우리가 원하는 것은 어떤 점에서 시작할 경우 경사면을 타고 내려가서 최저점에 도착하는 것임. 

 


근데 우리가 가지고 있는 어떤 데이터들이 서로 큰 차이를 가지게 된다면 어떤 형태의 등고선 그래프 모양이 될까 ? 

 

위의 그림과 같이 동그란 모양이 아니라 한쪽으로 치우쳐진 왜곡된 형태의 등고선이 나타날 것. 따라서 적절한 크기의 learning rate 값을 지정한다고 하더라도 등고선 바깥으로 튕겨져나갈 수도 있게 된다. 그래서 이것을 주의해야하며, 이런 경우에는 데이터의 값을 normalize해야함.

 


Data를 normalize 하는 데에는 여러 방법들이 있음. 두번째 그래프와 같이 0을 중심으로 하여 normalize하는 방법도 있고, 세번째 그래프와 같이 어떠한 범위 내로 모이도록 normalize하는 방법도 있음. 

 

 



어떤 데이터에 대해서 너무 잘 들어맞는 모델을 만들어서 실제 real use에는 적절하지 않은 Overfitting(오버피팅)의 문제가 발생할 수도 있음.


위와 같이 model 1과 model 2 중에서 model 2가 오버피팅이 일어난 경우라고 볼 수 있음. model 2는 현재 데이터셋에 대해서는 아주 잘 들어맞는 모델이지만 실제 use case에는 적절하지 않고 일반적이지 않은 모델임.


오버피팅을 해결하는 방법에는 크게 3가지가 있음.

 

1) 트레이닝하는 데이터의 개수를 아주 많이 늘리거나,   2) 중복되는 feature의 수를 줄이기 위해 삭제하고,   3) 기술적인 방법으로서 regularization시키는 방법이 있음.

 


그림과 같이 구불구불하게 되어있는 그래프를 좀 반듯하게 펴기 위한 것을 regularization이라고 함. 

 


이것을 하기 위해서는 아래와 같은 형태였던 cost 함수에서 

아래와 같은 term을 추가시켜줌.

w의 값이 커질수록 그래프의 형태는 구부러진 형태가 되기 때문에, w의 제곱을 sum한 값이 최소화가 되도록 함. 그리고 그 앞에 임의의 람다 값을 곱해주는데 이 값을 regularization strength라고 함. 이 값이 만일 0이 되면 regularization을 하지 않겠다는 의미이며, 이 값이 큰 값이 되면 regularization을 매우 중요하게 생각한다는 의미임.

 


코드에서는 아래와 같이 간단하게 regularization을 시켜줄 수 있다.


 

 

BELATED ARTICLES

more