13. DPO의 진화 — 하나의 알고리즘이 낳은 가계도

통합: RainbowPO가 변형들을 한 좌표계에 놓다

변형 가운데 하나를 골라 쓰려는 사람은 난처하다. 논문마다 "DPO보다 낫다"고 적혀 있지만, 저마다 다른 모델과 다른 데이터로 잰 값이다. 변형마다 한 가지씩 고쳤다면, 고친 것들을 한꺼번에 모으면 더 좋아질까? 아니면 서로 겹쳐서 효과가 상쇄될까? 이번에는 가계도에 새 가지를 더하는 대신 지금까지의 가지를 정리한 작업을 보자.

역사: 일곱 축으로 다시 재다

여기까지 변형들이 고친 것을 모으면 이렇다. IPO는 시그모이드를 제곱 오차로 바꿔 과적합을 막았고, cDPO는 라벨을 덜 믿어 노이즈를 견뎠다. KTO는 쌍을 덜어내 데이터를 넓혔고, CPO와 ORPO는 레퍼런스를 덜어내 메모리를 줄였다. SimPO는 길이로 나눈 평균 로그확률로 학습 목표를 생성 지표와 맞추면서 레퍼런스도 뺐다. 논문마다 "DPO보다 낫다"고 보고했지만, 대부분 부품을 두세 개씩 함께 바꿨고 실험 설정도 제각각이었다. 이 개선들은 서로 독립인가, 아니면 겹치는가?

2024년 10월 컬럼비아 대학과 금융 회사 캐피털 원의 자오(Hanyang Zhao)와 동료들이 이 물음을 실험으로 따졌다(RainbowPO, ICLR 2025). 그들은 기존 변형들을 수학적으로 서로 겹치지 않는 일곱 방향의 부품으로 나눴다.

  1. 길이 정규화: 로그확률을 합으로 쓸지 길이로 나눈 평균으로 쓸지.
  2. 링크 함수: 시그모이드, 제곱 오차, 힌지 가운데 무엇으로 마진을 손실로 바꿀지.
  3. 목표 마진: 홈 경기 가산점처럼 선호 응답에 미리 얹어 주는 몫 γ\gamma 를 둘지.
  4. 레퍼런스 정책: 레퍼런스를 둘지, 뺄지, 레퍼런스와 목표 마진을 섞을지.
  5. 거절 샘플링: 어떤 쌍으로 학습할지 모델에서 다시 뽑아 고를지.
  6. 맥락적 스케일링: β\beta 같은 크기 계수를 고정할지, 프롬프트마다 다르게 할지.
  7. SFT 손실: 선호 응답의 SFT 손실을 더할지.

그리고 같은 모델(Llama3-8B-Instruct), 같은 데이터, 같은 평가로 DPO에 부품을 하나씩 넣어 보았다. 아래 그림은 논문 표 2의 값을 다시 그린 것이다(AlpacaEval 2 길이 보정 승률, GPT-4 계열 심사 모델).

DPO 41.88%에서 바뀐 길이 보정 승률 (%p) 길이 정규화 +2.39 거절 샘플링 +0.99 목표 마진 -0.18 맥락적 스케일링 -0.74 레퍼런스 섞기 -1.70 링크 함수 (제곱) -2.35

모든 부품이 도움이 되지는 않았다. 제곱 오차 링크 함수와 목표 마진은 혼자 넣었을 때 오히려 점수를 내렸다. 저자들은 실험 끝에 길이 정규화, 레퍼런스 섞기, 맥락적 스케일링 셋을 골라 조합했고, 학습 설정을 함께 손봐 Llama3-8B-Instruct의 AlpacaEval 2 길이 보정 승률을 22.92%에서 51.66%로 올렸다. 새 데이터를 모델에서 다시 뽑지 않고, 이미 만든 선호 데이터만으로 얻은 값이다.

RainbowPO의 의의는 흩어진 변형들을 하나의 좌표계에 올려놓은 데 있다. "어떤 축을 바꿨는가"로 모든 변형을 설명할 수 있게 된 정리 작업이다. 하지만 이것은 DPO라는 틀 안에서의 정리다. 변형들은 모두 의미 있는 개선이지만, 미리 모아 둔 데이터로만 학습하고(오프라인), 그 데이터가 학습 중에 바뀌지 않으며(정적 데이터), 모델이 스스로 새 응답을 시도해 보지 않는다(탐색 불가)는 한계는 그대로다. 그 틀 자체를 바꾸는 전환은 이 가계도 안에서는 일어나지 않는다.

SimPO까지 나온 가지를 각 변형이 DPO의 어느 부품을 빼고 바꿨는지로 한 표에 모으면 다음과 같다.

알고리즘 쌍 ref 링크함수 비교 공간 길이 보정 마진 γ\gamma SFT 통합 비고
DPO ✓ ✓ −log⁡σ-\log \sigma 로그확률 ✗ ✗ ✗ 원형
IPO ✓ ✓ MSE 로그확률 ✗ 목표 ✗ 과적합 방지
cDPO ✓ ✓ −log⁡σ-\log \sigma 둘을 ε\varepsilon로 섞음 로그확률 ✗ ✗ ✗ 노이즈 내성
KTO ✗ ✓ 변형 로그확률 ✗ ✗ ✗ 단일 라벨
CPO ✓ ✗ −log⁡σ-\log \sigma 로그확률 ✗ ✗ ✓ 레퍼런스를 균일 분포로 어림
ORPO ✓ ✗ −log⁡σ-\log \sigma 평균 위의 로그오즈 ✓ (평균) ✗ ✓ 오즈비 + SFT
SimPO ✓ ✗ −log⁡σ-\log \sigma 로그확률 ✓ (평균) ✓ ✗ 생성 지표와 맞춤, NeurIPS 2024

가계도 전체를 한 그림으로 보면 다음과 같다. 날짜는 논문이 arXiv에 처음 올라온 달이다(cDPO는 기술 노트).

graph TD
    DPO["<b>DPO</b><br/>2023.05<br/>보상 모델 제거"]
    DPO -->|"σ → MSE<br/>과적합 방지"| IPO["<b>IPO</b><br/>2023.10"]
    DPO -->|"라벨 스무딩"| cDPO["<b>cDPO</b><br/>2023.11"]
    DPO -->|"쌍 제거<br/>전망 이론"| KTO["<b>KTO</b><br/>2024.02"]
    DPO -->|"ref 제거<br/>SFT 통합"| CPO["<b>CPO</b><br/>2024.01"]
    DPO -->|"평균 위의 오즈<br/>ref 제거"| ORPO["<b>ORPO</b><br/>2024.03"]
    DPO -->|"길이 정규화<br/>ref 제거<br/>생성 지표와 맞춤"| SimPO["<b>SimPO</b><br/>2024.05<br/>NeurIPS 2024"]
    IPO & cDPO & KTO & CPO & ORPO & SimPO -->|"7요소 통합"| Rainbow["<b>RainbowPO</b><br/>2024.10<br/>ICLR 2025"]

    class DPO m-blue
    class DPO m-strong
    class SimPO m-green
    class SimPO m-strong
    class Rainbow m-orange
    class Rainbow m-strong
진화의 패턴: 무엇이 반복되는가

DPO에서 SimPO까지의 진화에는 되풀이되는 패턴이 둘 있다.

첫째는 빼기다. DPO가 RLHF에서 보상 모델을 뺐고, CPO와 ORPO가 레퍼런스를 뺐고, KTO가 쌍을 뺐고, SimPO가 레퍼런스와 길이 편향을 함께 뺐다. 거의 매번 하나씩 덜어내며 꼭 필요한 부품에 가까워졌다.

둘째는 학습 목표와 생성의 일치다. 학습이 키우는 값과 생성할 때 모델이 따르는 값이 같아야 한다. DPO의 "암묵적 보상 ≠ 생성 지표"라는 어긋남을 SimPO가 풀었다. 같은 어긋남은 디퓨전 모델의 선호 학습에서도 다시 나온다.

ML에서: 데이터가 알고리즘보다 먼저

반복되는 패턴이 하나 더 있다. 가계도가 이만큼 가지를 쳤는데도, 실무에서 성능을 가른 것은 알고리즘이 아니었을 수 있다.

Tulu 2를 만든 앨런 AI 연구소 팀(이빈슨 Hamish Ivison, 램버트 Nathan Lambert 등)은 2024년 이 물음을 직접 실험으로 따졌다(NeurIPS 2024). 선호 학습을 이루는 네 가지 — 선호 데이터, 학습 알고리즘(PPO 대 DPO), 보상 모델, 학습에 쓰는 프롬프트 — 를 하나씩 바꿔 보니, 넷 다 중요했지만 좋은 선호 데이터가 가장 큰 차이(지시 따르기와 사실성에서 최대 8%)를 냈고, 알고리즘 선택, 보상 모델, 프롬프트가 그 뒤를 이었다.

데이터를 덜어내서 오히려 좋아진 보고도 있다. 2025년 덩(Xun Deng)과 동료들의 BeeS는 보상 마진(선호 응답과 비선호 응답의 점수 차)이 큰 쌍을 골라 UltraFeedback의 약 10%만으로 DPO를 돌렸다. 그랬더니 Llama, Mistral, Qwen 모델 모두에서 AlpacaEval 2 점수가 전체 데이터로 학습할 때보다 3~8%p 높았다. 마진이 뚜렷한 강한 예제만 남기면 DPO도 충분히 강하다. 알고리즘 선택보다 데이터 품질이 더 중요할 수 있다.

문제 9 — 라면에 치즈와 김치

기본 라면을 10명이 맛보고 매긴 평균 점수가 6.0점이다. 치즈만 넣으면 6.6점, 김치만 넣으면 6.9점, 둘 다 넣으면 6.3점이었다. (가) 하나씩 넣은 효과를 더해 둘 다 넣은 라면의 점수를 예상하면 몇 점인가? 실제와 얼마나 다른가? (나) 둘 다 넣은 라면에서 하나씩 빼 보면, 치즈와 김치는 각각 점수를 몇 점 올리고 있는 것으로 보이는가?

김민준 (자신만만)
김민준
치즈 +0.6, 김치 +0.9니까 둘 다 넣으면 7.5점. 제일 맛있겠네요.
선생님 (질문)
선생님
민준 학생, 둘 다 넣은 라면의 실제 점수는 몇 점이었죠?
김민준 (당황)
김민준
6.3점이요. 예상보다 1.2점이나 낮아요.
이서연 (평상)
이서연
(나)로 보면 더 이상해. 둘 다 넣은 데서 치즈를 빼면 6.9점으로 오르고, 김치를 빼면 6.6점으로 올라. 둘 다 넣은 상태에서는 치즈가 −0.6점, 김치가 −0.3점이야.
이서연 (평상)
이서연
하나씩 넣어 볼 때랑 하나씩 빼 볼 때 답이 다르면, 둘이 서로의 효과를 바꿔 놓고 있다는 거네.
김민준 (평상)
김민준
조별 과제랑 같네요. 혼자 하면 둘 다 잘하는데 같이 하면 오히려 못하는.

정리 (가) 6.0 + 0.6 + 0.9 = 7.5점으로 예상되지만 실제는 6.3점, 1.2점 낮다. (나) 둘 다 넣은 라면에서 빼 보면 치즈 −0.6점, 김치 −0.3점으로, 둘 다 오히려 점수를 깎고 있다. 두 재료의 효과는 따로 더해지지 않는다.

문제 10 — SimPO가 뺀 것과 더한 것

위 종합 표에서 SimPO가 DPO에서 뺀 요소 둘과 더한 요소 하나를 찾으시오.

김민준 (평상)
김민준
표 보면 SimPO 줄에 ref가 ✗, 길이 보정이 ✓(평균), 마진 γ가 ✓예요. 레퍼런스를 빼고 길이 보정이랑 γ를 더했네요.
이서연 (평상)
이서연
길이 보정은 “더한” 걸로 봐야 해, “뺀” 걸로 봐야 해?
선생님 (질문)
선생님
서연 학생, DPO에 원래 있던 것 중에 SimPO가 없앤 불공정은 뭐였죠?
이서연 (평상)
이서연
합으로 매기면 긴 응답이 불리하거나 유리해지는 길이 편향이요. 그러니까 뺀 건 레퍼런스와 길이 편향이고, 더한 건 목표 마진 γ네요. 평균으로 나누는 건 편향을 빼는 수단이고요.
선생님 (미소)
선생님
네, 그렇게 세면 돼요. 그리고 γ가 빠진 레퍼런스의 “목줄” 역할을 일부 대신한다는 점도 기억해 두세요.

정리 뺀 것: 레퍼런스 모델, 길이 편향(합 → 평균 로그확률). 더한 것: 목표 마진 γ.

문제 11 — RainbowPO의 부품은 따로 놀까

RainbowPO 논문의 실험(Llama3-8B-Instruct, AlpacaEval 2 길이 보정 승률, GPT-4 계열 심사 모델)에서 DPO 기준 모델은 41.88%였다. 부품을 하나씩 더하면 길이 정규화(LN) 44.27%, 레퍼런스 섞기(Mix) 40.18%, 거절 샘플링(RSO) 42.87%였고, 둘씩 더하면 LN + Mix 47.45%, LN + RSO 43.22%였다. (가) Mix는 혼자 넣었을 때 도움이 되었나? (나) 부품마다의 효과가 그대로 더해진다면 LN + Mix 와 LN + RSO 는 각각 몇 %여야 하는가? 실제와의 차이는? (다) "하나씩 넣어 봐서 좋았던 부품만 모은다"는 고르는 법은 이 결과에서 맞는가?

김민준 (자신만만)
김민준
Mix는 41.88에서 40.18로 1.70 떨어졌으니 빼야죠. 좋았던 LN이랑 RSO만 모으면 41.88+2.39+0.99=45.2641.88 + 2.39 + 0.99 = 45.26 까지 가겠네요.
선생님 (질문)
선생님
민준 학생, LN과 RSO를 실제로 함께 넣은 값은 몇이었죠?
김민준 (당황)
김민준
43.22요. 예상보다 2.04 낮아요. LN만 넣은 44.27보다도 낮고요.
이서연 (평상)
이서연
반대로 Mix는 혼자일 때 해로웠는데, LN과 함께면 47.45야. 더하기로 예상한 41.88+2.39−1.70=42.5741.88 + 2.39 - 1.70 = 42.57 보다 4.88이나 높아.
선생님 (평상)
선생님
그래요. 그럼 (다)는요?
이서연 (깨달음)
이서연
하나씩 넣어 본 성적표만으로는 고를 수 없어요. 함께 넣어 봐야 해요. 수학적으로 겹치지 않는 부품이라도 실험에서는 서로의 효과를 바꿔요.
김민준 (평상)
김민준
아까 라면이랑 같네요. 거기선 둘이 만나서 손해였고, 여기선 Mix가 LN을 만나서 득이 된 거고요.

정리 (가) 아니다. 41.88% → 40.18%, −1.70%p. (나) 더하기로는 LN + Mix 42.57%, LN + RSO 45.26%여야 하지만 실제는 47.45%(+4.88%p), 43.22%(−2.04%p)다. (다) 맞지 않는다. 부품들은 수학적으로 겹치지 않아도 실험에서는 서로 얽힌다. 그래서 RainbowPO는 조합을 직접 재어 LN, Mix, 맥락적 스케일링을 골랐다.