별도 비평 모델 없이 같은 질문에 답을 여러 개 만들고, 그 묶음 안에서 평균보다 나은 답은 더 자주, 못한 답은 덜 나오도록 학습시키는 강화학습 방법이다. 수학 정답이나 코드 테스트 통과처럼 맞고 틀림을 자동으로 채점할 수 있는 작업에서 언어 모델의 추론 능력을 키울 때 쓴다.
| 방법 | 학습 신호 | 필요한 것 | 잘 맞는 작업 |
|---|---|---|---|
| PPO | 보상 + 가치 모델 예측 | 정책 모델과 별도 비평 모델 | 범용 RLHF |
| DPO | 좋은 답·나쁜 답 쌍 | 선호 데이터 | 말투·선호 맞추기 |
| GRPO | 그룹 안 상대 점수 | 자동 채점 함수 | 수학·코드 추론 |
기존 PPO는 답이 얼마나 좋을지 가늠하는 가치 함수(critic)를 따로 학습해야 했다. 이 모델이 보통 정책 모델만큼 커서 메모리와 계산 비용이 크게 늘었다.
GRPO는 이 역할을 '같은 질문에 대한 다른 답들'로 대신한다. 그룹의 평균 점수가 기준선이 되므로 별도 모델 없이 학습 신호를 만든다. 대신 질문마다 답을 여러 개 생성해야 해서 생성 비용은 늘어난다.
DeepSeek이 DeepSeekMath(2024)에서 처음 제안했고, DeepSeek-R1에서 추론 능력을 크게 끌어올리는 데 쓰면서 주목받았다. R1에서는 정답 여부와 답 형식 같은 규칙 기반 보상만으로도 모델이 길게 생각하고 스스로 다시 검토하는 습관을 익혔다. 이후 공개 모델로 추론 모델을 만들 때 흔히 쓰는 출발점이 됐다.
Hugging Face TRL 라이브러리의 GRPOTrainer로 바로 해 볼 수 있다. 기본 흐름은 다음과 같다.
| 단계 | 할 일 |
|---|---|
| 1. 데이터 | 정답을 확인할 수 있는 문제를 모은다 |
| 2. 보상 함수 | 답을 받아 점수를 돌려주는 함수를 만든다 (정답이면 1, 형식을 지키면 가산점) |
| 3. 그룹 크기 | 질문당 답 개수 num_generations를 정한다. 보통 8~16개 |
| 4. 학습 | 원래 모델에서 너무 멀어지지 않게 하면서 반복 학습한다 |
그룹이 클수록 평균이 안정적이지만 생성 시간이 길어진다. 처음에는 작은 모델과 작은 그룹으로 보상 함수가 제대로 동작하는지부터 확인하는 게 좋다.
그룹 안의 답이 모두 맞거나 모두 틀리면 점수 차이가 없어 학습 신호가 사라진다. 너무 쉽거나 너무 어려운 문제는 걸러 내고, 모델이 가끔 맞히는 수준의 문제를 쓰는 게 효과적이다.
보상 함수의 허점도 조심해야 한다. 모델은 점수만 쫓기 때문에 형식만 맞추거나 답을 쓸데없이 길게 늘이는 식으로 점수를 얻을 수 있다. 정답 판정이 애매한 글쓰기나 대화 품질 같은 작업이라면 GRPO보다 DPO 같은 선호 학습이 더 다루기 쉽다.
가장 흔한 건 공개 모델을 추론 모델로 다듬는 것이다. 보상 함수만 코드로 짤 수 있으면 되므로, 정답을 확인할 방법이 있는 작업에 두루 쓴다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 수학 문제 풀이 | 최종 답이 정답과 같으면 1점을 주고, 풀이 과정을 길게 생각하도록 학습 |
| 코드 생성 | 생성한 코드를 테스트에 돌려 통과 여부를 보상으로 사용 |
| 정해진 출력 형식 | JSON 같은 형식을 지켰는지 검사하는 함수를 보상에 더해 형식 실수를 줄임 |
| 개인·연구용 실험 | TRL GRPOTrainer로 작은 모델과 작은 그룹부터 돌려 보상 설계를 검증 |