DPO

Direct Preference Optimization: Your Language Model is Secretly a Reward Model을 읽고
김호진's avatar
May 22, 2025
DPO
원래는 입력 x, 좋은 출력 yw 나쁜 출력 yl이 있다고 했을 때
리워드 모델의 출력이 (x, yw)가 더 높고, (x, yl)이 낮도록 → 둘 간의 차이가 크도록 모델링한다.
 
그런데 DPO에서는 기존 policy가
reward function을 optimal policy로 이루어진 식으로 다시 적을 수 있다. 모르는 partition function Z도 써서
notion image
 
DPO에 대한 설명
기존의 RLHF 방법은
  1. 베이스 모델 m을 준비하고 한 입력 x에 대해서 y를 두개 출력한다.
  1. 사람에게 둘중 뭐가 더 나은지 매겨달라고 한다. yp, yd가 정해진다. (yp가 더 선호)
  1. 리워드 모델 R을 (x, yp, yd)로 학습한다.
    1. 리워드 모델은 reward r = R(x, y) 라고 했을 때, 두 리워드 간의 차이가 크도록 학습된다.
  1. m이 기존의 능력은 유지하면서, 높은 리워드의 값을 출력하도록 학습한다.
    1. notion image
      여기서 LM이 y를 출력하는 방법은 discrete해서 미분 불가능 하기 때문에 RL(PPO)로 학습된다.
      간단하게는
      • 입력 Hey 뱉은 문장 I got it
      • reward 계산 R(x, y) = r
      • = I/got/it 각 토큰에 대한 분포를 전부 업데이트
 
하지만 여기서 리워드 모델을 따로 학습하고, 그걸 이용해서 매번 샘플링(high cost)하며 RL 최적화(어려운 tuning)를 하는건 어렵다.
어짜피 리워드 function은 policy를 업데이트하기 위해서 존재한다. (reward function = reward model output + KL divergence constraint)
  • policy가 만약 리워드 function을 통해서 업데이트 되었다면, 기존 policy보다 optimized policy가 좋은 응답을 뱉을 확률이 더 높다.
  • 다시 말해 리워드를 직접 쓰지 않더라도 리워드로부터 유도되는 최적 policy가 되도록 policy를 업데이트 할 수만 있다면 explicit하게 리워드모델을 사용하지 된다.
    • 어떻게? 리워드를 바탕으로 업데이트된 policy는 기존 policy보다 yp를 뱉을 확률이 더 높도록 yd는 더 낮도록 update된 policy이다. (정확히는 식으로 전개)
    • 즉, 모델이 는 높이고 는 낮추도록 학습하면 실제로 reward function을 따르는 것과 같은 효과를 낼 수 있다. (with KL contraint)
    • 이게 가능한건 애초에 리워드 모델 자체가 두 값 간의 차이로만 학습기 때문에. → 리워드 모델의 출력인 절댓값 자체보다 차이를 모델링하도록 policy를 업데이트해도 결국 투트랙으로 업데이트 하는 방향과 같다.
    • 더 풀어서 설명
      1. 위의 RL 학습을 위한 KL-constrained RL objective를 통해 유도되는 최적의 policy는 closed form으로 정의될 수 있다(이전의 연구들에 의하면).
        1. notion image
          이걸 해석하면, optimal policy가 y를 생성할 확률은 기존 policy가 생성할 확률보다 보상이 높을수록 기하급수적으로 커진다(지수적으로)는 의미가 된다.
          closed form을 위해서는 아래에 전체 합이 1이 되도록 하는 정규화 상수 Z를 나눈다.
          여기서 beta가 클수록 reward의 영향을 적게 받아서 policy가 적게 변한다. → beta는 기존의 분포를 따라가도록 하는 Regularization 역할을 한다.
      1. DPO는 이 optimal policy의 식에서 출발한다.
        1. Bradley-Terry 모델과 같은 선호도 모델에 따르면, yp가 yd보다 선호될 확률은 Reward Model의 값 차이에 비례한다. (with sigmoid 함수)
          = 해당 선호도를 가진 무언가에 의해 (yp, yd) 중에 yp가 선택될 확률
          = 해당 선호도를 가진 무언가에 의해 (yp, yd) 중에 yp가 선택될 확률
      1. 여기서 R(x, y)에 대해서 위의 optimal policy closed form을 이용해서 얻은 값으로 대입해보자
        1. notion image
      1. policy는 위의 선호도 확률이 높아지도록 업데이트 되기를 바란다.
        1. notion image
      1. 따라서 Negative log를 붙여 Loss의 형태로 나타내고 이에 맞게 최적화하는게 DPO의 목적이 된다. (NLL loss처럼 된다.) → 아래에
 
결국 최종 Loss는 아래와 같다.
notion image
여기서 Loss에 의한 gradient를 해석하자면
policy는 입력 x에 대해 likelihood of yp를 높이고 yd가 나올 확률을 낮추는데, 모델이 implicit하게 선호도 차이를 반대로 판단할수록 많이 업데이트 하고, 잘 판단할 수록 적게 업데이트해라
가 된다.
기존의 KL이 log ratio를 통해 암묵적으로 표현되는것.
 
DPO의 장점
  1. 높은 연산 효율 : 두번 나눠서 학습하고 샘플링 할 필요 없음
  1. 높은 안정성 : 복잡한 RL 알고리즘 X
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Share article
Subscribe to our newsletter

Kim Hojin