Optuna 효율적 최적화 알고리즘
Optuna 효율적 최적화 알고리즘 (Efficient Optimization Algorithms)
Optuna는 하이퍼파라미터 샘플링과 유망하지 않은 트라이얼의 프루닝에 최신 알고리즘을 채택해 효율적인 하이퍼파라미터 최적화를 가능하게 해요.
샘플링 알고리즘 (Sampling Algorithms)
샘플러(sampler)는 기본적으로 제안된 파라미터 값과 평가된 objective 값의 기록을 이용해 탐색 공간을 계속 좁혀 나가요. 더 나은 objective 값을 주는 파라미터를 찾는 최적 탐색 공간으로 이끌어 주죠.
Optuna가 제공하는 샘플링 알고리즘은 다양해요. 예를 들어:
- Grid Search:
GridSampler로 구현돼요. 지정한 그리드에서 조합을 탐색해요. - Exhaustive Search:
BruteForceSampler로 구현돼요. 모든 조합을 전수 탐색해요.
그 외에도 Default Sampler(기본 TPE), TPESampler, RandomSampler, CmaEsSampler(CMA-ES), NSGAIISampler, MOTPESampler 등 목적에 따라 여러 알고리즘을 선택할 수 있어요.
프루너 활성화 (Activating Pruners)
should_prune()은 반복 학습의 각 단계 후에 호출해요. report()는 중간 objective 값을 주기적으로 기록하고, should_prune()은 미리 정의된 조건을 충족하지 못하는 트라이얼의 종료를 결정해요.
for step in range(num_steps):
# 학습 로직
...
trial.report(intermediate_value, step)
if trial.should_prune():
raise optuna.TrialPruned()
프루닝은 성능이 나쁜 트라이얼을 전체 반복을 마치기 전에 중단해서 컴퓨팅 자원을 아껴요. 프루닝된 트라이얼의 메시지는 "Trial <Trial Number> pruned." 형식으로 출력돼요.
프루닝용 통합 모듈
Optuna의 통합 모듈 전체 목록은 optuna.integration 참조에서 볼 수 있어요. 예를 들어 LightGBMPruningCallback은 학습 반복 로직을 직접 바꾸지 않고도 프루닝을 도입해요.
import optuna.integration
pruning_callback = optuna.integration.LightGBMPruningCallback(trial, 'validation-error')
gbm = lgb.train(param, dtrain, valid_sets=[dvalid], callbacks=[pruning_callback])
더 알아보기
- Optuna 시작하기 — 첫 최적화
- Pythonic Search Space — 탐색 공간 정의
- Optuna Samplers — 샘플러 참조