각 하이퍼파라미터마다 사전 분포(기본적으로 균등 분포)를 설정합니다.
사전 분포 모델은 해당 하이퍼파라미터의 가능한 값의 확률 분포를 나타냅니다.
현재까지 수행된 시도 중에서 목적 함수 값이 작은(좋은) 시도와 큰(나쁜) 시도로 데이터를 분할합니다.
각 하이퍼파라미터의 분포는 좋은 시도와 나쁜 시도를 기반으로 새로운 확률 분포로 조건적으로 모델링됩니다.
샘플링된 값과 해당 값에 대한 목적 함수의 결과를 사용하여 사후 분포를 업데이트합니다.
새로운 데이터로 모델을 보완하여 더 정확한 확률 분포를 얻습니다.
이 과정을 반복하여 목적 함수를 효과적으로 탐색하고, 최적의 하이퍼파라미터 조합을 찾습니다. TPE는 목적 함수의 평가 횟수가 적을 때에도 효과적으로 동작하며, 특히 차원이 높고 범주형 변수가 많은 경우에 유용합니다.
optuna는 범위가 지정된 하이퍼파라미터 탐색을 효과적으로 수행할 수 있는 라이브러리입니다.
사용자가 정의한 목적 함수(objective function)를 최소화 또는 최대화하는데 사용됩니다.
일반적으로 다음과 같은 과정을 거칩니다:
하이퍼파라미터 공간 정의: 최적화할 하이퍼파라미터의 범위를 정의합니다.
목적 함수 정의: 최적화할 대상 함수를 정의합니다. 이 함수의 출력을 최소화 또는 최대화하려고 합니다.
Optuna study 생성: 하이퍼파라미터 최적화를 위한 Optuna study를 생성합니다.
하이퍼파라미터 최적화: optimize 메서드를 사용하여 최적의 하이퍼파라미터를 찾습니다.
import optuna
def objective(trial):
x = trial.suggest_float('x', -10, 10)
return (x - 2) ** 2
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)
from optuna.samplers import TPESampler
sampler = TPESampler(seed=42)
study = optuna.create_study(direction='minimize', sampler=sampler)
study.optimize(objective, n_trials=100)
여기서 seed 매개변수는 랜덤 시드를 설정합니다. 설정하지 않으면 각 실행마다 다른 결과를 얻을 수 있습니다.
이러한 코드는 Optuna를 사용하여 목적 함수의 최적화를 수행하는 예시입니다. 최적화된 하이퍼파라미터를 찾기 위해 study.best_params 등을 사용할 수 있습니다.