brunch

매거진 머신러닝

You can make anything
by writing

C.S.Lewis

by 모험과 안정 Feb 27. 2024

BO - 학습을 위한 학습

하이퍼파라미터 (Hyperparameter) 최적화 과정

Hyperparameter

 우리는 지도학습으로 데이터를 훈련시킬 때 error가 가장 적은 방향으로 훈련하고 싶을 것이다. 예를 들면 그림 1과 같이 x를 바꿔가면서 f(x)가 가장 작은 지점을 찾는 것이다. 여기서 매 iteration마다 x를 변화시키는데, 이 iteration을 할 때마다 x가 변하는 양을 바꿀 수가 있다. 


이 변하는 양을 learning rate라고 하는데, learning rate가 클수록 iteration을 할 때마다 x가 더 많이 변할 것이고, learning rate가 작을 수록 x가 조금 변할 것이다. 여기서 생각해야 될 점은  learning rate가 너무 커서 f(x) 최솟값을 건너 뛰어버리면 f(x)의 최소값을 찾지 못하고 지나갈 수 있다. 즉, 모델의 성능 자체에도 영향을 줄 수 있다. 그리고 learning rate가 너무 작으면 언젠가는 f(x)의 최솟값에 도달하겠지만 그 시간이 너무 오래 걸릴 수 있다. 


이런식으로 모델의 예측에 직접 사용되는 input (x와 같은 feature)은 아니지만 예측 속도 및 성능에 영향을 줄 수 있는 변수들을 hyperparameter라고 한다. 이러한 hyperparameter의 종류는 굉장히 많으며 batch의 size, epoch 수 등이 있다. 각각의 hyperparameter에 대한 설명도 나중에 자세히 다루겠다.


                                 그림 1 iteration을 통해 x를 바꿔가며 f(x)의 최솟값을 찾는 과정


Hyper parameter 최적화 방법

이러한 hyperparameter의 종류가 매우 많기 때문에, hyperparameter를 바꿔가며 모델의 성능을 확인해본 다음에 hyperparameter를 결정해야 된다. 이러한 최적의 hyperparameter를 찾는 간단한 방법으로는 Grid search와 Random search가 쓰이곤 한다


Grid search는 모든 hyperparameter 후보들에 대해서 탐색하지만 너무 오래 걸린다는 단점이 있다. Random search는 random한 hyperparameter 후보들에 대해서 탐색하는데, Grid search에 비해 효율적이지만 정확도가 떨어질 수 있다는 단점이 있다.


이러한 두 search의 단점을 극복할 수 있는 것이 Bayesian optimization이며, 사전 정보를 이용해서 정확도와 효율성을 모두 취하기 위한 방법이다.


Bayesian optimization

Bayesian optimization (BO) 에서는 실제로 복잡한 모델 대신 Surrogate 모델을 사용해서 f(x)의 대략적인 값을 구한다 (Surrogate라는 단어는 "대신한다"는 뜻으로, 단어 자체로부터 대체하는 모델을 뜻하고 있다). 이러한 Surrogate 모델을 사용하는 이유는 간단한 형태로 예측하면서 해석이 가능하기 때문이다. 주로 Gaussian process를 많이 사용하는데, 이를 통해 예측된 값이 불확실성도 알아낼 수 있다 (불확실성이 중요한 이유는 아래에 설명하겠다).


그러면 이제 BO에서 f(x)를 최소 혹은 최대로 하는 최적의 hyperparameter를 탐색하는 과정을 살펴보겠다. 그림 2를 보면 f(x)를 최대로 하는 hyperparameter set x를 찾는 과정이다 (간단히 나타내기 위해 1차원 변수 x로 나타냈지만 실제로는 hyperparameter set로 구성된 다변수이다). 그림 2를 보면 두 번째 iteration 과정 (t=2)에서 실제로 측정한 값 (observation (x))들이 있고 측정 값들이 없는 부분에 위아래로 파란색 영역이 넓은 것을 볼 수 있다. 이는 이 부근의 불확실성이 크다는 것을 의미한다. 그러면 이제 어떤 hyperparameter set x에 대해서 탐색해야 될까? 


1) 우리는 f(x)의 값을 높게 만드는 hyperparameter를 알고 싶기 때문에 f(x)가 높은 x에 대해 탐색해야 된다.

2) 그렇다면 f(x)가 비슷한 경우 불확실성이 낮은 경우와 높은 경우 중 어떤 경우를 탐색해야 될까? 불확실성이 높은 경우를 탐색하면 f(x)가 더 높은 경우도 나올 수 있지 않겠는가? (더 낮을 수도 있다) 그러면 불확실성이 높은 경우를 탐색하는 게 낫지 않겠는가?


이러한 1), 2)의 상황을 더하여 동시에 고려할 수 있게 만든 게 acquisition function이다. 그래서 그림 2에 보면 f(x)가 크면서 불확실성이 큰 곳이 acqusition function 최댓값을 갖는다 (acquisition max)


그래서, 3번째 iteration을 할 때 (t=3) acquisition function이 높은 지점을 찾아서 해당하는 x (hyperparameter set)에 대해서 f(x)를 측정한다 (그래서 bayesian optimization을 할 때 acquisition function이라는 사전 정보를 활용하는 것이다)


그러면 아래 그림과 같이 측정값이 추가되고 uncertainty가 바뀔 것이고 그러면 acquisition function이 최대가 되는 지점이 바뀔 것이다. 그러면 위와 동일하게 acquisition function이 최대가 되는 x를 찾고 해당 지점에서 f(x)를 관찰한다.


이렇게 반복하다 보면 실제 함수 값과 추정 값이 비슷해지고 uncertainty도 줄어들 것이다. 그러면 f(x)가 최대가 되는 hyperparameter set x를 찾을 수 있다

그림 2 BO를 통해 hyperparameter set x를 최적화 하는 과정

매거진의 이전글 머신러닝 과적합 해결 - 정규화
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari