콘텐츠로 이동

하이퍼파라미터 최적화 (Hyperparameter Optimization)

난이도: 중급
선수 지식: 교차 검증, 기본 ML 모델 하이퍼파라미터
관련 문서: 학습률 | 경사 하강법 | 과적합과 과소적합 | No Free Lunch


개요

하이퍼파라미터 최적화(Hyperparameter Optimization, HPO)는 모델의 학습 과정을 제어하는 설정값(하이퍼파라미터)의 최적 조합을 찾는 과정이다. 파라미터가 데이터에서 학습되는 것과 달리, 하이퍼파라미터는 사전에 설정해야 한다.

예시: - 학습률, 배치 크기, 에폭 수 - 정규화 강도 (\(\lambda\), 드롭아웃 비율) - 모델 구조 (레이어 수, 유닛 수, 트리 깊이) - 옵티마이저 선택 및 설정


핵심 개념

미리 정의한 파라미터 격자의 모든 조합을 탐색한다.

예시

param_grid = {
    'C': [0.1, 1, 10, 100],
    'gamma': [0.001, 0.01, 0.1, 1]
}
# 총 4 × 4 = 16 조합
장점 단점
단순, 재현 가능 기하급수적 비용: \(O(n^k)\)
격자 내 최적 보장 중요하지 않은 파라미터에도 동일 자원
병렬화 용이 해상도가 고정
  • 복잡도: \(O(n^k)\) (\(k\): 파라미터 수, \(n\): 각 파라미터의 값 수)

파라미터 분포에서 무작위로 샘플링한다.

왜 그리드보다 나은가? (Bergstra & Bengio, 2012)

핵심 통찰: 중요한 하이퍼파라미터는 일부에 불과하다.

  • 그리드 탐색: 중요하지 않은 차원에도 균등하게 배분 --> 중요한 차원의 커버리지 부족
  • 무작위 탐색: 각 차원을 독립적으로 더 다양하게 탐색
그리드 탐색 (4×4)        무작위 탐색 (16회)
│ × × × ×             │  ×    ×
│ × × × ×             │    ×     ×
│ × × × ×             │ ×      ×
│ × × × ×             │   ×  ×    ×
└─────────             │ ×     ×  ×
중요 파라미터의           │  ×   ×  ×
고유값: 4개              └──────────
                       중요 파라미터의
                       고유값: ~16개
장점 단점
같은 예산으로 더 나은 커버리지 과거 결과를 활용하지 않음
병렬화 용이 최적 영역을 놓칠 수 있음
사전 지식 불필요

3. 베이지안 최적화 (Bayesian Optimization)

핵심 아이디어

\(f(\text{하이퍼파라미터}) \to \text{성능}\)을 모델링하는 대리 모델(surrogate model)을 구축하고, 이를 기반으로 다음 탐색 지점을 지능적으로 선택한다.

알고리즘

  1. 초기 랜덤 포인트들로 대리 모델 학습
  2. 획득 함수(acquisition function)로 다음 포인트 선택
  3. 해당 포인트에서 모델을 실제 평가
  4. 대리 모델 업데이트
  5. 반복

대리 모델

모델 설명 도구
가우시안 프로세스 (GP) 불확실성 추정 제공, \(O(n^3)\) scikit-optimize
TPE (Tree-structured Parzen Estimator) \(P(\text{params}\|\text{score})\) 모델링 Hyperopt, Optuna
랜덤 포레스트 범주형 처리 용이 SMAC

획득 함수: 탐험 vs 활용

함수 수식 특성
Expected Improvement (EI) \(E[\max(0, f(x) - f_{\text{best}})]\) 가장 일반적
Upper Confidence Bound (UCB) \(\mu(x) + \kappa\sigma(x)\) \(\kappa\)로 탐험/활용 조절
Probability of Improvement (PI) \(P(f(x) > f_{\text{best}})\) 보수적
graph TD
    A[초기 랜덤 평가] --> B[대리 모델 학습]
    B --> C[획득 함수로 다음 포인트 선택]
    C --> D[실제 모델 평가]
    D --> E{예산 소진?}
    E -->|아니오| B
    E -->|예| F[최적 하이퍼파라미터 반환]
장점 단점
샘플 효율적 순차적 (병렬화 어려움)
과거 결과를 활용 대리 모델 학습 오버헤드
노이즈가 있는 평가 처리 구현 복잡

4. Hyperband & ASHA

Hyperband (Li et al., 2018)

Successive Halving 기반: 많은 설정을 적은 자원으로 시작하고, 상위만 남겨 자원을 늘린다.

라운드 설정 수 자원 (에폭)
1 81 1
2 27 3
3 9 9
4 3 27
5 1 81
  • \(n\) vs \(B/n\) 트레이드오프 (많은 설정 vs 깊은 평가) 해결
  • 여러 bracket으로 다양한 조기 종료 공격성

ASHA (Asynchronous SHA)

  • Successive Halving의 비동기 병렬 버전
  • 분산 환경에서 자원 활용 극대화

BOHB

베이지안 최적화 + Hyperband: 샘플링에는 BO를 사용하고, 조기 종료에는 Hyperband를 사용. 두 장점 결합.


5. 인구 기반 학습 (Population-Based Training, PBT)

알고리즘 (DeepMind, 2017)

  1. 여러 모델을 다른 하이퍼파라미터로 동시 학습
  2. 주기적으로:
  3. 활용(exploit): 성능이 나쁜 모델을 좋은 모델의 가중치로 교체
  4. 탐험(explore): 하이퍼파라미터를 무작위로 변동

핵심 장점

  • 학습 중에 하이퍼파라미터를 적응 --> 고정값이 아닌 스케줄 발견
  • 학습률 스케줄, 정규화 강도 스케줄 등을 자동 탐색

6. 기타 방법

방법 설명
진화/유전 알고리즘 설정의 인구를 진화시킴
다중 충실도 (Multi-fidelity) 저비용 근사(데이터 부분집합, 적은 에폭)로 필터링
전이 학습 for HPO 유사 태스크의 결과로 워밍 스타트
NAS (Neural Architecture Search) 아키텍처 자동 설계 (DARTS, ENAS)

상세 비교표

방법 평가 횟수 순차적? 과거 활용? 조기 종료?
그리드 탐색 기하급수 아니오 아니오 아니오
무작위 탐색 고정 예산 아니오 아니오 아니오
베이지안 최적화 소수 대체로 예 기본 아님
Hyperband 많은 저비용 부분적 아니오
BOHB 적응적 부분적
PBT 연속적 아니오 예 (인구) 내재적
flowchart TD
    A[HPO 방법 선택] --> B{평가 비용?}
    B -->|비쌈 <100회| C[베이지안 최적화]
    B -->|저렴 + 딥러닝| D[Hyperband / ASHA]
    B -->|불확실| E{파라미터 수?}
    E -->|적음 ≤3| F[그리드 탐색]
    E -->|많음| G[무작위 탐색으로 시작]
    A --> H{학습 중 적응 필요?}
    H -->|예| I[PBT]
    A --> J{최상의 효율?}
    J -->|예| K[BOHB]

실무 지침

탐색 분포 설정

하이퍼파라미터 추천 분포 이유
학습률 로그 균일 (log-uniform) 규모가 중요 (0.001 vs 0.01)
정규화 강도 로그 균일 규모가 중요
드롭아웃 비율 균일 (0.0~0.5) 범위가 제한적
배치 크기 {32, 64, 128, 256} 이산적
레이어/유닛 수 균일 정수 또는 로그 균일 문제 의존

일반적 워크플로

  1. 무작위 탐색으로 영역 파악 (~20-50회)
  2. 유망한 영역에서 베이지안 최적화로 정밀 탐색
  3. 또는 딥러닝이면 Hyperband/ASHA로 효율적 탐색
  4. 최종 모델은 교차 검증으로 확인

언제 사용하는가

상황 추천 방법
빠른 프로토타이핑 무작위 탐색
고비용 평가 (< 100회) 베이지안 최적화
딥러닝 + 조기 종료 Hyperband / ASHA
최상의 효율 BOHB
파라미터 스케줄 탐색 PBT
파라미터 ≤ 3개 그리드 탐색도 가능

흔한 오해와 함정

1. "그리드 탐색이 가장 신뢰할 수 있다"

  • 차원이 많으면 비효율적이고, 무작위 탐색이 같은 예산으로 더 나은 결과를 주는 경우가 많다.

2. "베이지안 최적화가 항상 최선이다"

  • 평가가 저렴하고 조기 종료가 가능하면 Hyperband가 더 효율적. BO는 비용이 높은 평가에 적합.

3. "HPO는 모델 학습 후에만 한다"

  • PBT처럼 학습 중에 하이퍼파라미터를 조정하는 방법도 있으며, 이것이 더 효과적일 수 있다.

4. "더 많은 하이퍼파라미터를 탐색할수록 좋다"

  • 탐색 공간이 커지면 필요한 예산이 기하급수적으로 증가한다. 중요한 파라미터에 집중해야 한다.

5. "학습률은 로그 스케일로 탐색해야 한다"

  • 맞는 말이다. 하지만 같은 원리로 정규화 강도도 로그 스케일이어야 하며, 이를 간과하는 경우가 많다.

다른 주제와의 연결


자주 묻는 면접 질문

  1. 무작위 탐색이 그리드 탐색보다 좋은 이유는?
  2. 중요한 하이퍼파라미터가 일부에 불과할 때, 무작위 탐색이 각 차원을 더 다양하게 탐색. 같은 예산으로 중요 파라미터의 더 많은 값을 시도.

  3. 베이지안 최적화의 탐험-활용 트레이드오프를 설명하시오

  4. 탐험: 불확실한 영역 탐색 (정보 수집). 활용: 현재 최선 근처 탐색 (성능 개선). 획득 함수가 이 균형을 조절.

  5. Hyperband를 베이지안 최적화보다 선호하는 경우는?

  6. 평가가 저렴하고 조기 종료가 가능할 때 (딥러닝). 많은 설정을 빠르게 시도하고 부적합한 것을 일찍 제거.

  7. 하이퍼파라미터 수가 탐색 전략에 미치는 영향은?

  8. 파라미터 수 증가 --> 탐색 공간 기하급수적 증가. 적은 파라미터: 그리드 가능, 많은 파라미터: 무작위/BO/Hyperband 필수.

코드 예시

# === scikit-learn: 그리드 & 무작위 탐색 ===
from sklearn.model_selection import GridSearchCV, RandomizedSearchCV
from scipy.stats import loguniform, uniform

# 그리드 탐색
grid_search = GridSearchCV(
    estimator=model,
    param_grid={'C': [0.1, 1, 10], 'gamma': [0.01, 0.1, 1]},
    cv=5, scoring='accuracy', n_jobs=-1
)
grid_search.fit(X_train, y_train)

# 무작위 탐색 (로그 균일 분포)
random_search = RandomizedSearchCV(
    estimator=model,
    param_distributions={
        'C': loguniform(1e-3, 1e3),
        'gamma': loguniform(1e-4, 1e1)
    },
    n_iter=100, cv=5, scoring='accuracy', n_jobs=-1
)
random_search.fit(X_train, y_train)

# === Optuna: 베이지안 최적화 (TPE) ===
import optuna

def objective(trial):
    lr = trial.suggest_float('lr', 1e-5, 1e-1, log=True)
    n_layers = trial.suggest_int('n_layers', 1, 5)
    dropout = trial.suggest_float('dropout', 0.0, 0.5)

    model = build_model(lr=lr, n_layers=n_layers, dropout=dropout)
    accuracy = train_and_evaluate(model, X_train, y_train, X_val, y_val)
    return accuracy

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=100)
print(f"Best params: {study.best_params}")
print(f"Best accuracy: {study.best_value}")

# Optuna + Pruning (Hyperband 유사)
study = optuna.create_study(
    direction='maximize',
    pruner=optuna.pruners.HyperbandPruner()
)

용어 정리

영어 한국어
Hyperparameter Optimization 하이퍼파라미터 최적화
Grid Search 그리드 탐색
Random Search 무작위 탐색
Bayesian Optimization 베이지안 최적화
Surrogate Model 대리 모델
Acquisition Function 획득 함수
Expected Improvement 기대 향상
Successive Halving 순차 절반
Population-Based Training 인구 기반 학습
Multi-fidelity 다중 충실도
Exploration-Exploitation 탐험-활용

참고 자료

  • Bergstra & Bengio (2012) - "Random Search for Hyper-Parameter Optimization"
  • Snoek, Larochelle, Adams (2012) - "Practical Bayesian Optimization of Machine Learning Algorithms"
  • Li et al. (2018) - "Hyperband: A Novel Bandit-Based Approach to Hyperparameter Optimization"
  • Jaderberg et al. (2017) - "Population Based Training of Neural Networks" (PBT)
  • Falkner et al. (2018) - "BOHB: Robust and Efficient Hyperparameter Optimization at Scale"
  • Akiba et al. (2019) - "Optuna: A Next-generation Hyperparameter Optimization Framework"