MATH & ML

머신러닝에서의 hyperparameter 본문

Machine Learning

머신러닝에서의 hyperparameter

BlogYong 2018. 2. 6. 18:38

hyperparameter?

hyperparameter란 machine learning 학습을 할 때에 더 효과가 좋도록 하는 주 변수가 아닌 자동 설정 되는 변수를 의미한다. 그 hyperprarmeter의 예시로는 다음과 같은 것들이 있다.

1. learning rate

gradient를 할 때에 iteration마다 얼마나의 gap으로 빠르게 혹은 느리게 이동할지 결정하는 계수


2.  error function

실제 아웃풋과 우리가 계산한 아웃풋 사이의 차이를 error function이라고 하는데 이 때 이 둘의 차이를 어떠한 방식으로 계산할지에 따라 error function이 달라지는데 이 또한 무엇으로 할지는 hyperparmeter로서 무엇을 고를지 잘 정해야한다.


3. batch size

mini batch처럼 전체 data를 몇 개의 그룹으로 나누어서 학습을 시킬때에 어떤 size로 data를 나눌지 그 크기를 뜻한다.


4. training 반복횟수(Epoch)

예를들어 neural-network에서 number of epochs를 계속 늘릴수록 error가 계속해서 적어질 것 같지만(물론 train set에 대해서는 epoch가 커질수록 error가 계속 작아진다), validation set에 대해서는 계속 error가 감소하다가 어느 순간부터는 다시 error가 증가하게된다. 이는 train set에 대하여 overfitting이 일어나서 생기는 문제다. 따라서 우리는 error가 최소화 되는 epoch의 그 경계값을 찾아주는것이 중요한데 이것이 바로 early stopping(조기종료)을 결정하는 중요한 hyperparameter이다. 


5. hidden layer의 개수
neural network에서 hidden layer의 개수를 몇 개로 해야할지 그 개수도 hyperparameter이다.

6. 각 parameter의 초기값
각 변수에 대해 iteration을 돌릴 때에 그 초기값 또한 hyperparameter이다.

7. regularization term parameter

우리가 결국 머신러닝을 통해 하고 싶은 것은 error function을 최소화시키는 W(weigh)를 찾아내는 것인데 이를 찾는 과정에서 overfitting의 문제가 자주 등장하는데 이를 해결하기 위해서 regularization 텀을 error funtion에 더하여 더 추가항을 만들어 준다. 이를 얼마나 가중치를 두어 더해줄지 그 앞에 변수가 곱해지는데 그 또한 hyperparameter이다.



이와같이 다양한 hyperparameter들이 있으며 따라서  이 hyperparameter를 어떤 값으로 골라야 적절한가는 아주아주 중요한 문제다. 하지만 아쉽게도 아직까지 어떤 hyperparmeter 값으로 해야하는지 정확히 정해진 것이 없다. 따라서 이 hyperparameter를 최적화시키는 방법이 중요하다. 그 최적화시키는 예시로 다음과 같은 방법들이 있다.


1. grid search

먼저 알고있는 지식을 이용하여 hyperparameter의 범위를 설정한다(parameter space)

그 후에 그 범위안에서 일정한 간격으로 점을 정하고 그 점들에 대하여 각각의 조합으로 직접 error를 계산해본다(이때 cross validation을 이용하여 data를 몇 개의 그룹으로 나누어(Ex.5개) 4개에 대하여 트레이닝하여 나머지 1개에 대하여 error를 계산하는 과정을 5번 반복하여 그 5개의 error들 의 평균을 구한다). 이때 이 평균 error가 최소가 되는 조합을 찾았을 때 그 조합의 hyperparameter를 선택하여 그 변수로 골라 처음부터 전체 data-set에 대하여 원하는 error-function optimization을 진행한다. 이런 방법으로 hyperparameter를 찾는다.


2. random search

grid search하고 똑같이 먼저 알고있는 지식을 이용하여 hyperparameter의 범위를 설정하는데, 그 이후에 그 space에서 모든 경우에 대하여 다 해보면서 최적값을 찾는 parameter를 찾는것이 아니고, 무작위로 몇 개만 골라서 최적값을 찾아본다. 이 과정을 대강 설명하면, 먼저 랜덤하게 초기선택(x)을 하고, 그 후에 그 값에 대해서 적당한 neighborhood에 다른 값(y)을 고르고 그 두 값에서의 error를 비교해보고 더 작은 쪽을 선택하고, 다시 그 parameter 값에서 다시 랜덤하게 선택하고를 반복한다. 이는 정확도는 조금 떨어지더라도 grid search보다 훨씬 계산시간을 줄일 수 있는 장점이 있다.


'Machine Learning' 카테고리의 다른 글

sequence to sequence(seq2seq)  (0) 2018.04.23
RNN(Recurrent Neural Network)  (1) 2018.04.23
gradient descent  (0) 2018.04.13
머신러닝 용어 몇 가지 정리(GAN, CNN)  (0) 2018.03.29
MLE MAP Prior Posterior  (0) 2018.03.28
Comments