SimPO: reference 모델을 버리고 길이로 정규화한다
SimPO: Simple Preference Optimization with a Reference-Free Reward (Meng et al., Princeton University, NeurIPS 2024)
Introduction
#23 DPO에서 확인했듯이, DPO는 reward model 학습과 PPO 루프를 통째로 걷어내고 preference 쌍만으로 정책을 직접 최적화하는 방법이다. Bradley-Terry 목적함수(#4 참고)를 정책의 log 확률비로 재작성하면, 별도의 reward model이나 online sampling 없이도 RLHF와 동일한 최적해에 도달한다는 것이 DPO의 핵심 주장이었다.
그런데 DPO를 실제로 돌려보면 여전히 무거운 부분이 하나 남아있다. 바로 reference 정책 \(\pi_{ref}\)다. DPO의 암묵적 reward는
\[r_{DPO}(x,y) = \beta \log \frac{\pi_\theta(y \mid x)}{\pi_{ref}(y \mid x)}\]로 정의되는데, 이 식을 계산하려면 학습 내내 \(\pi_{ref}\)를 GPU 메모리에 얹어두고 매 스텝 forward pass를 한 번 더 돌려야 한다. 정책 모델과 똑같은 크기의 모델을 하나 더 들고 다니는 셈이니, 모델이 커질수록 메모리 비용이 만만치 않다.
SimPO(Simple Preference Optimization)는 이 reference 모델을 아예 없애버린다. 대신 정책 자신의 평균 log 확률(length-normalized log probability)을 암묵적 reward로 쓴다. 여기에 Bradley-Terry 목적함수에 target reward margin 항을 하나 추가해서, chosen과 rejected 사이의 reward 격차가 최소 얼마 이상 벌어지도록 강제한다. 딱 이 두 가지 변경만으로 SimPO는 DPO보다 단순하면서도(reference 모델 없음, hyperparameter 하나만 추가) 더 강한 성능을 낸다 — Llama3-8B-Instruct 기준 AlpacaEval 2에서 DPO 대비 최대 6.4점, Arena-Hard에서 최대 7.5점 높다.
이 글에서는 SimPO가 왜 reference 모델을 버려도 되는지, 그리고 length normalization이 왜 #11 RLHF의 length correlation 문제를 정면으로 겨냥한 설계인지를 순서대로 짚는다.
정리하면 SimPO가 손대는 지점은 딱 하나, “암묵적 reward를 어떻게 정의할 것인가”다. DPO가 reward model을 없앤 다음에도 여전히 reference 정책이라는 형태로 남아있던 비교 기준을, SimPO는 정책 자신의 likelihood라는 훨씬 더 단순한 양으로 대체한다. 이 대체가 성능을 깎아먹지 않고 오히려 끌어올린다는 사실이 SimPO의 실질적인 기여다.
Background
DPO의 출발점은 Bradley-Terry 모델이다. 두 응답 \(y_w\)(chosen), \(y_l\)(rejected)에 대해 사람이 \(y_w\)를 선호할 확률을
\[P(y_w \succ y_l \mid x) = \sigma(r(x,y_w) - r(x,y_l))\]로 모델링한다(#4에서 이 정식화 자체의 가정들을 다뤘다). RLHF는 이 \(r\)을 별도의 reward model로 학습한 뒤 PPO로 정책을 그 reward에 맞춰 업데이트한다. DPO는 KL-regularized reward maximization의 닫힌 형태 해를 이용해서, 이 \(r\)을 정책 \(\pi_\theta\)와 reference 정책 \(\pi_{ref}\)의 log 확률비로 직접 표현해버린다. 그 결과가 위에서 본 \(r_{DPO}\)다.
이 정식화는 우아하지만 두 가지 비용을 남긴다.
첫째, compute·memory 비용이다. \(\pi_{ref}\)는 학습되지 않지만(freeze) 매 스텝 forward pass에는 참여해야 한다. 정책과 같은 크기의 모델을 하나 더 GPU에 올려야 하니, 대형 모델일수록 이 비용이 그대로 학습 인프라 비용으로 전가된다.
둘째, \(r_{DPO}\)가 시퀀스 전체에 걸친 log 확률의 합(sum)으로 정의된다는 점이다. \(\log \pi_\theta(y \mid x) = \sum_{t=1}^{\lvert y \rvert} \log \pi_\theta(y_t \mid x, y_{<t})\)이므로, 토큰 수가 많아질수록 이 합은 더 크게 누적된다. 문제는 실제로 텍스트 품질을 평가하거나 생성을 제어할 때 쓰는 지표는 합이 아니라 평균 log 확률(perplexity 계열)이라는 점이다. reward로 쓰는 값과 실제 생성 시점의 likelihood 지표가 서로 다른 스케일을 쓰고 있는 셈이다. 이 어긋남은 #11 Length Correlations in RLHF에서 지적한 문제, 즉 RLHF로 얻은 성능 향상의 상당 부분이 실제로는 응답 길이 증가에서 온다는 관찰과 뿌리를 공유한다. reward의 스케일이 길이에 따라 왜곡되어 있으면, 정책은 “더 잘 답하는” 대신 “reward가 잘 나오는 길이로 맞추는” 방향으로 최적화될 유인이 생긴다.
SimPO는 이 두 문제를 각각 정면으로 겨냥한다. reference 모델 비용은 reference-free reward로, 길이 왜곡은 length normalization으로 해결한다. 두 변경 모두 DPO의 수학적 골격(Bradley-Terry + log 확률 기반 reward)은 그대로 유지한 채, reward를 어떤 값으로 정의할지만 바꾼다는 점에서 최소 침습적인 수정이다.
Method
Reference-free reward: 정책 자신의 평균 log 확률
SimPO는 \(\pi_{ref}\)를 아예 쓰지 않는다. 대신 정책 자신의 log 확률을 그대로 암묵적 reward로 삼는다.
\[r_{SimPO}(x,y) = \frac{\beta}{\lvert y \rvert} \log \pi_\theta(y \mid x)\]- \(\pi_\theta(y \mid x)\): 학습 중인 정책이 프롬프트 \(x\)에서 응답 \(y\)를 생성할 확률
- \(\lvert y \rvert\): 응답 \(y\)의 토큰 길이
- \(\beta\): reward 스케일을 조절하는 계수 (DPO의 \(\beta\)와 이름은 같지만 KL penalty 강도가 아니라 순수한 스케일 계수다)
DPO의 reward가 “정책이 reference보다 이 응답을 얼마나 더 선호하는가”의 비율이었다면, SimPO의 reward는 “정책이 이 응답을 (토큰당 평균으로) 얼마나 그럴듯하다고 보는가” 그 자체다. reference 정책이 사라졌으니 학습 중 두 번째 forward pass도, 추가 모델 사본도 필요 없다. 메모리와 compute가 그만큼 줄어든다.
여기서 눈여겨볼 점은 \(\frac{1}{\lvert y \rvert}\log \pi_\theta(y \mid x)\)가 언어모델을 다룰 때 흔히 쓰는 평균 log likelihood — length-normalized decoding이나 perplexity 계산에 쓰는 것과 같은 양이라는 것이다. 즉 SimPO의 reward는 학습 목적함수와 실제 생성·평가 시점의 likelihood 지표를 같은 스케일로 맞춘 것이다.
Length normalization: sum이 아니라 average
두 번째 변경은 첫 번째 수식에 이미 들어있다. 분모의 \(\lvert y \rvert\)가 그것이다. 왜 이게 중요한지 토이 예제로 보자.
응답 A(짧다)와 응답 B(길지만 품질은 A와 동등하다)가 있다고 하자. 둘 다 토큰당 평균 log 확률이 \(-0.3\)으로 동일하게 잘 예측된다고 가정한다.
| 토큰 수 \(\lvert y \rvert\) | 토큰당 평균 log prob | sum log prob | 평균 log prob (SimPO 방식) | |
|---|---|---|---|---|
| 응답 A (짧음) | 4 | \(-0.3\) | \(-1.2\) | \(-0.3\) |
| 응답 B (길지만 동등한 품질) | 40 | \(-0.3\) | \(-12.0\) | \(-0.3\) |
응답 A는 인사말 수준의 4토큰짜리 응답, 응답 B는 같은 질문에 근거와 예시까지 곁들인 40토큰짜리 응답이라고 생각하면 된다. 토큰 하나하나의 예측 난이도(=품질)는 동일하다고 가정했다.
sum을 그대로 reward로 쓰면 B는 \(-12.0\), A는 \(-1.2\)로 B가 훨씬 나쁜 응답처럼 보인다. 하지만 실제로는 토큰 단위 품질이 완전히 같다 — 단지 길다는 이유만으로 sum 기준 reward가 불리해진 것이다. 이 값을 그대로 최적화 목표로 쓰면 정책은 품질과 무관하게 “짧게 답할수록 reward가 높아지는” 방향으로 편향된다. 이것이 #11에서 짚은 length correlation의 구체적인 발현 메커니즘 중 하나다.
\(\lvert y \rvert\)로 나눈 평균을 쓰면 A와 B 모두 \(-0.3\)으로 동일하게 평가된다. 예를 들어 \(\beta = 2.0\)을 곱해도 두 응답의 SimPO reward는 \(r_{SimPO} = 2.0 \times (-0.3) = -0.6\)으로 같다. 길이가 아니라 토큰당 품질만으로 두 응답을 공정하게 비교하게 되는 것이다.
Target reward margin
마지막으로 SimPO는 Bradley-Terry 목적함수에 마진 항 \(\gamma\)를 추가한다.
\[\mathcal{L}_{SimPO} = -\mathbb{E}_{(x,y_w,y_l)}\left[\log\sigma\left(\frac{\beta}{\lvert y_w \rvert}\log\pi_\theta(y_w \mid x) - \frac{\beta}{\lvert y_l \rvert}\log\pi_\theta(y_l \mid x) - \gamma\right)\right]\]- \(y_w, y_l\): chosen, rejected 응답
- \(\gamma > 0\): target reward margin. chosen과 rejected의 reward 차이가 단순히 0보다 크기만 하면 되는 게 아니라, 최소 \(\gamma\)만큼은 벌어지도록 강제하는 항
기존 Bradley-Terry 목적함수(#4)는 \(r(x,y_w) - r(x,y_l) > 0\)이기만 하면 loss가 줄어든다. 하지만 이 마진이 너무 작으면 학습 데이터의 미세한 노이즈에도 선호 순서가 쉽게 뒤집힐 수 있다. \(\gamma\)를 넣으면 두 응답의 reward가 확실하게 벌어질 때까지 학습 신호가 계속 남아있게 되고, 이는 held-out 데이터에서의 선호 정확도를 안정적으로 끌어올리는 역할을 한다. \(\gamma\)가 0이면 마진 없는 일반 Bradley-Terry 목적함수로 되돌아간다.
숫자로 감을 잡아보자. 앞의 토이 예제에서 응답 A를 rejected로, 그보다 품질이 좋은 새 응답 C(토큰당 평균 log prob \(-0.15\))를 chosen으로 놓는다. \(\beta = 2.0\)일 때
\[r_{SimPO}(C) = 2.0 \times (-0.15) = -0.3, \quad r_{SimPO}(A) = 2.0 \times (-0.3) = -0.6\]이므로 reward 차이는 \(-0.3 - (-0.6) = 0.3\)이다. \(\gamma = 0\)이라면 이미 부호가 맞으므로(0.3 > 0) \(\sigma(0.3)\)이 1에 가까워 loss가 상당히 줄어든 상태이고, 이 예시에 대한 학습 신호는 약해진다. 반면 \(\gamma = 0.5\)로 설정하면 마진 안쪽 항은 \(0.3 - 0.5 = -0.2\)로 여전히 음수이므로 \(\sigma(-0.2)\)가 0.5보다 작아 loss가 크게 남는다 — 모델은 C와 A의 reward 격차를 0.5 이상으로 더 벌리도록 계속 업데이트된다. 마진이 크지 않게 이미 갈린 선호 쌍도 계속 밀어붙이는 것이 \(\gamma\)의 역할이다.
정리하면 SimPO는 DPO 대비 딱 두 가지를 바꾼다. reference 모델을 없애고 정책 자신의 평균 log 확률을 reward로 쓴다는 것, 그리고 그 reward에 margin을 더한 Bradley-Terry loss로 최적화한다는 것. 둘 다 구현 복잡도를 낮추면서 length bias라는 구체적인 실패 모드를 겨냥한 변경이다.
DPO와 SimPO 비교
지금까지의 차이를 표로 정리하면 다음과 같다.
| 항목 | DPO | SimPO |
|---|---|---|
| 암묵적 reward | \(\beta \log \dfrac{\pi_\theta(y \mid x)}{\pi_{ref}(y \mid x)}\) | \(\dfrac{\beta}{\lvert y \rvert}\log \pi_\theta(y \mid x)\) |
| reference 모델 | 필요 (freeze, forward pass 추가) | 불필요 |
| length normalization | 없음 (sum 기반) | 있음 (평균 기반) |
| 목적함수 마진 | 없음 | target reward margin \(\gamma\) |
| 추가 hyperparameter | \(\beta\) | \(\beta\), \(\gamma\) |
| 학습 시 forward pass 대상 모델 수 | 2 (정책 + reference) | 1 (정책만) |
reference 모델을 걷어낸 대신 \(\gamma\)라는 hyperparameter가 하나 늘었다는 점은, SimPO가 아무 대가 없이 단순해진 것은 아니라는 뜻이기도 하다. 다만 \(\gamma\)는 스칼라 하나를 튜닝하는 문제이고, 모델 하나를 통째로 더 들고 다니는 비용에 비하면 훨씬 가볍다.
Experiments
SimPO는 Llama3-8B-Instruct를 base로 한 setting에서 DPO 및 다른 preference optimization 방법들과 비교되었다. 대표적인 결과는 다음과 같다.
| 지표 | DPO 대비 향상폭 |
|---|---|
| AlpacaEval 2 (length-controlled win rate) | 최대 +6.4점 |
| Arena-Hard | 최대 +7.5점 |
Llama3-8B-Instruct 기반 최고 성능 SimPO 모델은 AlpacaEval 2에서 length-controlled win rate 44.7%, Arena-Hard에서 33.8%를 기록했다. AlpacaEval 2가 length-controlled 지표를 쓴다는 점도 눈여겨볼 만하다 — 단순히 응답을 길게 만들어서 얻은 점수가 아니라는 뜻이다. length normalization으로 애초에 길이 편향을 걷어낸 SimPO가 길이를 통제한 평가 지표에서도 우위를 보인 것은, method의 설계 의도와 실험 결과가 일치한다는 뜻이다.
성능 외에 실용적인 이득도 있다. reference 모델이 없으므로 학습 중 GPU 메모리 사용량과 forward pass 횟수가 DPO 대비 줄어든다. 같은 모델 크기라면 DPO는 정책과 reference 두 모델을 동시에 다뤄야 하지만, SimPO는 정책 하나만 있으면 된다. 대형 모델을 preference 데이터로 fine-tuning할 때 이 차이는 실제 학습 인프라 비용으로 직결된다.
AlpacaEval 2와 Arena-Hard 두 벤치마크 모두에서 향상이 관찰되었다는 점도 짚을 만하다. 두 벤치마크는 서로 다른 방식으로 응답 품질을 평가하는데(pairwise 비교 기반 win rate 대 난이도 가중 랭킹), 한쪽에만 치우친 개선이 아니라는 것은 SimPO의 성능 향상이 특정 벤치마크의 특성에 편승한 결과가 아니라 reward 정의 자체의 개선에서 왔을 가능성을 뒷받침한다.
Conclusion
SimPO의 메시지는 명확하다: DPO의 reference 모델은 필수가 아니었다. 정책 자신의 평균 log 확률을 reward로 쓰고, 그 reward에 목표 마진을 더해 Bradley-Terry 목적함수를 학습하는 것만으로 reference 모델 없이도 DPO보다 나은 성능을 낼 수 있다. 특히 length normalization은 #11에서 지적한 “RLHF 성능 향상의 상당 부분이 길이 편향”이라는 문제를 reward 정의 단계에서부터 차단하는 설계라는 점에서, 단순한 엔지니어링 트릭이 아니라 reward 설계 철학의 문제다.
물론 SimPO가 length bias를 완전히 해결하는 것은 아니다. \(\beta, \gamma\) 두 hyperparameter를 데이터셋마다 다시 튜닝해야 하고, reference 모델이 암묵적으로 제공하던 KL regularization 효과가 사라진 만큼 정책이 원래 분포에서 너무 멀어지지 않도록 다른 방식으로 제어할 필요가 있다. 그럼에도 reference-free + length-normalized reward라는 조합은 이후 preference optimization 계보에 실질적인 영향을 남겼다. #41 프론티어 모델의 reward 설계에서 다루듯, K-EXAONE 2.0이 채택한 GrouPER는 SimPER 계열의 group preference 최적화 기법으로, SimPO가 제시한 reference-free·length-normalized reward의 아이디어가 실제 프론티어 모델 학습에서도 이어지고 있음을 보여준다.
RLHF Reward 설계 시리즈
이 글은 RLHF Reward 설계 시리즈의 스물네 번째 글이다.
1부. 지형도
- Deep RL from Human Preferences (Christiano 2017) — 선호로 보상을 배우는 원형
- InstructGPT (Ouyang 2022) — RLHF 3단계 표준 레시피
- HH-RLHF (Bai 2022) — helpful·harmless preference model
2부. 스칼라 RM 해부
- Rethinking Bradley-Terry (2024) — reward 변환의 수학적 기반
- Secrets of RLHF II (2024) — 선호 데이터 노이즈와 RM 일반화
- Skywork-Reward (2024) — 데이터 큐레이션이 아키텍처를 이긴다
- ArmoRM (2024) — 다목적 분해와 MoE 게이팅
- Llama 2 (2023) — helpfulness·safety RM 분리 프로덕션 레시피
- RewardBench 2 (2025) — RM을 어떻게 평가할 것인가
3부. Reward Hacking
- Overoptimization Scaling Laws (2022) — Goodhart의 법칙 정량화
- Length Correlations in RLHF (2023) — 성능 향상의 얼마가 길이인가
- ODIN (2024) — 길이를 reward에서 분리
- WARM (2024) — weight averaging으로 hacking 방어
4부. 안전성 정렬
- Safe RLHF (2023) — 안전성을 reward가 아니라 제약으로
- Rule-Based Rewards (2024) — 안전 규칙을 reward로 직접 번역
- Deliberative Alignment (2024) — 안전 명세를 모델의 추론 안으로
- Shallow Safety Alignment (2024) — 정렬은 첫 몇 토큰에만 얹혀 있다
- OR-Bench (2024) — 과잉 거절을 어떻게 측정할 것인가
5부. reward를 정책으로
- PPO (2017) — clipped surrogate objective
- Secrets of RLHF I (2023) — PPO 학습 안정화 트릭
- GRPO / DeepSeekMath (2024) — value network를 버리다
- RLOO (2024) — REINFORCE로 충분한가
- DPO (2023) — reward를 없애면 어떻게 되는가
- (현재 글) SimPO (2024) — reference-free + 길이 정규화
- KTO (2024) — 선호 쌍 없이 이진 신호만으로
- GSPO (2025) — importance ratio를 시퀀스 단위로
- DAPO (2025) — 신호 없는 프롬프트를 버린다
6부. Process & Verifiable Reward
- Let's Verify Step by Step (2023) — 과정 감독이 결과 감독을 이긴다
- Math-Shepherd (2023) — 사람 라벨 없는 PRM
- DeepSeek-R1 (2025) — RLVR, 규칙이 reward가 될 때
7부. Generative Reward Model
- Prometheus 2 (2024) — 오픈 평가자 모델과 rubric 조건부 평가
- Generative Verifiers (2024) — reward를 next-token prediction으로
- Generative Reward Models (2024) — GenRM과 선호 학습의 결합
- Self-Taught Evaluators (2024) — 사람 라벨 없이 judge를 키우다
- DeepSeek-GRM / SPCT (2025) — inference-time scaling
8부. 생각하는 Judge, 그리고 그 신뢰
- ReasonGRM (2025) — reasoning 능력을 judge에 이식
- J1 (2025) — RL로 judge를 생각하게 만들기
- Rubrics as Rewards (2025) — 비검증 도메인으로
- CriticEval (2024) — judge 자체를 어떻게 평가하나
- One Token to Fool LLM-as-a-Judge (2025) — GenRM도 뚫린다
9부. 실전 종합
- 프론티어 모델의 reward 설계 (2025~2026) — 열 개 모델이 실제로 택한 것
- reward를 어떻게 설계할 것인가 — 시리즈를 관통한 RM 설계 원칙 한 장
본 시리즈는 42편으로 구성된다.
참고 문헌
- Meng, Y., Xia, M., & Chen, D. (2024). SimPO: Simple Preference Optimization with a Reference-Free Reward.
- Rafailov, R., Sharma, A., Mitchell, E., Ermon, S., Manning, C. D., & Finn, C. (2023). Direct Preference Optimization: Your Language Model is Secretly a Reward Model.
- Singhal, P., Goyal, T., Xu, J., & Durrett, G. (2023). A Long Way to Go: Investigating Length Correlations in RLHF.
- Bradley, R. A., & Terry, M. E. (1952). Rank Analysis of Incomplete Block Designs: I. The Method of Paired Comparisons. Biometrika.
Enjoy Reading This Article?
Here are some more articles you might like to read next: