19. 디퓨전에서 DPO를 쓰려면 — 로그확률의 벽

자주 하는 실수와 요약

자주 하는 실수
실수 나온 문제 바로잡는 법
빗나간 양을 그대로 견줘, 더 많이 틀린 예보가 더 크게 빗나갔다고 봄 1 그 예보가 말한 폭으로 재서 견준다. 3도/폭 3도는 0.5, 1.5도/폭 1도는 1.125
σt\textcolor{#993600}{\sigma_t}가 10분의 1이면 벌점도 10배라고 봄 2 로그확률은 σt2\textcolor{#993600}{\sigma_t}^2에 반비례한다. 오차 0.04에서 σt=1\textcolor{#993600}{\sigma_t} = 1이면 −0.02, σt=0.1\textcolor{#993600}{\sigma_t} = 0.1이면 −2 — 100배
결과에 이르는 길 하나의 확률을 결과의 확률로 봄 3 합이 7이 되는 길은 여섯이다. 1/36이 아니라 6/36 = 1/6
실제 디퓨전에서도 경로 몇 개의 확률을 더하면 이미지의 확률이 나온다고 봄 4 중간 상태 x1,…,xT\textcolor{#1c9c60}{x_1}, \dots, \textcolor{#1c9c60}{x_T}가 수만 차원의 연속값이라 경로를 셀 수 없다. p(x0)p(\textcolor{#1c9c60}{x_0})는 모든 경로의 적분이라 ELBO(하한)를 쓴다
경로가 없으면 역변환으로 경로를 만들어야 한다고 봄 5 역변환 경로는 지금 모델의 경로이고 비싸다. 순방향 q(xt∣x0)q(\textcolor{#1c9c60}{x_t} \mid \textcolor{#1c9c60}{x_0})로 노이즈를 한 번 섞어 xt\textcolor{#1c9c60}{x_t}를 만들고, 노이즈 예측 오차를 로그확률 대리로 쓴다
손실이 작으면 선호 이미지도 나아졌다고 봄 6 손실은 오차 넷의 차이의 차이만 본다. 선호 오차 1.05가 레퍼런스 1.00보다 커도 손실은 0.079로 작을 수 있다
힘의 크기만 견줘 더 센 쪽으로 밀린다고 봄 7 레일 방향으로 비춘 몫만 견준다: 10 − 6 = 4
비선호 쪽을 미는 항은 선호 쪽과 무관하다고 봄 8 선호 쪽 오차의 변화는 gw⋅d=−∥gw∥2+λ(gw⋅gl)\textcolor{#cc00ff}{g_w} \cdot \textcolor{#993600}{d} = -\lVert \textcolor{#cc00ff}{g_w} \rVert^2 + \textcolor{#536020}{\lambda} (\textcolor{#cc00ff}{g_w} \cdot \textcolor{#cc00ff}{g_l}) — 비선호 항이 끼어든다
두 그래디언트의 내적이 양수면 선호 쪽이 반드시 손해라고 봄 8 조건은 λ(gw⋅gl)>∥gw∥2\textcolor{#536020}{\lambda} (\textcolor{#cc00ff}{g_w} \cdot \textcolor{#cc00ff}{g_l}) > \lVert \textcolor{#cc00ff}{g_w} \rVert^2 — 부호가 아니라 크기의 비교다
요약

DPO를 디퓨전에 쓰려면 log⁡π(y∣x)\log \pi(y \mid x)가 필요하지만, 같은 이미지에 이르는 디노이징 경로가 무수히 많아 이미지의 로그확률은 적분으로만 정의되고 직접 구할 수 없다. 대신 스텝이 작으면 역방향 한 스텝이 가우시안이라, 한 경로의 로그확률은 스텝마다 −∥xt−1−μθ∥2/2σt2-\lVert \textcolor{#1c9c60}{x_{t-1}} - \textcolor{#1565c0}{\mu_\theta} \rVert^2 / 2\textcolor{#993600}{\sigma_t}^2의 합으로 정확히 계산되고, 분산이 작은 후반 스텝일수록 같은 오차가 크게 벌점을 받는다. Diffusion-DPO는 경로 없이 순방향으로 노이즈를 입힌 xt\textcolor{#1c9c60}{x_t}에서의 노이즈 예측 오차를 로그확률 대리로 삼아 LLM DPO와 같은 모양의 손실을 만들고, D3PO는 생성 경로를 기록해 스텝마다 DPO를 한다. 이 손실은 오차 넷의 차이의 차이만 보므로, 손실이 내려가도 선호 이미지가 나빠질 수 있다. 마진을 벌리는 원리는 디퓨전에서 그래디언트 간섭으로 금이 간다 — 비선호 쪽을 미는 강도 λ가 ∥gw∥2/(gw⋅gl)\lVert \textcolor{#cc00ff}{g_w} \rVert^2 / (\textcolor{#cc00ff}{g_w} \cdot \textcolor{#cc00ff}{g_l})를 넘으면 선호 쪽도 나빠지고, Diffusion-SDPO는 λ를 그 한도 안으로 줄인다.