본문 바로가기

블로그/딥러닝

Direct Preference Optimization(DPO)와 그 문제점

DPO

 

RLHF는 강력하지만 무겁다. Reward model, critic model, policy model, reference model — 최소 3~4개의 모델이 동시에 올라가야 한다. DPO(Direct Preference Optimization) 는 이 파이프라인을 목적 함수 하나로 압축한다.


DPO 목적 함수

DPO의 목적 함수는 다음과 같이 정의된다.

 

$$\max_{\theta} \mathbb{E}{\mathcal{D}} [\log \sigma (r{\theta}(y_w) - r_{\theta}(y_l))]$$

여기서 $r_\theta(y)$는 다음과 같이 정의된다.

$$r_\theta(y) := \beta \log \frac{\pi_\theta(y \mid x)}{\pi_\text{ref}(y \mid x)}$$

$\sigma$는 sigmoid 함수, $\pi_\theta$는 학습 중인 policy, $\pi_\text{ref}$는 고정된 reference model, $\beta$는 hyperparameter다.

 

데이터셋 $\mathcal{D}$는 $(x, y_w, y_l)$ 트리플로 구성되며,
$y_w$는 선호되는 응답(win), $y_l$은 기피되는 응답(lose)을 의미한다. 앞으로는 간단하게, win/lose로 적겠다.

sigmoid는 모델 내부의 activation이 아니라, "Win이 lose보다 나을 확률"을 0~1 사이로 만들어주는 확률 변환이다.

 

이 목적 함수는 두 가지 목표를 동시에 담고 있다.

 

첫째, 응답 확률 최적화다. $r_\theta(y_w) - r_\theta(y_l)$를 최대화한다는 것은 win의 암묵적 reward를 높이고, lose의 reward를 낮추는 방향으로 학습한다는 의미다. RLHF에서 reward model이 win을 lose보다 선호하도록 학습되는 것과 정확히 대응된다.

둘째, reference model과의 정렬이다. $r_\theta(y) = \beta \log \frac{\pi_\theta}{\pi_\text{ref}}$ 구조상, policy가 reference에서 크게 벗어날수록 패널티가 커진다. RLHF의 KL 정규화 항과 동일한 역할로, 불확실한 보상에 대한 과도한 최적화를 억제한다.

 

결국 DPO는 reward model 없이 $r_\theta(y) = \beta \log \frac{\pi_\theta}{\pi_\text{ref}}$ 자체가 암묵적 reward 역할을 하도록 policy를 직접 학습시키는 방식이다. 실제 loss 형태로 전개하면 다음과 같다 (DPO는 선호 데이터가 Bradley-Terry 모델을 따른다는 가정을 암묵적으로 유지한다. Reward model을 별도로 학습하지 않는 것이지, reward의 개념 자체를 제거한 것은 아니다.)

 

$$\mathcal{L}{\text{DPO}}(\pi\theta; \pi_\text{ref}) = -\mathbb{E}{(x, y_w, y_l) \sim \mathcal{D}} \left[ \log \sigma \left( \beta \log \frac{\pi\theta(y_w \mid x)}{\pi_\text{ref}(y_w \mid x)} - \beta \log \frac{\pi_\theta(y_l \mid x)}{\pi_\text{ref}(y_l \mid x)} \right) \right]$$

학습에 필요한 모델은 두 개다. Gradient가 흐르는 policy model과, frozen 상태로 정규화 앵커 역할을 하는 reference model.

 

with torch.no_grad():
    ref_lp_win  = reference_model(x, y_win)   # frozen
    ref_lp_lose = reference_model(x, y_lose)  # frozen

policy_lp_win  = policy_model(x, y_win)       # gradient 흐름
policy_lp_lose = policy_model(x, y_lose)      # gradient 흐름

margin = (policy_lp_win  - ref_lp_win) \
       - (policy_lp_lose - ref_lp_lose)

loss = -F.logsigmoid(beta * margin).mean()

Log Probability는 어떻게 계산되는가

$\log \pi_\theta(y \mid x)$는 출력 시퀀스 전체에 대한 값이다. LLM은 각 스텝에서 다음 토큰 하나를 예측하는 구조이므로, 시퀀스 전체의 확률은 각 토큰 조건부 확률의 곱이 된다. Log를 취하면 합산으로 바뀐다.

$$\log P(y \mid x) = \sum_{t=1}^{T} \log P(y_t \mid x, y_{1:t-1})$$

즉, y_win = [고양이, 는, 귀엽고, 독립적인, 동물, 입니다]라는 시퀀스가 있다면:

$$\log P(y_\text{win} \mid x) = \log P(\text{고양이} \mid x) + \log P(\text{는} \mid x, \text{고양이}) + \cdots$$

실제 구현에서는 한 번의 forward pass에서 T개 토큰의 log prob을 한꺼번에 뽑고 sum하는 방식으로 $\log \pi(y \mid x)$를 계산한다.


Loss를 다른 관점으로 보기

DPO loss는 수학적으로 동일하지만 다음처럼 재구성할 수 있다.

$$\max_\theta \mathbb{E}{\mathcal{D}} \left[ \log \sigma \left( \hat{s}\theta(w; l) - \hat{s}_\text{ref}(w; l) \right) \right]$$

$$\hat{s}\theta(w; l) := \beta \log \frac{\pi\theta(y_w \mid x)}{\pi_\theta(y_l \mid x)}, \quad \hat{s}\text{ref}(w; l) := \beta \log \frac{\pi\text{ref}(y_w \mid x)}{\pi_\text{ref}(y_l \mid x)}$$

원래 수식이 "각 응답을 reference와 비교"하는 시각이라면, 이 형태는 "policy가 win/lose를 얼마나 구별하는가"를 reference와 비교하는 시각이다. Loss가 줄어드는 조건은 단 하나다.

$$\hat{s}\theta(w;l) > \hat{s}\text{ref}(w;l)$$

policy의 win/lose 격차가 reference의 격차보다 크기만 하면 loss는 줄어든다. 여기서 DPO의 구조적 문제가 시작된다.


DPO의 문제점

문제 1: $\pi_\theta(y_l \mid x) \to 0$ 이 지름길이 된다

$\hat{s}_\theta(w;l)$을 크게 만드는 방법은 두 가지다.

방법 1 (의도한 것): π_θ(y_w) 올리고 π_θ(y_l) 내리기  ← 좋음
방법 2 (지름길):    π_θ(y_w), π_θ(y_l) 둘 다 내리되
                   y_l을 훨씬 더 많이 내리기           ← 나쁨

분모인 $\pi_\theta(y_l \mid x)$를 0에 가깝게 만들면 비율이 폭발적으로 커진다. 문제는 이때 $\pi_\theta(y_w \mid x)$가 전혀 올라가지 않아도 loss가 줄어든다는 것이다. Win을 잘 생성하는 능력과 무관하게 loss가 최소화될 수 있는 셈이다.

문제 2: lose가 억제될수록 win gradient도 함께 소멸한다

DPO loss를 $\log \pi_\theta(y_l)$에 대해 미분하면 다음과 같다.

$$\frac{\partial \mathcal{L}}{\partial \log\pi_\theta(y_l)} = \beta \cdot \sigma(\hat{s}\text{ref} - \hat{s}\theta)$$

sigmoid 항이 핵심이다. 학습 초기에는 $\hat{s}\theta \approx \hat{s}\text{ref}$이므로 sigmoid ≈ 0.5로 win/lose 양쪽 gradient가 균형 잡혀 있다. 그런데 lose 억제가 진행되면서 $\hat{s}_\theta$가 커지면:

$$\hat{s}\text{ref} - \hat{s}\theta \to -\infty \implies \sigma(\cdot) \to 0$$

gradient가 0으로 수렴한다. Lose 쪽 gradient가 죽는 건 그나마 낫지만, win 쪽 gradient도 같은 sigmoid 항을 공유하기 때문에 함께 소멸한다. 결과적으로 win 확률을 올리는 학습 신호가 사라지고, 모델은 win을 더 잘 생성하는 능력을 키우지 못한 채 학습이 멈춰버린다.

문제 3: win과 lose가 동시에 낮아지고, OOD로 향한다

Win과 lose 응답은 많은 토큰을 공유한다.

prompt:  "파이썬에서 리스트 정렬하는 방법은?"
y_win:   "sorted() 함수를 사용하면 됩니다..."
y_lose:  "sorted() 함수나 .sort()를 쓰면 됩니다..."

sorted(), 함수 같은 토큰이 양쪽에 모두 등장한다. Lose의 확률을 낮추도록 가중치가 업데이트되면, 공유 토큰들의 확률이 전반적으로 낮아지면서 win 확률까지 동반 하락한다. 가중치 업데이트는 토큰 수준에서 뭉툭하게 작동하기 때문에 lose만 정밀하게 겨냥하는 것은 불가능하다.

$$\mathbb{E}\mathcal{D}[\Delta\pi\theta(y_w \mid x) + \Delta\pi_\theta(y_l \mid x)] < 0$$

두 업데이트의 합이 음수라는 것은, 모델이 학습 데이터의 응답들에 대한 총 확률 질량(probability mass)을 줄이고 있다는 의미다. 확률의 합은 항상 1이어야 하므로, 이 질량은 어딘가로 흘러간다. 바로 학습 데이터에 없던 OOD(Out-of-Distribution) 응답들이다.

 

실제로 학습 과정에서 $\log(\pi_\theta(y_w \mid x) + \pi_\theta(y_l \mid x))$, 즉 학습 데이터 내 응답들의 총 확률 질량을 추적해보면 DPO에서 이 값이 지속적으로 감소하는 것을 확인할 수 있다. 모델이 학습이 진행될수록 학습 데이터와 의미적으로 유사한 응답들을 점점 덜 선호하게 되며, 그 대신 학습 데이터와 무관하거나 일관성 없는 OOD 응답의 확률이 높아지는 결과로 이어진다.

 

이 현상은 reward divergence라고도 불리며(Azar et al., 2024), DPO의 loss 구조 자체가 이를 유효한 해로 허용하기 때문에 발생하는 본질적인 한계다.

 

 


 

DPO는 RLHF의 복잡한 파이프라인을 수식 하나로 압축한 우아한 아이디어다. 그러나 loss 구조 자체가 lose 억제를 지름길로 허용하고, 학습이 진행될수록 확률 질량이 OOD로 유출되는 문제를 내재하고 있다.

이를 보완하기 위해 ORPO 등의 변형들이 등장했다. 각각 reference model 의존도를 낮추거나, 길이 정규화를 추가하거나, loss 구조 자체를 바꾸는 방식으로 DPO의 한계를 극복하려 시도한다.

 

참초

[1] Azar, M. G., Guo, Z. D., Piot, B., Munos, R., Rowland, M., Valko, M., and Calandriello, D.A general theoretical paradigm to understand learning from human preferences.In International Conference on Artificial Intelligence and Statistics, pp.  4447–4455. PMLR, 2024.

[2] Shusheng Xu, Wei Fu, Jiaxuan Gao, Wenjie Ye, Weilin Liu, Zhiyu Mei, Guangju Wang, Chao Yu, and Yi Wu. 2024. Is dpo superior to ppo for llm alignment? a comprehensive study. In Forty-first International Conference on Machine Learning

[3] Rethinking DPO: The Role of Rejected Responses in Preference Misalignment Jae Hyeon Cho, JunHyeok Oh, Myunsoo Kim, Byung-Jun Lee Findings of the Association for Computational Linguistics: EMNLP 2025