cleanUrl: "optuna-usage"
description: "Optuna로 hyperparameter tuning을 하는 방법을 정리합니다."
세가지만 기억하자: objective
, trial
, study
objective
는 parameter 조합을 하나의 스칼라 값으로 변환해주는 함수
- 실제 함숫값일수도, 학습 결과로 나온 모델 성능일수도 있다
trial
은 파라미터 값들의 조합
study
는 trial들의 history로부터 어떤 값을 시도해볼 것인지를 판단하는 전체적인 시스템
가장 간단한 예제
- $y=(x-2)^2$를 최소로 하는 x의 값을 구하는 예제 https://optuna.org/#code_examples
- 기본값 설정으로는 objective의 값을 최소로 만들지만,
optuna.create_study(direction='maximize')
로 만들면 objective를 최대화한다.
import optuna
def objective(trial: optuna.Trial):
x = trial.suggest_float('x', 10, 10)
return (x - 2) ** 2
study = optuna.create_study()
study.optimize(objective, n_trials=100) # timeout=[SECONDS]로 시간 제한을 둘 수도 있다.
study.best_params # E.g. {'x': 2.002108042}
Trial
오브젝트로부터 다음 시도해볼 값 얻기
- 목록의 값들 중 하나 취하기
trial.suggest_categorical(name, choices)
- 범위 내의 정수 값 얻기
trial.suggest_int(name, low, high)
- 범위 내의 float 값 얻기
trial.suggest_float(name, low, high)
- Uniform distribution으로부터 값 추출하기
trial.suggest_uniform(name, low, high)
- Log-Uniform distribution으로부터 값 추출하기
trial.suggest_loguniform(name, low, high)
Paralleization 되나?
어떤 optimization 방법을 이용하는지는 알고 쓰자!
Sampler
- 디폴트 값은 Tree-structured Parzen Estimator algorithm을 sampler로서 사용한다. (
optuna.samplers.TPESampler
)