DPO의 한 줄 수식도 부품별로 의심받은 적이 있다. 쌍은 꼭 필요한가, 로그확률의 합은 공정한가, 레퍼런스(학습 전 모델을 얼려 둔 기준)는 왜 있는가, 시그모이드는 왜인가. 그 의심 하나하나가 변형 알고리즘이 되었고, 가계도가 되었다.
GRPO에도 똑같은 일이 일어났다. DeepSeek-R1 이후 1년 남짓 동안 수많은 연구실이 GRPO를 수천 스텝, 수만 GPU 시간 규모로 돌렸고, 규모가 커지자 무해해 보이던 부품들이 삐걱거렸다. 틀린 답이 이유 없이 길어졌고, 정책이 한 가지 답으로 쏠려 새 답을 시도하지 않게 되었고, 큰 모델, 특히 MoE 모델은 학습 도중 무너져 되살아나지 않았다. 증상은 셋인데 목적함수에는 부품이 여럿이다. 어느 부품 탓일까? 이 장은 GRPO 목적함수를 다시 펼쳐 놓고 부품별로 무엇이 의심받았는지 따라간다.
식은 GRPO 논문의 관습대로 프롬프트(질문)를 q, 응답을 o로 적는다. 다른 장에서 쓰던 x, y 와 글자만 다르고 뜻은 같다.
그리고 목적함수 바깥의 부품 하나 — (h) ri,t의 분모 πold를 누가 계산하는가 — 가 2025년 후반의 가장 뜨거운 주제가 된다.
(a) 두 개의 나누기: Dr. GRPO는 길이와 표준편차를 뺐다
GRPO 목적함수에는 나누기가 두 번 나온다. 응답 길이 ∣oi∣로 한 번, 그룹(같은 프롬프트에 뽑은 응답 G개) 보상의 표준편차 σG로 한 번. 둘 다 크기를 맞추려는 무해한 정규화처럼 보인다. 정말 무해할까?
Dr. GRPO(Liu et al., “Understanding R1-Zero-Like Training: A Critical Perspective”, arXiv:2503.20783, 2025년 3월)는 GRPO의 두 나누기가 최적화 편향을 만든다고 지적했다.
길이로 나누기 1/∣oi∣. 한 응답의 모든 토큰이 같은 가중치(곱하는 수 — 신경망 파라미터가 아니다) w를 받으면, 그 응답의 그래디언트는 w⋅∇logπθ(oi) — 응답 전체의 로그확률을 w만큼의 크기로 민다. GRPO에서 w=A^i/(G∣oi∣)이므로 긴 응답일수록 약하게 밀린다.
정답(A^>0)이면 짧은 정답이 더 세게 강화된다.
오답(A^<0)이면 긴 오답이 더 약하게 억제된다.
틀릴 거면 길게 틀리는 편이 덜 혼나는 구조다. 논문은 이것을 응답 단위의 길이 편향이라 부르고, 학습 중 응답 길이가 계속 늘어나는 현상의 일부가 "추론이 깊어져서"가 아니라 오답이 길어져서일 수 있다고 봤다.
역사: 프리트레인 코드에서 건너온 나누기
길이로 나누기는 GRPO가 처음 들여온 것이 아니었다. Dr. GRPO 팀은 널리 쓰이던 공개 PPO 구현 몇 가지를 열어 보고, 그 모두가 손실을 응답 길이로 나누고 있음을 확인했다. PPO 논문의 목적함수에는 없는 나누기였고, GRPO가 나오기 전부터 코드에 있었다. 팀의 추측은 이렇다. 프리트레인 단계에서는 모든 토큰을 길이가 정해진 문맥에 꽉 채워 넣으므로, 손실을 문맥 길이로 나누는 loss.mean(-1) 은 사실상 상수로 나누는 것이어서 아무 해가 없었다. 같은 한 줄이 RL 코드로 옮겨 오자, 문맥 길이 대신 응답마다 다른 길이로 나누게 되었다. 무해한 상수가 응답마다 다른 수가 되면서 편향이 생긴 것이다. Dr. GRPO가 내놓은 고침도 그 한 줄을 「정해 둔 최대 생성 길이」라는 상수로 나누게 바꾸는 것이었다.
표준편차로 나누기 1/σG.(R−μ)/σ 는 보상 차이를 몇 배로 줄여도 그대로다. 그룹 안에서 보상이 얼마나 벌어졌는지는 지워지고, 그룹 안에서 몇 표준편차 떨어졌는지만 남는다. 정답이면 1, 오답이면 0을 주는 검증기 보상에서는 그룹의 σ가 맞힌 개수만으로 정해진다. 그래서 맞힌 개수마다 롤아웃(뽑은 응답 하나)이 평균으로 받는 학습 신호(시그널)의 크기를 그려 보면, σ로 나눌 때와 평균만 뺄 때의 모양이 다르다.
σ로 나누면 거의 다 맞히거나 거의 다 틀린 그룹이 덜 가라앉는다. 그룹 하나 안에서는 공평해 보여도, 그룹끼리 견주면 아주 쉽거나 아주 어려운 문제가 상대적으로 큰 무게를 받는다. 논문은 이것을 문제 난이도 편향이라 불렀다. 표준편차로 나누는 일 자체는 RL에서 흔한 요령이지만, 보통은 배치 전체로 나눈다. 프롬프트마다 따로 나누니 문제마다 무게가 달라진 것이다.
Dr. GRPO의 처방은 두 나누기를 모두 빼는 것이다. 길이 대신 상수(최대 생성 길이)로 나누고, 어드밴티지는 평균만 뺀다: A^i=Ri−μG. KL 항도 쓰지 않았다(β=0). 이렇게 학습한 Oat-Zero-7B(Qwen2.5-Math-7B 기반)는 A100(NVIDIA의 데이터센터용 GPU) 8장으로 27시간 학습해 AIME 2024(미국 수학 경시대회 AIME의 2024년 문제 30개, 점수는 정답률 %) 43.3점, 다섯 개 수학 벤치마크 평균 51.4점을 냈다. 같은 논문은 Qwen2.5와 DeepSeek-V3-Base가 RL 전부터 이미 “아하” 같은 자기 성찰 표현을 한다는 것도 보였다 — RL이 없던 행동을 만든다기보다 이미 있던 행동을 끌어올린다는 쪽의 증거다.
문제 1 — 길게 틀리면 덜 혼난다
그룹 G=4에서 두 오답의 길이가 50토큰과 500토큰이고 둘 다 A^=−1이다(나머지 두 응답은 정답이고, 길이는 역시 50토큰과 500토큰이다). GRPO에서 각 오답의 토큰 하나가 받는 가중치를 구하고, 길이에 공평한지 판단하시오. 위 위젯의 「문제 1 값」 단추를 누르면 이 그룹을 불러온다.
김민준
GRPO는 Â/(G·|o|)니까 짧은 오답은 −1/(4 × 50) = −0.005, 긴 오답은 −1/(4 × 500) = −0.0005. 열 배 차이요.
선생님
그런데 민준 학생, 응답 하나에 걸린 가중치를 전부 더하면요?
김민준
짧은 건 50 × 0.005 = 0.25, 긴 건 500 × 0.0005 = 0.25. 똑같네요! 그럼 응답 단위로는 공평한 거 아닌가요?
이서연
그 합이 뭘 뜻하는지가 문제야. 모든 토큰이 같은 w를 받으면 그래디언트는 w∑t∇logπθ(ot)=w∇logπθ(응답)이잖아. 응답의 로그확률을 미는 힘은 합이 아니라 w 자체야.
김민준
아, 합은 그냥 숫자를 더한 거고, 실제로 응답 확률에 걸리는 계수는 토큰당 w구나. 그럼 긴 오답의 확률은 열 배 약하게 눌리고.
선생님
그래요. 합이 같다는 게 “공평해 보이게” 만드는 착시예요. 위젯의 주황 막대가 그거죠.
김민준
조교님이 보고서 감점을 "페이지당 1점"으로 했으면 길게 쓴 사람이 유리했을 거란 얘기랑 같네요. 총 감점은 같아도 페이지 하나하나는 덜 깎이니까.
정리 GRPO: −0.005 vs −0.0005 (10배 차이). 모든 토큰이 같은 가중치 w를 받으면 그래디언트는 w∇logπθ(응답) — 응답 확률을 미는 힘은 합이 아니라 w다. 합이 0.25로 같은 것은 착시이고, 긴 오답은 열 배 약하게 억제된다.
문제 2 — 다 맞힌 반에서 혼자 틀리면
(가) 네 명씩인 두 반이 같은 퀴즈를 봤다. 가반은 100, 100, 100, 90점, 나반은 100, 60, 100, 60점이다. 반마다 (점수 − 반 평균) ÷ 반 표준편차로 표준점수를 매기면, 가반의 90점 학생과 나반의 60점 학생의 표준점수는 각각 얼마인가? (표준편차는 반 안 네 명으로 구한다.)
(나) 그룹 크기 G=8, 보상은 정답 1, 오답 0이다. 여덟 가운데 일곱이 맞은 그룹에서 틀린 응답의 A^와, 넷이 맞은 그룹에서 틀린 응답의 A^를 GRPO 식으로 구하시오.
김민준
가반은 평균 97.5, 표준편차 4.33이니까 90점은 (90 − 97.5)/4.33 = −1.73. 나반은 평균 80, 표준편차 20이라 60점은 −1이요.
김민준
어? 10점 깎인 학생이 40점 깎인 학생보다 표준점수가 더 낮아요.
선생님
표준점수가 재는 건 무엇이었죠?
이서연
반 안에서 몇 표준편차 떨어졌는가요. 점수 차이의 크기는 지워져요. 다 100점인 반에서 90점은 드문 일이라 크게 튀는 거고.
선생님
그럼 (나)를 볼까요.
이서연
일곱이 맞으면 평균 0.875, 표준편차 0.875×0.125=0.331이라 틀린 응답은 −0.875/0.331=−2.65. 넷이 맞으면 평균 0.5, 표준편차 0.5라 −1. 가반의 90점 학생이랑 같은 모양이네.
김민준
거의 다 맞힌 문제에서 혼자 틀린 응답이, 반반 맞힌 문제에서 틀린 응답보다 2.6배 넘게 세게 눌리는 거네요.
선생님
그래요. 그룹 하나만 보면 공평한 표준화인데, 그룹끼리 견주면 아주 쉬운 문제의 응답이 더 큰 무게를 받아요. Dr. GRPO가 문제 난이도 편향이라 부른 게 이것이고요.
이서연
통계 시간에 표준화를 하면 단위가 사라진다고 배웠는데, 단위만이 아니라 「차이가 얼마나 컸는지」까지 사라지는 거였네.
정리 (가) 가반 90점 −1.73, 나반 60점 −1. 표준점수는 반 안에서 몇 표준편차 떨어졌는지만 남기고 점수 차이의 크기를 지운다. (나) 일곱이 맞은 그룹의 오답 A^≈−2.65, 넷이 맞은 그룹의 오답 −1. 그룹마다 σ로 나누면 아주 쉽거나 아주 어려운 문제의 응답이 더 큰 무게를 받는다(문제 난이도 편향).