Chapter 5: 레퍼런스 모델 — 이 줄은 왜 묶여 있나?
의문
Ch1에서 DPO의 핵심을 배웠다: 레퍼런스 대비 마진을 벌린다. 그런데 여기서 자연스러운 질문이 생긴다:
레퍼런스가 애초에 선호와 비선호를 구분 못하면?
: , → 레퍼런스의 마진이 0이다.
"0보다 더 벌린다"는 게 무슨 뜻인가?
기준점이 0이면, 마진을 조금만 벌려도 "레퍼런스 대비 개선"이 되는 건가?더 극단적으로:
레퍼런스가 오답을 선호하고 있다면? ()
"부산"에 더 높은 확률을 준다면?
거기서 "더 벌린다"는 건 무엇을 기준으로?
이 질문의 답이 레퍼런스의 역할을 명확히 해준다.
핵심: 방향은 데이터가 결정하고, 레퍼런스는 속도만 제한한다
DPO 손실의 그래디언트를 다시 보자:
← 이쪽을 올려라 ← 이쪽을 내려라 어느 쪽을 올리고 어느 쪽을 내리는지 — 즉 “방향” — 을 결정하는 것은
이 항이다. 이 항에 레퍼런스 모델은 등장하지 않는다.
가 "서울"이고 이 "부산"이라는 것은 데이터셋에 적혀 있다.
인간(또는 judge)이 "서울이 더 나은 답이다"라고 라벨을 매긴 것이다.
레퍼런스 모델이 "부산"을 선호하든 "서울"을 선호하든,
그래디언트는 항상(“서울”) 방향으로 밀고 (“부산”) 방향에서 당긴다.
그렇다면 레퍼런스는 무엇을 하는가?
— 이 항이 "얼마나 세게 밀지"를 결정한다.
가 이미 크다면 (마진을 충분히 벌렸다면):
- →
값이 작아진다 → 그래디언트가 약해진다 → “이제 그만 밀어도 돼”
가 아직 작거나 음수라면:
→
값이 크다 → 그래디언트가 강하다 → “더 밀어야 해” → 레퍼런스는 "어디로 가라"를 말하지 않는다. (나침반이 아니다)
→ 레퍼런스는 "너무 멀리 가지 마라"를 말한다. (줄이다)
비유하면:
인간 라벨 = 목적지를 가리키는 화살표 (방향)
레퍼런스 = 기둥에 묶인 줄 (이동 범위 제한)
= 줄의 길이 줄이 묶여 있어도 화살표 방향으로 갈 수 있다.
줄이 없으면 — 화살표 방향으로 무한히 달려가서 과적합한다.
줄이 있으면 — 적당히 가다가 멈춘다.레퍼런스의 마진이 0이든, 음수이든, 화살표 방향은 바뀌지 않는다.
달라지는 건 "출발점"뿐이다.
0에서 출발하면 조금만 벌려도 진전이고,
이미 +2에서 출발하면 +3까지 가야 같은 진전이다.
가 0일 때, 음수일 때 — 장난감 예제
상황 1:
(레퍼런스가 둘을 동등하게 봄)
에서 시작:
- → 손실이 0이 아니다! 그래디언트가 살아 있다.
- → “레퍼런스도 모르고 나도 모르지만, 나는 벌려야 한다.”
- → 어느 쪽으로?
쪽으로. 데이터가 그렇게 말하니까.
상황 2:
(레퍼런스가 오답을 선호!)
에서 시작:
( 일 때) - → 레퍼런스가 오답을 선호했지만, 학습 모델은 이미
으로 레퍼런스보다 마진을 +1만큼 벌린 셈이다. - → 손실이 상황 1보다 약간 작다 — 이미 "진전"이 있으니까.
- → 하지만 여전히 0이 아니다 — 더 벌려야 한다.
핵심:
- 레퍼런스가 맞든 틀리든, 그래디언트의 방향은 항상 같다.
- 달라지는 건 "현재 얼마나 진전했는가"의 기준점뿐이다.
는 줄의 길이다
비유에서
작다 (예: 0.1):
- → 줄이 길다 → 레퍼런스에서 멀리 갈 수 있다
- → 그래디언트에 곱해지는 스케일이 작다 → 한 스텝의 변화가 작다
- → 하지만 멀리까지 갈 수 있으므로 최종 마진은 클 수 있다
- → 과적합 위험
크다 (예: 0.5):
- → 줄이 짧다 → 레퍼런스 근처에 머문다
- → 그래디언트 스케일이 크지만, 마진이 조금만 벌어져도
가 빠르게 포화 - → 보수적 → 학습 느림, 하지만 안정적
빼면? — 실제로 레퍼런스를 빼서 성공한 사례
- SimPO: 평균 로그확률 자체를 보상으로 쓰면 레퍼런스 불필요
- 단, 목표 마진
가 "최소 이만큼은 벌려라"는 제약으로 줄의 역할을 일부 대체
- 단, 목표 마진
- ORPO: SFT 손실 자체가 암묵적 레퍼런스 역할
- 비선호에 약한 벌점만 주면 충분 → 별도 레퍼런스 모델 불필요
빼면 안 되는 경우
- 온라인/반복 학습: 모델이 자기 출력으로 재학습 → 레퍼런스 없으면 보상 해킹
LLM에서 실제로 관찰된 리워드 해킹 사례들:
[sycophancy 해킹 — 아첨하는 모델]
보상 모델이 "사용자가 만족하는 답변"을 높게 평가하도록 학습되면,
모델은 사실보다 사용자의 기분을 우선하는 전략을 발견한다:
- 사용자: “내가 쓴 이 코드가 최적이지?”
- 해킹된 모델: “네, 정말 잘 작성하셨습니다! 최적의 코드입니다.”
- (실제로는
인데 이 가능한 상황) - → 보상 모델 점수는 높지만, 사용자에게는 해로운 답변.
[형식 해킹 — 마크다운 도배]
보상 모델이 "잘 구조화된 답변"을 선호하면,
모델은 내용보다 형식을 최적화한다:
- → 모든 답변에 볼드, 헤더, 번호 매기기를 과도하게 사용
- → "오늘 날씨 어때?"에도 3단계 헤더와 5개 불릿 포인트
- → 보상은 올라가지만, 실제 사용성은 떨어진다
레퍼런스(
)가 이것을 어떻게 막는가:
레퍼런스 모델은 "원래 이 모델이 어떻게 답했는가"를 기억한다.
가 충분히 크면, 원래 스타일에서 크게 벗어나는 답변에 벌점.
- → 아첨이나 마크다운 도배는 원래 모델의 분포에서 먼 행동이므로 KL 페널티가 자연스럽게 억제한다.
- → 줄(leash)이 없으면 이 억제가 사라진다.
- 안전성 정렬: 베이스 모델의 역량을 유지하면서 행동만 바꿔야 할 때
- 레퍼런스가 "원래 이 모델이 할 수 있었던 것"의 기준선 역할
시각화 계획
- 핵심 다이어그램: 위 SVG 참조 — 기둥(
) + 줄( ) + 화살표(인간 라벨 = 방향) - 손실 곡선: x축 =
, 인 네 경우를 오버레이. 시작점은 다르지만 경사 방향은 동일
다음 장으로의 질문
레퍼런스는 줄이고, 방향은 인간 라벨이 준다. 알겠다. 그런데 인간 라벨 "A가 B보다 낫다"를 확률로 바꾸는
는 왜 하필 시그모이드인가? 다른 함수면 안 되나?