비용 큰 블랙박스 최적화에 베이지안 최적화 적용하기
Gaussian Process 서로게이트와 Expected Improvement를 이용해 비용이 큰 블랙박스 함수를 최적화하고 Multi-Fidelity 전략을 설계하는 방법
2026-08-14 · 최초 발행 2024-04-29
비싼 평가를 어디에 쓸지 결정하는 최적화
시뮬레이션, ML 학습, A/B 실험처럼 한 번의 평가 비용이 큰 함수 (f(x))는 무작정 많이 실행하기 어렵다. 베이지안 최적화는 잡음이 섞일 수 있고 기울기를 가정할 수 없는 이런 함수의 전역 최적화를 대상으로 한다.
핵심은 실제 함수를 확률적 서로게이트 모델로 근사한 뒤, 취득함수(acquisition function)가 가장 큰 지점을 다음 평가 대상으로 고르는 데 있다. 사전분포를 둔 모델이 관측으로 후행추론을 수행하고, 취득함수를 최대화해 실제 평가를 실행한 뒤 관측을 다시 반영하는 순환 구조다.
GP가 제공하는 예측과 불확실성
Gaussian Process(GP)는 임의의 점 집합에서 함수값이 다변량 정규분포를 이룬다는 가정에 기반한다. 평균함수 (m(x))와 커널 (k(x,x′))로 정의하며, 관측 뒤 임의 지점의 예측은 (N(\mu(x), \sigma²(x))) 형태가 된다.
여기서 (\mu(x))는 추정 성능을, (\sigma(x))는 불확실성을 나타낸다. 두 값은 다음 평가에서 이미 유망한 영역을 활용할지, 아직 충분히 알지 못하는 영역을 탐색할지 결정하는 근거가 된다.
GP의 계산 복잡도는 (O(n³))이다. 데이터 규모가 커지면 희소 GP의 유도점, 커널 근사, 분산 학습으로 이 부담을 완화할 수 있다.
서로게이트와 취득함수를 운영할 때의 선택
커널에는 Matern(ν=2.5), RBF, ARD(차원별 길이척도)를 적용할 수 있다. ARD는 중요 변수를 식별하고 불필요한 차원의 영향을 억제하는 데 사용된다.
관측 잡음은 i.i.d. 가우시안 노이즈로 모델링하거나 헤테로스케다스틱 노이즈로 확장할 수 있다. 수치적 안정성을 위해 jitter, 입력 정규화, 타겟 표준화도 함께 적용한다.
Expected Improvement(EI)는 현재 최선값 (f*)와 비교한 기대 개선량의 기댓값이다. 직관적으로 해석하기 쉽고 안정적인 성능을 제공하며, 탐색 상수 ξ로 탐색과 활용의 균형을 조절한다.
(\sigma(x)=0)이면 EI는 0이다. 그 외에는 (z=(\mu-f*-\xi)/\sigma), (EI=(\mu-f*-\xi)\cdot\Phi(z)+\sigma\cdot\phi(z))로 계산한다. 병렬 또는 노이즈 환경에서는 qEI와 NEI로 확장할 수 있다.
취득함수 자체도 비선형·비볼록 문제다. 다중 시작점과 로컬 최적화를 결합하거나, 진화전략과 DIRECT 같은 전역 탐색을 함께 쓴다. 확률적 제약 (Pr[g(x)\le0]>\tau)을 후보 선택에 포함하고, 비용·시간 예산 안에서 최적화할 수 있다. 신뢰영역(trust region)은 지나치게 먼 지점으로 도약하는 일을 줄인다.
충실도와 비용을 함께 모델링하는 방법
Multi-Fidelity Bayesian Optimization은 빠르지만 거친 저충실도 정보와, 느리지만 정확한 고충실도 정보를 결합한다. 설계 공간에 충실도 변수 (s∈[0,1])를 추가하거나 Co-Kriging으로 공분산을 결합하는 방식이 있다.
비용 인지 취득에서는 Expected Improvement per Unit Cost, Knowledge Gradient with Costs 등을 사용해 단위 비용당 가치를 크게 만드는 평가 지점과 충실도를 선택한다.
하이퍼파라미터 최적화에서는 대형 모델(LGBM, XGBoost, 딥러닝)의 학습 비용을 줄이는 데 쓸 수 있다. 데이터 샘플링이나 epoch 수를 충실도로 두면 탐색을 가속할 수 있다.
CFD·FEA 기반 공력 및 구조 설계에서는 저격자(코스 그리드)에서 시작해 고격자(파인 그리드)로 정밀화하는 흐름을 구성할 수 있다. 실험 실패 비용이 높다면 확률적 제약으로 안전한 탐색을 수행한다.
디지털 트윈의 파라미터 캘리브레이션에서는 간이 모델과 정밀 솔버를 결합하고, 오프라인 탐색 뒤 온라인에서 국소 보정을 수행할 수 있다. A/B/n 실험에서는 트래픽과 기간 비용을 고려한 비용 인지 취득을 사용하면서 안전 기준치 하한선을 유지한다. 전환율·수익처럼 다목적을 다룰 때는 MOBO로 파레토 프론티어를 탐색한다.
평가부터 갱신까지의 반복 루프
입력은 초기 설계점 ({x_i, y_i}), 평가 예산 (B), 그리고 선택적으로 제약·비용 모델 (c(x,s))다.
- GP 하이퍼파라미터를 MLE/MAP으로 최적화해 서로게이트를 학습한다.
- EI, NEI, qEI를 계산하며 비용을 인지한다면 (\alpha(x,s)/c(x,s))를 사용한다.
- 전역 탐색과 로컬 정교화를 결합해 제약을 만족하는 점을 선택한다.
- 선택한 ((x,s))를 실제 평가하고, 실패하면 재시도하거나 실패 라벨 또는 큰 노이즈로 기록한다.
- (D←D∪{(x,s,y,c)})로 데이터를 갱신하고 예산 (B)의 소모를 확인한다.
결과로 최적 추정 해 (\hat{x}), 베스트 관측값 (f*), 신뢰구간, ARD 길이척도 기반 중요도 등을 얻는다.
실패나 타임아웃은 k회 재시도한 뒤 실패로 기록하고 관측 노이즈를 확대한다. 취득함수에서는 해당 영역에 패널티를 둔다. Cholesky 실패가 발생하면 jitter를 늘리고, 타겟을 재스케일하거나 커널 하이퍼파라미터 경계를 강화한다. 제약 위반은 확률적 제약을 만족하는 후보만 남기는 방식으로 처리한다.
단일 충실도와 다중 충실도의 운영 차이
| 항목 | 단일 충실도 BO | 다중 충실도 BO |
|---|---|---|
| 샘플 효율 | 중간 | 높음(저충실도 활용) |
| 비용/시간 | 일정·높음 | 낮음~중간(비용 인지 최적화 시) |
| 일관성(바이어스) | 높음 | 충실도 간 바이어스 보정 필요 |
| 안정성(수치/운영) | 높음 | 모델·정책 복잡도 증가 |
| 운영 편의 | 간단 | 충실도 정의·비용 모델 필요 |
GP와 EI를 사용하는 단일 충실도 예제
환경은 Python 3.10, scikit-optimize 0.9+, numpy 1.26+이며, 브래닌(Branin) 함수에 EI를 적용한다.
# pip install scikit-optimize numpy
from skopt import gp_minimize
from skopt.space import Real
from skopt.utils import use_named_args
import numpy as np
# Branin-like test function (shifted)
def branin(xy):
x, y = xy
a, b, c, r, s, t = 1.0, 5.1/(4*np.pi**2), 5/np.pi, 6.0, 10.0, 1/(8*np.pi)
return (a*(y - b*x**2 + c*x - r)**2 + s*(1-t)*np.cos(x) + s)
space = [Real(-5.0, 10.0, name="x"), Real(0.0, 15.0, name="y")]
@use_named_args(space)
def objective(**params):
return branin([params["x"], params["y"]])
res = gp_minimize(
objective,
dimensions=space,
base_estimator=None, # default GP(Matern, ARD)
acq_func="EI", # Expected Improvement
acq_optimizer="auto",
n_calls=40,
n_initial_points=8,
random_state=42,
)
print("Best f(x):", res.fun)
print("Best x:", res.x)
타겟 정규화가 불안정하면 y를 표준화한 뒤 역변환해 보고한다. 제약이 있다면 목적함수에 penalty를 추가하거나 확률적 제약 모델을 별도로 구성한다.
다중 충실도 정책을 설계할 때
충실도 변수 (s∈[0,1])를 추가할 경우 (s=0)은 저충실도, (s=1)은 고충실도다. 커널은 (k_x(x,x′)+k_s(s,s′)+상호작용) 항으로 구성할 수 있다.
Co-Kriging에서는 충실도별 프로세스를 계층적으로 결합한다.
[ f_{high}(x)=\rho\cdot f_{low}(x)+\delta(x) ]
여기서 (\rho)와 (\delta)는 GP로 추정한다.
EIC(Expected Improvement per Cost)는 (EI(x,s)/cost(x,s))를 최대화해 값과 비용의 비율로 충실도를 고른다. KG with Costs는 정보 획득량 대비 비용을 극대화하며, 저충실도에서 정보 이득이 낮아지면 고충실도로 전환한다.
운영은 저충실도에서 넓게 탐색한 후 고충실도 평가로 집중 정밀화하는 방식으로 시작할 수 있다. 저충실도 EI/cost가 임계치 미만이면 고충실도만 탐색하고, 최종 보고 전에는 고충실도에서 국소 재평가해 바이어스를 제거한다.
Multi-Fidelity의 구체 API와 클래스는 BoTorch, Emukit, Dragonfly 등 라이브러리별로 상이하며 최신 정보 확인이 필요하다. 충실도 변수, 공분산 결합, 비용 인지 취득이라는 개념적 틀은 일관된다.
기대할 수 있는 변화와 운영상의 조건
동등 품질 해에 도달하는 평가 횟수는 310배 감소할 수 있으며, 동일 예산에서는 최적값 향상을 기대할 수 있다. 저충실도를 적극 활용하는 Multi-Fidelity 적용 시 비용은 4070% 절감될 수 있고, 이는 케이스에 의존한다.
불확실성을 정량화하면 의사결정의 투명성이 높아진다. 실패와 제약 대응을 탐색 과정에 포함할 수 있어 운영 리스크도 줄일 수 있다. 이를 안정적으로 운영하려면 정규화, 수치 안정화, 취득함수 최적화, 비용 모델을 함께 체계화해야 한다.