다음 내용은 논문을 읽으면서 claude 에게 질문한 내용들을 토대로, 복기를 위해서 정리된 QA set 입니다.
RLHF에서 표준처럼 사용되는 PPO가 불필요하게 복잡하며, 더 단순한 REINFORCE 스타일 최적화(특히 RLOO)가 PPO와 DPO를 능가한다는 것을 보인다.
PPO는 TRPO보다 단순하지만, REINFORCE와 비교하면 여전히 복잡하다. 이 논문은 PPO를 TRPO가 아닌 REINFORCE와 비교한다.
PPO를 LLM RLHF에 적용하면 다음 요소들이 필요하다:
| 모델 | 역할 |
|---|---|
| Policy Model (π_θ) | 학습 대상 |
| Reference Model (π_ref) | KL 페널티 계산용 (frozen) |
| Reward Model (r_φ) | 생성된 응답 점수 매기기 |
| Value Model (V_ψ) | PPO의 Critic, 각 상태 가치 추정 |
각 토큰을 하나의 action, 각 부분 시퀀스를 state로 모델링해야 하며, 매 토큰마다 Value function 추정과 advantage 계산이 필요하다.
Clipping, 같은 배치에 대한 multiple epoch 업데이트, GAE의 λ 파라미터 튜닝 등이 포함된다.
Prompt: "서울 맛집 추천해줘"
시점 state (s_t) action (a_t)
─────────────────────────────────────────────────────────
t=0 "서울 맛집 추천해줘" → "강남"
t=1 "서울 맛집 추천해줘 강남" → "에"
t=2 "서울 맛집 추천해줘 강남에" → "있는"
t=3 "서울 맛집 추천해줘 강남에 있는" → "스시"
t=4 "서울 맛집 추천해줘 강남에 있는 스시" → "오마카세"
t=5 "... 스시 오마카세" → "를"
t=6 "... 오마카세를" → "추천합니다"
문제: Reward Model은 전체 시퀀스 완성 후에만 점수를 준다:
r_0 = 0, r_1 = 0, r_2 = 0, ... , r_6 = R(전체 시퀀스)
중간 토큰에 진짜 reward가 없는데, Value function으로 중간 상태의 advantage를 억지로 추정하는 셈이다.
데이터셋에서 prompt x를 뽑는다.
π_θ가 응답 y를 생성하면서 각 토큰의 log-probability를 저장한다.
π_ref(frozen SFT 모델)가 같은 생성 결과에 대한 log-probability를 계산하여 KL 페널티를 구한다:
전체 시퀀스에 대해 한 번 평가한 후, KL 페널티와 결합하여 KL-shaped reward를 만든다:
중간 토큰: r̃_t = 0 - β·KL_t (RM reward 없음, KL 페널티만)
마지막 토큰: r̃_T = r_φ(x,y) - β·KL_T (RM reward + KL 페널티)
별도의 신경망이 각 중간 상태에서 앞으로 받을 reward의 기대값을 추정한다.
Prompt x
│
▼
┌─────────────────┐
│ π_θ (Policy) │──→ 응답 y 생성 + log prob 저장
└─────────────────┘
│
┌──────────┼──────────┐
▼ ▼ ▼
┌────────────┐ ┌──────────┐ ┌──────────────┐
│ π_ref │ │ r_φ (RM) │ │ V_ψ (Critic) │
│ (frozen) │ │ │ │ │
│ KL 페널티 │ │ 시퀀스 │ │ 각 토큰별 │
│ 계산 │ │ 전체 점수 │ │ 가치 추정 │
└────────────┘ └──────────┘ └──────────────┘
│ │ │
└──────────┼────────────────┘
▼
KL-shaped reward → GAE → Advantage
│
┌────────┴────────┐
▼ ▼
π_θ 업데이트 V_ψ 업데이트
RLHF의 목적함수의 최적해를 닫힌 형태(closed-form)로 유도하면, reward를 policy로 표현할 수 있다:
이를 Bradley-Terry 선호 모델에 대입하면 직접 loss를 만들 수 있다:
→ RM 훈련 없이, RL loop 없이, 선호 데이터 (y_w, y_l)로 supervised learning처럼 바로 학습.
DPO의 Bradley-Terry 가정을 제거하고, log-ratio 차이를 정규화된 목표값에 regression하는 형태:
→ DPO의 overfitting 문제에 더 강건.
| 비교 항목 | 기존 RLHF (RL 있음) | DPO/IPO (RL-free) |
|---|---|---|
| 데이터 | Policy가 응답을 online sampling | 고정된 선호 데이터셋 사용 |
| Reward Model | 별도 훈련 필요 | 필요 없음 |
| 업데이트 방식 | Policy gradient | Supervised loss |
| 학습 루프 | Online iterative loop | 일반 fine-tuning처럼 한 번 학습 |
RL의 핵심 특징인 "자기가 생성한 데이터로부터 학습하는 online loop"가 없으므로 "RL-free"라 불린다.
데이터 비용이 아니라 distribution mismatch 문제이다.
학습 중 Policy가 "강남 맛집"만 추천하는 편향이 생겼다면:
Online RL: Policy가 "강남 맛집"을 생성 → RM이 낮은 점수 → 교정 가능
DPO: 학습 데이터에 이 패턴 관련 쌍이 없으면 → 발견 자체가 불가능
Policy가 변하면서 생기는 새로운 종류의 실수에 대한 피드백을 받을 수 없다.
| Online (학습 중 생성) | Offline (고정 데이터) | |
|---|---|---|
| RL 사용 | PPO, REINFORCE, RLOO | |
| RL 미사용 | DPO, IPO |
논문의 핵심 포지션: DPO/IPO는 RL을 버리면서 online의 장점까지 잃었고, PPO는 online이지만 불필요하게 복잡하다. REINFORCE/RLOO는 online RL의 장점을 유지하면서 PPO보다 훨씬 단순한 "sweet spot"이다.
현재 학습 중인 Policy 모델(π_θ)이 생성한 응답을 말한다. RM이 생성한 것이 아니다.
매 학습 스텝마다:
1. 현재 Policy (π_θ)가 prompt에 대해 응답 y를 생성 ← online sample
2. RM이 그 응답에 점수를 매김 ← RM은 평가만 함
3. 그 점수로 Policy를 업데이트
4. 업데이트된 Policy가 다시 새로운 응답 생성
... 반복
각 모델의 역할:
PPO가 원래 설계된 환경 (Atari, MuJoCo 로봇 등):
→ 따라서 PPO의 비용만 지불하고 실질적 이점은 적다.
reward가 항상 양수이면, 나쁜 응답의 확률도 올라가는 등 매 스텝의 gradient가 들쭉날쭉.
b를 빼면 평균보다 좋은 응답은 올리고, 평균보다 나쁜 응답은 내린다.
b를 빼도 gradient의 기대값은 변하지 않는다 (unbiased).
학습 전체에 걸친 reward의 평균. 별도의 파라미터나 신경망이 불필요 ("parameter-free").
같은 prompt에 대해 k개의 응답을 생성하고, 각 샘플의 baseline으로 나머지 샘플들의 reward 평균을 사용한다.
Prompt: "서울 맛집 추천해줘"
y₁ → R₁ = 0.9, baseline₁ = (0.6+0.1+0.7)/3 = 0.467, advantage = +0.433
y₂ → R₂ = 0.6, baseline₂ = (0.9+0.1+0.7)/3 = 0.567, advantage = +0.033
y₃ → R₃ = 0.1, baseline₃ = (0.9+0.6+0.7)/3 = 0.733, advantage = -0.633
y₄ → R₄ = 0.7, baseline₄ = (0.9+0.6+0.1)/3 = 0.533, advantage = +0.167
자기 자신을 baseline 계산에서 빼놓는다(leave one out) → 이름의 유래. 자기를 포함하면 bias가 생기기 때문.
| REINFORCE | RLOO | |
|---|---|---|
| prompt당 샘플 | 1개 | k개 |
| baseline | 전체 moving average | 같은 prompt의 다른 샘플들 |
| gradient 정밀도 | 노이즈 큼 | 평균으로 노이즈 감소 |
| 추가 비용 | 거의 없음 | k배 생성 비용 (but Value network보다 쌈) |
| 편향 | unbiased | unbiased |
k개 전부의 gradient를 평균내서 한 번 업데이트한다 (하나만 고르지 않음):
Value function으로 bootstrapping하여 분산을 줄인다:
실제 return: R = r₁ + r₂ + r₃ + ... + r_T (끝까지 다 봐야 함)
Bootstrapping: R ≈ r₁ + V(s₂) (중간에서 Value function으로 추정)
→ 분산은 줄지만, V(s₂)가 부정확하면 bias 발생.
Monte-Carlo 추정으로 실제 return을 그대로 사용 → unbiased, 하지만 분산이 클 수 있음.
REINFORCE는 큰 action space(NLP vocab: 수만 개)에서 분산이 너무 커서 실패한다.
기존 연구들은 랜덤/약한 초기화에서 시작했다. RLHF는 강력한 pre-trained 모델에서 warm-start하므로 분산이 자연스럽게 낮다:
랜덤 초기화: P("강남")=0.00003, P("ㅋㅋ")=0.00004 → 분산 극대
SFT 모델: P("강남")=0.15, P("홍대")=0.12 → 분산 작음
λ → 0: bias 높음, variance 낮음 (Value function에 크게 의존)
λ → 1: bias 낮음, variance 높음 (Monte-Carlo에 가까움)
RLHF처럼 안정적인 환경에서는 λ=1이 최적 (논문 Figure 1에서 확인).
| Vanilla PG (λ=1) | REINFORCE (이 논문) | |
|---|---|---|
| 적용 단위 | 토큰 레벨 | 시퀀스 레벨 |
| State | 매 토큰의 부분 시퀀스 | prompt 전체 (한 번) |
| Action | 각 토큰 | 전체 생성 시퀀스 |
| Baseline | b_φ(s_t) — 학습된 네트워크 | moving average (숫자 하나) |
| 부분 시퀀스 모델링 | 필요 | 불필요 |
| Value network | 필요 | 불필요 |
| PPO (λ<1) | Vanilla PG (λ=1) | REINFORCE | RLOO | |
|---|---|---|---|---|
| 적용 단위 | 토큰 | 토큰 | 시퀀스 | 시퀀스 |
| Bootstrapping | O | X | X | X |
| Bias | O | X | X | X |
| Value network | 필요 | 필요 | 불필요 | 불필요 |
| Clipping | O | X | X | X |
| Online | O | O | O | O |
논문 Section 5.1 실험 결과: REINFORCE가 Vanilla PG와 같거나 더 좋음 → 부분 시퀀스 모델링은 RLHF에서 불필요한 복잡성.
바깥 기대값과 같은 분포이므로 합쳐서:
단순한 정의 치환으로, 수학적으로 완전히 동일한 식이다.