부록

부록 A: 디퓨전 모델 이론 리뷰

이 부록은 본문의 Ch 14–17을 읽기 위한 배경지식을 제공한다. 디퓨전 모델에 익숙한 독자는 건너뛰어도 된다.

A.1 정방향 · 역방향 과정

디퓨전 모델의 정방향 · 역방향 과정 원본 이미지 x₀ 약간 노이즈 x₁ ... 많은 노이즈 x_{T-1} 순수 노이즈 x_T 정방향 q: 노이즈 추가 (고정, 학습 안 함) 역방향 p_θ: 노이즈 제거 (학습 대상) q(x_t | x_{t-1}) = N(x_t; √(1−β_t) x_{t-1}, β_t I) p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), σ_t² I) 각 스텝이 가우시안 → log p를 닫힌 형태로 계산 가능 → DDPO의 근거

A.2 주요 샘플러

샘플러 성격 SDE/ODE 확률적? DDPO 가능?
DDPM 원조. 각 스텝에 노이즈 주입 SDE
DDIM 결정론적 역방향. η\eta로 확률성 조절 ODE (η=0\eta=0) / SDE (η>0\eta>0) η\eta 의존 η>0\eta>0일 때
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의 그래디언트 안에 내장되어 있다.

이 도출에서 얻는 세 가지:

  1. DPO의 수식이 왜 이런 형태인지 (RLHF 최적해의 재매개변수화)
  2. 왜 레퍼런스 모델이 필요한지 (KL 제약이 정책 비율로 변환)
  3. 왜 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)에서 사용한 "타임스텝별 가우시안 로그확률의 합"이 전체 logP(x0)\log P(x_0)의 하한(ELBO)임을 도출하고, 이것이 왜 DPO의 대리(proxy)로 사용될 수 있는지를 설명한다.

G.1 왜 ELBO가 필요한가

Ch14에서 "각 디노이징 스텝이 가우시안이므로 로그확률을 닫힌 형태로 구할 수 있다"고 했다. 하지만 한 가지 빈틈이 있다: 타임스텝별 로그확률의 합이 정말로 전체 logP(x0)\log P(x_0)의 좋은 대리(proxy)인가? 여기서 ELBO(Evidence Lower BOund)가 등장한다. 타임스텝별 합이 logP(x0)\log P(x_0)의 하한(lower bound)임을 보장하는 것이 ELBO의 역할이다.

[문제]
  우리가 원하는 것: 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 (자기회귀) 프롬프트 t₁ t₂ ... log P(t₁) log P(t₂) log P(y|x) = Σᵢ log P(tᵢ) ✅ 정확한 값 긴 문장 → 합이 마이너스로 → 길이 편향 (Ch4) 디퓨전 (역방향) x_T x_{T-1} ... x₀ -‖ε-ε_θ‖² ELBO ≈ -Σₜ ‖ε-ε_θ‖² ≈ 하한 (근사) 디테일 이미지 → 오차 증가 → 매끈함 편향 대응 DPO에 필요한 것: log P 비율의 방향 → ELBO로도 대체로 보존 → Diffusion-DPO가 성립하는 이론적 근거

이제 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가 성립하는 이론적 근거.