Optuna에서 특정 초기 값부터 최적화

Optuna에서 값의 범위를 변경하고 추가 학습을 수행할 수 있습니다.
마찬가지로 학습을 시작하기 위해 초기 값을 지정할 수도 있다.
사전의 수동 실험에서 괜찮은 파라미터를 알았으니 주위를 탐색할 때 생각해 볼 수 있다.

TL, DR


trial.trial_id 조건 지점으로 초기 값을 지정합니다.
최적화 분포와 같은 분포 유형을 지정해야 합니다 (suggest uniform 등)
단, 클래스 변수 (suggest categorical) 는 범위의 변경에 대응하지 않기 때문에, 클래스 변수를 포함하는 초기 조건을 지정하려면 리셋해야 할 수도 있습니다.

범위를 바꾸다


Optuna의 tutorial에 게재된 예부터 시작합니다.
import optuna

def objective(trial):
    x = trial.suggest_uniform('x', -10, 10)
    return (x - 2) ** 2

study = optuna.create_study()
study.optimize(objective, n_trials=100)

study.trials_dataframe()[('params', 'x')].plot()

이것은 일반적인 최적화다.
우선tutorial처럼 추가 학습을 해야 한다.
study.optimize(objective, n_trials=100)

study.trials_dataframe()[('params', 'x')].plot()

가치의 범위를 바꾸어 보아라.Objective를 재정의합니다.

def objective2(trial):
    x = trial.suggest_uniform('x', -40, 40)
    return (x - 2) ** 2

study.optimize(objective2, n_trials=500)
study.trials_dataframe()[('params', 'x')].plot()

초기 값 설정

import optuna

def objective(trial):
    if trial.trial_id ==0:
        x = trial.suggest_uniform('x', 2, 2)
    else:
        x = trial.suggest_uniform('x', -10, 10)

    return (x - 2) ** 2

study = optuna.create_study()
study.optimize(objective, n_trials=100)

study.trials_dataframe()[('params', 'x')].plot()
study.trials_dataframe().head(5)

x=2부터 시작했어요.원본 파일을 대충 봤을 뿐 샘플링 단계에서 이전에 시험해 본 값과 결과를 샘플링했기 때문에 큰 부작용이 없다고 생각합니다.
※ 하지만,suggestcategorical에서 하나의 값만 지정하면 분류 변수가dynamic range change를 지원하지 않는 등 오류가 발생할 수 있습니다.

좋은 웹페이지 즐겨찾기