GRPO — 보상 모델 없이 그룹 상대 비교로 최적화

GRPO

DeepSeekMath 논문에서 소개된 **GRPO(Group Relative Policy Optimization)**는 PPO의 변형이에요. PPO가 값 함수(value function)를 학습해 어드밴티지를 추정해야 하는 반면, GRPO는 같은 프롬프트에 대해 여러 개의 완성을 생성하고 그룹 안에서 상대 비교로 어드밴티지를 계산해요. 그래서 메모리를 아끼고 수학·추론 과업에서 특히 강해요.

네 단계로 보는 GRPO

  1. 완성 생성: 배치의 프롬프트마다 여러 개의 완성을 샘플링.
  2. 어드밴티지 계산: 보상 모델/함수로 각 완성의 점수를 매기고, 그룹(같은 프롬프트의 완성들) 안에서 정규화해 상대적 어드밴티지를 얻어요. 여기서 '그룹 상대'라는 이름이 나와요.
  3. KL 추정: 참조 정책과의 KL 발산을 슐만 근사로 추정.
  4. 손실 계산: 어드밴티지를 키우되 KL로 참조 정책에서 멀어지는 걸 페널티.

퀵스타트

수학 데이터로 보상 함수만 넣고 바로 훈련할 수 있어요.

from datasets import load_dataset
from trl import GRPOTrainer
from trl.rewards import accuracy_reward

dataset = load_dataset("trl-lib/DeepMath-103K", split="train")
trainer = GRPOTrainer(
    model="Qwen/Qwen2.5-0.5B-Instruct",
    reward_funcs=accuracy_reward,
    train_dataset=dataset,
)
trainer.train()

주의할 점

  • scale_rewards=False로 설정하면 질문 난이도 편향을 줄일 수 있어요.
  • GRPO는 온라인 학습이라 훈련 중 모델이 스스로 생성한 데이터로 개선돼요. DeepSeek-R1류 추론 모델 훈련의 표준처럼 자리 잡았어요.

더 알아보기