Chapter 4: 길이 편향 — 합이 공정한가?
의문
로그확률은 항상
세 개의 공간에서 바라보기
이 문제를 제대로 이해하려면, 같은 현상을 세 가지 다른 공간에서 바라봐야 한다.
[1] 확률 공간: P(y|x) = P(t₁) × P(t₂|t₁) × P(t₃|t₁,t₂) × …
각 토큰은 0과 1 사이의 확률이다.
토큰이 추가될 때마다 곱한다.
0.9 × 0.8 × 0.7 × 0.9 × ... → 곱할수록 0에 가까워진다.
아무리 좋은 답이어도, 길기만 하면 확률이 바닥으로 간다.
→ 확률 공간에서 길이는 무조건 불리하다.
[2] 로그확률 공간: log P(y|x) = Σᵢ log P(tᵢ|…)
곱을 합으로 바꿨지만, log P는 항상 ≤ 0이다.
-0.1 + (-0.2) + (-0.4) + (-0.1) + ... → 더할수록 마이너스 쪽으로 멀어진다.
DPO가 작동하는 공간이 바로 여기다.
→ 로그확률 공간에서도 길이는 무조건 불리하다.
[3] 로그오즈 공간: log odds = log(P / (1−P))
이제 다르다.
odds = P/(1−P) — "일어날 확률 / 안 일어날 확률"의 비율.
log odds는 음수일 수도, 양수일 수도 있다.
P = 0.9 → odds = 9 → log odds = +2.2 (강한 긍정 증거)
P = 0.5 → odds = 1 → log odds = 0 (중립)
P = 0.1 → odds = 0.11 → log odds = -2.2 (강한 부정 증거)
로그오즈 공간에서 토큰은 증거다:
베이지안 업데이트의 로그오즈 형태:
사후 log odds = 사전 log odds + 증거의 log likelihood ratio
각 토큰이 생성될 때:
- "이 토큰이 나올 법하다" → 양수 증거 → log odds 증가
- "이 토큰이 이상하다" → 음수 증거 → log odds 감소
로그확률 공간: 증거가 많을수록 합이 마이너스 방향으로 밀려간다 (음수끼리 더하니까)
로그오즈 공간: 좋은 증거는 더하고, 나쁜 증거만 깎는다
→ 로그오즈 공간에서는 "길지만 좋은 답"이 "짧지만 나쁜 답"을 이길 수 있다.
답: DPO는 로그확률 공간에서 작동하므로 공정하지 않다
- 정답이 12토큰, 오답이 4토큰이면 → 정답의 로그확률 합이 더 작을 수 있다
- 레퍼런스 비율(
)이 부분 상쇄하지만 완벽하지 않다 - 이것이 DPO의 구조적 약점: 로그확률 공간에 갇혀 있다
빼면? — 공간을 바꾸거나, 길이를 정규화하거나
접근 1: 길이 정규화 — SimPO
- 토큰 수로 나눈 평균 로그확률을 보상으로 사용
r_SimPO(y|x) = (1/|y|) × Σ log π_θ(t_i|...)- 길이 불이익 해소
- 보너스: 레퍼런스 모델도 불필요 → 메모리 절약
- 목표 마진
추가: “최소 이만큼은 벌려라”
접근 2: 공간 자체를 바꾸기 — ORPO
- ORPO(Odds Ratio Preference Optimization, Hong et al., 2024)는 확률 비율(probability ratio) 대신 **오즈 비율(odds ratio)**을 쓴다.
DPO의 비교 단위:
P_θ(y_w|x) / P_θ(y_l|x) — 확률의 비율
→ 로그를 취하면 로그확률의 차이
→ 길이에 비례해서 왜곡된다
ORPO의 비교 단위:
odds_θ(y_w|x) / odds_θ(y_l|x) — 오즈의 비율
여기서 odds_θ(y|x) = P_θ(y|x) / (1 − P_θ(y|x))
왜 이게 다른가?
확률 비율: "y_w를 생성할 확률이 y_l의 몇 배인가"
오즈 비율: "y_w를 생성할 가능성 대 불가능성의 비가,
y_l의 그것보다 몇 배 더 유리한가"
오즈 비율은 확률 비율보다 더 안정적이고 덜 극단적이다.
특히 확률이 매우 낮을 때 (긴 응답) 차이가 두드러진다.
ORPO의 손실함수(
L_ORPO = L_SFT + λ × L_OR
L_SFT = 일반적인 SFT 손실 (선호 응답에 대해)
L_OR = −log σ( log(odds_θ(y_w|x) / odds_θ(y_l|x)) )
→ SFT와 선호 정렬을 하나로 통합
→ 레퍼런스 모델 불필요
→ 별도의 정렬 단계 불필요 (monolithic)
ORPO가 길이 편향을 완화하는 이유:
짧은 응답 (4토큰):
P = 0.05 (낮음)
odds = 0.05/0.95 = 0.053
log odds = -2.94
긴 응답 (12토큰):
P = 0.001 (더 낮음 — 길이 때문에)
odds = 0.001/0.999 = 0.001
log odds = -6.91
확률 비율: 0.001/0.05 = 0.02 → 긴 응답이 50배 불리
오즈 비율: 0.001/0.053 = 0.019 → 여전히 불리하지만...
핵심: 오즈 비율은 "안 일어날 확률"을 분모에 넣음으로써
확률이 극도로 낮은 영역(긴 응답)에서의 왜곡을 완화한다.
1에 가까운 확률 영역에서는 차이가 미미하지만,
0에 가까운 영역에서 오즈가 더 부드럽게 작동한다.
→ 완전한 해결은 아니지만, DPO보다 길이에 덜 민감하다.
→ SimPO가 "평균"으로 정규화했다면, ORPO는 "공간 자체"를 바꿨다.
장난감 예제
세 공간에서의 같은 응답 비교:
y_w (12토큰, 좋은 답):
확률 공간: P = 0.9^12 ≈ 0.28
로그확률 공간: log P ≈ -1.26 (12 × -0.105)
로그오즈 공간: 12 × log(0.9/0.1) = 12 × 2.20 = +26.3
y_l (4토큰, 나쁜 답):
확률 공간: P = 0.6^4 ≈ 0.13
로그확률 공간: log P ≈ -2.04 (4 × -0.511)
로그오즈 공간: 4 × log(0.6/0.4) = 4 × 0.405 = +1.62
마진 (y_w − y_l):
로그확률: -1.26 − (-2.04) = +0.78 ← y_w 승리 (이번엔 운 좋게)
로그오즈: +26.3 − (+1.62) = +24.7 ← y_w 압도적 승리
→ 로그오즈 공간에서는 "좋은 증거가 많이 쌓인" 긴 응답이 정당하게 평가된다.
→ 로그확률 공간에서는 이 차이가 길이에 의해 묻힌다.
좋은 토큰이 추가될수록 로그오즈 공간에서는 점수가 상승할 수 있다. 확률/로그확률 공간에서는 토큰 수가 늘어나면 무조건 하락한다.
graph LR
subgraph solutions["길이 편향 해결 두 방법"]
direction LR
SimPO["<b>SimPO</b><br/>평균 정규화<br/>r = (1/|y|) Σ log π"] ---|"공통: ref 제거"| ORPO["<b>ORPO</b><br/>공간 전환<br/>odds ratio 사용"]
end
style SimPO fill:#e3f2fd,stroke:#1565C0
style ORPO fill:#e8f5e9,stroke:#2E7D32
시각화 계획
- 세 공간 비교 그래프: 위 SVG 참조
- SimPO(평균 정규화) vs ORPO(오즈 비율): 위 mermaid 참조
같은 역설이 검색에서도 → 부록 F: BM25와 로그오즈\
- BM25의 IDF가 사실상 로그오즈라는 것, 나이브 베이즈의 “증거가 많을수록 확률이 낮아지는” 역설을 BM25가 어떻게 풀었는지, 그리고 BM25 = 로그오즈(ORPO적) + 길이 정규화(SimPO적)라는 대응을 다룬다. 정보 검색은 이 문제를 1990년대에 이미 풀었다.
다음 장으로의 질문
SimPO는 길이를 평균으로 정규화하고, ORPO는 오즈 공간으로 바꿨다.
두 방법 모두 레퍼런스 모델을 빼버렸다.
잠깐, 레퍼런스 모델은 대체 왜 필요했던 건가?
빼도 되는 거였어?