kbsoo

Bayesian Optimization

베이지안 최적화(Bayesian Optimization)란?

베이지안 최적화는 머신러닝에서 하이퍼파라미터 튜닝을 똑똑하게, 그리고 효율적으로 수행하기 위한 방법. 하이퍼파라미터는 모델을 학습시키기 전에 사람이 직접 설정해야 하는 값들인데, 이 값들이 모델의 성능에 큰 영향을 미침. 예를 들어 학습률(learning rate)이나 트리의 깊이 같은 것들이 하이퍼파라미터.

문제는 이 값들을 무작정 시도해보는 건 시간도 오래 걸리고 비효율적이라는 점

다른 하이퍼 파라미터 튜닝 방법

이런 문제들 때문에 베이지안 최적화가 등장함

베이지안 최적화는 이전 테스트 결과를 보고 다음에 시도할 조합을 똑똑하게 예측

베이지안 최적화의 기본 아이디어 쉽게 이해하기

베이지안 최적화는 두 가지 중요한 도구를 사용함

대체 모델(Surrogate Model)

획득 함수(Acquisition Function)

베이지안 최적화의 동작을 단계별로 알아보기

베이지안 최적화가 실제로 어떻게 작동하는지, 예시를 통해 단계별로 알아보겠음 우리가 어떤 함수의 최소값을 찾고 있다고 생각해보면 ex: $f(x) = (x-2)^2$

  1. 초기화
  1. 대체 모델 학습
  1. 획득 함수로 다음 지점 선택
  1. 모델 평가
  1. 반복

베이지안 최적화의 장점과 단점

장점

단점

예시 코드

# 필요한 라이브러리 설치
# !pip install scikit-optimize

# 필요한 라이브러리 임포트
import numpy as np
from skopt import gp_minimize
from skopt.space import Real

# 최적화할 함수 정의
def objective(x):
    return (x[0] - 2) ** 2  # x는 리스트이므로 x[0]를 사용

# 하이퍼파라미터 범위 설정
space = [Real(-10, 10, name='x')]  # x는 -10에서 10 사이의 실수

# 베이지안 최적화 실행
res = gp_minimize(
    objective,       # 최적화할 함수
    space,           # 하이퍼파라미터 범위
    n_calls=10,      # 총 10번 시도
    random_state=0   # 결과 재현성을 위해
)

# 결과 출력
print(f"최적의 x 값: {res.x[0]}")  # 최적의 하이퍼파라미터
print(f"최적의 함수 값: {res.fun}")  # 그때의 함수 값

을 실행하면

최적의 x 값: 1.8568923645003679
최적의 함수 값: 0.020479795338295567

이렇게 최적화 결과로 res.x[0]이 약 2에 가깝게 나오고, rest.fun0에 가까운 값이 나옴