** (Latent) Bayesian Optimization(베이지안 최적화, BO)

아래는 Bayesian Optimization(베이지안 최적화, BO)직관 → 구성요소 → 알고리즘 흐름 → 예시 → 실전 팁/주의점 순서로 설명한 내용입니다.


1) BO가 풀고 싶은 문제는 뭔가?

BO는 보통 이런 상황에서 씁니다.

  • 어떤 함수 f(x) 를 최대/최소로 만들고 싶다.
  • 그런데 f(x) 를 한 번 평가(실험/학습/시뮬레이션)하는 데 비싸다.
    • 예: 하이퍼파라미터 하나 설정하고 모델 학습 → 2시간
    • 예: 로봇 실험 → 한 번에 10분 + 재료비
  • f(x) 의 형태를 모르고(블랙박스), 미분도 어렵고, 노이즈도 있다.

즉, “적은 횟수의 실험으로 최적점을 찾는” 최적화.


2) 직관: “지도(확률모델) + 다음에 어디 볼지(탐색전략)”

BO는 매 반복마다 딱 두 가지를 합니다.

  1. 지도 만들기(대리모델, surrogate model) 지금까지 관측한 (xi,yi)(x_i, y_i) 로부터 “이 근처는 값이 클 것 같다/작을 것 같다”를 확률적으로 예측하는 모델을 만든다.
    • 이 모델은 예측값(평균) 뿐 아니라 불확실성(분산) 도 준다.
  2. 다음 실험 지점 고르기(획득함수, acquisition function) “지금 당장 좋아 보이는 곳(활용)” vs “아직 모르는 곳(탐색)”을 균형 있게 고르는 점수 함수로 다음 x 를 선택한다.

이걸 반복합니다.


3) 구성요소 3개만 알면 된다

(A) 목표함수 (Objective)

  • 최적화 대상: f(x)
  • 직접 계산하기 비싸서, 관측 y=f(x)+ϵy = f(x) + \epsilon 만 얻는다(노이즈 ϵ\epsilon 가능).

(B) 대리모델 / 확률모델 (Surrogate)

대표적으로 Gaussian Process (GP) 를 많이 씁니다(BO의 “표준” 느낌).

  • GP는 “함수 전체”에 대한 확률분포를 둡니다.
  • 어떤 점 x 에 대해
    • 평균 μ(x)\mu(x): 거기서 f(x) 가 얼마나 될지 추정
    • 분산 σ2(x)\sigma^2(x): 얼마나 확신/불확실한지

관측이 없는 영역은 보통 분산이 커져서 “탐색”을 유도합니다.

(C) 획득함수 (Acquisition)

대리모델이 준 μ(x)\mu(x), σ(x)\sigma(x) 로부터 “다음 실험할 점수”를 계산합니다.

대표 3종만 기억하면 충분합니다.

  1. EI (Expected Improvement, 기대 개선량)
    • “현재 최고보다 얼마나 좋아질 것으로 기대되는가?”
    • 평균이 높으면 좋고, 불확실성이 커도 “대박” 가능성이 있어 점수가 오름.
  2. UCB (Upper Confidence Bound) UCB(x)=μ(x)+κσ(x)\text{UCB}(x)=\mu(x)+\kappa \sigma(x)
    • κ\kappa 가 크면 탐색(불확실성) 비중 증가
    • 직관이 가장 쉬움
  3. PI (Probability of Improvement)
    • “개선될 확률”만 보며, 개선 폭은 덜 반영

4) BO 알고리즘 흐름 (반복 루프)

최대화 문제 기준:

  1. 초기 샘플 몇 개를 랜덤/라틴하이퍼큐브 등으로 찍는다. {(xi,yi)}i=1n\{(x_i, y_i)\}_{i=1}^n
  2. 이 데이터를 가지고 대리모델(GP 등) 을 학습한다.
  3. 모든 후보 x 에 대해 획득함수 a(x) 를 계산한다.
  4. 획득함수 최대인 지점 선택: xn+1=argmaxxa(x)x_{n+1} = \arg\max_x a(x)
  5. 실제 비싼 실험으로 yn+1=f(xn+1)y_{n+1}=f(x_{n+1}) 관측
  6. 데이터에 추가하고 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): μ(x)\mu(x) 가 높은 곳을 더 파서 지금 당장 성능을 올림
  • 탐색(exploration): σ(x)\sigma(x) 가 큰(모르는) 곳을 찍어 “숨은 최적”을 찾음

획득함수가 그 균형을 자동으로 잡아줍니다.

  • UCB에서 κ\kappa 를 올리면 더 모험
  • EI는 개선 폭과 불확실성의 균형을 자연스럽게 반영

8) BO를 쓸 때 자주 겪는 함정/팁

실전 팁

  • 초기 점(초기 디자인) 이 생각보다 중요합니다. (너무 적으면 모델이 왜곡)
  • 입력값 스케일/변환이 중요:
    • learning rate처럼 로그 스케일로 움직여야 하는 변수는 log\log 변환 후 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는 다르게 생각합니다:

  • 함수 전체 f()f(\cdot) 에 대해 확률을 둡니다.
  • 즉, “가능한 함수들”의 분포를 정의합니다.

그래서 관측 데이터가 들어오면

“이 함수는 이런 모양일 확률이 높겠다”라고 업데이트합니다.


3. 핵심 아이디어: 커널 = 유사도

GP의 심장은 바로 커널 함수 k(x, x’) 입니다.

k(x,x)=입력 x 와 x 의 유사도k(x, x’) = \text{입력 } x \text{ 와 } x’ \text{ 의 유사도}

이게 의미하는 것:

  • x 와 x’ 가 비슷하면 → f(x) 와 f(x’) 도 비슷할 것이라고 가정
  • 멀리 떨어져 있으면 → 서로 거의 독립적

즉,

커널은 “입력 공간에서의 거리/유사도”를 “출력값의 상관관계”로 바꿔주는 장치입니다.


4. 아주 간단한 예시로 이해하기

1차원 입력이라고 가정

  • x = 1.0
  • x’ = 1.1

이 둘은 가깝습니다.

그럼 커널은 큰 값을 줍니다:

k(1.0,1.1)0.9k(1.0, 1.1) \approx 0.9

반면:

k(1.0,10.0)0k(1.0, 10.0) \approx 0


이것이 의미하는 것

GP는 내부적으로 이런 공분산 행렬을 만듭니다:

K=[k(x1,x1)k(x1,x2)k(x2,x1)k(x2,x2)]K = \begin{bmatrix} k(x_1,x_1) & k(x_1,x_2) \\ k(x_2,x_1) & k(x_2,x_2) \end{bmatrix}

이게 바로 출력값들 사이의 공분산 행렬입니다.

즉,

“입력의 유사도 행렬” = “출력의 상관관계 행렬”


5. 가장 많이 쓰는 커널: RBF (Gaussian kernel)

가장 직관적인 커널:

k(x,x)=exp(xx222)k(x,x’) = \exp\left( -\frac{\|x-x’\|^2}{2\ell^2} \right)

여기서:

  • xx\|x-x’\| = 거리
  • \ell = length-scale (얼마나 멀리까지 영향을 미칠지)

length-scale의 의미

  • \ell 작으면
    • 가까운 점만 강하게 연결
    • 함수가 많이 요동침
  • \ell 크면
    • 멀리 떨어진 점도 연결
    • 함수가 매우 부드러움

–> 이게 곧 “함수의 매끄러움 가정”입니다.


6. GP는 어떻게 예측하나?

관측 데이터가 있다고 합시다:

(x1,y1),(x2,y2)(x_1, y_1), (x_2, y_2)

이제 새로운 점 xx_* 에 대해 예측하려면:

Step 1: 유사도 계산

  • k(x,x1)k(x_*, x_1)
  • k(x,x2)k(x_*, x_2)

Step 2: 가중 평균

예측 평균은 대략 이런 형태입니다:

μ(x)=kTK1y\mu(x_*) = k_*^T K^{-1} y

초보자 직관:

새 점은 “비슷한 점들의 y값을 유사도 가중 평균한 것”


7. 그럼 불확실성은?

예측 분산은:

σ2(x)=k(x,x)kTK1k\sigma^2(x_*) = k(x_*,x_*) – k_*^T K^{-1} k_*

직관적으로:

  • 주변에 데이터가 많으면 → 분산 ↓
  • 데이터가 멀면 → 분산 ↑

그래서 BO에서 탐색이 가능해집니다.


8. 그림으로 이해하기 (머릿속 상상)

데이터가 3개 있다고 합시다.

데이터 근처:

  • 평균은 데이터에 가까움
  • 분산은 작음

데이터 없는 영역:

  • 평균은 prior 근처
  • 분산은 큼

이게 바로 BO에서 “탐색”을 유도하는 메커니즘입니다.


9. 왜 GP가 강력한가?

특징이유
적은 데이터에서 잘 동작강한 smoothness 가정
불확실성 자동 계산커널 기반 공분산 구조
prior를 직접 설계 가능커널 선택으로 함수 성질 결정

10. 커널이 곧 “함수 가정”이다

다른 커널을 쓰면 함수 가정이 달라집니다.

✔ RBF

→ 매우 부드러운 함수

✔ Matern

→ 덜 부드러운 함수 가능

✔ Linear kernel

→ 선형 함수 가정

✔ Periodic kernel

→ 주기적 함수 가정

즉,

커널을 고른다는 건, “나는 이런 모양의 함수일 것이라고 믿는다”를 고르는 것


요약 (핵심만)

Gaussian Process는:

  1. 함수 전체에 확률을 둔다
  2. 커널은 입력의 유사도를 출력의 상관관계로 바꾼다
  3. 새 점의 예측은 “유사도 가중 평균”
  4. 데이터가 멀면 불확실성이 커진다

이번에는 Discrete space(이산 공간)Gaussian Process(GP) 로 다루는 방법, 즉 Latent Bayesian Optimization (latent BO) 를 초보자 친화 + 수학적으로 정확하게 설명하겠습니다.


1. 문제 설정: 왜 Discrete가 어려운가?

BO + GP는 원래 이런 공간에 강합니다:

xdx \in \mathbb{R}^d

즉, 연속 벡터 공간.

하지만 현실에서는 이런 경우가 많습니다:

  • 문자열 (adversarial suffix)
  • 토큰 시퀀스
  • 아키텍처 구조
  • 카테고리 조합
  • 이산 hyperparameter

이때 문제:

GP는 “거리 기반 커널”을 쓰는데, 이산 객체에는 자연스러운 거리 정의가 어렵다.

예:

  • “hello”와 “hella”의 거리는?
  • 두 Transformer 구조의 거리?
  • 토큰 시퀀스의 유사도?

2. 해결 전략: Latent Space로 보내기

핵심 아이디어:

이산 객체를 연속 벡터 공간으로 매핑한 뒤, 그 공간에서 GP를 적용한다.

즉,

xdiscretezdx_{\text{discrete}} \rightarrow z \in \mathbb{R}^d

그리고

f(x)f(g(z))f(x) \approx f(g(z))

여기서 g는 latent → discrete 복원(또는 그냥 surrogate로만 사용).


3. 전체 구조 (Latent BO 파이프라인)

  1. Discrete 객체 x
  2. Encoder E(x) = z  (continuous embedding)
  3. GP surrogate over z
  4. Acquisition optimization in latent space
  5. zz_* 를 discrete xx_* 로 변환
  6. 실제 평가
  7. 반복

4. Discrete → Latent 변환 방법

(A) 단순 임베딩 사용

예: 토큰 시퀀스

  • 각 토큰 → embedding
  • 평균/CLS pooling
  • 전체 시퀀스 벡터 z

장점:

  • 간단
  • LM 공격/하이퍼파라미터 튜닝에 많이 사용

단점:

  • 시퀀스 구조 손실 가능

(B) Autoencoder 기반

  1. discrete 구조 입력
  2. encoder → latent z
  3. decoder → 원래 구조 복원

이렇게 하면 latent 공간이 “구조적으로 의미 있음”.


(C) Relaxation 방식 (Soft embedding)

특히 LLM 공격에서 많이 쓰는 방식:

  • one-hot token → softmax distribution
  • embedding = weighted sum

즉,

z=WTαz = W^T \alpha

where αΔ|V|\alpha \in \Delta^{|V|}

→ 이산 토큰을 continuous simplex로 relaxation


5. GP는 latent 공간에서 어떻게 작동하나?

이제 단순합니다.

우리는:

zidz_i \in \mathbb{R}^d

를 가지고 있고,

yi=f(xi)y_i = f(x_i)

GP는 그냥:

k(z,z)=exp(zz2/22)k(z,z’) = \exp(-\|z-z’\|^2 / 2\ell^2)

를 적용합니다.

즉:

“embedding이 비슷하면 성능도 비슷할 것”

이라는 가정을 두는 것.


6. Acquisition은 어디서 최적화하나?

중요한 질문:

z 공간에서 최적화할까?

아니면 discrete 공간에서 할까?

보통:

  • Acquisition은 latent continuous space에서 최적화
  • 그 다음 discrete로 매핑

즉,

z=argmaxa(z)z_* = \arg\max a(z)

이제 문제:

zz_* 를 어떻게 valid discrete object로 바꾸나?


7. Latent → Discrete 복원 전략

(A) Nearest neighbor

  • latent 후보 집합 중 가장 가까운 것 선택

(B) Decoder 사용

Autoencoder decoder로 복원.


(C) Optimization-in-the-loop

zz_*에서 시작해서:

  • gradient
  • beam search
  • local search

등으로 discrete 구조를 생성.


8. LLM Adversarial Suffix 예시로 연결

문자열 s 를 최적화한다고 가정.

Step 1: 문자열 → embedding

  • 각 토큰 embedding
  • 평균 pooling
  • zsz_s 생성

Step 2: GP surrogate

  • 입력: zsz_s
  • 출력: jailbreak score

Step 3: Acquisition 최적화

  • latent space에서 EI/UCB maximize

Step 4: zz_* → 문자열 생성

  • 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의 핵심 가정:

f(x1)f(x2)ifE(x1)E(x2) smallf(x_1) \approx f(x_2) \quad \text{if} \quad \|E(x_1)-E(x_2)\| \text{ small}

즉:

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

두 접근은:

GCGLatent BO
gradient-basedmodel-based
local searchglobal exploration
fast iterationsample efficient

14. 핵심 요약

Latent BO는:

  1. Discrete 객체를 연속 embedding으로 변환
  2. 그 공간에서 GP surrogate 구축
  3. acquisition으로 latent 탐색
  4. 다시 discrete로 복원

핵심 가정:

“embedding 공간이 함수 landscape를 부드럽게 만든다.”



게시됨

카테고리

,

작성자

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다