본문 바로가기
DL(Deep Learning)

learning rate, overfitting, regularization

by 솩코딩 2022. 1. 22.

안녕하세요. 솩코딩입니다.

오늘은 머신러닝 공부에 팁이 되는 세가지를 공부해봅시다.

 

<learing rate, overfitting, regularization>

만약 learning rate 굉장히 큰 값이면, 즉 스텝이 크게 되면 바깥으로 튕겨나게 되는데요.

이를 overshooting이라고 부릅니다. 그리고 cost function을 확인해보면, 숫자가 아닌 값(nan)이 나옵니다.

 

반대로 너무 작은 값이면, 최저점이 아님에도 불구하고 stop되는 경우가 있으며

cost function을 출력해보면 숫자가 거의 변화가 없습니다.

환경에 따라 다르므로 정답이 없습니다.

보통 0.01로 잡고 cost ftn을 관찰해서 발산하게 되면 이를 좀 더 작게, 너무 늦게 움직이면 좀 더 크게 잡으면 됩니다.

 

 

그리고 값 사이에 큰 차이가 난다면, cost function 값이 치우치게 됩니다. 따라서 예측값이 nan이 나오게 되는 현상이

발생합니다.

 

 

이를 극복하기 위해 normalization해야 한다는 것입니다. 그렇게 되면, cost function이 위의 그림과는 다르게

동~그란 모양이 됩니다.

 

아래 그림처럼 데이터중심이 0으로 가게끔 한다던가, 어떤 범위 안에 데이터들이 항상 들어갈 수 있도록

하는 방법이 자주 사용됩니다.

만약 learning rate를 잘 잡았는데도 불구하고 cost function이 발산하거나 이상한 동작하는 경우 이를 검토해보라는 것입니다. normalize방법에는 standardization, min max scaling 등이 있습니다.

 

그 다음으로는, 머신러닝의 가장 큰 문제인 overfitting(굉장히 중요)에 대해서 보겠습니다.

머신러닝이 학습을 통해 모델을 만들어 가는 것인데 이로써 학습데이터에 너무 딱 잘 맞는 모델이 만들어지게 됩니다.

이를 테스트 데이터나 실제 데이터에 적용해볼 때는 잘 맞지 않게 됩니다.

 

예를 들어, +,- 나누는 구분하는 예측하는 문제가 주어졌을 때

model1(linear하게 선을 그어 구분지은)은 일반적으로 다른 데이터 셋이 오더라도 잘 맞는 모델일 수 있지만,

model2이 온다면 가지고 있는 데이터에만 좋은 모델 즉, 다른 데이터 셋이 오면 정확도가 떨어질 수 있게 된다는 것

입니다.

 

그렇다면, 오버피팅 해결하는 방법은 어떤 게 있을까요?  

가장 좋은 방법은 training data 많이 가지고 있는 것이며, 또, 피쳐 수 줄이는 것,

regularization(일반화)시키는 방법이 있습니다.

 

위의 그림에서 오버 피팅을 설명할 때 특정 데이터에 맞게 구부려지는 것은

특정 weight이 큰 값을 가진다는 것을 의미하는데, 이를 regularization을 통해 weight가 적은 값을 가지게 되어

구부린 것을 펴자는 것입니다.

 

이를 위해 아래의 그림에 나와있듯이, cost function에 term을 추가하게 됩니다.

 

여기서, 람다(regularization strength)가 0이면 regularization을 할 필요가 없다는 것이며

큰 값이면 regularization을 중요히 생각한다는 것이죠. 이는 우리가 직접 정하게 됩니다.

 

 

<training/testing 데이터 셋>

training으로 모델을 학습시켰는데 다시 training set으로 물어본다면 어떨까요?

시험문제를 이미 알고 다시 보는 거랑 같겠죠.

 

그럼, 이를 어떻게 사용해야 좋을까요?

보통은 주어진 training set에서 7:3으로 나누어 training,test set으로 나누어 보는데요.

training set(교과서)으로 학습시킨 model을 가지고 test set(실전, 숨겨져 있고 한 번만

볼 수 있다고 생각하면 됨.)을 예측한거랑 실제 값이랑 비교하게 되는 거죠.

 

보통 위처럼 training, test 나누는 데, learning rate(alpha값), regularization strength(lambda값)

를 튜닝할 필요가 있을 때, training을 다시 training, validation으로 나누어

validation set에서 이를 튜닝하여 완벽하게 만들어서 test를 보는 방법도 있습니다.

 

 

<Online learning>

마지막으로, Online learning에 대해 살펴보겠습니다.

데이터셋이 너무 많은 경우에 이를 학습 시키기에 힘들겠죠. 벡터공간도 많이 필요하게 되고,

메모리 문제가 생기게 되는데 이때 사용하는 방법입니다.

 

100만개 데이터를 10만개씩 잘라서 학습시킨다고 합시다.

이때, 이전 섹션에서 학습시킨 결과가 model에 남아 있어야 합니다.

계속 뒤에 나오는 데이터를 추가로 넣어서 학습시키는 것이지, 이전에 학습시킨 것을 계속 새로 학습시키는 것은

아니라는 것입니다. 대표적인 것이 MINIST dataset(손글씨 인식 모델)이 있습니다.

 

많은 데이터를 다룰 일이 많습니다.

전체 데이터 셋을 한 번 학습시키는 것이 one epoch(에폭)인데, 이를 보통 batch size를 정하여

원하는 만큼 나누어 훈련시킬 수 있습니다.

이를 반복하는 iteration 횟수는 trainig data 수에 batch size를 나누어 코드에 입력하면 됩니다.

 

EX ) 1000개의 training데이터셋에서 batch size=500일 때, iteration=2.

 

 

 

 

모두를 위한 딥러닝 시즌1(김성훈 교수님)

https://www.youtube.com/watch?v=BS6O0zOGX4E&list=PLlMkM4tgfjnLSOjrEJN31gZATbcj_MpUm 

솩코딩 깃허브

https://github.com/lala991204/DL-self-study