저번 Gaussian Process 포스팅에 이어 쓰는 Bayesian Optimization!
Gaussian Process 내맘대로 정리
이번 저널클럽에서 GAUCHE: A Library for Gaussian Processes in Chemistry라는 흥미로운 논문을 발표하게 되었다.평소 GP를 공부해보고 싶었는데 마침 잘 된 것 같다 :)그리고 함께 https://www.edwith.org/bayesiandeeple
kyungheee97.tistory.com
안그래도 최적화 좀 공부하려고 했는데 잘된듯 :)
이 글은 구글링 + GPT + 제 생각에 의해 작성되었습니다.
피드백은 언제든지 환영입니다.
1. Bayes' Theory
일단, bayes라는 사람이 만들어낸 이론이 있는데 그건 그 유명한 Bayes' Theory [베이즈 정리] 이다.
Bayes Rule이라고도 하는 이 이론에 대해 살펴보자.

위의 그림처럼 Prior[사전 확률]을 Data or Likelihood[가능도 함수]를 통해 업데이트하여 Posterior[사전확률]을 계산한다는 이론이다.

이를 통해 새로운 데이터가 주어졌을 때 모수에 대한 더 정확한 추정을 할 수 있게 한다. 여기서 모수란? 영어로는 parameter이고 확률 분포를 설명하는데 사용되는 고정된 수치이며 평균과 표준편차와 같은 값을 의미한다.
베이지안 이론에서는 일어나지 않은 일에 대한 확률에 불확실성[uncertainty] 개념을 적용한다. 그래서 사건과 관련 있는 확률들을 이용해 새롭게 일어날 사건을 추정한다.
수식은 위의 그림에 나와있듯이 다음과 같다.
$$P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}$$
$A$ : 원인 , $B$ : 결과 --> 이 가정하에 하나하나 살펴보자
1. $P(A|B)$ 사후확률 [posterior probability] : $B$[결과]가 발생하였다는 조건하에 $A$[원인]이 발생했을 확률
2. $P(B|A)$ 우도확률 [Likelihood or Data] : $A$[원인]가 발생하였다는 조건하에 $B$[결과]가 발생할 확률
3. $P(A)$ 사전확률 [prior probability] : 결과가 나타나기 전에 결정되어 있는 $A$[원인]이 발생할 확률
4. $P(B)$ : $B$[결과]가 발생할 확률
$P(B) = \sum_i P(B|A_i) \cdot P(A_i)$로 나타낼 수 있고 $A_i$는 모든 가능한 사건들을 나타내고 $P(B|A_i)$는 $A_i$가 주어졌을 때 $B$의 조건부 확률을 의미한다. 이렇게 모든 사건에 대한 확률을 더해주면 총합은 1이 되어 이 값은 normalized term으로 본다.
2. Bayesian Optimization
이처럼 베이지안 이론은 사전 확률을 데이터나 가능도 함수를 통해 업데이트하여 사후 확률을 계산하는데, 이와 관련하여 베이지안 최적화는 확률적 모델링과 베이지안 추론을 사용하여 최적화 문제를 해결하는 방법이다.
베이지안 최적화의 핵심은 '사전 정보를 최적값 탐색에 반영하는 것' 이다.
1. 그럼 어떻게 사전 정보을 학습하고 자동적으로 업데이트하는가? → Surrogate Model
Surrogate Model은 어떤 함수를 대표하는 '대리'의 역할을 한다고 볼 수 있다. 원래 함수가 복잡하고 시간이 많이 소요되는 경우, 이 함수를 직접 다루기보다는 Surrogate Model을 사용하여 원하는 결과를 더 빠르게 예측할 수 있음
베이지안 최적화에선 최적의 해를 찾는데 시간이 오래 걸리는 함수가 있을 때, 이 함수의 동작을 정확하게 모델링하는 Surrogate Model을 만들 수 있으면 실제 함수를 호출하지 않고도 비슷한 결과를 빠르게 얻을 수 있다.
그래서 시간과 비용이 많이 소요되는 문제에서 유용하게 활용된다.
2. 수집한 사전 정보를 바탕으로 어떤 기준으로 다음 탐색값을 찾는가? → Acquisition Function
Acquisition Function는 최적화 문제에서 최대화 또는 최소화하려는 대상으로, 주어진 입력 공간에서 우리가 찾고자 하는 최적의 해를 나타내는 함수이다.
그럼 이 그림을 보며 베이지안 최적화의 작동 원리를 이해해보자

1. t=2 일 때의 Acquisition Function이 최대가 되는 지점은 t=3 시점에서 새로 관찰할 점이 된다.
2. 이에 따라, t=3 에서 새로 관찰한 함수값 주변의 파란 영역이 크게 줄어들며, 동시에 Acquisition Function 또한 업데이트 된다.
3. 마찬가지로 t=3 의 Acquisition Function이 최대가 되는 지점에서 t=4 의 새로운 관찰값이 생성되고, 그 주변의 파란 영역이 줄어들며 Acquisition Function이 다시 업데이트 된다.
4. 이러한 과정이 계속 반복되면서 추정값이 실제 목적 함수에 근사하게 되고, 근사한 함수에서 최종 최적값을 찾을 수 있다.
3. 예시 코드
1. 목적함수 생성
# 목적함수 생성
def xgb_eval(learning_rate, max_depth, output = 'score'):
params = {
# n_estimators 값은 100으로 고정
'n_estimators' : 100,
# 호출 시, 실수 값들은 정수형으로 변경해줘야 함
'learning_rate' : learning_rate,
'max_depth' : int(round(max_depth))
}
xgb = XGBRegressor(**params, random_state = 1021)
# Cross Validation
neg_mse_scores = cross_val_score(xgb, X_features, y_target, scoring = 'neg_mean_squared_error', cv=3)
rmse_scores = np.sqrt(-1 * neg_mse_scores)
mean_rmse = np.mean(rmse_scores)
return -mean_rmse # BayesOpt에서 maximize()를 사용하기 위해 음수로 반환
2. 하이퍼파라미터 입력 범위 설정
# 하이퍼 파라미터 입력 범위 설정
xgb_bayes_params= {
'learning_rate' : (0.01, 0.2),
'max_depth' : (6,12)
}
3. 베이지안 최적화 수행
# 베이지안 최적화
model_bayes = BayesianOptimization(f = xgb_eval, pbounds = xgb_bayes_params, random_state = 1021)
# 목적 함수가 최대가 되는 최적 해를 찾기
model_bayes.maximize(init_points = 5, n_iter = 25)
# 최종 도출된 최적해 확인
model_bayes.max()
출처 : https://data-scientist-brian-kim.tistory.com/88
베이지안 최적화(Bayesian Optimization)
이번 포스팅은 하이퍼파라미터 튜닝 방법으로 많이 사용되는 "베이지안 최적화(Bayesian Optimization)" 기법에 대해 설명해보도록 하겠다. 단, Bayesian Optimization 기법의 이론적인 내용을 깊게 들어가면
data-scientist-brian-kim.tistory.com
4. 관련 Paper 이해해보기

함께 들여다 보자.

이 알고리즘1은 베이지안 최적화의 기본적인 흐름을 보여준다. 위에서 설명한 내용을 좀 더 일반화시킨 느낌!
여기서는 함수$f$에 대한 Gaussian Process을 모델로 사용하여 주어진 데이터에 대해 함수의 평균과 분산을 추정한다.
1. 먼저, 초기 공간을 채우기 위해 $n_0$개의 지점에서 함수 $f$를 관찰하여 가우시안 프로세스의 사전 분포를 설정한다.
2. 그런 다음, 주어진 반복 횟수 $N$에 도달할 때까지 다음을 반복한다.
1) 현재 사용 가능한 모든 데이터를 사용하여 함수 $f$에 대한 사후 확률 분포를 업데이트한다.
2) 현재 사후 분포를 기반으로 목적함수를 최대화하는 점 $x_n$을 찾는다점 $x_n$에서 함수를 관찰하고 결과를 얻는다.
3) 관찰된 데이터를 사용하여 사후 분포를 업데이트하고, 반복 횟수 $n$을 증가시킨다.
3. 마지막으로, 반복이 완료된 후에는 두 가지 옵션 중 하나를 반환
함수 $f$의 값이 가장 큰 지점 [목적함수의 최대값] 을 반환사후 분포의 평균이 가장 큰 지점을 반환

그래서 위 그림을 보면, GP그림에서 파란색 동그라미가 있는 지점이 아래 목적함수가 0또는 0에 가까운 지점인 것을 확인할 수 있는데, 이것은 해당 지점에서의 함수 값을 잘 예측하고 있음을 나타낸다.
복잡한 수식과 그에 관련된 딥한 내용은 아직 이해하지 못했습니다ㅠㅠ 다음 포스팅에서 업데이트 하도록 하겠습니다!
여기까지 읽어주셔서 감사합니다 :-)
'AI > bayesian optimization' 카테고리의 다른 글
| Knowledge Gradient (KG)에 대해서 (0) | 2024.09.18 |
|---|---|
| 최적화 스터디 | 1단원 bayesian optimization workflow 복습 (0) | 2024.09.18 |
| 최적화 스터디 | 9주차 : Knowledge Gradient (0) | 2024.08.20 |
| 최적화 스터디 | 1주차 : Bayesian Optimization Overview [1] (0) | 2024.06.06 |
| Gaussian Process 내맘대로 정리 (0) | 2024.05.14 |
댓글