아래는 Bayesian Optimization(베이지안 최적화, BO) 를 직관 → 구성요소 → 알고리즘 흐름 → 예시 → 실전 팁/주의점 순서로 설명한 내용입니다.
1) BO가 풀고 싶은 문제는 뭔가?
BO는 보통 이런 상황에서 씁니다.
- 어떤 함수 f(x) 를 최대/최소로 만들고 싶다.
- 그런데 f(x) 를 한 번 평가(실험/학습/시뮬레이션)하는 데 비싸다.
- 예: 하이퍼파라미터 하나 설정하고 모델 학습 → 2시간
- 예: 로봇 실험 → 한 번에 10분 + 재료비
- f(x) 의 형태를 모르고(블랙박스), 미분도 어렵고, 노이즈도 있다.
즉, “적은 횟수의 실험으로 최적점을 찾는” 최적화.
2) 직관: “지도(확률모델) + 다음에 어디 볼지(탐색전략)”
BO는 매 반복마다 딱 두 가지를 합니다.
- 지도 만들기(대리모델, surrogate model) 지금까지 관측한 로부터 “이 근처는 값이 클 것 같다/작을 것 같다”를 확률적으로 예측하는 모델을 만든다.
- 이 모델은 예측값(평균) 뿐 아니라 불확실성(분산) 도 준다.
- 다음 실험 지점 고르기(획득함수, acquisition function) “지금 당장 좋아 보이는 곳(활용)” vs “아직 모르는 곳(탐색)”을 균형 있게 고르는 점수 함수로 다음 x 를 선택한다.
이걸 반복합니다.
3) 구성요소 3개만 알면 된다
(A) 목표함수 (Objective)
- 최적화 대상: f(x)
- 직접 계산하기 비싸서, 관측 만 얻는다(노이즈 가능).
(B) 대리모델 / 확률모델 (Surrogate)
대표적으로 Gaussian Process (GP) 를 많이 씁니다(BO의 “표준” 느낌).
- GP는 “함수 전체”에 대한 확률분포를 둡니다.
- 어떤 점 x 에 대해
- 평균 : 거기서 f(x) 가 얼마나 될지 추정
- 분산 : 얼마나 확신/불확실한지
관측이 없는 영역은 보통 분산이 커져서 “탐색”을 유도합니다.
(C) 획득함수 (Acquisition)
대리모델이 준 , 로부터 “다음 실험할 점수”를 계산합니다.
대표 3종만 기억하면 충분합니다.
- EI (Expected Improvement, 기대 개선량)
- “현재 최고보다 얼마나 좋아질 것으로 기대되는가?”
- 평균이 높으면 좋고, 불확실성이 커도 “대박” 가능성이 있어 점수가 오름.
- UCB (Upper Confidence Bound)
- 가 크면 탐색(불확실성) 비중 증가
- 직관이 가장 쉬움
- PI (Probability of Improvement)
- “개선될 확률”만 보며, 개선 폭은 덜 반영
4) BO 알고리즘 흐름 (반복 루프)
최대화 문제 기준:
- 초기 샘플 몇 개를 랜덤/라틴하이퍼큐브 등으로 찍는다.
- 이 데이터를 가지고 대리모델(GP 등) 을 학습한다.
- 모든 후보 x 에 대해 획득함수 a(x) 를 계산한다.
- 획득함수 최대인 지점 선택:
- 실제 비싼 실험으로 관측
- 데이터에 추가하고 2~5 반복 (예산(실험 횟수) 끝나면 종료)
5) 아주 쉬운 예시로 감 잡기 (하이퍼파라미터 튜닝)
- 목표: validation accuracy 최대화
- x: 하이퍼파라미터 벡터 (learning rate, dropout, weight decay…)
- f(x): 그 설정으로 학습한 뒤 얻는 acc (평가 1회가 매우 비쌈)
BO는 이런식으로 움직입니다.
- 초반: 공간을 넓게 찍어 대충 지형을 파악 (탐색)
- 중반: “좋아 보이는 지역”을 집중적으로 파고듦 (활용)
- 후반: 최고점 주변 미세 조정
Grid search는 차원이 늘면 폭발하고(Random search도 비효율적인 경우가 많음),
BO는 불확실성을 이용해 “의미 있는 곳을 더 많이” 봅니다.
6) 왜 GP가 자주 쓰이나? (초보자용 요점)
GP 장점:
- 데이터가 적어도 잘 작동하는 편(BO는 보통 관측이 수십~수백 개 수준)
- 예측값 + 불확실성까지 자연스럽게 제공
- “관측한 점 근처는 비슷할 것”이라는 prior를 커널로 표현 가능
GP 단점:
- 관측점이 n 개면 학습/추론이 보통 O(n^3) 쪽이라 n 이 커지면 느려짐 (그래서 대규모는 TPE/랜덤포레스트/신경망/근사 GP 등을 쓰기도 함)
7) 탐색 vs 활용의 균형이 핵심
- 활용(exploitation): 가 높은 곳을 더 파서 지금 당장 성능을 올림
- 탐색(exploration): 가 큰(모르는) 곳을 찍어 “숨은 최적”을 찾음
획득함수가 그 균형을 자동으로 잡아줍니다.
- UCB에서 를 올리면 더 모험
- EI는 개선 폭과 불확실성의 균형을 자연스럽게 반영
8) BO를 쓸 때 자주 겪는 함정/팁
실전 팁
- 초기 점(초기 디자인) 이 생각보다 중요합니다. (너무 적으면 모델이 왜곡)
- 입력값 스케일/변환이 중요:
- learning rate처럼 로그 스케일로 움직여야 하는 변수는 변환 후 BO
- 노이즈가 크면:
- GP에 noise term을 두거나
- 동일 x 를 반복 실험해서 평균/분산 추정
흔한 함정
- 범위 설정이 나쁘면(너무 좁거나 너무 넓으면) BO도 헤맴
- 고차원(예: 50차원 이상)에서는 GP-BO가 힘들어지는 경우가 많음 → 저차원 서브스페이스 탐색, 임베딩(연속 잠재공간), TPE/SMAC 계열 고려
9) 한 문장 정리
Bayesian Optimization은 “비싼 실험을 최소화”하기 위해, 관측 데이터를 바탕으로 ‘함수의 확률적 지도(대리모델)’를 만들고, ‘탐색-활용 균형(획득함수)’으로 다음 실험점을 고르는 반복 최적화 방법입니다.
아래는 Gaussian Process(GP) 를
“커널 = 유사도(similarity)” 관점에서, 수학을 최소화하면서 설명합니다.
1. Gaussian Process를 한 문장으로
GP는 “비슷한 입력은 비슷한 출력을 가질 것”이라는 가정을 커널(유사도 함수)로 수학화한, 함수 전체에 대한 확률모델이다.
2. 먼저 직관부터: “함수에 확률을 준다”
보통 우리는 이런 걸 합니다:
- 점 하나 x → 값 하나 f(x)
GP는 다르게 생각합니다:
- 함수 전체 에 대해 확률을 둡니다.
- 즉, “가능한 함수들”의 분포를 정의합니다.
그래서 관측 데이터가 들어오면
“이 함수는 이런 모양일 확률이 높겠다”라고 업데이트합니다.
3. 핵심 아이디어: 커널 = 유사도
GP의 심장은 바로 커널 함수 k(x, x’) 입니다.
이게 의미하는 것:
- x 와 x’ 가 비슷하면 → f(x) 와 f(x’) 도 비슷할 것이라고 가정
- 멀리 떨어져 있으면 → 서로 거의 독립적
즉,
커널은 “입력 공간에서의 거리/유사도”를 “출력값의 상관관계”로 바꿔주는 장치입니다.
4. 아주 간단한 예시로 이해하기
1차원 입력이라고 가정
- x = 1.0
- x’ = 1.1
이 둘은 가깝습니다.
그럼 커널은 큰 값을 줍니다:
반면:
이것이 의미하는 것
GP는 내부적으로 이런 공분산 행렬을 만듭니다:
이게 바로 출력값들 사이의 공분산 행렬입니다.
즉,
“입력의 유사도 행렬” = “출력의 상관관계 행렬”
5. 가장 많이 쓰는 커널: RBF (Gaussian kernel)
가장 직관적인 커널:
여기서:
- = 거리
- = length-scale (얼마나 멀리까지 영향을 미칠지)
length-scale의 의미
- 작으면
- 가까운 점만 강하게 연결
- 함수가 많이 요동침
- 크면
- 멀리 떨어진 점도 연결
- 함수가 매우 부드러움
–> 이게 곧 “함수의 매끄러움 가정”입니다.
6. GP는 어떻게 예측하나?
관측 데이터가 있다고 합시다:
이제 새로운 점 에 대해 예측하려면:
Step 1: 유사도 계산
Step 2: 가중 평균
예측 평균은 대략 이런 형태입니다:
초보자 직관:
새 점은 “비슷한 점들의 y값을 유사도 가중 평균한 것”
7. 그럼 불확실성은?
예측 분산은:
직관적으로:
- 주변에 데이터가 많으면 → 분산 ↓
- 데이터가 멀면 → 분산 ↑
그래서 BO에서 탐색이 가능해집니다.
8. 그림으로 이해하기 (머릿속 상상)
데이터가 3개 있다고 합시다.
데이터 근처:
- 평균은 데이터에 가까움
- 분산은 작음
데이터 없는 영역:
- 평균은 prior 근처
- 분산은 큼
이게 바로 BO에서 “탐색”을 유도하는 메커니즘입니다.
9. 왜 GP가 강력한가?
| 특징 | 이유 |
|---|---|
| 적은 데이터에서 잘 동작 | 강한 smoothness 가정 |
| 불확실성 자동 계산 | 커널 기반 공분산 구조 |
| prior를 직접 설계 가능 | 커널 선택으로 함수 성질 결정 |
10. 커널이 곧 “함수 가정”이다
다른 커널을 쓰면 함수 가정이 달라집니다.
✔ RBF
→ 매우 부드러운 함수
✔ Matern
→ 덜 부드러운 함수 가능
✔ Linear kernel
→ 선형 함수 가정
✔ Periodic kernel
→ 주기적 함수 가정
즉,
커널을 고른다는 건, “나는 이런 모양의 함수일 것이라고 믿는다”를 고르는 것
요약 (핵심만)
Gaussian Process는:
- 함수 전체에 확률을 둔다
- 커널은 입력의 유사도를 출력의 상관관계로 바꾼다
- 새 점의 예측은 “유사도 가중 평균”
- 데이터가 멀면 불확실성이 커진다
이번에는 Discrete space(이산 공간) 을 Gaussian Process(GP) 로 다루는 방법, 즉 Latent Bayesian Optimization (latent BO) 를 초보자 친화 + 수학적으로 정확하게 설명하겠습니다.
1. 문제 설정: 왜 Discrete가 어려운가?
BO + GP는 원래 이런 공간에 강합니다:
즉, 연속 벡터 공간.
하지만 현실에서는 이런 경우가 많습니다:
- 문자열 (adversarial suffix)
- 토큰 시퀀스
- 아키텍처 구조
- 카테고리 조합
- 이산 hyperparameter
이때 문제:
GP는 “거리 기반 커널”을 쓰는데, 이산 객체에는 자연스러운 거리 정의가 어렵다.
예:
- “hello”와 “hella”의 거리는?
- 두 Transformer 구조의 거리?
- 토큰 시퀀스의 유사도?
2. 해결 전략: Latent Space로 보내기
핵심 아이디어:
이산 객체를 연속 벡터 공간으로 매핑한 뒤, 그 공간에서 GP를 적용한다.
즉,
그리고
여기서 g는 latent → discrete 복원(또는 그냥 surrogate로만 사용).
3. 전체 구조 (Latent BO 파이프라인)
- Discrete 객체 x
- Encoder E(x) = z (continuous embedding)
- GP surrogate over z
- Acquisition optimization in latent space
- 새 를 discrete 로 변환
- 실제 평가
- 반복
4. Discrete → Latent 변환 방법
(A) 단순 임베딩 사용
예: 토큰 시퀀스
- 각 토큰 → embedding
- 평균/CLS pooling
- 전체 시퀀스 벡터 z
장점:
- 간단
- LM 공격/하이퍼파라미터 튜닝에 많이 사용
단점:
- 시퀀스 구조 손실 가능
(B) Autoencoder 기반
- discrete 구조 입력
- encoder → latent z
- decoder → 원래 구조 복원
이렇게 하면 latent 공간이 “구조적으로 의미 있음”.
(C) Relaxation 방식 (Soft embedding)
특히 LLM 공격에서 많이 쓰는 방식:
- one-hot token → softmax distribution
- embedding = weighted sum
즉,
where
→ 이산 토큰을 continuous simplex로 relaxation
5. GP는 latent 공간에서 어떻게 작동하나?
이제 단순합니다.
우리는:
를 가지고 있고,
GP는 그냥:
를 적용합니다.
즉:
“embedding이 비슷하면 성능도 비슷할 것”
이라는 가정을 두는 것.
6. Acquisition은 어디서 최적화하나?
중요한 질문:
z 공간에서 최적화할까?
아니면 discrete 공간에서 할까?
보통:
- Acquisition은 latent continuous space에서 최적화
- 그 다음 discrete로 매핑
즉,
이제 문제:
이 를 어떻게 valid discrete object로 바꾸나?
7. Latent → Discrete 복원 전략
(A) Nearest neighbor
- latent 후보 집합 중 가장 가까운 것 선택
(B) Decoder 사용
Autoencoder decoder로 복원.
(C) Optimization-in-the-loop
에서 시작해서:
- gradient
- beam search
- local search
등으로 discrete 구조를 생성.
8. LLM Adversarial Suffix 예시로 연결
문자열 s 를 최적화한다고 가정.
Step 1: 문자열 → embedding
- 각 토큰 embedding
- 평균 pooling
- 생성
Step 2: GP surrogate
- 입력:
- 출력: jailbreak score
Step 3: Acquisition 최적화
- latent space에서 EI/UCB maximize
Step 4: → 문자열 생성
- nearest neighbor search
- LM sampling with constraint
- soft embedding projection
이게 바로 LBO (Latent Bayesian Optimization) 입니다.
9. 왜 Latent BO가 필요한가?
Discrete 공간은:
- combinatorial explosion
- gradient 없음
- 거리 정의 애매
Latent BO는:
- smooth한 공간에서 탐색
- GP 불확실성 활용
- 적은 평가로 탐색 가능
10. 수학적으로 중요한 가정
Latent BO의 핵심 가정:
즉:
embedding 공간에서의 거리 = 성능 유사도
이 가정이 깨지면 GP가 망합니다.
11. 주요 한계
1. Embedding quality에 매우 의존
- 표현력이 나쁘면 surrogate가 엉뚱한 smoothness 가정
2. Many-to-one 문제
- 서로 다른 discrete가 같은 embedding 근처
3. Decoder difficulty
- latent 점이 valid discrete로 잘 매핑되지 않을 수 있음
12. 연구적으로 더 깊은 이슈
Manifold mismatch
Latent 공간이 실제 discrete manifold를 잘 표현하는가?
Metric learning
커널 대신 learned kernel 가능
Trust-region BO
latent space에서 local region만 탐색
Structured kernel
edit distance 기반 kernel 설계
13. GCG와 연결하면?
기존 GCG:
- token-level gradient search
- greedy update
Latent BO:
- embedding-level global search
- uncertainty-aware exploration
두 접근은:
| GCG | Latent BO |
|---|---|
| gradient-based | model-based |
| local search | global exploration |
| fast iteration | sample efficient |
14. 핵심 요약
Latent BO는:
- Discrete 객체를 연속 embedding으로 변환
- 그 공간에서 GP surrogate 구축
- acquisition으로 latent 탐색
- 다시 discrete로 복원
핵심 가정:
“embedding 공간이 함수 landscape를 부드럽게 만든다.”
답글 남기기