부록

부록에서는 본문의 장을 「Ch」와 장 번호로 가리킨다(예: Ch9 = 9장). 표의 칸과 계보 그림처럼 자리가 좁은 곳은 번호만 적었으니, 장 제목은 아래 표에서 찾는다.

장 장 제목
1 DPO 맛보기: 한 줄 수식이 하는 일
2 VPG: 미분할 수 없는 점수를 올리는 법
3 REINFORCE: 샘플로 추정하고, 베이스라인을 빼다
4 마르코프 결정 과정: 지금만 보고 고르고, 앞날을 셈한다
5 벨먼 방정식: 가치를 한 스텝씩 쪼개면 되풀이가 답에 모인다
6 시간차 학습: 끝까지 기다리지 않고 예측으로 예측을 고친다
7 Q-러닝: 남이 둔 수로 최선의 수를 배운다
8 DQN: 표를 신경망으로 바꾸면 무엇이 흔들리나
9 Actor-Critic: 비평가를 곁에 두다
10 PPO와 RLHF: 멀리 가지 않게 묶다
11 DPO의 재등장: 보상 모델을 수식으로 지우다
12 선호 쌍의 조건: 어떤 데이터가 DPO를 움직이는가
13 로그확률: 문장의 확률은 어떻게 매기나
14 길이 편향: 합이 공정한가?
15 레퍼런스 모델: 학습을 왜 원래 모델에 묶어 두나?
16 Bradley-Terry 모델: 시그모이드는 왜 거기 있는가?
17 다차원 보상: 스칼라를 넘어서
18 DPO의 진화: 하나의 알고리즘이 낳은 가계도
19 온라인과 오프라인: 이상과 현실 사이에서
20 실전사례: 현장의 목소리, JoyCaption의 DPO 실전기
21 RLVR과 GRPO: 비평가를 내려놓다
22 RL이 작동하는 조건: 스펙트럼, 적정 난이도, 그리고 한계
23 GRPO의 변종들: 설계 선택을 하나씩 의심하다
24 디퓨전에서 DPO를 쓰려면: 로그확률의 벽
25 DDPO: 디퓨전의 정책 그래디언트
26 이미지·로보틱스의 강화학습: GRPO가 시각 생성을 만났을 때
27 영상 생성 모델의 학습: 시퀀스와 디퓨전 사이에서 무엇을 "강제"하는가
28 에이전틱 AI: 행동하는 모델의 얼라인먼트

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

이 부록은 본문의 Ch24 「디퓨전에서 DPO를 쓰려면」부터 Ch27 「영상 생성 모델의 학습」까지를 읽기 위한 배경지식을 제공한다. 디퓨전 모델에 익숙한 독자는 건너뛰어도 된다.

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

디퓨전 모델의 정방향 · 역방향 과정 정방향 q: 노이즈 추가 (고정, 학습 안 함) x₀ 데이터 x₁ … x_{T−1} x_T 노이즈 역방향 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 ✓ ✓
Flow matching (Euler ODE) FLUX, SD3 계열의 기본 샘플링 ODE ✗ ✗
Flow-GRPO식 SDE 변환 같은 주변분포를 주는 SDE로 바꿔 노이즈 주입 (Ch26) SDE ✓ ✓

A.3 DDPO를 위한 핵심 조건

DDPO(Ch25 「DDPO」)가 작동하려면 각 스텝의 log⁡pθ(xt−1∣xt)\log p_\theta(x_{t-1} \mid x_t)를 계산할 수 있어야 하고, 그러려면 pθp_\theta가 정규분포여야 하며, 정규분포이려면 스텝마다 노이즈가 섞이는 확률적(SDE) 샘플러여야 한다. 결정론적(ODE) 샘플러에서는 스텝 분포가 한 점이라 로그확률이 정의되지 않고 탐색도 없다. 플로우 매칭 모델처럼 ODE로 학습된 모델에 RL을 쓰려면, 모든 시점의 주변분포(한 시점만 본 분포)가 같은 SDE로 바꿔 노이즈를 다시 넣는다(Ch26 「이미지·로보틱스의 강화학습」의 Flow-GRPO, DanceGRPO).

A.4 플로우 매칭과 리플로우: 휜 궤적을 어떻게 다루나

디퓨전이 스텝을 여러 번 밟는 이유는 한 번의 회귀가 조건부 평균(흐릿한 평균)밖에 내지 못하기 때문이다(Ch25 「DDPO」의 첫 절). 그렇다면 스텝 수를 줄이려면 무엇을 바꿔야 하는가? 이 물음에서 플로우 매칭과 그 뒤의 연구들이 나왔다.

플로우 매칭. 2022년 거의 같은 시기에 립먼(Yaron Lipman) 등의 플로우 매칭(Flow Matching)과 리우(Xingchao Liu)·궁(Chengyue Gong)·리우(Qiang Liu)의 렉티파이드 플로우(Rectified Flow)가 나왔다. 데이터 한 점과 노이즈 한 점을 직선으로 잇고 그 직선 위의 속도를 회귀하는데, 이 부록에서는 t=0t=0 을 데이터, t=1t=1 을 노이즈로 둔다.

xt=(1−t) x0+t ε,LFM=E[∥(ε−x0)−vθ(xt,t)∥2]\textcolor{#1c9c60}{x_t} = (1-t)\,\textcolor{#1c9c60}{x_0} + t\,\textcolor{#b8860b}{\varepsilon}, \qquad \textcolor{#d62728}{\mathcal{L}_\text{FM}} = \mathbb{E}\big[\lVert (\textcolor{#b8860b}{\varepsilon} - \textcolor{#1c9c60}{x_0}) - \textcolor{#1565c0}{v_\theta}(\textcolor{#1c9c60}{x_t}, t) \rVert^2\big]
x0, xt데이터 한 점, 직선 위 시점 t 의 점ε짝지은 노이즈 한 점ε−x0그 직선의 속도 (조건부 속도, 회귀 목표)vθ모델이 배우는 속도장LFM플로우 매칭 손실 \small\begin{array}{ll} \textcolor{#1c9c60}{x_0},\ \textcolor{#1c9c60}{x_t} & \text{데이터 한 점, 직선 위 시점 } t \text{ 의 점} \\ \textcolor{#b8860b}{\varepsilon} & \text{짝지은 노이즈 한 점} \\ \textcolor{#b8860b}{\varepsilon} - \textcolor{#1c9c60}{x_0} & \text{그 직선의 속도 (조건부 속도, 회귀 목표)} \\ \textcolor{#1565c0}{v_\theta} & \text{모델이 배우는 속도장} \\ \textcolor{#d62728}{\mathcal{L}_\text{FM}} & \text{플로우 매칭 손실} \end{array}

생성은 학습한 속도장을 따라 t=1t=1 에서 t=0t=0 으로 ODE를 적분한다. 목표가 직선인데, 왜 적분한 궤적은 휘는가?

궤적이 휘는 이유: 교차가 아니라 겹침. 네트워크는 한 지점 (xt,t)(\textcolor{#1c9c60}{x_t}, t) 에 속도 하나만 줄 수 있다. 그런데 서로 다른 (데이터, 노이즈) 짝을 이은 직선 여러 개가 그 근처를 서로 다른 방향으로 지나간다. 제곱 오차의 답은 조건부 평균이므로 네트워크는 그 방향들의 평균 E[ε−x0∣xt]\mathbb{E}[\textcolor{#b8860b}{\varepsilon} - \textcolor{#1c9c60}{x_0} \mid \textcolor{#1c9c60}{x_t}] 를 배우는데, 평균 방향은 어느 직선의 방향도 아니어서 그 방향을 따라가면 궤적이 휜다. 학습된 궤적끼리는 서로 교차할 수 없다(한 점에서 속도가 하나이니 ODE의 해가 유일하다). 교차하는 것은 조건부 직선들이고, 그 직선들의 방향을 평균했기 때문에 학습된 궤적이 휜다.

차원을 높이면 무작위로 그은 선분들이 서로 만날 일은 사실상 없지만, 그래도 문제는 남는다. 한 지점의 근처를 여러 목적지로 가는 선분이 스쳐 가면 평균은 여전히 섞인다. 기하학적 교차가 아니라 한 지점에 여러 목적지가 겹쳐 보이는 것이 원인이라, 차원만으로는 풀리지 않는다. 대응하는 방법은 세 가지다.

대응 하는 일 대가
경로를 편다 (리플로우) 모델이 만든 짝으로 다시 학습해 겹침을 줄인다 반복할수록 증류 오차가 쌓인다
표현을 바꾼다 겹침이 덜한 좌표계·공간을 찾는다 이론적으로는 가능하나 실용적 방법이 없다
스텝을 쪼갠다 휜 궤적을 짧은 직선 여러 개로 근사한다 네트워크 호출이 여러 번 필요하다. 가장 단순해서 실제로 쓰인다

리플로우. 학습된 ODE로 노이즈 ε\textcolor{#b8860b}{\varepsilon} 를 적분해 이미지 x^0\textcolor{#1c9c60}{\hat x_0} 를 얻으면, 서로 결정론적으로 짝지어진 쌍 (ε,x^0)(\textcolor{#b8860b}{\varepsilon}, \textcolor{#1c9c60}{\hat x_0}) 이 생긴다. 무작위 짝 대신 이 쌍을 직선으로 이어 같은 손실로 다시 학습하면, 모델이 만든 짝이라 서로 다른 쌍의 직선이 덜 겹치고 궤적이 곧아진다. 리우 등(2022)은 이 조작이 볼록한 수송 비용을 늘리지 않음을 보였고, 반복할수록 경로가 곧아져 거친 시간 간격으로도 정확히 적분된다고 보고했다. 다만 최적 수송(가장 싼 짝짓기)에 도달한다는 보장은 없다. InstaFlow(Liu et al., 2023)는 Stable Diffusion에 리플로우를 적용한 뒤 증류해 한 스텝 텍스트-이미지 모델을 만들었고, MS COCO 2017-5k에서 FID를 점진적 증류의 37.2에서 23.3으로 낮췄다.

MeanFlow: 순간 속도 대신 구간 평균 속도. 플로우 매칭의 속도장은 각 지점의 속도계다. 겅(Zhengyang Geng)·허카이밍(Kaiming He) 등의 MeanFlow(2025)는 시점 rr 에서 tt 까지의 평균 속도 uθ(xt,r,t)\textcolor{#1565c0}{u_\theta}(\textcolor{#1c9c60}{x_t}, r, t) 를 직접 배운다. 내비로 치면 구간마다의 실시간 속도 대신 「어디서 몇 시에 출발해 몇 시에 도착하는가」의 소요 시간표를 만드는 것이다. 표가 있으면 중간 구간을 밟을 필요가 없다. 평균 속도의 정의 (t−r) u=∫rtv dτ(t-r)\,u = \int_r^t v\,d\tau 를 tt 로 미분하면, 순간 속도와 평균 속도를 잇는 항등식이 나온다.

uθ(xt,r,t)=v(xt,t)−(t−r) ddtuθ(xt,r,t)\textcolor{#1565c0}{u_\theta}(\textcolor{#1c9c60}{x_t}, r, t) = \textcolor{#1565c0}{v}(\textcolor{#1c9c60}{x_t}, t) - (t - r)\,\frac{d}{dt}\textcolor{#1565c0}{u_\theta}(\textcolor{#1c9c60}{x_t}, r, t)
uθ모델이 배우는 구간 [r,t] 의 평균 속도v순간 속도 (학습 때는 조건부 속도 ε−x0 로 대신)xt시점 t 의 점 \small\begin{array}{ll} \textcolor{#1565c0}{u_\theta} & \text{모델이 배우는 구간 } [r, t] \text{ 의 평균 속도} \\ \textcolor{#1565c0}{v} & \text{순간 속도 (학습 때는 조건부 속도 } \textcolor{#b8860b}{\varepsilon} - \textcolor{#1c9c60}{x_0} \text{ 로 대신)} \\ \textcolor{#1c9c60}{x_t} & \text{시점 } t \text{ 의 점} \end{array}

이 항등식 덕분에 적분을 실제로 계산하지 않고도 평균 속도장을 학습할 수 있다. 대가로 학습 때 오른쪽 미분항을 위해 자코비안-벡터 곱을 계산해야 하므로, 비용이 생성에서 학습으로 옮겨 간다. 논문은 프리트레인·증류·커리큘럼 없이 처음부터 학습해 ImageNet 256×256(클래스 조건 생성)에서 한 번의 네트워크 호출(1-NFE)로 FID 3.43을 보고했다. 곧, 한 스텝 모델이 언제나 여러 스텝 교사의 파생물인 것은 아니다.

Re-MeanFlow: 펴고 나서 표를 만든다. 평균 속도 추정은 경로가 곧을수록 쉽다. 장(Xinxi Zhang) 등(2025, 「Overcoming the Curvature Bottleneck in MeanFlow」)은 기존 모델의 휜 궤적이 손실 지형을 거칠게 만들어 수렴과 품질을 막는다고 보고, 프리트레인 모델로 만든 리플로우 짝 위에서 MeanFlow를 학습했다(Rectified MeanFlow). 같은 학습 예산에서 기본 MeanFlow의 FID를 30.9에서 8.6으로 낮췄다. 리플로우와 MeanFlow는 따로가 아니라 「표를 만들려면 먼저 경로가 곧아야 한다」는 한 이야기다.

Self-Flow: 다른 축, 내부 조건을 더 잘 배우게 한다. 셰퍼(Hila Chefer)·에서(Patrick Esser) 등(Black Forest Labs, 2026)의 Self-Flow는 스텝 수와 무관하다. 디노이징 손실만으로는 의미 있는 표현을 배울 유인이 약하다는 문제의식에서, 토큰마다 노이즈 수준을 다르게 주는 이중 타임스텝 스케줄(Dual-Timestep Scheduling)로 정보 비대칭을 만들어, 덜 가려진 토큰으로부터 더 가려진 토큰의 내용을 추론하게 한다. 외부 인코더의 특징을 빌려 오던 방식 없이 표현 학습을 생성 학습 안에 넣은 것이다. 지금까지는 셀프 어텐션이 디노이징 손실의 부산물로 화면 안의 조율(내부 조건 읽기)을 알아서 배우기를 기대했다면, Self-Flow는 그것을 명시적 학습 목표로 올렸다.

축 묻는 것 방법
궤적을 어떻게 다루나 (스텝 수) 휜 궤적을 몇 번에 적분할까 플로우 매칭(스텝 쪼개기) → 리플로우(경로 펴기) → MeanFlow(구간 평균표) → Re-MeanFlow(펴고 나서 표) · 증류(4–8스텝 실용선)
내부 조건을 어떻게 배우나 (품질·수렴) 이미 그린 부분을 얼마나 잘 읽나 셀프 어텐션에 맡기기 → 외부 인코더 특징 빌리기 → Self-Flow(정보 비대칭으로 스스로 배우기)

스텝 수를 줄이는 방법들(리플로우, MeanFlow, 증류)은 움직이는 내부 조건을 네트워크 안으로 접어 넣는 방향이고, Self-Flow는 그 내부 조건을 애초에 더 잘 읽게 하는 방향이다. 둘은 서로 배타적이지 않다.

A.5 v-예측, 플로우 매칭, 트위디 공식

디퓨전 모델은 노이즈 ε\textcolor{#b8860b}{\varepsilon} 를 예측하기도 하고(ε-예측), 속도 vv 를 예측하기도 하며(v-예측), 플로우 매칭은 속도장을 회귀한다. 이름이 셋인데 서로 다른 모델인가?

가우시안 노이즈라면 사실상 같은 모델이다. 분산을 보존하는 경로(VP) xt=αtx0+σtε\textcolor{#1c9c60}{x_t} = \textcolor{#993600}{\alpha_t}\textcolor{#1c9c60}{x_0} + \textcolor{#0033ff}{\sigma_t}\textcolor{#b8860b}{\varepsilon}, αt2+σt2=1\textcolor{#993600}{\alpha_t}^2 + \textcolor{#0033ff}{\sigma_t}^2 = 1 에서, 살리먼스(Tim Salimans)와 호(Jonathan Ho)는 2022년 점진적 증류 논문에서 적은 스텝에서도 안정한 새 예측 대상으로 v=αtε−σtx0v = \textcolor{#993600}{\alpha_t}\textcolor{#b8860b}{\varepsilon} - \textcolor{#0033ff}{\sigma_t}\textcolor{#1c9c60}{x_0} 를 썼다. αt=cos⁡ϕ\textcolor{#993600}{\alpha_t} = \cos\phi, σt=sin⁡ϕ\textcolor{#0033ff}{\sigma_t} = \sin\phi 로 두면 v=dxt/dϕv = d\textcolor{#1c9c60}{x_t}/d\phi, 곧 원호 위를 도는 경로에서 각도에 대한 속도이고, 어느 예측이든 선형 변환 하나로 서로 바뀐다.

ε^=αtv^+σtxt,x^0=αtxt−σtv^∣ε^=xt+(1−t) v^,x^0=xt−t v^\textcolor{#1565c0}{\hat\varepsilon} = \textcolor{#993600}{\alpha_t}\textcolor{#1565c0}{\hat v} + \textcolor{#0033ff}{\sigma_t}\textcolor{#1c9c60}{x_t}, \qquad \textcolor{#1565c0}{\hat x_0} = \textcolor{#993600}{\alpha_t}\textcolor{#1c9c60}{x_t} - \textcolor{#0033ff}{\sigma_t}\textcolor{#1565c0}{\hat v} \qquad\Big|\qquad \textcolor{#1565c0}{\hat\varepsilon} = \textcolor{#1c9c60}{x_t} + (1-t)\,\textcolor{#1565c0}{\hat v}, \qquad \textcolor{#1565c0}{\hat x_0} = \textcolor{#1c9c60}{x_t} - t\,\textcolor{#1565c0}{\hat v}
v^모델의 속도 예측 (왼쪽: v-예측, 오른쪽: 플로우 매칭의 vθ)ε^, x^0같은 예측을 노이즈⋅깨끗한 이미지로 바꿔 읽은 것xt시점 t 의 노이즈 낀 이미지αt, σtVP 경로에서 남은 신호와 노이즈의 비율 \small\begin{array}{ll} \textcolor{#1565c0}{\hat v} & \text{모델의 속도 예측 (왼쪽: v-예측, 오른쪽: 플로우 매칭의 } v_\theta\text{)} \\ \textcolor{#1565c0}{\hat\varepsilon},\ \textcolor{#1565c0}{\hat x_0} & \text{같은 예측을 노이즈·깨끗한 이미지로 바꿔 읽은 것} \\ \textcolor{#1c9c60}{x_t} & \text{시점 } t \text{ 의 노이즈 낀 이미지} \\ \textcolor{#993600}{\alpha_t},\ \textcolor{#0033ff}{\sigma_t} & \text{VP 경로에서 남은 신호와 노이즈의 비율} \end{array}

결국 셋 다 E[x0∣xt]\mathbb{E}[\textcolor{#1c9c60}{x_0} \mid \textcolor{#1c9c60}{x_t}] 하나를 배운다. 직선 경로를 (1−t)2+t2\sqrt{(1-t)^2 + t^2} 로 나누면 VP 경로가 되고(각도 ϕ=arctan⁡t1−t\phi = \arctan\frac{t}{1-t}), v-예측에 결정론적 샘플러(DDIM)를 붙이면 원호 경로 위의 플로우 매칭과 같다.

실제로 달라지는 세 가지.

v-예측 (VP) 플로우 매칭 (직선)
경로 모양 원호 조건부 경로는 직선. 다만 주변(모든 데이터–노이즈 쌍을 합친) 궤적은 여전히 휜다
깨끗한 이미지 오차 ∥x0−x^0∥2\lVert \textcolor{#1c9c60}{x_0} - \textcolor{#1565c0}{\hat x_0} \rVert^2 에 대한 가중치 1+αt2/σt21 + \textcolor{#993600}{\alpha_t}^2/\textcolor{#0033ff}{\sigma_t}^2 (1 + 신호 대 잡음비) 1/t21/t^2
출발 분포 가우시안 노이즈 (스코어에서 나온 개념) 정규분포가 아니어도 된다. 데이터 → 데이터 변환, 최적 수송 짝짓기도 그대로

같은 제곱 오차라도 무엇을 예측하느냐에 따라 노이즈 수준별 가중치가 달라진다(ε-예측은 αt2/σt2\textcolor{#993600}{\alpha_t}^2/\textcolor{#0033ff}{\sigma_t}^2). 여기에 학습 시점을 뽑는 분포(SD3의 로짓-정규 샘플링 등)까지 곱해지므로, 실제 성능 차이는 대부분 이 가중치에서 나온다. 킹마(Diederik Kingma)와 가오(Ruiqi Gao)는 2023년 흔히 쓰는 디퓨전 목표가 모두 노이즈 수준별 ELBO를 가중 적분한 것이며 가중치만 다르다고 정리했다.

끝점도 다르다. 신호가 0인 순수 노이즈 지점(αt=0\textcolor{#993600}{\alpha_t} = 0)에서 ε-예측은 입력이 곧 노이즈라 x0\textcolor{#1c9c60}{x_0} 에 대한 정보를 주지 못하지만, v-예측(v=−x0v = -\textcolor{#1c9c60}{x_0})과 플로우 매칭(ε−x0\textcolor{#b8860b}{\varepsilon} - \textcolor{#1c9c60}{x_0})은 잘 정의된다. 린(Shanchuan Lin) 등(2023)이 마지막 스텝의 신호 대 잡음비를 0으로 맞추는 스케줄을 쓸 때 v-예측으로 바꾸라고 권한 이유다.

트위디 공식: 노이즈 제거의 최선은 스코어 하나로 정해진다. 노이즈 예측 네트워크를 왜 스코어(로그 밀도의 그래디언트 ∇log⁡p\nabla \log p) 네트워크로 쓸 수 있는가? 가장 단순한 경우 xt=x0+σε\textcolor{#1c9c60}{x_t} = \textcolor{#1c9c60}{x_0} + \textcolor{#0033ff}{\sigma}\textcolor{#b8860b}{\varepsilon} (ε\textcolor{#b8860b}{\varepsilon} 는 x0\textcolor{#1c9c60}{x_0} 와 독립인 표준 정규 노이즈)에서 다음이 성립한다.

E[x0∣xt]=xt+σ2 ∇log⁡pt(xt)\mathbb{E}[\textcolor{#1c9c60}{x_0} \mid \textcolor{#1c9c60}{x_t}] = \textcolor{#1c9c60}{x_t} + \textcolor{#0033ff}{\sigma}^2\,\nabla \log \textcolor{#206049}{p_t}(\textcolor{#1c9c60}{x_t})
x0, xt깨끗한 값, 노이즈 섞인 관측σ노이즈 크기 (알려져 있어야 한다)pt노이즈가 섞인 뒤의 주변 밀도 (사전분포를 몰라도 관측에서 잰다) \small\begin{array}{ll} \textcolor{#1c9c60}{x_0},\ \textcolor{#1c9c60}{x_t} & \text{깨끗한 값, 노이즈 섞인 관측} \\ \textcolor{#0033ff}{\sigma} & \text{노이즈 크기 (알려져 있어야 한다)} \\ \textcolor{#206049}{p_t} & \text{노이즈가 섞인 뒤의 주변 밀도 (사전분포를 몰라도 관측에서 잰다)} \end{array}

유도는 세 줄이다. (1) pt(xt)=∫p(x0) N(xt;x0,σ2I) dx0\textcolor{#206049}{p_t}(\textcolor{#1c9c60}{x_t}) = \int p(\textcolor{#1c9c60}{x_0})\,\mathcal{N}(\textcolor{#1c9c60}{x_t}; \textcolor{#1c9c60}{x_0}, \textcolor{#0033ff}{\sigma}^2 I)\,d\textcolor{#1c9c60}{x_0}. (2) 가우시안 커널을 xt\textcolor{#1c9c60}{x_t} 로 미분하면 커널에 (x0−xt)/σ2(\textcolor{#1c9c60}{x_0} - \textcolor{#1c9c60}{x_t})/\textcolor{#0033ff}{\sigma}^2 이 곱해진다. (3) 양변을 pt\textcolor{#206049}{p_t} 로 나누면 적분이 사후 평균이 되어 ∇log⁡pt=(E[x0∣xt]−xt)/σ2\nabla \log \textcolor{#206049}{p_t} = (\mathbb{E}[\textcolor{#1c9c60}{x_0} \mid \textcolor{#1c9c60}{x_t}] - \textcolor{#1c9c60}{x_t})/\textcolor{#0033ff}{\sigma}^2. 유도 전체가 「가우시안 커널의 그래디언트는 (x0−xt)(\textcolor{#1c9c60}{x_0} - \textcolor{#1c9c60}{x_t}) 에 비례한다」 한 가지에 기댄다. VP 경로로 옮기면 E[ε∣xt]=−σt∇log⁡pt(xt)\mathbb{E}[\textcolor{#b8860b}{\varepsilon} \mid \textcolor{#1c9c60}{x_t}] = -\textcolor{#0033ff}{\sigma_t}\nabla \log \textcolor{#206049}{p_t}(\textcolor{#1c9c60}{x_t}). 노이즈를 제곱 오차로 맞히는 네트워크가 곧 스코어를 배운다는 뜻이다. 빈센트(Pascal Vincent)가 2011년 「A Connection Between Score Matching and Denoising Autoencoders」에서 보인 디노이징 스코어 매칭이 이것이다.

이 공식은 1950년대 경험적 베이즈(사전분포를 모르지만 같은 종류의 추정 문제가 많이 쌓여 있을 때, 관측 전체에서 사전분포를 추정해 대신하는 방법)에서 나왔다. 허버트 로빈스(Herbert Robbins)는 1956년 논문에서, 보험 가입자마다 모르는 사고율을 올해 사고 횟수만으로 추정하는 류의 문제를 다루며 포아송 경우의 공식을 보였고, 정규분포 경우의 공식은 모리스 트위디(Maurice Tweedie)와의 개인 서신 덕분이라고 밝혔다. 이름이 여기서 왔다. 요점은 불안정한 역합성곱(관측 분포에서 사전분포를 거꾸로 풀어내기)을 건너뛰고, 안정적으로 잴 수 있는 관측의 주변 분포만으로 베이즈 추정을 한다는 것이었다. 오래 잊혀 있던 이 공식을 브래들리 에프런(Bradley Efron)이 2011년 「Tweedie’s Formula and Selection Bias」로 되살렸다. 수천 개의 z-점수 가운데 가장 큰 것들은 실제 효과를 과대평가하는데(선택 편향), 사후 평균은 무엇을 골랐는지와 무관하므로 트위디 공식이 이를 자동으로 보정한다는 것이다. 디퓨전 모델은 많은 개체가 노이즈 섞인 관측으로만 주어지고 거기서 개별 노이즈를 걷어 내야 하는 같은 구조에서 log⁡pt\log \textcolor{#206049}{p_t} 를 추정하는 도구를 히스토그램에서 신경망으로 바꾼 것이다.

유도의 (2)–(3)은 정규분포에 부분적분을 한 번 하는 스타인 보조정리(Charles Stein)와 같은 계산이다. 스타인은 1981년 같은 계산으로 참값 없이 추정량의 평균제곱오차를 추정하는 식(SURE)을 얻었고, 휘베리넨(Aapo Hyvärinen)이 2005년 정규화 상수를 몰라도 되는 스코어 매칭을 만든 것도 같은 부분적분이다. 모르는 양(사전분포, 정규화 상수, 참값)을 그래디언트 정보로 대신한다는 한 가지 수다.

성립 조건과 리플로우 뒤. 트위디 공식은 노이즈가 ① 정규분포를 따르고 ② 데이터와 독립이며 ③ 크기가 알려져 있을 때만 성립한다. 리플로우를 한 번이라도 거친 모델은 ②가 깨진다. 노이즈 ε\textcolor{#b8860b}{\varepsilon} 가 생성 이미지 x^0\textcolor{#1c9c60}{\hat x_0} 와 짝지어져 있으니 유도 (1)의 적분이 「사전분포 × 가우시안 커널」로 쪼개지지 않는다. 그래서 VP 경로로 리플로우를 해도 1스텝 생성의 이득은 그대로지만, αtv^+σtxt\textcolor{#993600}{\alpha_t}\textcolor{#1565c0}{\hat v} + \textcolor{#0033ff}{\sigma_t}\textcolor{#1c9c60}{x_t} 는 더 이상 스코어가 아니다. 스코어에 기대는 SDE 샘플링·조상 샘플링(ancestral sampling)·랑주뱅 보정은 쓸 수 없고 ODE 샘플링만 남는다. 정규분포가 아닌 출발 분포를 쓰는 플로우 매칭도 같은 이유로 ODE 샘플링만 가능하다. 그 모델은 디퓨전 모델이 아니라 「VP 좌표로 표현한 렉티파이드 플로우」가 된다.

부록 B: 수학 기호 참조표

같은 글자가 여러 뜻으로 쓰이는 경우(특히 σ, β, r, ε)가 있어 문맥별로 구분했다.

정책 그래디언트·가치 기반 (Part II, III, IV)

기호 뜻 처음 나오는 곳
πθ(a∣s)\textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{a} \mid \textcolor{#0093b8}{s}) 정책: 상태 s\textcolor{#0093b8}{s}에서 행동 a\textcolor{#1c9c60}{a}를 고를 확률. 언어 모델에서는 다음 토큰 분포 Ch2
τ\tau, y\textcolor{#1c9c60}{y} 궤적 / 응답 전체 y=(y1,…,yT)\textcolor{#1c9c60}{y} = (\textcolor{#1c9c60}{y_1}, \dots, \textcolor{#1c9c60}{y_T}) Ch2
R(x,y)\textcolor{#d9670b}{R}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}), rt\textcolor{#d9670b}{r_t} 응답 전체의 보상 / 스텝 tt의 보상 Ch2
J(θ)\textcolor{#d62728}{J}(\theta) 목적함수: 기대 보상 Ey∼πθ[R]\mathbb{E}_{\textcolor{#1c9c60}{y} \sim \textcolor{#1565c0}{\pi_\theta}}[\textcolor{#d9670b}{R}] Ch2
Φt\textcolor{#8e44ad}{\Phi_t} 정책 그래디언트 E[∑tΦt∇log⁡πθ]\mathbb{E}[\sum_t \textcolor{#8e44ad}{\Phi_t} \nabla \log \textcolor{#1565c0}{\pi_\theta}]에서 ∇log⁡πθ\nabla \log \pi_\theta 앞에 곱하는 가중치. 알고리즘마다 넣는 값(리턴, 어드밴티지 등)이 다르다 Ch2
b\textcolor{#00897b}{b} 베이스라인: 보상에서 빼도 기대 그래디언트를 바꾸지 않는 값 Ch3
A(s,a)\textcolor{#8e44ad}{A}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a}), A^t\textcolor{#8e44ad}{\hat A_t} 어드밴티지 Q−V\textcolor{#00897b}{Q} - \textcolor{#00897b}{V}: 평균보다 얼마나 나은가 / 그 추정값 Ch9
P(s′∣s,a)\textcolor{#8877ff}{P}(\textcolor{#0093b8}{s'} \mid \textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a}), Pπ\textcolor{#8877ff}{P^\pi} 전이 확률: 상태 s\textcolor{#0093b8}{s}에서 행동 a\textcolor{#1c9c60}{a}를 하면 다음 상태가 s′\textcolor{#0093b8}{s'}일 확률 / 정책을 정한 뒤의 전이 행렬 Ch4
γ\textcolor{#7a1f5a}{\gamma} 할인율: 한 스텝 뒤 보상에 곱하는 수(0~1). 언어 모델 RLHF 에서는 보통 1 Ch4
Gt\textcolor{#5d4037}{G_t} 리턴: 시점 tt부터 앞으로 받을 (할인한) 보상의 합 ∑kγkrt+k\sum_k \textcolor{#7a1f5a}{\gamma}^k \textcolor{#d9670b}{r_{t+k}} Ch4
Vπ(s)\textcolor{#00897b}{V^\pi}(\textcolor{#0093b8}{s}), Vϕ\textcolor{#00897b}{V_\phi} 가치함수: 상태 s\textcolor{#0093b8}{s}에서 정책 π\pi를 따를 때의 기대 리턴 / 그것을 근사하는 비평가(파라미터 ϕ\phi, Ch9) Ch4
Qπ(s,a)\textcolor{#00897b}{Q^\pi}(\textcolor{#0093b8}{s}, \textcolor{#1c9c60}{a}) 행동 가치: 첫 행동만 a\textcolor{#1c9c60}{a}로 정하고 그 뒤로 정책을 따를 때의 기대 리턴 Ch4
V∗\textcolor{#00897b}{V^*}, Q∗\textcolor{#00897b}{Q^*}, π∗\textcolor{#2e7d32}{\pi^*} 최적 가치 / 최적 행동 가치 / 최적 정책 (벨먼 최적 방정식) Ch5
T\mathcal{T} 벨먼 연산자: 벨먼 최적 방정식의 오른쪽을 표에 적용하는 연산. 거리를 γ\textcolor{#7a1f5a}{\gamma}배 이하로 줄이는 축약 사상 Ch5
δt\textcolor{#8e44ad}{\delta_t} TD 오차 rt+γV(st+1)−V(st)\textcolor{#d9670b}{r_t} + \textcolor{#7a1f5a}{\gamma} \textcolor{#00897b}{V}(\textcolor{#0093b8}{s_{t+1}}) - \textcolor{#00897b}{V}(\textcolor{#0093b8}{s_t}) Ch6
α\alpha 학습률: 시간차 학습·Q-러닝에서 목표 쪽으로 한 번에 옮기는 비율 Ch6
ε\varepsilon (ε-그리디) 탐색 확률: 아무 행동이나 고를 확률. 클리핑 범위 ε\textcolor{#1f6d7a}{\varepsilon}, 노이즈 ε\textcolor{#b8860b}{\varepsilon}와 구별 Ch7
Qθ−\textcolor{#6f6f78}{Q_{\theta^-}}, D\mathcal{D} 타깃 네트워크(목표값만 계산하려고 얼려 둔 사본) / 리플레이 버퍼 Ch8
λ\lambda GAE의 편향-분산 조절 계수 (0 = TD, 1 = 몬테카를로) Ch9
rt(θ)\textcolor{#c2185b}{r_t(\theta)} 임포턴스 비율 πθ(at∣st)/πold(at∣st)\textcolor{#1565c0}{\pi_\theta}(\textcolor{#1c9c60}{a_t} \mid \textcolor{#0093b8}{s_t}) / \textcolor{#6f6f78}{\pi_\text{old}}(\textcolor{#1c9c60}{a_t} \mid \textcolor{#0093b8}{s_t}). 보상 rt\textcolor{#d9670b}{r_t}와 구별 Ch10
ε\textcolor{#1f6d7a}{\varepsilon} PPO/GRPO의 클리핑 범위 [1−ε,1+ε][1-\textcolor{#1f6d7a}{\varepsilon}, 1+\textcolor{#1f6d7a}{\varepsilon}] Ch10
πold\textcolor{#6f6f78}{\pi_\text{old}} 롤아웃을 생성한 (한 스텝 전) 정책 Ch10
rψ(x,y)\textcolor{#d9670b}{r_\psi}(\textcolor{#0093b8}{x}, \textcolor{#1c9c60}{y}) 보상 모델: 쌍비교로 학습한 채점기, 파라미터 ψ\psi (비평가 Vϕ\textcolor{#00897b}{V_\phi}와 구별) Ch10
G\textcolor{#5f970c}{G} GRPO 그룹 크기: 한 프롬프트당 생성하는 응답 수 Ch21
μG\textcolor{#00897b}{\mu_G}, σG\textcolor{#008deb}{\sigma_G} 그룹 보상의 평균과 표준편차 Ch21
A^i=(Ri−μG)/σG\textcolor{#8e44ad}{\hat A_i} = (\textcolor{#d9670b}{R_i} - \textcolor{#00897b}{\mu_G})/\textcolor{#008deb}{\sigma_G} GRPO의 정규화된 어드밴티지 Ch21

DPO (Part V)

기호 뜻 처음 나오는 곳
πref\textcolor{#6f6f78}{\pi_\text{ref}} 레퍼런스 모델: 학습 전 모델. KL 제약의 기준점 Ch1
yw\textcolor{#e000a5}{y_w}, yl\textcolor{#e000a5}{y_l} 선호 응답(winner), 비선호 응답(loser) Ch1
Δθ\textcolor{#1565c0}{\Delta_\theta}, Δref\textcolor{#6f6f78}{\Delta_\text{ref}} 학습 모델 / 레퍼런스의 선호 마진 log⁡π(yw)−log⁡π(yl)\log \pi(\textcolor{#e000a5}{y_w}) - \log \pi(\textcolor{#e000a5}{y_l}) Ch1
β\textcolor{#827717}{\beta} KL 강도 (클수록 레퍼런스 모델에서 덜 벗어나게 묶는다). 디퓨전의 노이즈 스케줄 βt\beta_t와 구별 Ch1
σ(z)\sigma(z) 시그모이드 1/(1+e−z)1/(1+e^{-z}). 표준편차 σG\textcolor{#008deb}{\sigma_G}, 노이즈 크기 σt\sigma_t와 구별 Ch1
KL(πθ∥πref)\textcolor{#8c564b}{\mathrm{KL}}(\textcolor{#1565c0}{\pi_\theta} \Vert \textcolor{#6f6f78}{\pi_\text{ref}}) 두 분포의 쿨백-라이블러 발산 Ch1
γ\gamma (SimPO) 목표 마진. 할인율 γ\gamma와 구별 Ch18

디퓨전 (Part VII)

기호 뜻 처음 나오는 곳
x0\textcolor{#1c9c60}{x_0}, xt\textcolor{#1c9c60}{x_t}, xT\textcolor{#1c9c60}{x_T} 깨끗한 이미지 / 시점 tt의 노이즈 낀 이미지 / 순수 노이즈 Ch24
βt\beta_t 순방향 노이즈 스케줄 부록 A
μθ(xt,t)\textcolor{#1565c0}{\mu_\theta}(\textcolor{#1c9c60}{x_t}, t), σt\sigma_t 역방향 한 스텝 정규분포의 평균(모델 예측)과 표준편차(스케줄) Ch24
ε\textcolor{#b8860b}{\varepsilon}, εθ\textcolor{#1565c0}{\varepsilon_\theta} 실제로 섞은 노이즈 / 모델이 예측한 노이즈. 클리핑 범위 ε\textcolor{#1f6d7a}{\varepsilon}과 구별 Ch24
vθ(x,t)\textcolor{#1565c0}{v_\theta}(\textcolor{#1c9c60}{x}, t) 플로우 매칭 모델의 속도장 Ch26
ELBO 증거 하한: log⁡p(x0)\log p(\textcolor{#1c9c60}{x_0})의 하한 부록 F

부록 C: LLM ↔ 디퓨전 대응 사전

Ch24 「디퓨전에서 DPO를 쓰려면」부터 Ch26 「이미지·로보틱스의 강화학습」까지 흩어져 나온 대응을 한 곳에 모았다.

개념 LLM (자기회귀) 디퓨전 / 플로우 모델
한 번의 “행동” 토큰 하나 디노이징 스텝 하나 (xt→xt−1x_t \to x_{t-1})
정책 소프트맥스 다음 토큰 분포 정규분포 N(μθ(xt,t),σt2I)\mathcal{N}(\mu_\theta(x_t, t), \sigma_t^2 I)
출력의 로그확률 토큰 로그확률의 합(정확) 경로 하나의 로그확률은 정확, 이미지의 로그확률은 ELBO 하한
DPO의 log⁡π\log \pi 대리 ∑tlog⁡π(yt∣y<t)\sum_t \log \pi(y_t \mid y_{<t}) −∥ε−εθ(xt,t)∥2-\lVert \varepsilon - \varepsilon_\theta(x_t, t) \rVert^2 (Diffusion-DPO)
탐색의 원천 샘플링 온도 스텝마다 섞는 노이즈 σtz\sigma_t z
결정론적 생성 그리디 디코딩 (샘플링 온도 0) ODE 샘플러 (DDIM η=0, 플로우 매칭 Euler)
길이 토큰 수 디노이징 스텝 수
길이 편향 긴 응답일수록 로그확률 합이 작음 (Ch14) 디테일이 많을수록 복원 오차가 큼(매끈함 편향)
레퍼런스 모델 학습 전 언어 모델 학습 전 디퓨전 모델
정책 그래디언트 REINFORCE / PPO (Ch3, Ch10) DDPOSF / DDPOIS (Ch25)
그룹 상대 비교 GRPO (Ch21) Flow-GRPO, DanceGRPO (Ch26)
리워드 해킹의 전형 아첨, 장황함, 형식 도배 과포화, 이미지 안에 글자 그리기, 스타일 붕괴
롤아웃과 학습의 불일치 생성 엔진 vs 학습 엔진의 확률 차이 (Ch23) 적은 스텝 학습 샘플러 vs 많은 스텝 생성 샘플러

부록 D: 알고리즘 족보 다이어그램

이 교재에 나온 알고리즘의 계보를 한 장에 모았고, 화살표는 "무엇을 바꿔서 나왔는가"를 뜻한다.

graph TD
    VPG["VPG · 정책 그래디언트 정리<br/>(Williams 1992, Sutton 2000)<br/>Ch2"]
    RF["REINFORCE + 베이스라인<br/>Ch3"]
    MDP["MDP · 벨먼 방정식 · 가치 반복과 정책 반복<br/>(벨먼 1957, 하워드 1960)<br/>Ch4–5"]
    TD["시간차 학습 TD(0)<br/>(Sutton 1988)<br/>Ch6"]
    QL["SARSA · Q-러닝<br/>(Watkins 1989)<br/>Ch7"]
    DQN["DQN · 더블 DQN · 레인보<br/>(2013–2018)<br/>Ch8"]
    AC["Actor-Critic · GAE<br/>(2016)<br/>Ch9"]
    TRPO["TRPO (2015)<br/>신뢰 영역"]
    PPO["PPO (2017)<br/>클리핑<br/>Ch10"]
    RLHF["RLHF · InstructGPT (2022)<br/>보상 모델 + PPO<br/>Ch10"]
    DPO["DPO (2023)<br/>보상 모델을 수식으로 제거<br/>Ch11"]
    DPOV["IPO · cDPO · KTO · CPO · ORPO · SimPO<br/>(2024)<br/>Ch18"]
    RAIN["RainbowPO (ICLR 2025)<br/>7요소 통합<br/>Ch18"]
    ITER["Iterative / Online DPO<br/>Ch19"]
    RLOO["RLOO · ReMax · REINFORCE++<br/>비평가 없는 형제들<br/>Ch23"]
    GRPO["GRPO (2024)<br/>그룹 평균이 비평가를 대신<br/>Ch21"]
    R1["RLVR (2024, 툴루 3) · DeepSeek-R1 (2025)<br/>검증기 보상<br/>Ch21"]
    VAR["Dr.GRPO · DAPO · GSPO · GMPO · CISPO · SAPO<br/>(2025)<br/>Ch23"]
    VAPO["VAPO (2025)<br/>비평가의 귀환<br/>Ch23"]
    DDPO["DDPO (2023)<br/>디노이징 스텝 = 행동<br/>Ch25"]
    DDPOD["Diffusion-DPO · D3PO (2024)<br/>Ch24"]
    SDPO["Diffusion-SDPO (2025)<br/>Ch24"]
    FLOW["Flow-GRPO · DanceGRPO (2025)<br/>ODE → SDE<br/>Ch26"]
    AGENT["에이전트 RL<br/>하네스 학습 · 다중 턴 크레딧 할당 · 토큰별 보상<br/>Ch28"]

    VPG -->|"기댓값 → 샘플 평균"| RF
    RF -->|"베이스라인 → 학습된 V(s)"| AC
    MDP -->|"전이 확률 없이 겪어 보며"| TD
    TD -->|"행동 가치를 직접"| QL
    QL -->|"표 → 신경망"| DQN
    TD -->|"비평가를 TD로 학습"| AC
    AC -->|"업데이트 크기 제한"| TRPO
    TRPO -->|"제약 → 클리핑"| PPO
    PPO -->|"보상 모델 + KL"| RLHF
    RLHF -->|"최적해로 보상을 정책으로 다시 쓰기"| DPO
    DPO -->|"약점마다 한 요소 교체"| DPOV
    DPOV --> RAIN
    DPO -->|"데이터 업데이트"| ITER
    RF -->|"PPO 없이 단순하게"| RLOO
    PPO -->|"비평가 → 그룹 평균"| GRPO
    GRPO -->|"보상 모델 → 검증기"| R1
    R1 -->|"편향·불안정 수정"| VAR
    PPO -->|"비평가 개선"| VAPO
    RF --> DDPO
    PPO --> DDPO
    DPO --> DDPOD
    DDPOD --> SDPO
    GRPO --> FLOW
    VAR --> FLOW
    GRPO --> AGENT
    AC -.->|"스텝별 가치"| AGENT

부록 E: BM25와 로그오즈, 검색에서 이미 풀린 문제

이 부록은 Ch14 「길이 편향」에서 다룬 "로그오즈(log odds, log⁡p1−p\log\frac{p}{1-p}) 공간에서 증거가 합으로 보강된다"는 원리가 정보 검색(BM25)에서 수십 년 전에 이미 해결되었음을 보여준다.

문서 검색의 단순한 접근 (확률 공간)

쿼리 "강화학습 디퓨전 모델 GRPO"에 대해 문서 A는 네 키워드를 모두 포함하는 긴 논문이고, 문서 B는 두 개만 포함하는 짧은 블로그라고 하자. 단순하게 P(관련∣문서)∝P(t1∣관련)×P(t2∣관련)×⋯P(\text{관련} \mid \text{문서}) \propto P(t_1 \mid \text{관련}) \times P(t_2 \mid \text{관련}) \times \cdots 로 점수를 매기면, 각 항이 1보다 작으므로 매칭이 많을수록 곱이 0에 가까워진다. 증거가 많을수록 확률이 낮아지는 역설이다. Ch14 「길이 편향」에서 본 “긴 응답일수록 로그확률 합이 작아지는” 문제와 같은 구조다.

BM25의 해법: IDF는 로그오즈다

IDF(t)=log⁡N−n(t)+0.5n(t)+0.5≈log⁡P(t 없음)P(t 있음)\textcolor{#cc00ff}{\text{IDF}}(t) = \log \frac{\textcolor{#0033ff}{N} - \textcolor{#993600}{n}(t) + 0.5}{\textcolor{#993600}{n}(t) + 0.5} \approx \log \frac{P(t \text{ 없음})}{P(t \text{ 있음})}
IDF(t)단어 t의 역문서 빈도 (드문 단어일수록 크다)N전체 문서 수n(t)단어 t가 나온 문서 수 \small\begin{array}{ll} \textcolor{#cc00ff}{\text{IDF}}(t) & \text{단어 t의 역문서 빈도 (드문 단어일수록 크다)} \\ \textcolor{#0033ff}{N} & \text{전체 문서 수} \\ \textcolor{#993600}{n}(t) & \text{단어 t가 나온 문서 수} \end{array}

IDF는 "이 단어가 희귀하다"의 로그오즈다. BM25 점수는 ∑tIDF(t)×TF보정(t)\sum_t \textcolor{#cc00ff}{\text{IDF}}(t) \times \text{TF보정}(t)(TF는 문서 안 단어 빈도)이고, 매칭된 키워드 하나하나가 양수 증거로 더해진다. 확률 공간의 곱이 로그오즈 공간의 합으로 바뀐 것이다.

세 문제의 같은 구조

문제 확률 공간의 역설 로그오즈 공간의 해결
LLM 길이 편향 토큰↑ → 로그확률 합↓ ORPO: 오즈 비율로 비교 (Ch14)
문서 검색 매칭↑ → 단순 곱 확률↓ BM25: IDF(로그오즈)를 합산
베이즈 업데이트 증거↑ → 확률의 곱↓ 로그오즈: 증거를 더한다

BM25의 길이 정규화 = SimPO의 1/∣y∣1/|y|

TF보정(t)=tf(t) (k+1)tf(t)+k (1−b+b⋅∣D∣/avgDL)\text{TF보정}(t) = \frac{\textcolor{#206049}{tf}(t)\,(\textcolor{#536020}{k}+1)}{\textcolor{#206049}{tf}(t) + \textcolor{#536020}{k}\,\big(1 - \textcolor{#ff0059}{b} + \textcolor{#ff0059}{b} \cdot \textcolor{#915a08}{|D|} / \textcolor{#915a08}{\text{avgDL}}\big)}
tf(t)문서 안에서 단어 t가 나온 횟수k횟수 포화 정도b길이 정규화 강도 (0이면 없음, 1이면 완전)∣D∣, avgDL이 문서의 길이, 평균 문서 길이 \small\begin{array}{ll} \textcolor{#206049}{tf}(t) & \text{문서 안에서 단어 t가 나온 횟수} \\ \textcolor{#536020}{k} & \text{횟수 포화 정도} \\ \textcolor{#ff0059}{b} & \text{길이 정규화 강도 (0이면 없음, 1이면 완전)} \\ \textcolor{#915a08}{|D|},\ \textcolor{#915a08}{\text{avgDL}} & \text{이 문서의 길이, 평균 문서 길이} \end{array}

b∈[0,1]\textcolor{#ff0059}{b} \in [0, 1]이 길이 정규화의 강도다. "긴 문서는 키워드가 등장할 기회가 많을 뿐"이라는 보정으로, SimPO의 토큰 수 정규화와 같은 역할을 한다.

정리하면 BM25 = 로그오즈(ORPO적) + 길이 정규화(SimPO적). 정보 검색은 이 문제를 1990년대에 이미 풀었다.

부록 F: ELBO와 Diffusion-DPO의 이론적 근거

이 부록은 Ch24 「디퓨전에서 DPO를 쓰려면」(Diffusion-DPO)에서 사용한 "타임스텝별 정규분포 로그확률의 합"이 전체 log⁡P(x0)\log P(\textcolor{#1c9c60}{x_0})의 하한(ELBO)임을 도출하고, 이것이 왜 DPO의 대리(proxy)로 사용될 수 있는지를 설명한다.

F.1 왜 ELBO가 필요한가

Ch24 「디퓨전에서 DPO를 쓰려면」에서 "각 디노이징 스텝이 정규분포이므로 로그확률을 닫힌 형태로 구할 수 있다"고 했다. 그런데 그것은 경로 하나의 로그확률이다. 우리가 원하는 것은 이미지의 로그확률 log⁡pθ(x0)\log \textcolor{#1565c0}{p_\theta}(\textcolor{#1c9c60}{x_0})(“이 이미지가 얼마나 그럴듯한가”)이고, 같은 x0\textcolor{#1c9c60}{x_0}에 이르는 경로는 무수히 많다. 가진 것은 노이즈를 예측하는 모델 εθ(xt,t)\textcolor{#1565c0}{\varepsilon_\theta}(\textcolor{#1c9c60}{x_t}, t)뿐이다. 이미지의 로그확률과 노이즈 예측 모델 사이의 다리가 ELBO(Evidence Lower BOund, 증거 하한)다.

비유: 방의 크기를 재고 싶은데 줄자가 없다.
방의 정확한 면적은 모른다. 하지만 방 안에 들어가는 가장 큰 가구의 크기는 안다.
→ “방은 최소한 이 가구보다는 크다.” 이것이 하한이다.
ELBO는 "진짜 로그확률은 모르지만, 최소한 이 값보다는 크다"를 준다.

F.2 ELBO의 모양

정방향 과정 q(x1:T∣x0)\textcolor{#cc00ff}{q}(\textcolor{#1c9c60}{x_{1:T}} \mid \textcolor{#1c9c60}{x_0})(깨끗한 데이터에 노이즈를 단계별로 더하는 고정된 과정, “문제를 내는 선생님”)을 도구로 쓰면, 젠센 부등식에서 다음 하한이 나온다.

log⁡pθ(x0)  ≥  Eq[log⁡p(xT)+∑t=1Tlog⁡pθ(xt−1∣xt)−∑t=1Tlog⁡q(xt∣xt−1)]=ELBO\log \textcolor{#1565c0}{p_\theta}(\textcolor{#1c9c60}{x_0}) \;\ge\; \mathbb{E}_{\textcolor{#cc00ff}{q}}\Big[\log \textcolor{#b8860b}{p}(\textcolor{#1c9c60}{x_T}) + \sum_{t=1}^{\textcolor{#915a08}{T}} \log \textcolor{#1565c0}{p_\theta}(\textcolor{#1c9c60}{x_{t-1}} \mid \textcolor{#1c9c60}{x_t}) - \sum_{t=1}^{\textcolor{#915a08}{T}} \log \textcolor{#cc00ff}{q}(\textcolor{#1c9c60}{x_t} \mid \textcolor{#1c9c60}{x_{t-1}})\Big] = \textcolor{#d62728}{\text{ELBO}}
pθ학습 중인 디퓨전 모델 (역방향)q노이즈를 넣는 정방향 과정 (고정)p(xT)순수 노이즈 분포ELBO로그우도의 하한 \small\begin{array}{ll} \textcolor{#1565c0}{p_\theta} & \text{학습 중인 디퓨전 모델 (역방향)} \\ \textcolor{#cc00ff}{q} & \text{노이즈를 넣는 정방향 과정 (고정)} \\ \textcolor{#b8860b}{p}(\textcolor{#1c9c60}{x_T}) & \text{순수 노이즈 분포} \\ \textcolor{#d62728}{\text{ELBO}} & \text{로그우도의 하한} \end{array}

읽는 법: 선생님(q\textcolor{#cc00ff}{q})이 흐리게 만든 경로를 따라가며, 학생(pθ\textcolor{#1565c0}{p_\theta}, 역방향 과정)이 각 단계를 얼마나 잘 되감는가의 합이다. 마지막 항은 θ\theta와 무관한 상수다.

DDPM(Ho et al., 2020)은 위의 ELBO 부등식을 정리하면 각 항이 노이즈 예측 오차로 바뀐다는 것을 보였다.

ELBO=−∑twt Eε[∥ε−εθ(xt,t)∥2]+C,xt=αˉt x0+1−αˉt ε\textcolor{#d62728}{\text{ELBO}} = -\sum_{t} \textcolor{#206049}{w_t}\, \mathbb{E}_{\textcolor{#b8860b}{\varepsilon}}\big[\lVert \textcolor{#b8860b}{\varepsilon} - \textcolor{#1565c0}{\varepsilon_\theta}(\textcolor{#1c9c60}{x_t}, t) \rVert^2\big] + \textcolor{#536020}{C}, \qquad \textcolor{#1c9c60}{x_t} = \sqrt{\textcolor{#993600}{\bar\alpha_t}}\, \textcolor{#1c9c60}{x_0} + \sqrt{1 - \textcolor{#993600}{\bar\alpha_t}}\, \textcolor{#b8860b}{\varepsilon}
εθ학습 모델의 노이즈 예측ε실제로 넣은 노이즈xt깨끗한 이미지 x0 에 노이즈를 섞은 이미지wt, C스텝별 가중치, θ와 무관한 상수αˉt스텝 t까지 남은 깨끗한 신호의 비율 \small\begin{array}{ll} \textcolor{#1565c0}{\varepsilon_\theta} & \text{학습 모델의 노이즈 예측} \\ \textcolor{#b8860b}{\varepsilon} & \text{실제로 넣은 노이즈} \\ \textcolor{#1c9c60}{x_t} & \text{깨끗한 이미지 } x_0 \text{ 에 노이즈를 섞은 이미지} \\ \textcolor{#206049}{w_t},\ \textcolor{#536020}{C} & \text{스텝별 가중치, }\theta\text{와 무관한 상수} \\ \textcolor{#993600}{\bar\alpha_t} & \text{스텝 t까지 남은 깨끗한 신호의 비율} \end{array}

가중치를 1로 두면 이것이 곧 디퓨전 모델의 표준 학습 손실이다. “노이즈 예측 오차가 작다 ≈ ELBO가 크다 ≈ 이 이미지가 그럴듯하다.”

LLM ↔ 디퓨전: 로그확률의 대응 LLM (자기회귀) 프롬프트 → y₁ → y₂ → … log P(y₁) log P(y₂) log P(y|x) = Σ log P(yᵢ) 정확한 값 긴 문장 → 합이 작아짐 → 길이 편향 (Ch14) 디퓨전 (역방향) x_T → x_{T−1} → … x₀ −‖ε − ε_θ‖² ELBO ≈ −Σ w_t ‖ε − ε_θ‖² 하한 (근사) 디테일 많은 이미지 → 오차 큼 → 매끈함 편향 DPO에 필요한 것: 두 이미지의 log P 차이 → ELBO 차이로 근사 → Diffusion-DPO가 성립하는 근거 (F.3의 조건 아래)

F.3 왜 "근사"인데 DPO에 쓸 수 있는가

LLM 디퓨전
로그확률 log⁡P(y∣x)=∑ilog⁡P(yi∣y<i,x)\log P(\textcolor{#1c9c60}{y} \mid \textcolor{#0093b8}{x}) = \sum_i \log P(\textcolor{#1c9c60}{y_i} \mid \textcolor{#1c9c60}{y_{<i}}, \textcolor{#0093b8}{x}) (정확) log⁡p(x0∣c)≥ELBO≈−∑twt∥ε−εθ(xt,t,c)∥2\log p(\textcolor{#1c9c60}{x_0} \mid \textcolor{#0093b8}{c}) \ge \textcolor{#d62728}{\text{ELBO}} \approx -\sum_t \textcolor{#206049}{w_t} \lVert \textcolor{#b8860b}{\varepsilon} - \textcolor{#1565c0}{\varepsilon_\theta}(\textcolor{#1c9c60}{x_t}, t, \textcolor{#0093b8}{c}) \rVert^2 (하한)
합의 단위 토큰 타임스텝
항 하나 조건부 로그확률 −(노이즈 예측 오차)

DPO에 필요한 것은 log⁡p(x0)\log p(\textcolor{#1c9c60}{x_0}) 자체가 아니라 두 이미지의 차이, 그것도 레퍼런스 대비 차이다.

[log⁡pθ(x0w)−log⁡pref(x0w)]−[log⁡pθ(x0l)−log⁡pref(x0l)]\big[\log \textcolor{#1565c0}{p_\theta}(\textcolor{#e000a5}{x_0^w}) - \log \textcolor{#6f6f78}{p_\text{ref}}(\textcolor{#e000a5}{x_0^w})\big] - \big[\log \textcolor{#1565c0}{p_\theta}(\textcolor{#e000a5}{x_0^l}) - \log \textcolor{#6f6f78}{p_\text{ref}}(\textcolor{#e000a5}{x_0^l})\big]
pθ학습 중인 디퓨전 모델pref레퍼런스 디퓨전 모델 (고정)x0w, x0l선호 이미지, 비선호 이미지 \small\begin{array}{ll} \textcolor{#1565c0}{p_\theta} & \text{학습 중인 디퓨전 모델} \\ \textcolor{#6f6f78}{p_\text{ref}} & \text{레퍼런스 디퓨전 모델 (고정)} \\ \textcolor{#e000a5}{x_0^w},\ \textcolor{#e000a5}{x_0^l} & \text{선호 이미지, 비선호 이미지} \end{array}

각 로그확률을 ELBO로 바꾸면 진짜 값과 ELBO 사이의 간격(하한이 얼마나 느슨한가)이 끼어든다. 이 간격이 네 항에서 비슷하다면(같은 모델 계열, 같은 노이즈 스케줄, 비슷한 이미지), 차이를 취할 때 간격이 대부분 상쇄되어 ELBO 차이가 진짜 차이를 잘 따라간다. "하한이니까 방향이 보존된다"가 아니라 **“간격이 비슷하니까 차이에서 상쇄된다”**가 정확한 이유다. 보장은 아니지만 실무에서는 잘 작동하며, 이것이 Diffusion-DPO가 성립하는 근거다(Wallace et al.은 여기에 젠센 부등식을 한 번 더 써서 손실의 상한을 최소화하는 형태로 정리했다).