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

그래디언트 간섭: 비선호 쪽을 밀면 선호 쪽도 밀린다

DPO의 원리는 "레퍼런스 대비 마진을 벌려라"다. 학습 중에는 보통 손실 곡선이 내려가는지를 보며 마진이 잘 벌어지는지 확인한다. 그런데 디퓨전 모델에서는 마진을 벌릴수록 오히려 품질이 나빠지는 이상 현상이 발견되었다(Diffusion-SDPO, Fu et al., 2025).

역사: 손실은 내려가는데 두 오차가 다 올랐다

알리바바 인터내셔널 디지털 커머스 그룹의 푸밍하오(Minghao Fu)와 동료들은 Diffusion-DPO로 Stable Diffusion 1.5를 Pick-a-Pic 쌍에 학습시키며 선호·비선호 두 쪽의 노이즈 복원 손실을 따로 그려 보았다. 마진은 의도대로 갈수록 벌어졌는데, 두 손실이 모두 시간이 갈수록 올라갔다. 모델은 선호 그림을 더 잘 그려서가 아니라 비선호 그림을 더 망쳐서 차이를 벌리고 있었다. 이들은 이것을 「상대적인 정렬(사람이 바라는 쪽으로 맞추기)을 절대적인 품질과 맞바꾼다」고 적고, 2025년 11월 해결책과 함께 발표했다.

마진을 벌리는 과정에서 비선호 이미지의 복원 오차가 커지는 것까지는 의도된 동작이다. 문제는 비선호 쪽 오차를 과도하게 밀어올리면 선호 이미지의 복원 오차까지 함께 커진다는 것이다. 마진은 넓어졌는데 선호 이미지의 품질은 나빠진다. LLM DPO에서도 마진은 벌어지는데 선호 응답의 확률까지 함께 떨어지는 “우도 변위”(likelihood displacement, 선호 응답의 확률이 학습 중 오히려 떨어지는 현상)가 알려져 있는데, 그 현상이 디퓨전에서 더 선명하게 나타난 셈이다.

원인은 두 그래디언트의 간섭이다. 업데이트 한 번은 선호 오차를 줄이는 방향 −gw-\textcolor{#cc00ff}{g_w}와 비선호 오차를 키우는 방향 +gl+\textcolor{#cc00ff}{g_l}을 더한 것이다. 두 방향이 비슷한 쪽을 가리키면, 비선호 쪽을 밀어낼 때 선호 쪽도 그 힘의 일부를 받아 함께 끌려간다. 선호 오차가 실제로 줄어드는지는 더한 업데이트를 선호 쪽 개선 방향에 비춰 봐야 안다.

−gw 선호 오차를 줄이는 쪽 λgl: 비선호 오차를 키우는 쪽 실제 업데이트 d 선호 쪽으로는 뒤로 간다 d 를 −gw 방향에 비춘 길이가 선호 오차의 변화를 정한다

1차 근사로 선호 쪽 오차의 변화를 적으면

Δew≈gw⋅d=−∥gw∥2+λ (gw⋅gl),d=−gw+λgl\textcolor{#1565c0}{\Delta e_w} \approx \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}), \qquad \textcolor{#993600}{d} = -\textcolor{#cc00ff}{g_w} + \textcolor{#536020}{\lambda} \textcolor{#cc00ff}{g_l}
Δew한 번 업데이트한 뒤 선호 이미지의 복원 오차 변화 (음수면 좋아짐)gw, gl선호 / 비선호 이미지 복원 오차의 그래디언트d이번 업데이트 방향λ비선호 쪽을 미는 강도 \small\begin{array}{ll} \textcolor{#1565c0}{\Delta e_w} & \text{한 번 업데이트한 뒤 선호 이미지의 복원 오차 변화 (음수면 좋아짐)} \\ \textcolor{#cc00ff}{g_w},\ \textcolor{#cc00ff}{g_l} & \text{선호 / 비선호 이미지 복원 오차의 그래디언트} \\ \textcolor{#993600}{d} & \text{이번 업데이트 방향} \\ \textcolor{#536020}{\lambda} & \text{비선호 쪽을 미는 강도} \end{array}

이다. Δ\Delta는 변화량, λ\textcolor{#536020}{\lambda}는 비선호 쪽 항에 곱하는 강도다. 첫째 항은 선호 쪽이 제 힘으로 얻는 개선이라 언제나 음수이고, 둘째 항은 비선호 쪽을 밀면서 선호 쪽에 묻어 오는 몫이다. 두 항 가운데 어느 쪽이 이기느냐에 따라 선호 오차가 줄기도 하고 늘기도 한다. 그 경계가 어디인지는 아래 문제에서 직접 따져 보자. Diffusion-SDPO의 해결책은 비선호 쪽 강도 λ를 두 그래디언트가 같은 쪽을 가리키는 정도(내적)에 따라 적응적으로 줄여, 매 스텝 선호 쪽 오차가 (1차 근사로) 늘지 않도록 보장하는 것이다.

ML에서: 같은 원리가 도메인마다 다르게 깨진다

마진 극대화라는 한 원리가 어디서 어떻게 금이 가고, 어떻게 메워졌는지 모아 보면 이렇다.

어디서 균열 보정
DPO의 원리 “레퍼런스 대비 마진을 벌려라” —
LLM, 긴 응답 합이 공정하지 않다 — 길이 편향 SimPO의 평균 로그확률 (레퍼런스 없이, 응답 길이로 나눈 로그확률을 쓴다)
LLM, 선호 응답 마진은 벌어졌는데 yw\textcolor{#e000a5}{y_w} 확률이 준다 — 우도 변위 CPO/ORPO의 SFT 항 (SFT, 곧 정답 예시를 따라 쓰게 하는 학습처럼 선호 응답의 로그확률을 직접 올리는 항을 손실에 더한다)
디퓨전 비선호 쪽을 밀수록 선호 쪽도 밀린다 — 그래디언트 간섭 Diffusion-SDPO의 적응적 스케일링
문제 7 — 레일 위의 수레를 둘이 밀 때

동서로만 움직이는 레일 위에 수레가 있다. 나는 수레를 동쪽으로 10의 힘으로 민다. 친구는 다른 짐을 옮기다가 수레를 동쪽과 120°를 이루는 쪽(서북쪽)으로 12의 힘으로 민다. 마찰은 없다고 하자. (가) 수레는 동쪽으로 가는가, 서쪽으로 가는가? (나) 친구가 같은 12의 힘으로 정서쪽으로 밀면? (다) 120° 쪽으로 미는 친구의 힘이 얼마까지면 수레가 서쪽으로 밀리지 않는가?

김민준 (자신만만)
김민준
친구 힘이 12로 제 10보다 세니까 수레는 서쪽으로 밀리죠.
선생님 (짚어주기)
선생님
민준 학생, 수레는 레일을 따라서만 움직여요. 친구의 힘 가운데 레일 방향으로 들어가는 몫은 얼마죠?
김민준 (아하)
김민준
120°니까 12 × cos 120° = −6. 서쪽으로는 6만 들어가고 나머지는 레일이 받아 내네요. 10 − 6 = 4, 동쪽으로 가요.
이서연 (평상)
이서연
(나)는 정서쪽이라 12가 다 들어가니까 10 − 12 = −2, 서쪽이네. (다)는 친구 힘을 F라 하면 10 − 0.5F ≥ 0이라 F ≤ 20. 힘의 크기가 아니라 레일 방향의 몫이 내 10을 넘느냐가 갈랐어.

정리 (가) 레일 방향 몫은 10+12cos⁡120°=10−6=410 + 12\cos 120° = 10 - 6 = 4, 동쪽으로 간다. (나) 10−12=−210 - 12 = -2, 서쪽으로 밀린다. (다) 10−0.5F≥010 - 0.5F \ge 0, 곧 F≤20F \le 20. 더 센 힘이 이기는 것이 아니라, 내 방향으로 비춘 몫끼리 견준다.

문제 8 — (킬러) 언제 선호 쪽이 손해를 보는가

∥gw∥=1\lVert \textcolor{#cc00ff}{g_w} \rVert = 1, gw⋅gl=0.8\textcolor{#cc00ff}{g_w} \cdot \textcolor{#cc00ff}{g_l} = 0.8일 때, (가) λ = 1이면 선호 쪽 오차는 1차 근사로 늘어나는가 줄어드는가? (나) λ = 1.5이면? (다) 선호 쪽 오차가 늘지 않는 λ의 최댓값은? (라) "두 그래디언트가 조금이라도 같은 방향이면(내적 > 0) 반드시 선호 쪽이 손해를 본다"는 말은 맞는가? 위젯의 「문제 8의 값」 단추로 불러와 (가)·(나)를 확인해 보라.

선생님 (평상)
선생님
(가)부터 가 볼까요.
김민준 (자신만만)
김민준
선호 쪽은 −g_w 방향으로 가니까 무조건 좋아지고, 비선호 쪽은 비선호 얘기라 선호 쪽이랑 상관없어요. 줄어들어요.
선생님 (질문)
선생님
민준 학생, 업데이트 d는 두 방향의 합이에요. 선호 쪽 오차의 변화는 d와 무엇의 내적이죠?
김민준 (생각)
김민준
g_w랑 d의 내적… −1+λ×0.8-1 + \textcolor{#536020}{\lambda} \times 0.8. λ=1이면 −0.2라서 줄긴 줄어요. 근데 비선호 항이 +0.8만큼 선호 쪽을 방해하고 있었네요. 상관없는 게 아니었어요.
이서연 (평상)
이서연
그럼 (나)는 λ=1.5면 −1+1.2=+0.2-1 + 1.2 = +0.2. 선호 쪽 오차가 늘어나. (다)는 −1+0.8λ≤0-1 + 0.8\textcolor{#536020}{\lambda} \le 0 이니까 λ ≤ 1.25.
선생님 (평상)
선생님
좋아요. (라)는요?
이서연 (자신만만)
이서연
맞는 말 같아요. 내적이 양수면 비선호 쪽을 밀 때 선호 쪽도 같은 쪽으로 밀리니까, 항상 손해죠.
선생님 (질문)
선생님
방금 λ=1일 때 내적이 0.8로 양수였는데, 선호 쪽 오차는 어떻게 됐죠?
이서연 (당황)
이서연
줄었어요, −0.2. 아… 내적이 양수면 방해는 받지만, 방해가 선호 쪽 자신의 개선량 ∥gw∥2\lVert \textcolor{#cc00ff}{g_w} \rVert^2보다 작으면 여전히 이득이네요.
이서연 (깨달음)
이서연
조건은 "내적 > 0"이 아니라 "λ × 내적 > ∥gw∥2\lVert \textcolor{#cc00ff}{g_w} \rVert^2"예요. 부호가 아니라 크기의 비교였어요.
김민준 (평상)
김민준
아까 레일 위 수레랑 같네요. 친구가 서쪽으로 6만큼 밀어도 제가 10을 밀면 동쪽으로 갔잖아요. 여기선 1이 제 힘이고 λ × 0.8이 친구 몫이고요.
선생님 (평상)
선생님
그래요. 민준 학생은 두 힘이 독립이라고 봤고, 서연 학생은 부호만 보고 판정했어요. SDPO가 λ를 0으로 끄지 않고 “한도까지만” 줄이는 이유가 이거예요.
이서연 (평상)
이서연
선형대수 시간에 사영 배운 거랑 같네요. 성분이 같은 방향이라도 사영 길이가 기준보다 짧으면 넘어서지 않으니까.

정리 (가) Δew≈−1+0.8=−0.2\textcolor{#1565c0}{\Delta e_w} \approx -1 + 0.8 = -0.2, 줄어든다. (나) −1+1.2=+0.2-1 + 1.2 = +0.2, 늘어난다. (다) λ≤1/0.8=1.25\textcolor{#536020}{\lambda} \le 1/0.8 = 1.25. (라) 틀렸다. 조건은 λ(gw⋅gl)>∥gw∥2\textcolor{#536020}{\lambda} (\textcolor{#cc00ff}{g_w} \cdot \textcolor{#cc00ff}{g_l}) > \lVert \textcolor{#cc00ff}{g_w} \rVert^2이다. 내적이 양수여도 λ가 작으면 선호 쪽은 여전히 개선된다. 위젯에서 각도와 λ를 바꿔 경계를 찾아보라.