Bayesian Optimization으로 해결해보는 평일 직장인의 점심 메뉴 고민
베이즈 최적화(Bayesian Optimization)로 해결해보는 평일 직장인의 점심 메뉴 고민?
-
매일 오전 11시 30분, 어김없이 찾아오는 질문이 있음.
-
"오늘 뭐 먹지?"
-
이 질문은 단순해 보이지만, 실제로는 꽤 복잡한 의사결정 문제임.
-
주 5일, 연간 약 260회 반복되는 이 결정은, 일생 직장생활 30년으로 환산하면 7,500번의 점심 메뉴 선택 문제임.
-
문제는 매번 선택이 완벽하지 않다는 것임.
-
어제 먹은 김치찌개는 괜찮았는데, 오늘도 또 먹으면 질릴 것 같음. 새로운 집을 시도하자니 맛없으면 점심 한 끼를 날리는 것 같은 찝찝함이 남음.
-
이 갈등에는 이름이 있음. 탐색-활용 딜레마(Exploration-Exploitation Dilemma)임.
-
탐색(Exploration)은 아직 가보지 않은 가게, 먹어보지 않은 메뉴를 시도하는 행동임.
-
활용(Exploitation)은 이미 맛있다고 알고 있는 단골집을 다시 찾는 행동임.
-
탐색만 하면? 매일 새로운 집을 가다가 맛없는 곳에서 점심을 망칠 확률이 높아짐.
-
활용만 하면? 단골 순대국밥집만 30년을 다니다 끝나는 삶임.
-
둘 사이 어딘가에 최적의 비율이 있는데, 그 비율을 손으로 계산하기가 어려움.
-
이 문제를 수학적으로 푸는 방법론이 베이즈 최적화(Bayesian Optimization, 이하 BO)임.
-
BO는 "평가하는 데 비용이 많이 드는 함수"의 최댓값을 효율적으로 찾는 방법임.
-
점심 메뉴로 치면, "이 가게를 먹어봤을 때 얼마나 만족할까?"를 평가하는 데 드는 비용이 바로 점심 한 끼임.
-
점심을 먹어봐야만 만족도를 알 수 있고, 먹는 데는 돈과 시간이 들고, 하루에 한 번밖에 평가할 수 없음. 즉 평가가 매우 비쌈.
-
BO는 이런 상황에서 "지금까지 먹어본 기록"을 바탕으로 "다음에는 어디를 시도하면 가장 좋은 정보를 얻을 수 있을까"를 계산해서 최소한의 시도로 최적 메뉴를 찾는 전략임.
-
BO의 작동 구조는 크게 세 부분으로 나뉨. 대리 모델(Surrogate Model), 획득 함수(Acquisition Function), 순차적 의사결정(Sequential Decision Making)임.
-
대리 모델(Surrogate Model)은 실제 함수(점심 만족도) 대신 사용하는 근사 모델임.
-
가장 많이 쓰이는 대리 모델이 가우시안 프로세스(Gaussian Process, 이하 GP)임.
-
GP는 "내가 아직 가보지 않은 가게의 만족도를 추정할 때, 추정값과 함께 그 불확실성도 같이 계산해주는" 모델임.
-
요리로 비유하자면, 음식의 맛을 단순히 "이 집은 7점"이라고 말하는 게 아니라, "이 집은 7점인데, 그 추정 범위가 ±0.5야"라고 말하는 것과 같음.
-
단골 김치찌개집은 30번 먹어봤으니 불확실성이 낮음. 처음 보는 쌀국수 가게는 단 한 번도 가보지 않았으니 불확실성이 높음.
-
GP는 이 불확실성을 수치로 다룰 수 있기 때문에 BO에서 핵심 도구로 쓰임.
-
지금까지 먹어본 가게와 그 만족도 점수가 GP의 학습 데이터임. 이 데이터가 쌓일수록 취향 모델이 정교해짐.
-
대리 모델이 "각 가게의 예상 만족도와 불확실성"을 계산해준다면, 획득 함수(Acquisition Function)는 그 정보를 바탕으로 "오늘 실제로 어디를 가야 하는가"를 결정하는 함수임.
-
대표적인 두 가지 획득 함수가 기대 향상도(Expected Improvement, EI)와 신뢰 상한(Upper Confidence Bound, UCB)임.
-
EI(기대 향상도)는 "지금까지 경험한 최고 만족도를 넘어설 것으로 기대되는 정도"를 수치화한 것임.
-
수식으로는 다음과 같이 표현됨. 여기서 $f(x^*)$는 지금까지 경험한 최고 만족도, $f(x)$는 새 가게 x의 추정 만족도임.
$$EI(x) = \mathbb{E}[\max(f(x) - f(x^*),\ 0)]$$
-
EI가 높은 가게는 두 가지 유형임. 아직 가보지 않아 불확실성이 높지만 평균 추정 만족도도 괜찮은 가게. 그리고 일관되게 높은 만족도가 나오는 가게임.
-
게임으로 비유하자면, EI는 "이 아이템을 파밍했을 때 내 최고 스펙을 넘길 것으로 기대되는 기대값"을 계산해서 파밍 우선순위를 정하는 것과 같음.
-
UCB(신뢰 상한)는 "추정 평균 만족도 + 불확실성의 일정 배수"를 점수로 사용하는 방식임.
-
수식으로는 다음과 같음. 여기서 $\mu(x)$는 추정 평균 만족도, $\sigma(x)$는 불확실성, $\kappa$(카파)는 탐색-활용 균형을 조절하는 파라미터임.
$$UCB(x) = \mu(x) + \kappa \cdot \sigma(x)$$
-
κ를 크게 잡으면 불확실한 가게를 더 많이 탐색하고, κ를 작게 잡으면 이미 검증된 가게를 더 자주 찾아가게 됨.
-
직장인 입장에서 κ가 높은 상황은 "오늘 기분이 모험적인 날", κ가 낮은 상황은 "오늘 실패하면 안 되는 중요한 점심 약속이 있는 날"에 해당함.
-
BO의 핵심 강점은 순차적으로 작동한다는 것임.
-
한 번 점심을 먹고 나서 그 만족도 점수를 기록하면, 다음 날 GP가 업데이트되고, 획득 함수가 재계산되고, 내일 선택이 바뀜.
-
이 반복 루프를 순차적 의사결정(Sequential Decision Making)이라고 부름. [관찰 → GP 업데이트 → 획득 함수 계산 → 최적 후보 선택 → 실제 점심 → 관찰]
-
첫 주에는 데이터가 적어 불확실성이 높고 탐색이 많이 일어남. 3개월 후에는 충분한 데이터로 취향 패턴이 확립되고 좋은 가게를 더 자주 가게 됨.
-
이 구조는 신약 개발 임상시험에서도 동일하게 쓰임. 어떤 용량이 최적인지 사람에게 직접 투여해봐야만 알 수 있는 상황에서, 최소한의 시도로 최적 용량을 찾는 알고리즘으로 BO가 채택됨.
-
κ가 지나치게 낮으면 단골 순대국밥집만 계속 추천하다가 다른 맛있는 가게를 영원히 발견하지 못하는 상태에 빠짐.
-
이것을 국소 최적화 함정(Local Optimum Trap)이라고 함. 전체 메뉴 공간에서 최선이 아닌데, 지금까지 탐색한 범위 내에서 가장 좋은 곳에 고착되는 현상임.
-
인테리어 비유로 설명하자면, 집 전체를 리모델링할 여력이 있는데 거실 소파 배치만 계속 바꾸고 있는 상태임.
-
이를 방지하기 위해 실제 BO에서는 주기적으로 강제 탐색을 섞어 넣음. 직장인 언어로 번역하면 "한 달에 한 번은 완전히 새로운 골목을 가본다"는 규칙을 의식적으로 넣는 것임.
-
BO를 평가하는 지표 중 하나가 후회량(Regret)임.
-
후회량(Regret)은 "매번 완벽한 최적 선택을 했을 때의 누적 만족도"와 "실제 선택들의 누적 만족도" 사이의 차이임.
-
수식으로는 다음과 같음. 여기서 $T$는 총 시도 횟수, $x^*$는 이론적 최적 메뉴, $x_t$는 $t$번째 날의 실제 선택임.
$$R(T) = \sum_{t=1}^{T}\left[f(x^*) - f(x_t)\right]$$
-
좋은 BO 알고리즘은 시간이 지날수록 일 평균 후회량이 0에 가까워짐. 점심으로 치면, 1년을 반복하면 더 이상 크게 실망하는 점심이 없어지는 상태임.
-
BO는 최적 메뉴를 찾기 위해 설계된 알고리즘임. 그런데 실제로 모든 메뉴를 탐색했을 때 "진짜 최고"가 하나로 수렴하지 않는 경우가 많음.
-
취향 자체가 시간과 맥락에 따라 변하기 때문임. 여름에 최고였던 냉면이 겨울에는 최고가 아님.
-
즉 목적 함수(Objective Function) 자체가 정적이지 않고 비정상적(Non-stationary)임.
-
이 경우 BO는 "최적점에 수렴"하는 것이 아니라 "변하는 최적점을 지속적으로 추적"하는 방향으로 운용됨.
-
결국 점심 최적화의 진짜 목적은 완벽한 메뉴 하나를 찾는 것이 아님.
-
매일 조금씩 더 나은 선택을 하고, 탐색을 통해 새로운 취향을 발견하고, 그 과정에서 후회를 최소화하는 것임.
-
이것이 BO가 보내는 메시지임. 최적화는 결과가 아니라 과정임.
Member discussion