GRPO(Group Relative Policy Optimization)는 동일한 문제에서 생성된 답변들의 보상을 비교하여 LLM(대규모 언어 모델)을 업데이트하는 기법입니다. 구현 내용을 살펴볼 때는 어떤 답변들을 같은 그룹으로 묶을지, 보상으로부터 무엇을 계산할지, 그 값을 어떤 손실 함수에 전달할지를 나누어 생각하면 이해하기 쉽습니다.
본 글에서는 DeepSeekMath의 원 논문 v3 중, 전체 답변에 하나의 보상을 부여하는 방식을 다룹니다. 학습 코드 실행 순서가 아니라, 논문과 구현을 대조하기 위한 기술 메모입니다. 모델의 학습이나 성능 측정은 진행하지 않았습니다.
GRPO의 기초부터 PPO(방식의 급격한 업데이트를 억제하는 강화학습 기법) 및 DPO와의 차이점, 원 논문의 평가 결과까지의 설명은 블로그의 GRPO 해설에 정리되어 있습니다. 여기서는 계산과 구현 설정의 대조에 초점을 맞춥니다.
가치 모델을 생략해도 채점은 남아있다
GRPO는 PPO에서 사용되는 가치 추정(Value Estimation)을, 동일 문제에 대한 답변 그룹으로부터 얻는 비교 기준으로 대체합니다. 여기서 방식(Policy)이란 입력에 대해 무엇을 생성할지에 대한 확률적 규칙입니다.
| 역할 | 입출력 관점 | 구현 내용을 읽을 때 확인할 점 |
|---|
| 방식 모델 (Policy Model) | 문제로부터 답변을 생성함 | 어떤 가중치를 업데이트하는가 |
| ... | | |
| PPOの価値推定とGRPOの回答群比較の違い | | |
DeepSeekMath의 개념을 기반으로 작성한 자체 다이어그램입니다. 참조 방식(Reference Policy) 등, 업데이트 제약에 필요한 역할은 생략했습니다.
원 논문의 실험에서는 보상 모델(Reward Model)을 사용합니다. '가치 모델이 불필요하다'는 설명만 듣고 채점까지 필요 없다고 해석하면 구성에 오류를 범할 수 있습니다. 또한, 가치 모델이 없는 부분의 부담 감소와 다중 답변 생성 비용은 별도로 산정해야 합니다. DeepSeekMath・제4절
배열 길이보다 문제별 대응 관계를 확인한다
원 논문의 전체 답변을 채점하는 방식에서는, 답변
여기부터는 자체 교재 예시입니다. 보상이 [1, 1, 0, 0]이라면, 평균은 0.5입니다. 답변 수 4로 나누어 계산하는 **모표준편차(母標準偏差)**를 사용하면 분산은 0.25, 표준편차는 0.5가 되며, 어드밴티지(Advantage)는 [1, 1, -1, -1]이 됩니다.
4回答の報酬から相対評価を求める計算例
모표준편차를 사용한 자체 산술 예시입니다. 특정 라이브러리의 출력을 재현한 것은 아닙니다.
수치가 일치하지 않는 경우에는 평균이나 그룹화뿐만 아니라, 표준편차의 정의도 확인해야 합니다. 같은 네 개의 보상이라 하더라도, 분산의 분모를 3으로 하면 표준편차는 약 0.577이 되고, 어드밴티지의 절대값은 약 0.866으로 바뀝니다. 작은 그룹에서는 이 차이를 반올림 오차로 간과해서는 안 됩니다.
다른 문제를 섞으면 존재하지 않던 우열이 생긴다
다음 두 가지 문제를 생각해 봅시다.
| 문제 | 보상 | 문제 내 평균과의 차이 |
|---|
| P | [1, 1] | |
[0, 0] | | |
| Q | [0, 0] | |
[0, 0] | | |
문제별로 보면 어느 쪽도 답변 간의 우열은 없습니다. 그런데 네 개의 답변을 모아 평균 0.5로 처리하면, P의 답변은 정답(Positive)이 되고 Q의 답변은 오답(Negative)이 됩니다. 같은 문제의 답변 비교가 문제 간의 점수 비교로 바뀌어 버립니다.
저는 처음에 적은 양의 데이터로 '문제 ID・답변 ID・원본 보상・평균을 뺄 범위'를 나열하며 확인합니다. 분산 계산 코드가 정확하더라도, 생성 결과와 문제 ID의 대응이 무너지면 이 비교는 성립하지 않기 때문입니다.
동점 그룹은 제로 나누기 대책만으로는 해결되지 않는다
[1, 1, 1, 1]도 [0, 0, 0, 0]도 평균과의 차이와 표준편차는 0입니다. 위의 공식은 그대로는 정의되지 않으므로, 분모에 작은 값을 더하는 등의 대책이 필요합니다. 하지만, 분모를 안전하게 계산할 수 있더라도, 분자가 모두 0이라면 그룹 내의 우열을 얻을 수 없습니다.
全回答が同点なら優劣を計算できないことを示す図
자체 동점 예시입니다. 여기서 손실되는 것은 상대적 보상에 의한 신호이며, 다른 손실 항에 의한 업데이트까지가 반드시 0인 것은 아닙니다.
이러한 상태를 발견했다면, 원인을 답변의 실제 내용과 대조해봅니다.
| 관측 | 확인할 것 | 성급하게 판단하지 않기 위한 주의점 |
|---|
| 모든 답변이 만점 | 문제가 너무 쉽지 않은지, 채점이 관대하지 않은지 | 만점만으로는 답변의 정당성을 보장할 수 없다 |
| ... | | |
TRL(언어 모델 추가 학습용 라이브러리) 공식 문서에는, 보상의 표준편차가 0이 되는 그룹에 속하는 샘플의 비율을 나타내는 frac_reward_zero_std | | |
| 가 기재되어 있습니다. 평균 보상만 보는 것보다 위와 같은 실제 사례와 함께 진단할 수 있습니다. TRL: GRPO Trainer | | |
오래된 방식과 참조 방식은 다른 비교 기준이다
상대적 보상을 계산했다고 해서 모델의 업데이트식 전체를 확인한 것은 아닙니다. 원 논문에는 확률비 클리핑(큰 변화를 목적 함수 상에서 억제하는 처리)과 KL 다이버전스(확률 분포 간의 차이 지표)에 의한 제약이 있습니다.
| 기호상의 역할 | 비교 대상 | 확인하는 이유 |
|---|
| 학습 대상 정책 (Policy) | 업데이트 중인 모델 | 기울기(Gradient)를 통해 무엇을 변경할지 특정하기 |
| ... | | |
| 과거의 정책과 참조 정책이 존재하는 경우, 같은 가중치라도 업데이트 과정에서 어느 것을 유지하거나 업데이트하는지는 구분하여 읽어야 합니다. 또한, 클리핑은 확률 자체에 강제적인 상한을 설정하는 메커니즘이 아닙니다. 긍정적인 어드밴티지(Advantage)를 부여하더라도 공유되는 가중치나 다른 손실 항의 영향이 있기 때문에, 개별 답변 확률이 반드시 일정량 증가한다고 말할 수 없습니다. DeepSeekMath・4.1.1절 | | |
'GRPO 사용'에서 한 단계 구체적인 실험 기록으로
2026년 9월 14일에 확인한 TRL 문건에서는 KL 항의 계수 beta는 기본값(default)이 0이며, loss_type은 기본값이 dapo입니다. 원 논문과 같은 이름의 Trainer라도 기본 설정이 원 논문의 목적 함수와 일치한다고 보장할 수 없습니다. TRL: GRPO Trainer
재현 실험에서는 다음 표를 채우면 비교 조건을 설명하기가 더 쉬워집니다. 이는 본 기사의 제안이며 측정 결과는 아닙니다.
| 기록할 항목 | 기록이 없을 때 알 수 없는 차이점 |
|---|
| 라이브러리 버전 및 설정 파일 | 기본값이나 계산 방법의 변경 |
| ... | |
| 제가 이 방법을 읽으면서 흥미롭게 느끼는 부분은, 비교 기준을 답변 그룹에서 만들기 때문에 답변 생성과 채점 설계가 그대로 학습 신호의 질에 관여한다는 점입니다. 수식 이해를 구현 확인으로 연결하려면, 우선 몇 그룹의 원시 데이터를 추적하며 상대 평가가 어디서 생겨나고 어디서 사라지는지를 보는 것이 좋은 출발점이라고 생각합니다. | |
참고 자료
- Zhihong Shao 외: DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models v3
- Hugging Face: TRL GRPO Trainer
그림과 계산 예시는 설명용으로 자체 제작한 것입니다. 원 논문의 도판 및 코드는 전재하지 않았습니다.
Discussion