-
Bayesian OptimizationML 2021. 3. 1. 22:17
머신 러닝에서 Hyperparameter를 설정해 줄 때, 이를 사람이 직접 설정해주어도 되지만 자동화하여 찾는 방법이 있다.
GridSearch, RandomSearch, Bayesian Optimization 등이 대표적인 방법들이다.
GridSearch는 구간 전역을 탐색하기 때문에 Hyperparameter의 종류와 구간이 커질수록 탐색 시간이 기하급수적으로 늘어나고, RandomSearch는 임의로 탐색을 진행하기 때문에 시간은 줄어들지만 정확도가 낮아질 수 있다.
최근 업무에서 Bayesian Optimization을 도입하게 되어서 이를 간단히 정리해보자 한다.
Bayesian Optimization이란 목적 함수 f(x)를 최대로 만드는 최적해(x) 도출하는 기법이다.
여기서 목적 함수는 사용자가 지정해주는 것으로 다음 코드에서 black_box_function에 해당한다.
from bayes_opt import BayesianOptimization # Bounded region of parameter space pbounds = {'x': (2, 4), 'y': (-3, 3)} optimizer = BayesianOptimization( f=black_box_function, pbounds=pbounds, random_state=1, )
black_box_function는 사용자가 설정할 수 있으며 pbounds에 존재하는 Hyperparameter 후보 중,
black_box_function를 최대화하는 Hyperparameter를 찾아가는 것이다.
Bayesian Optimization는 Hyperparameter를 최적화하는 목적 함수에 대한 확률적인 추론을 담당하는 Surrogate Model(ex. GP),
입력 값(x) 후보를 추천해주기 위한 Acquisition Function으로 구성되어 있다.
Surrogate Model: 현재까지 입력된 x 값과 함숫값(black_box_function의 결과값)을 init_points만큼 수행하고 이를 바탕으로, 미지의 목적 함수에 대한 확률적인 추정을 수행하는 모델
Acquisition Function: 목적 함수에 대한 현재까지의 확률적 추정 결과를 바탕으로 가장 유용할만한 입력값 후보들을 추천해주는 함수
ex. EI(Expected Improvement) → 탐색(exploration), 착취(exploitation)
-
exploration: 현재까지 추정된 목적함수 상에서 표준 편차가 가장 큰 근방을 다음 차례로 추천
-
exploitation: 현재까지 추정된 목적함수 상에서 함수값이 최대인 점 근방을 다음 차례로 추천
위의 과정을 반복(n_iters 횟수만큼)하여 최적화된 Hyperparameter을 도출한다.
https://github.com/fmfn/BayesianOptimization
fmfn/BayesianOptimization
A Python implementation of global optimization with gaussian processes. - fmfn/BayesianOptimization
github.com
-