부록
부록 A: 디퓨전 모델 이론 리뷰
이 부록은 본문의 Ch 14–17을 읽기 위한 배경지식을 제공한다. 디퓨전 모델에 익숙한 독자는 건너뛰어도 된다.
A.1 정방향 · 역방향 과정
A.2 주요 샘플러
| 샘플러 | 성격 | SDE/ODE | 확률적? | DDPO 가능? |
|---|---|---|---|---|
| DDPM | 원조. 각 스텝에 노이즈 주입 | SDE | ✓ | ✓ |
| DDIM | 결정론적 역방향. |
ODE ( |
||
| Euler | 연속 ODE의 1차 솔버 | ODE | ✗ | ✗ |
| Euler Ancestral | Euler + 노이즈 주입 | SDE | ✓ | ✓ |
| DPM-Solver | 고차 ODE 솔버. 빠른 수렴 | ODE | ✗ | ✗ |
| DPM-SDE | DPM-Solver의 확률적 버전 | SDE | ✓ | ✓ |
A.3 DDPO를 위한 핵심 조건
DDPO가 작동하려면:
1. 각 스텝에서 log p_θ(x_{t-1}|x_t)를 계산할 수 있어야 한다
2. 이를 위해 p_θ가 가우시안이어야 한다
3. 가우시안이려면 확률적(SDE) 샘플러여야 한다
4. 결정론적(ODE) 샘플러 → 확률 개념 없음 → DDPO 불가
부록 B: 수학 기호 참조표
(v0.1과 동일, 필요시 확장)
부록 C: LLM ↔ 디퓨전 대응 사전
(Ch14에서 소개한 대응 관계의 확장 버전)
부록 D: 알고리즘 족보 다이어그램
(전체 계보를 한 장의 DAG로)
부록 E: REINFORCE에서 DPO로 — 수학적 도출
이 부록은 Ch1에서 직관적으로 이해한 DPO가, RLHF(PPO)의 수식을 어떻게 변환해서 나왔는지를 수학적으로 추적한다.
출발점: RLHF의 목표
max_θ E_{y~π_θ(·|x)} [ r(x, y) ] − β × KL(π_θ ‖ π_ref)
"보상 기대값을 최대화하되, 원본에서 너무 멀어지지 마라."
간극: "기대값의 확률"을 미분할 수 없다
∇_θ E_{y~π_θ} [ r(x, y) ] = ∇_θ ∫ π_θ(y|x) · r(x, y) dy
적분 안에 π_θ가 있고, π_θ가 바뀌면 "어떤 y가 샘플되는가"도 바뀐다.
→ 미분과 샘플링이 얽혀 있다.
REINFORCE의 해법: 로그 미분 트릭
∇_θ π_θ(y|x) = π_θ(y|x) × ∇_θ log π_θ(y|x)
대입하면:
∇_θ E[r(y)] = E_{y~π_θ} [ r(y) × ∇_θ log π_θ(y) ]
→ 미분이 기대값 안으로 들어간다.
이 수식의 실무적 의미를 풀어보자:
기대값을 "정확히" 계산하려면:
모든 가능한 y에 대해 r(y) × ∇ log π_θ(y)를 계산하고 합산해야 한다.
y는 가능한 모든 토큰 시퀀스 — 사실상 무한하다.
→ 정확한 계산은 불가능하다.
하지만 기대값에 "가까이" 가면 충분하다:
기대값의 정의상, y를 많이 뽑아서 평균을 내면 진짜 기대값에 수렴한다.
이것이 몬테카를로 추정이다.
무한 번 반복할 필요는 없다.
적당히 크고 잘 섞인 샘플(= 배치)을 준비해서
한 단계씩 그래디언트를 추정하면 된다.
실제로 일어나는 일:
1. 현재 정책 π_θ로 배치 크기만큼(예: 256개) 응답을 생성한다.
2. 각 응답에 보상 r(y_i)를 매긴다.
3. 각 응답의 로그확률 log π_θ(y_i)를 계산한다.
4. 손실을 구한다: L ≈ −(1/N) Σ_i r(y_i) × log π_θ(y_i)
5. 이 손실을 역전파(backpropagation)해서 ∇_θ L을 구한다.
6. θ를 업데이트한다.
7. 1로 돌아간다.
→ 4번의 "≈"가 몬테카를로 추정이다.
256개 샘플의 평균은 진짜 기대값이 아니지만,
이 방향으로 한 걸음씩 가면 결국 좋은 곳에 도달한다.
(SGD가 정확한 그래디언트가 아닌 미니배치 그래디언트로 작동하는 것과 같은 원리)
이것이 REINFORCE이고 PPO의 근간이다. 문제: 보상 모델이 필요하고, on-policy 필수이고, 분산이 크다.
DPO의 도약: 재매개변수화
RLHF 목표의 최적 정책:
π*(y|x) = (1/Z) × π_ref(y|x) × exp(r(x,y) / β)
정리하면:
r(x, y) = β × log(π*(y|x) / π_ref(y|x)) + β × log Z
→ 보상이 정책 비율로 표현된다. 별도 보상 모델이 필요 없다.
Bradley-Terry에 대입:
P(y_w > y_l) = σ(β × [log(π_θ(y_w)/π_ref(y_w)) − log(π_θ(y_l)/π_ref(y_l))])
= σ(β × (Δ_θ − Δ_ref))
→ DPO 손실: L = −log σ(β × (Δ_θ − Δ_ref))
REINFORCE vs DPO 비교
| 측면 | REINFORCE / PPO | DPO |
|--------------------|--------------------------|--------------------------|
| 보상 모델 | 필요 (별도 학습) | 불필요 (정책이 곧 보상) |
| 샘플링 | on-policy 필수 | off-policy 가능 |
| 로그 미분 트릭 | 명시적으로 사용 | 암묵적으로 내장 |
| 분산 | 높음 (베이스라인 필요) | 낮음 (쌍비교로 상쇄) |
| 계산 비용 | 높음 (4개 모델) | 낮음 (2개 모델) |
| 탐색 능력 | 높음 (on-policy 생성) | 낮음 (고정 데이터) |
로그 미분 트릭은 DPO에서 어디로 갔는가
REINFORCE: ∇_θ L ∝ r(y) × ∇_θ log π_θ(y)
DPO: ∇_θ L = −β × σ(−β(Δ_θ−Δ_ref)) × [∇_θ log π_θ(y_w) − ∇_θ log π_θ(y_l)]
대응:
r(y) → σ(−β(Δ_θ−Δ_ref)) (외부 보상 → 암묵적 가중치)
∇ log π_θ(y) → ∇ log π_θ(y_w) − ∇ log π_θ(y_l) (한 응답 → 두 응답의 차이)
로그 미분 트릭은 사라진 게 아니라 DPO의 그래디언트 안에 내장되어 있다.
이 도출에서 얻는 세 가지:
- DPO의 수식이 왜 이런 형태인지 (RLHF 최적해의 재매개변수화)
- 왜 레퍼런스 모델이 필요한지 (KL 제약이 정책 비율로 변환)
- 왜 DPO에 탐색 능력이 없는지 (on-policy 루프를 제거했으니까)
부록 F: BM25와 로그오즈 — 검색에서 이미 풀린 문제
이 부록은 Ch4에서 다룬 "로그오즈 공간에서 증거가 합으로 보강된다"는 원리가 정보 검색(BM25)에서 수십 년 전에 이미 해결되었음을 보여준다.
문서 검색의 나이브한 접근 (확률 공간)
쿼리: "강화학습 디퓨전 모델 GRPO"
문서 A: 4개 키워드 모두 포함 (긴 논문)
문서 B: 2개 키워드만 포함 (짧은 블로그)
나이브 베이즈: P(관련|문서) ∝ P(t₁|관련) × P(t₂|관련) × ...
→ 각 항이 < 1이므로, 매칭이 많을수록 곱이 0에 가까워진다!
→ 증거가 많을수록 확률이 낮아지는 역설
BM25의 해법: IDF는 로그오즈다
IDF(t) = log( (N − n(t) + 0.5) / (n(t) + 0.5) )
≈ log( P(t 없음) / P(t 있음) )
= log odds(t가 희귀함)
BM25 점수 = Σ_t IDF(t) × TF보정(t)
→ 각 매칭 키워드가 양수 증거로 더해진다
→ 확률 공간의 곱이 로그오즈 공간의 합으로 바뀐 것
세 문제의 동일 구조
| 문제 | 확률 공간의 역설 | 로그오즈 공간의 해결 |
|----------------|----------------------|------------------------|
| LLM 길이 편향 | 토큰↑ → 로그확률↓ | ORPO: 오즈 비율로 비교 |
| 문서 검색 | 매칭↑ → 나이브 확률↓ | BM25: IDF(로그오즈)로 합산 |
| 베이즈 업데이트 | 증거↑ → 사후확률 곱↓ | 로그오즈: 증거를 더한다 |
BM25의 길이 정규화 = SimPO의 (1/|y|)
TF 보정 = tf(t) / (tf(t) + k × (1 − b + b × |D|/avgDL))
b ∈ [0,1]: 길이 정규화 강도
→ "긴 문서는 키워드가 많이 등장할 기회가 많을 뿐"이라는 보정
→ SimPO의 토큰 수 정규화와 정확히 같은 역할
결론: BM25 = 로그오즈(ORPO적) + 길이 정규화(SimPO적)
정보 검색은 이 문제를 1990년대에 이미 풀었다.
부록 G: ELBO와 Diffusion-DPO의 이론적 근거
이 부록은 Ch14(Diffusion-DPO)에서 사용한 "타임스텝별 가우시안 로그확률의 합"이 전체
G.1 왜 ELBO가 필요한가
Ch14에서 "각 디노이징 스텝이 가우시안이므로 로그확률을 닫힌 형태로 구할 수 있다"고 했다. 하지만 한 가지 빈틈이 있다: 타임스텝별 로그확률의 합이 정말로 전체
[문제]
우리가 원하는 것: log P(x₀) — "이 이미지가 얼마나 그럴듯한가"
우리가 가진 것: 노이즈를 예측하는 모델 ε_θ(x_t, t)
이 둘 사이에 다리가 필요하다.
[비유: 방의 크기를 재고 싶은데 줄자가 없다]
방의 정확한 면적을 모른다.
하지만 방 안에 들어가는 가장 큰 가구의 크기를 안다.
→ "방은 최소한 이 가구보다는 크다."
→ 이것이 하한(lower bound)이다.
ELBO = log P(x₀)의 하한.
"진짜 로그확률은 모르지만, 최소한 이 값보다는 크다."
이 하한을 최대화하면, 진짜 로그확률도 따라서 올라간다.
이제 ELBO가 구체적으로 무엇인지:
[ELBO의 구성]
log P(x₀) ≥ ELBO = E_q [ Σ_t log P(x_{t-1} | x_t) ] − KL(q ‖ prior)
이게 무슨 소리인지 하나씩 풀자:
1단계: 디퓨전의 정방향 과정 q(x₁, ..., x_T | x₀)
→ 원본 이미지에 노이즈를 단계별로 추가하는 과정
→ 이건 고정되어 있다 (학습하지 않는다)
→ "문제를 내는 선생님": 이미지를 점점 흐리게 만든다
2단계: 디퓨전의 역방향 과정 P_θ(x_{t-1} | x_t)
→ 노이즈를 단계별로 제거하는 과정
→ 이것이 학습 대상이다
→ "답을 쓰는 학생": 흐린 이미지를 점점 선명하게 복원한다
3단계: ELBO는 "학생이 각 단계에서 선생님의 출제 과정을 얼마나 잘 되감는가"의 합이다.
→ 각 타임스텝에서 모델이 "이전 상태"를 얼마나 정확히 예측하는가
→ 예측이 정확할수록 ELBO가 높아진다
→ ELBO가 높아지면 log P(x₀)도 높아진다
핵심 깨달음:
ELBO = Σ_t (각 타임스텝의 복원 정확도)
각 타임스텝의 복원 정확도는 어떻게 측정하는가?
→ 모델이 예측한 노이즈 ε_θ와 실제 추가된 노이즈 ε의 차이
→ ‖ε − ε_θ(x_t, t)‖²
따라서:
ELBO ≈ −Σ_t ‖ε − ε_θ(x_t, t)‖² (부호 반전: 오차가 작을수록 ELBO가 높다)
이것이 디퓨전 모델의 학습 손실이다!
"노이즈 예측 오차의 합 = ELBO의 근사 = log P(x₀)의 하한"
아래 다이어그램이 LLM과 디퓨전의 구조적 대응을 보여준다:
이제 LLM과 대응시킬 준비가 됐다:
LLM:
log P(y|x) = Σᵢ log P(tᵢ|t₁,...,tᵢ₋₁, x)
→ 각 토큰의 조건부 로그확률의 합
→ 정확한 값
디퓨전:
log P(x₀|c) ≥ ELBO ≈ −Σ_t ‖ε − ε_θ(x_t, t, c)‖²
→ 각 타임스텝의 노이즈 예측 오차의 합 (부호 반전)
→ 하한 (근사값)
대응:
토큰 → 타임스텝
조건부 로그확률 → −(노이즈 예측 오차)
정확한 합 → 근사적 합 (ELBO)
왜 "근사"인데 쓸 수 있는가:
DPO에서 필요한 것은 log P(x₀) 자체가 아니라,
두 이미지의 log P 비율이다:
log P(x₀_w) − log P(x₀_l)
ELBO를 쓰면:
ELBO(x₀_w) − ELBO(x₀_l)
ELBO가 진짜 값의 하한이라는 건,
비율의 방향(어느 쪽이 더 높은가)은 대체로 보존된다는 뜻이다.
완벽하지는 않지만, 실무적으로 작동한다.
→ 이것이 Diffusion-DPO가 성립하는 이론적 근거.