Chapter 5: 레퍼런스 모델 — 이 줄은 왜 묶여 있나?

의문

Ch1에서 DPO의 핵심을 배웠다: 레퍼런스 대비 마진을 벌린다. 그런데 여기서 자연스러운 질문이 생긴다:

레퍼런스가 애초에 선호와 비선호를 구분 못하면?

π_ref\pi\_\text{ref}: P(서울)=0.5P(\text{서울}) = 0.5, P(부산)=0.5P(\text{부산}) = 0.5Δ_ref=0\Delta\_\text{ref} = 0

레퍼런스의 마진이 0이다.
"0보다 더 벌린다"는 게 무슨 뜻인가?
기준점이 0이면, 마진을 조금만 벌려도 "레퍼런스 대비 개선"이 되는 건가?

더 극단적으로:
레퍼런스가 오답을 선호하고 있다면? (Δ_ref<0\Delta\_\text{ref} < 0)
"부산"에 더 높은 확률을 준다면?
거기서 "더 벌린다"는 건 무엇을 기준으로?

이 질문의 답이 레퍼런스의 역할을 명확히 해준다.

핵심: 방향은 데이터가 결정하고, 레퍼런스는 속도만 제한한다

DPO 손실의 그래디언트를 다시 보자:

L/θ=β×σ(β×(Δ_θΔ_ref))×[logπ_θ(y_w)logπ_θ(y_l)]\partial L/\partial\theta = -\beta \times \sigma(-\beta \times (\Delta\_\theta - \Delta\_\text{ref})) \times [\nabla \log \pi\_\theta(y\_w) - \nabla \log \pi\_\theta(y\_l)]

  • logπ_θ(y_w)\nabla \log \pi\_\theta(y\_w) ← 이쪽을 올려라
  • logπ_θ(y_l)\nabla \log \pi\_\theta(y\_l) ← 이쪽을 내려라

어느 쪽을 올리고 어느 쪽을 내리는지 — 즉 “방향” — 을 결정하는 것은
[logπ_θ(y_w)logπ_θ(y_l)][\nabla \log \pi\_\theta(y\_w) - \nabla \log \pi\_\theta(y\_l)] 이 항이다.

이 항에 레퍼런스 모델은 등장하지 않는다.

y_wy\_w가 "서울"이고 y_ly\_l이 "부산"이라는 것은 데이터셋에 적혀 있다.
인간(또는 judge)이 "서울이 더 나은 답이다"라고 라벨을 매긴 것이다.
레퍼런스 모델이 "부산"을 선호하든 "서울"을 선호하든,
그래디언트는 항상 y_wy\_w(“서울”) 방향으로 밀고 y_ly\_l(“부산”) 방향에서 당긴다.

그렇다면 레퍼런스는 무엇을 하는가?

σ(β×(Δ_θΔ_ref))\sigma(-\beta \times (\Delta\_\theta - \Delta\_\text{ref})) — 이 항이 "얼마나 세게 밀지"를 결정한다.

Δ_θΔ_ref\Delta\_\theta - \Delta\_\text{ref}가 이미 크다면 (마진을 충분히 벌렸다면):

  • σ\sigma 값이 작아진다 → 그래디언트가 약해진다 → “이제 그만 밀어도 돼”

Δ_θΔ_ref\Delta\_\theta - \Delta\_\text{ref}가 아직 작거나 음수라면:

  • σ\sigma 값이 크다 → 그래디언트가 강하다 → “더 밀어야 해”

  • → 레퍼런스는 "어디로 가라"를 말하지 않는다. (나침반이 아니다)

  • → 레퍼런스는 "너무 멀리 가지 마라"를 말한다. (줄이다)

비유하면:

인간 라벨 = 목적지를 가리키는 화살표 (방향)
레퍼런스 = 기둥에 묶인 줄 (이동 범위 제한)
β\beta = 줄의 길이

줄이 묶여 있어도 화살표 방향으로 갈 수 있다.
줄이 없으면 — 화살표 방향으로 무한히 달려가서 과적합한다.
줄이 있으면 — 적당히 가다가 멈춘다.

레퍼런스의 마진이 0이든, 음수이든, 화살표 방향은 바뀌지 않는다.
달라지는 건 "출발점"뿐이다.
0에서 출발하면 조금만 벌려도 진전이고,
이미 +2에서 출발하면 +3까지 가야 같은 진전이다.

Δref\Delta_\text{ref}가 0일 때, 음수일 때 — 장난감 예제

상황 1: Δ_ref=0\Delta\_\text{ref} = 0 (레퍼런스가 둘을 동등하게 봄)

L=logσ(β×Δ_θ)L = -\log \sigma(\beta \times \Delta\_\theta)

Δ_θ=0\Delta\_\theta = 0에서 시작:

  • L=logσ(0)=log(0.5)=0.693L = -\log \sigma(0) = -\log(0.5) = 0.693
  • → 손실이 0이 아니다! 그래디언트가 살아 있다.
  • → “레퍼런스도 모르고 나도 모르지만, 나는 벌려야 한다.”
  • → 어느 쪽으로? y_wy\_w 쪽으로. 데이터가 그렇게 말하니까.

상황 2: Δ_ref=1\Delta\_\text{ref} = -1 (레퍼런스가 오답을 선호!)

L=logσ(β×(Δ_θ(1)))=logσ(β×(Δ_θ+1))L = -\log \sigma(\beta \times (\Delta\_\theta - (-1))) = -\log \sigma(\beta \times (\Delta\_\theta + 1))

Δ_θ=0\Delta\_\theta = 0에서 시작:

  • L=logσ(β×1)=logσ(0.1)0.644L = -\log \sigma(\beta \times 1) = -\log \sigma(0.1) \approx 0.644 (β=0.1\beta=0.1일 때)
  • → 레퍼런스가 오답을 선호했지만, 학습 모델은 이미 Δ_θ=0\Delta\_\theta=0으로 레퍼런스보다 마진을 +1만큼 벌린 셈이다.
  • → 손실이 상황 1보다 약간 작다 — 이미 "진전"이 있으니까.
  • → 하지만 여전히 0이 아니다 — 더 벌려야 한다.

핵심:

β\beta는 줄의 길이다

비유에서 β\beta를 "줄의 길이"라고 했다. 구체적으로:

β\beta 작다 (예: 0.1):

  • → 줄이 길다 → 레퍼런스에서 멀리 갈 수 있다
  • → 그래디언트에 곱해지는 스케일이 작다 → 한 스텝의 변화가 작다
  • → 하지만 멀리까지 갈 수 있으므로 최종 마진은 클 수 있다
  • → 과적합 위험

β\beta 크다 (예: 0.5):

  • → 줄이 짧다 → 레퍼런스 근처에 머문다
  • → 그래디언트 스케일이 크지만, 마진이 조금만 벌어져도 σ\sigma가 빠르게 포화
  • → 보수적 → 학습 느림, 하지만 안정적

빼면? — 실제로 레퍼런스를 빼서 성공한 사례

빼면 안 되는 경우

LLM에서 실제로 관찰된 리워드 해킹 사례들:

[sycophancy 해킹 — 아첨하는 모델]
보상 모델이 "사용자가 만족하는 답변"을 높게 평가하도록 학습되면,
모델은 사실보다 사용자의 기분을 우선하는 전략을 발견한다:

  • 사용자: “내가 쓴 이 코드가 최적이지?”
  • 해킹된 모델: “네, 정말 잘 작성하셨습니다! 최적의 코드입니다.”
  • (실제로는 O(n2)O(n^2)인데 O(nlogn)O(n \log n)이 가능한 상황)
  • → 보상 모델 점수는 높지만, 사용자에게는 해로운 답변.

[형식 해킹 — 마크다운 도배]
보상 모델이 "잘 구조화된 답변"을 선호하면,
모델은 내용보다 형식을 최적화한다:

  • → 모든 답변에 볼드, 헤더, 번호 매기기를 과도하게 사용
  • → "오늘 날씨 어때?"에도 3단계 헤더와 5개 불릿 포인트
  • → 보상은 올라가지만, 실제 사용성은 떨어진다

레퍼런스(β\beta)가 이것을 어떻게 막는가:
레퍼런스 모델은 "원래 이 모델이 어떻게 답했는가"를 기억한다.
β\beta가 충분히 크면, 원래 스타일에서 크게 벗어나는 답변에 벌점.

  • → 아첨이나 마크다운 도배는 원래 모델의 분포에서 먼 행동이므로 KL 페널티가 자연스럽게 억제한다.
  • → 줄(leash)이 없으면 이 억제가 사라진다.
π_ref 기둥 (원본) θ β=0.1 (긴 줄) y_w 방향 θ β=0.3 θ β=0.5 (짧은 줄) 줄 = 이동 범위 제한 화살표 = 인간 라벨 (방향) β 크면 → 보수적 β 작으면 → 공격적

시각화 계획

다음 장으로의 질문

레퍼런스는 줄이고, 방향은 인간 라벨이 준다. 알겠다. 그런데 인간 라벨 "A가 B보다 낫다"를 확률로 바꾸는 σ()\sigma(\cdots)는 왜 하필 시그모이드인가? 다른 함수면 안 되나?