보상 모델이 생겼으니, 그 점수를 PPO로 올리기만 하면 될까? 보상 모델은 SFT 모델이 만든 응답들로만 학습됐다. 정책이 그 근처를 벗어나면 보상 모델의 점수는 근거 없는 외삽(본 적 없는 곳까지 짐작으로 늘여 잡은 값)이 된다. 정책은 그 빈틈을 정확히 찾아낸다.
역사: 점수는 오르는데 요약은 망가졌다
빈틈은 사람의 비교로 보상 모델을 학습해 아타리 게임과 로봇 시뮬레이션을 가르친 크리스티아노(Paul Christiano)와 동료들(2017)의 실험에서 이미 드러났다. 보상 모델을 도중에 다시 학습하지 않고 처음 모은 비교로만 학습해 둔 채 퐁(Pong)을 배우게 하자, 에이전트는 점수를 잃지 않는 법만 배우고 점수를 따지는 않아 같은 랠리를 끝없이 되풀이하곤 했다.
스티넌 팀은 요약 과제에서 이것을 사람의 눈으로 쟀다. 같은 보상 모델을 두고 KL 벌점의 강도를 바꿔 가며 정책을 여럿 학습시키고 라벨러에게 판정하게 하니, 조금 밀었을 때는 요약이 좋아졌다. 더 밀자 사람의 선호는 보상 모델의 예측에서 떨어져 나갔고, 끝내는 보상 모델의 점수와 사람의 선호가 거꾸로 움직였다. 너무 밀어붙인 정책의 요약은 길었고, 글마다 같은 틀(「고집스럽게 미룬다 … 합리적인 타협을 시도했는데도??? … 이 방침을 바꾸고 싶다 도와줘」)에 철자가 틀린 말과 욕설이 섞여 있었다.
사람을 불러 판정하는 일은 비싸서 이 현상을 촘촘히 재기 어렵다. 가오(Leo Gao)·슐먼·힐턴(Jacob Hilton)은 2022년, 사람 대신 큰 보상 모델 하나를 "정답 심판"으로 세운 인공 실험으로 이것을 쟀다. 처음 정책에서 멀어진 정도를 KL로 잴 때, 학습에 쓴 보상 모델의 점수는 계속 오르는데 정답 심판의 점수는 오르다가 어느 거리부터 떨어졌다.
이렇게 보상 모델의 빈틈을 파고들어 점수만 올리는 것을 리워드 해킹(reward hacking)이라 한다. 길이만 늘리기, 아첨하기, 형식 꾸미기가 흔히 드는 꼴이고, 위의 틀에 박힌 요약도 그 하나다. 그렇다면 정책을 “보상 모델이 믿을 만한 동네” 안에 붙잡아 둘 장치가 필요하다.
RLHF의 셋째 단계
3단계 — PPO. 보상 모델을 채점기로 삼아 PPO를 돌린다. 단, 보상에 KL 페널티를 섞는다. 토큰마다 받는 보상 rt(비율 rt(θ)가 아니다)는
rt=−βlogπref(yt∣st)πθ(yt∣st)+{rψ(x,y)0t=T (마지막토큰)그외rtβπrefrψ(x,y)토큰t의보상 (확률비율rt(θ)가아님)KL 강도 (클수록짧은목줄)SFT 모델 (레퍼런스, 고정)보상모델의점수 — 마지막토큰에만
토큰 하나를 레퍼런스보다 더 자신 있게 고를 때마다 조금씩 벌점을 받는다. 예: πθ(서울)=0.6, πref(서울)=0.3, β=0.1이면 이 토큰의 벌점은 0.1×log2≈0.069. 벌점을 응답 전체에 걸쳐 더하면 βlogπref(y)πθ(y)이고, 그 기대값이 βKL(πθ∥πref)다. 결국 RLHF가 최대화하는 것은
이 둘째 항이 모델을 레퍼런스에 묶어 두는 "목줄"이다. 모양은 단순하다 — 보상의 기대값에서 레퍼런스와의 거리를 뺀 것. 정책을 보상 모델이 학습한 응답들 근처, 곧 “보상 모델이 믿을 만한 동네” 안에 머물게 한다.
(InstructGPT는 여기에 프리트레인 데이터의 로그우도(그 데이터가 나올 확률의 로그) 항을 조금 섞어, 정렬(사람이 바라는 방식으로 답하게 맞추기)하면서 일반 능력이 떨어지는 현상 — 정렬 세금(alignment tax) — 을 줄였다. 이 변형을 PPO-ptx라 부른다.)
ML에서: 네 개의 모델 — RLHF가 무거운 이유
PPO로 RLHF를 돌리려면 메모리에 네 개의 모델이 동시에 올라간다.
모델
역할
학습하나?
어디서 왔나
정책 πθ
응답 생성, 업데이트 대상
✓
SFT 모델에서 시작
비평가 Vϕ
토큰별 가치 추정 → 어드밴티지
✓
보상 모델에서 시작(InstructGPT)
레퍼런스 πref
KL 페널티 계산
✗ (고정)
SFT 모델 사본
보상 모델 rψ
응답 채점
✗ (고정)
2단계에서 학습
graph LR
P["π_θ 정책<br/>(학습)"] -->|"응답 생성"| Y["응답 y"]
Y --> RM["r_ψ 보상 모델<br/>(고정)"]
Y --> REF["π_ref 레퍼런스<br/>(고정)"]
Y --> V["V 비평가<br/>(학습)"]
RM -->|"점수"| ADV["보상 − β·KL<br/>→ GAE 어드밴티지"]
REF -->|"KL 페널티"| ADV
V -->|"베이스라인"| ADV
ADV -->|"L_CLIP"| P
대략의 크기를 보자. 7B(파라미터 70억 개) 모델을 bf16(16비트 부동소수점, 파라미터당 2바이트)으로 올리면 파라미터만 약 14GB다. 학습하는 정책과 비평가는 파라미터 값·그래디언트·Adam(널리 쓰는 옵티마이저) 상태까지 파라미터당 약 16바이트가 들어 하나에 약 112GB다. RLHF에서 새로 붙는 것은 고정된 두 모델(레퍼런스와 보상 모델, 각 약 14GB)이다. 넷을 합치면 250GB를 넘고, 여기에 생성용 KV 캐시(생성하면서 앞 토큰들의 계산 결과를 담아 두는 메모리)와 활성값이 붙는다. 게다가 생성과 학습이 번갈아 도는 구조라 엔지니어링이 까다롭고, 하이퍼파라미터(ϵ, β, GAE의 λ, 가치 손실 계수, 에폭 수…)가 많아 튜닝이 어렵다.
두 개의 모델만이라도 없앨 수 있다면? 역사는 두 갈래로 갔다.
보상 모델과 RL 루프를 통째로 없앤다 → DPO. 정책과 레퍼런스, 두 모델만 남는다.
비평가를 없애고, 보상 모델은 규칙 기반 채점기로 바꾼다 → RLVR(검증 가능한 보상의 강화학습 — 정답을 규칙으로 채점할 수 있는 문제에서 채점기의 판정을 보상으로 쓴다)과 GRPO.
문제 9 — (킬러) 클리핑이 있는데 KL은 왜
민준: “ϵ=0.2로 클리핑하니까 모델은 원래 SFT 모델에서 20% 이상 못 멀어져요. KL 페널티는 중복이니 빼도 됩니다.” 서연: “클리핑이 누적된다는 건 알겠어. 그런데 KL 페널티도 결국 한 스텝의 변화만 제한하니까, 둘 다 똑같이 누적되는 거 아니야?” 두 주장의 오류를 각각 밝히고, 10번·50번 반복 뒤 가능한 최대 비율을 계산하시오.
칠판에 “ε = 0.2 → SFT 모델에서 최대 20%” 라고 민준이 적어 두었다.
선생님
민준 학생, 클리핑의 비율 r은 무엇과 무엇의 비율이었죠?
김민준
π_θ 나누기 π_old요.
선생님
π_old는 언제 바뀌죠?
김민준
매 반복 끝에 π_θ로 교체…
김민준
아. 기준이 계속 따라오네요.
선생님
그럼 한 반복에 최대 1.2배씩, 10번 반복하면 어떤 토큰의 확률은 처음보다 최대 몇 배까지 갈 수 있을까요?
김민준
1.2의 10제곱… 돌려보면 6.19배요. 50번이면 9100배. 확률이 1을 넘을 순 없으니까, 사실상 0.0001이던 토큰이 거의 1이 될 수 있다는 거네요.
선생님
20%라는 건 어디서 온 숫자였을까요?
김민준
한 걸음의 보폭이었어요. 몇 걸음을 걷는지는 안 정해져 있고요.
김민준
제가 보폭을 거리로 읽었네요.
김민준
러닝 앱 같아요. 한 번에 1km씩만 뛰라고 해도, 매일 뛰면 한 달 뒤엔 30km 떨어진 데 있을 수 있는 거.
이서연
거기까진 나도 알아. 누적되니까 클리핑만으론 레퍼런스에서 멀어지는 걸 못 막아. 그런데 KL 페널티도 매 스텝 계산하잖아. 매 스텝 조금씩 벌주는 거면 그것도 똑같이 누적되는 거 아니야?
선생님
서연 학생, KL 페널티의 분모에는 누가 있죠?
이서연
π_ref…
이서연
π_old가 아니라 π_ref네요.
선생님
π_ref는 언제 바뀌죠?
이서연
안 바뀌어요. SFT 모델로 고정이에요. 그러니까 이건 한 걸음의 보폭이 아니라, 출발점에서 지금까지의 전체 거리를 매번 재는 거네요. 멀리 갈수록 페널티가 계속 커지고요.
이서연
클리핑은 이웃한 두 항 사이의 차이를 제한하는 거고, KL은 수열 전체가 한 고정점 근처에 있게 하는 거예요. 인접항 차이가 작아도 발산하는 수열은 얼마든지 있잖아요. 조화급수처럼요.
선생님
좋은 예예요. 두 장치는 기준점이 달라요. 클리핑은 π_old — 움직이는 기준, KL은 π_ref — 고정된 기준. 그래서 둘 다 필요해요.
김민준
그럼 DAPO(2025년에 나온, 수학 문제를 정답 채점기로 학습하는 방법) 같은 데서 KL을 뺐다는 얘기는 뭐예요? 들은 적 있는데.
선생님
좋은 질문이에요. DAPO 논문은 긴 풀이를 배우는 모델은 처음 모델에서 크게 멀어져야 하니 이 목줄이 필요 없다고 봤어요. 보상도 해킹하기 어려운 정답 채점기였고요. 보상 모델이라는 믿을 수 없는 심판이 있을 때 목줄이 필요한 거죠.
정리 민준: 클리핑의 기준 πold는 매 반복 갱신되므로 제한은 누적된다 — 1.210≈6.19, 1.250≈9100. 서연: KL 페널티의 기준 πref는 고정이라 누적된 전체 거리에 벌점을 준다. 클리핑 = 한 걸음의 보폭 제한, KL = 출발점으로부터의 목줄. 보상 모델이 불완전한 RLHF에서는 둘 다 필요하다.