CS336 15강 — 정렬 (1): SFT와 RLHF
CS336-LLM-From-Scratch 시리즈의 15단계입니다. 전체 지도는 CS336 커리큘럼에서 볼 수 있습니다. (14강 — 데이터 (2)에서 이어집니다.)
여기서부터 유닛 5(정렬)가 시작됩니다. 유닛 1~4를 지나며 우리는 사전학습된 “원석”을 손에 쥐었습니다 — 아키텍처로 빚고, 스케일링으로 키우고, 좋은 데이터로 먹인 모델. 그러나 원석은 그대로는 쓸모가 애매합니다. 다음 토큰을 잘 맞힐 뿐, 지시를 따르지도 않고 사람이 원하는 방식으로 답하지도 않습니다. “이메일을 요약해 줘”라고 하면, 사전학습 모델은 요약 대신 비슷한 이메일을 이어 쓰기 십상입니다. 정렬(alignment)은 이 원석을 어시스턴트로 길들이는 과정이고, 그 첫 두 도구가 SFT(지시를 따르게)와 RLHF(사람 선호에 맞추기)입니다. (강사 Tatsu Hashimoto.)
한눈에 보기
정렬을 관통하는 한 문장은 이렇습니다 — 사람의 선호를 어떻게 학습 신호로 바꿀 것인가. SFT는 “좋은 답을 모방”하고, RLHF는 “두 답 중 나은 쪽”이라는 비교 신호를 보상 모델로 요약한 뒤 그 보상을 최적화합니다. DPO는 그 중간 다리(보상 모델·RL)를 걷어내고 선호 데이터에서 곧장 정책으로 갑니다.
flowchart TD
Pre["사전학습 모델<br/>(원석)"] --> SFT["SFT<br/>instruction 데이터 모방"]
Pref["선호 데이터<br/>y_w 이 y_l 보다 선호"] --> RM["보상 모델 R<br/>Bradley-Terry"]
SFT --> RM
RM --> RL["RLHF · PPO<br/>보상 최대화 + KL 제약"]
SFT -. "π_ref (닻)" .-> RL
RL --> Aligned["정렬된 정책"]
Pref -. "DPO: 보상 모델·RL 없이 직접" .-> Aligned
주 경로(실선)는 SFT → 보상 모델 ← 선호 데이터 → RLHF로 흐르고, SFT 모델은 RLHF에서 벗어나지 말아야 할 닻(π_ref) 역할도 겸합니다. DPO(점선)는 같은 선호 데이터를 쓰되 보상 모델과 RL 루프를 건너뛰어 정책을 직접 업데이트합니다.
SFT — 지시를 따르게 만들기
정렬의 첫 단계는 SFT(supervised fine-tuning), 즉 지도학습 미세조정입니다. 방법은 단순합니다 — (지시, 이상적 응답) 쌍을 잔뜩 모아, 사전학습 때와 똑같은 다음 토큰 예측 손실로 이어서 학습합니다. 형식만 보면 사전학습과 다를 게 없습니다. 다른 건 데이터입니다 — 웹 크롤이 아니라, 어시스턴트가 이렇게 답했으면하는 시연(demonstration)입니다.
여기서 놀라운 경험적 결과가 등장합니다. 표면적 정렬 가설(superficial alignment hypothesis)과 이를 뒷받침한 LIMA(“Less Is More for Alignment”) 논문입니다. LIMA는 잘 고른 약 1,000개의 예제만으로도 강력한 지시 이행 어시스턴트를 만들 수 있음을 보였습니다.
지식과 능력은 대부분 사전학습에서 온다. SFT가 새로 가르치는 것은 주로 형식·스타일·페르소나 — “질문에는 곧장 답하고, 이런 어조로, 이런 구조로 응답하라”는 사용법이다.
이 관점이 실무에 주는 함의는 강력합니다 — 품질 > 양입니다. 수백만 개의 잡다한 예제보다, 잘 정제된 소량의 시연이 낫습니다. Llama-2 팀도 크라우드소싱으로 긁어모은 대량 데이터보다, 소수의 정성껏 다듬은 SFT 데이터가 훨씬 좋았다고 보고했습니다. 페르소나만 얹으면 되니, 지식을 새로 주입할 필요가 없다는 것이죠.
하지만 SFT에는 구조적 한계가 있습니다. SFT는 시연을 모방(imitation)할 뿐입니다.
- 시연을 넘어설 수 없습니다 — 데이터에 담긴 것 이상으로 잘하도록 밀어붙이는 신호가 없습니다.
- 부정 신호로 배우지 못합니다 — “이 답은 나쁘다”를 가르칠 수 없습니다. SFT의 목표는 오직 “이 답을 더 그럴듯하게 만들어라”뿐이라, 나쁜 답을 억누르는 건 간접적일 뿐입니다.
무엇이 좋고 무엇이 나쁜지를 비교로 가르치고, 모방을 넘어서게 하려면 다른 신호가 필요합니다 — 그것이 RLHF의 출발점입니다.
선호 데이터와 보상 모델
RLHF의 재료는 선호 데이터(preference data)입니다. 사람에게 같은 프롬프트 x에 대한 두 응답을 보여 주고 어느 쪽이 나은지 고르게 합니다. 결과는 “선호된 응답 y_w(winner)가 거부된 응답 y_l(loser)보다 낫다”, 즉 y_w ≻ y_l이라는 비교 쌍의 모음입니다. 절대 점수를 매기게 하는 것보다, 둘 중 나은 쪽 고르기가 사람에게 훨씬 일관적이고 값싸다는 점이 핵심입니다.
문제는 이 이산적인 “A가 B보다 낫다”를 어떻게 학습 가능한 연속 신호로 바꾸느냐입니다. 답은 심리측정학에서 온 Bradley-Terry 모델입니다. 각 응답에 잠재 점수(보상) R(x, y)가 있다고 가정하고, 두 응답의 보상 차이를 시그모이드에 넣어 선호 확률로 만듭니다.
P(y_w ≻ y_l | x) = σ( R(x, y_w) − R(x, y_l) )
직관은 단순합니다 — 두 보상의 차이가 클수록 사람이 y_w를 고를 확률이 1에 가까워지고, 차이가 0이면 반반(0.5)입니다. 우리는 관측된 선호들의 우도(likelihood)를 최대화하도록 R을 학습합니다. 보상 모델(reward model)은 대개 사전학습/SFT된 LM 위에 스칼라 헤드를 하나 얹은 것 — 시퀀스를 넣으면 토큰 대신 하나의 숫자(보상)를 뱉게 만든 모델입니다.
보상 모델은 “사람의 선호를 흉내 내는 자동 채점기”다. 사람을 매 스텝 불러올 수는 없으니, 사람 판정을 한 번 학습해 두고 RL 루프에서 무한히 질의한다.
RLHF — 보상을 최적화하되 멀리 가지 않기
보상 모델 R이 생겼으니, 이제 정책 π(우리 LM)가 높은 보상을 받는 응답을 내도록 밀어붙이면 됩니다. 그런데 순진하게 R만 최대화하면 곧장 재앙이 옵니다 — 모델은 보상 모델의 허점을 파고들어, 사람이 보기엔 엉망이지만 점수만 높은 문장으로 붕괴합니다. 그래서 RLHF의 목적함수에는 제약이 붙습니다.
max_π E_{x, y~π}[ R(x, y) ] − β · KL( π(y|x) ‖ π_ref(y|x) )
앞항은 “보상을 높여라”, 뒷항은 “SFT 모델 π_ref에서 너무 멀어지지 마라”는 벌점입니다. 여기서 π_ref는 보통 SFT 모델이고, β는 그 벌점의 세기(KL 예산)를 정하는 계수입니다.
KL 제약이 이 목적함수의 핵심이다. 정책이 SFT 모델 근처의 “말이 되는 언어” 영역에 머물도록 붙잡아, 보상만 노리다 문장이 무너지는 것을 막는다. 보상은 프록시일 뿐이므로, 그 프록시를 신뢰할 수 있는 범위 안에서만 최적화하겠다는 뜻이다.
이 목적함수를 실제로 최적화하는 알고리즘이 PPO(Proximal Policy Optimization)입니다 — 정책 경사(policy gradient)에 클리핑(clipping)을 얹어, 한 번의 업데이트가 정책을 너무 크게 바꾸지 않도록 다시 한 번 안전장치를 건 방법입니다. RL 특유의 불안정성(가치 함수, advantage 추정, 롤아웃 샘플링 등) 때문에 구현 디테일이 까다로운데, 그 부분은 17강에서 따로 다룹니다. 여기서 기억할 것은 하나 — RLHF는 “보상 최대화 − KL 벌점”이라는 제약된 최적화이고, PPO는 그것을 안전하게 푸는 도구라는 점입니다.
보상 해킹(reward hacking)과 과최적화
RLHF의 가장 근본적인 위험은 보상 모델 R이 진짜 선호가 아니라 그 프록시(proxy)라는 데서 옵니다. R은 유한한 선호 데이터로 학습된 근사치라, 반드시 어딘가에 허점이 있습니다. 정책을 그 허점 쪽으로 세게 밀면, 보상 점수는 오르는데 실제 품질은 떨어지는 일이 벌어집니다 — 이것이 보상 해킹(reward hacking)이자, 측정 지표를 목표로 삼으면 그 지표가 망가진다는 Goodhart의 법칙의 전형적 사례입니다.
이 현상은 정성적 관찰에 그치지 않고 정량적 스케일링 법칙으로 정리됐습니다 (Gao et al., “Scaling Laws for Reward Model Overoptimization”). 정책이 π_ref에서 멀어질수록(KL이 커질수록):
- 보상 모델이 매기는 프록시 보상은 단조롭게 계속 오릅니다.
- 하지만 진짜 선호(gold reward)로 재보면, 처음엔 같이 오르다가 어느 지점에서 정점을 찍고 하락합니다.
여기서 β(KL 예산)의 역할이 분명해집니다 — β는 이 곡선의 어디에서 멈출지를 정하는 손잡이입니다. β가 너무 크면(KL을 빡빡하게 조이면) 정점에 못 미쳐 개선을 덜 얻고, β가 너무 작으면(마음껏 멀어지게 두면) 정점을 지나쳐 과최적화 구간으로 굴러떨어집니다. 좋은 RLHF는 결국 이 균형을 맞히는 문제입니다.
DPO — 보상 모델을 지워버리기
RLHF는 강력하지만 무겁습니다 — 별도의 보상 모델을 학습하고, 불안정한 RL 루프를 돌리고, 매 스텝 정책에서 샘플을 뽑아 보상을 질의해야 합니다. DPO(Direct Preference Optimization)는 이 전체 파이프라인을 하나의 분류 손실로 접어 버립니다. 통찰의 출발점은 앞의 KL-정규화 목적함수의 최적 정책이 닫힌 형태(closed form)로 알려져 있다는 사실입니다.
π*(y|x) ∝ π_ref(y|x) · exp( R(x, y) / β )
즉 최적 정책은 참조 정책을 보상에 비례해 지수적으로 재가중한 분포입니다. 이 식을 R에 대해 뒤집으면, 보상을 정책과 참조 정책의 로그 비율로 표현할 수 있습니다.
⇒ R(x, y) = β · log( π(y|x) / π_ref(y|x) ) + const
여기가 핵심입니다 — 보상 R이 더 이상 별도로 학습할 대상이 아니라, 정책 자체로 표현됩니다. 이제 이 R을 앞의 Bradley-Terry 우도에 그대로 대입합니다. 상수항은 y_w와 y_l에서 똑같이 나타나 차이를 취할 때 소거되고, 남는 것은 보상 모델도 RL 루프도 없이 정책에만 직접 거는 분류(로지스틱) 손실입니다.
L_DPO = − log σ( β·log(π(y_w|x)/π_ref(y_w|x)) − β·log(π(y_l|x)/π_ref(y_l|x)) )
읽는 법은 이렇습니다 — 선호된 응답 y_w의 로그 확률은 참조 대비 올리고, 거부된 응답 y_l은 내려라. 그것도 π_ref를 기준으로 상대적으로. RLHF와 똑같은 KL-정규화 목적을 겨냥하면서도, 보상 모델 학습과 온라인 샘플링을 통째로 없앤 것입니다.
- 장점: 단순하고 안정적입니다. 별도의 보상 모델·가치 함수·롤아웃 샘플링이 필요 없고, 표준 지도학습처럼 배치를 돌리면 됩니다. 그래서 재현이 쉽고 계산도 가볍습니다.
- 단점: DPO는 본질적으로 오프라인(offline)입니다 — 미리 고정된 선호 데이터로만 학습하며, 학습 중인 정책이 스스로 만든 응답을 새로 채점하는 on-policy 탐색이 없습니다. 그래서 학습이 진행되며 정책이 데이터 분포에서 벗어나는 분포 이동(distribution shift)에 민감하고, 과제에 따라 온라인 탐색을 하는 PPO보다 약할 수 있습니다.
DPO는 “보상 모델은 어차피 정책의 로그 비율로 표현되니, 굳이 따로 만들지 말자”는 재해석이다. 대가로 온라인 탐색을 포기하므로, 무거워도 강한 PPO와 가벼워도 오프라인인 DPO 사이의 트레이드오프가 된다.
실전 노트
- SFT는 형식을 가르친다: 지식은 사전학습에서 오고, SFT는 주로 스타일·페르소나·지시 이행 형식을 얹는다(표면적 정렬 가설·LIMA). 그래서 품질 > 양 — 소량의 정제된 시연이 대량의 잡음보다 낫다(Llama-2).
- 보상 모델 = Bradley-Terry: 사람이 하기 쉬운 “둘 중 나은 쪽” 비교를, 두 보상의 차이를 시그모이드에 넣어 연속 신호로 바꾼다. 스칼라 헤드를 단 LM이 사람 선호의 자동 채점기가 된다.
- RLHF는 KL 예산이 생명: 목적함수는 “보상 최대화 − β·KL(π‖π_ref)”. SFT 모델을 닻으로 붙잡지 않으면 보상만 노리다 문장이 무너진다. PPO로 최적화한다(디테일은 17강).
- reward hacking = Goodhart: 보상은 프록시일 뿐이라, 세게 최적화하면 프록시 보상↑·실제 보상↓. 과최적화 스케일링 법칙(Gao et al.)이 그 곡선을 정량화했고, β가 멈출 지점을 정한다.
- DPO는 RM을 없앤다: KL-정규화 최적 정책의 닫힌 형태를 이용해 보상을 정책의 로그 비율로 대체 → 보상 모델·RL 없는 분류 손실. 단순·안정하지만 오프라인이라 분포 이동에 약하고 PPO보다 약할 때가 있다.
- 선택 기준: 자원·안정성이 우선이면 DPO, 최고 성능과 on-policy 탐색이 필요하면 PPO. 둘은 같은 KL-정규화 목적을 다른 방식으로 푼다.
요약
- 정렬 = 원석을 어시스턴트로: 사전학습 모델은 지시를 따르지 않는다. 정렬은 SFT(지시 이행)와 RLHF(선호 반영)로 이를 길들이는 과정이다.
- SFT: 지시-응답 쌍의 모방. 형식·스타일을 가르치되(표면적 정렬 가설·LIMA) 시연을 넘어서거나 부정 신호로 배우지는 못한다 → RLHF 필요.
- 보상 모델: 선호 비교(
y_w ≻ y_l)를 Bradley-Terry(σ(R(x,y_w) − R(x,y_l)))로 확률화해, 스칼라 헤드 LM을 사람 선호의 프록시로 학습한다. - RLHF:
max_π E[R] − β·KL(π‖π_ref)를 PPO로 최적화. KL 제약이 붕괴를 막고, 보상은 프록시라 과최적화(Goodhart)에 취약 — β가 균형을 조절한다. - DPO: KL-정규화 최적 정책의 닫힌 형태로 보상을 정책의 로그 비율로 대체 → 보상 모델·RL 없는 분류 손실. 단순·안정하지만 오프라인이라는 트레이드오프.
SFT와 RLHF로 원석을 어시스턴트로 만들었습니다. 그런데 보상이 “학습된 프록시”라면 늘 해킹 위험이 있습니다 — 다음 강의는 보상을 아예 검증해 버리는 RLVR입니다.
다음 학습 (Next Learning)
- 16단계: 정렬 (2) — RLVR와 추론 모델 — CS336 16강 — 정렬 (2)
- CS336 14강 — 데이터 (2) — 직전 단계 (유닛 4 마무리)
- CS336 커리큘럼 — 전체 17단계 지도