Hyperopt

Hyperopt

Hyperopt는 실수형, 이산형, 조건부 차원을 포함한 까다로운(awkward) 탐색 공간에서 직렬·병렬 하이퍼파라미터 최적화를 수행하는 Python 라이브러리예요. 머신러닝 모델의 성능을 좌우하는 하이퍼파라미터를 자동으로 골라주는 도구로, 핵심 개념으로는 탐색 공간(search space), TPE(Tree of Parzen Estimators) 알고리즘, Trials 결과 추적, fmin 최적화 함수를 사용해요.

출처: 문서

본문

설치

PyPI에서 hyperopt를 설치할 수 있어요.

pip install hyperopt
# or with uv
uv add hyperopt

Hyperopt는 다음과 같은 extras를 지원해요.

  • SparkTrials
  • MongoTrials
  • ATPE

사용 예시

목적 함수(objective function)를 정의하고, 탐색 공간을 만든 뒤, fmin으로 그 공간에서 목적 함수를 최소화해요.

# define an objective function
def objective(args):
    case, val = args
    if case == 'case 1':
        return val
    else:
        return val ** 2

# define a search space
from hyperopt import hp
space = hp.choice('a',
    [
        ('case 1', 1 + hp.lognormal('c1', 0, 1)),
        ('case 2', hp.uniform('c2', -10, 10))
    ])

# minimize the objective over the space
from hyperopt import fmin, tpe, space_eval
best = fmin(objective, space, algo=tpe.suggest, max_evals=100)

print(best)
# -> {'a': 1, 'c2': 0.01420615366247227}
print(space_eval(space, best))
# -> ('case 2', 0.01420615366247227}

핵심 개념

  • Search space (탐색 공간): hp 모듈은 hp.choice, hp.uniform, hp.lognormal 같은 함수로 후보 탐색 공간을 정의해요. 조건부 차원(conditional dimension)도 표현할 수 있어요.
  • TPE (Tree of Parzen Estimators): hyperopt에 구현된 베이지안 최적화 알고리즘으로, algo=tpe.suggest로 사용해요.
  • Trials: 반복 평가마다 파라미터와 결과값을 기록해요. fmin의 결과로 최적 파라미터를, space_eval로 전체 탐색 공간에서의 실제 값을 얻을 수 있어요.
  • fmin: 탐색 공간 내에서 목적 함수를 최소화하는 핵심 함수예요. algo에 제안 알고리즘을, max_evals에 최대 평가 횟수를 지정해요.

알고리즘

현재 hyperopt에는 세 가지 알고리즘이 구현되어 있어요.

Hyperopt는 가우시안 프로세스(Gaussian process)와 회귀 트리(regression tree) 기반 베이지안 최적화를 수용하도록 설계되었지만, 현재는 구현되어 있지 않아요. 모든 알고리즘은 Apache Spark 또는 MongoDB를 이용해 두 가지 방식으로 병렬화할 수 있어요.

더 알아보기 (Learn more)