Hyper Parameter Tuning - Grid Search, Random Search

Soogyung Gwon·2026년 4월 7일

구름을잡아라

목록 보기
42/60

미리 정한 후보값의 모든 조합을 다 시도하는 방식
(정해진 격자(grid)를 전부 훑는다)

그림에서
가로축 - 중요한 파라미터
세로축 - 중요하지 않은 파라미터

-> 그래서 세로축 파라미터는 별로 안 중요한데도 그 방향으로 많은 시도를 써버림
(중요하지 않은 차원에도 자원을 많이 낭비하고 있다.)

전체 시도 횟수를 세로축까지 나눠 써버리기 때문에 생각보다 많이 다양하게 탐색하지 못하고 있음

파라미터 조합을 랜덤하게 샘플링해서 시도

같은 개수의 점을 찍더라도 가로축(중요한 파라미터)의 더 다양한 값들을 탐색하고 있음
즉 중요한 파라미터 축을 더 풍부하게 커버하고 있음

Random Search는 같은 9번을 시도해도 중요한 축에서 우연히라도 더 많은 서로 다른 값을 보게 됩니다. 즉 중요한 하이퍼파라미터 공간을 더 넓게 탐색할 가능성이 크다.

그러므로:
하이퍼파라미터가 많고 그 중 일부만 진짜 중요할 때는 Random Search가 Grid Search 보다 더 효율적인 경우가 많다.

hyperopt

hyperopt는 하이퍼파라미터 최적화를 자동으로 해주는 Python 패키지이다.

hyperopt가 하는 일

hyperopt는 아래 과정을 자동으로 반복

  1. 파라미터 후보 하나를 고름
  2. 그 파라미터로 모델 학습
  3. 성능 평가 (예: Log Loss, Accuracy, RMSE 등)
  4. 더 좋은 방향으로 다음 후보를 탐색

즉, "좋은 조합을 찾아가는 탐색기"

hyperopt의 대표 알고리즘

TPE (Tree-structured Parzen Estimator)

이전에 잘 나왔던 파라미터 주변을 더 집중적으로 찾아보는 방식으로 랜덤 탐색보다 보통 더 효율적이다.

hyperopt의 기본 구조

  1. objective 함수
  • 파라미터 조합이 얼마나 좋은지 계산하는 함수

예)
validation log loss
cross-validation accuracy
RMSE

(loss 값 반환)

  1. search space
    탐색할 하이퍼파라미터 범위 정의

  2. 최적화 알고리즘

  • 보통 tpe.suggest
  1. 몇 번 시도할지
    max_evals
profile
오랜시간 망설였던 코딩을 다시 해보려고 노력하고 있는 사람

0개의 댓글