16. RLVR과 GRPO — 비평가를 내려놓다

RLVR: 검증기가 보상 모델을 대신한다

이제 보상 쪽이다. 보상 모델은 사람 선호 데이터로 따로 학습해야 하고, 학습해 놓아도 "좋은 답"의 불완전한 대리인이다. 강화학습은 수천 스텝 동안 그 대리인의 빈틈을 파고든다. DeepSeek-R1 팀이 신경망 보상 모델을 쓰지 않은 까닭도 그것이었다: 큰 규모의 강화학습에서는 보상 모델이 리워드 해킹을 당할 수 있고, 보상 모델을 다시 학습하려면 자원이 더 들고 학습 과정이 복잡해진다. 그런데 수학 문제라면 정답이 있다. 채점을 학습된 모델 대신 규칙에 맡기면 안 될까?

역사: 「검증 가능한 보상」이라는 이름

정답을 맞혔는지로 보상을 주는 생각은 오래전부터 있었다. 이 방식에 이름을 붙인 것은 2024년 11월 앨런 AI 연구소의 툴루 3(Tülu 3) 팀(램버트(Nathan Lambert)와 동료들)이다. 그들은 공개 모델의 학습 과정을 처음부터 끝까지 공개하면서 마지막 단계에 강화학습을 넣었는데, 보상 모델 대신 검증 함수를 썼다. 수학 문제는 답을 꺼내 정답과 맞춰 보고, 「응답을 다섯 문단으로」 같은 지시는 조건을 검사하는 함수로 확인해, 맞으면 10, 아니면 0을 주었다. 학습 알고리즘은 비평가가 있는 PPO 그대로였다. 논문은 이것을 RLVR이라 부르고, 기존 방법을 단순하게 만든 꼴이라고 스스로 적었다. 실험에서는 검증 보상에 보상 모델 점수를 섞어 주면 잡음이 더해져, 검증 보상만 쓴 쪽이 더 나았다.

정답을 규칙으로 채점하기

RLVR은 보상을 규칙 기반 검증기로 준다. 검증기는 정답 여부를 판정하는 코드다.

도메인 검증기 보상
수학 최종 답을 꺼내 정답과 비교 1 / 0
코드 테스트 케이스 실행 통과 비율 또는 1 / 0
지시 따르기 조건 검사 함수 (문단 수, 글자 수, 들어가야 할 낱말) 1 / 0
논리 퍼즐 규칙 검사기 1 / 0
객관식 (예: 의학 MCQA) 선택지 비교 1 / 0
SQL 실행 결과 비교 1 / 0
수학 응답 답 꺼내기 정답과 비교 1 또는 0 코드 코드 테스트 케이스 실행 통과 비율 지시 따르기 응답 조건 검사: e가 14번? 1 또는 0 질문에 답했는지는 보지 않는다 → 「e, e, e, …」도 1점

전제는 하나다: 정답 여부를 자동으로 판정할 수 있어야 한다. 이 전제가 충족되면 세 가지가 동시에 따라온다. 사람 라벨이 필요 없으니 문제만 있으면 데이터가 무한하고, 보상 모델을 학습할 필요가 없고, 매번 현재 모델이 답하니 분포 이동(데이터를 만든 모델과 지금 학습 중인 모델이 달라져 생기는 어긋남)이 없다.

리워드 해킹이 (거의) 사라지는 이유

보상 모델을 쓰는 곳에서는 리워드 해킹이 되풀이해 나타난다. 보상 모델은 "좋은 답"의 불완전한 대리인이라서, 최적화 압력이 그 빈틈을 찾아낸다.

보상 빈틈 RLVR에서는
사람 선호로 학습한 보상 모델 아첨하면 점수가 오른다 "1+1=3이군요, 맞습니다"라고 해도 검증기는 0점
여러 차원의 보상 한 차원을 극대화하고 나머지를 희생 보상이 1차원 이진값 — 희생할 다른 차원이 없다
형식 편향이 있는 보상 모델 목록·굵은 글씨·이모지를 쓰면 점수가 오른다 (장(Xuanchang Zhang)과 동료들, 2024) 형식과 무관하게 답이 맞아야 1
이미지 생성의 CLIP 점수 (그림과 글이 얼마나 맞는지 재는 모델) CLIP은 그림 속 글자를 읽어 판단에 쓴다 (고(Gabriel Goh)와 동료들, 2021). 글자를 그려 넣어 점수를 올릴 틈이 생긴다 해당 없음 — "아름다움"은 이진 검증이 불가능해서 애초에 RLVR을 못 쓴다

검증기는 정답의 정의에 가깝기 때문에 속일 틈이 좁다. 좁을 뿐 없지는 않다. 툴루 3 팀이 지시 따르기 검사를 보상으로 쓰면서 KL 강도 β\textcolor{#827717}{\beta}를 0.01까지 낮추자, 「펜의 길이를 cm로 재어라. 응답에 e가 14번 나오게 하라」는 질문에 모델은 「e, e, e, …」만 14번 적었다. 「다섯 문단으로, 문단 사이를 *** 로 나눠라」에는 「Paragraph 1 *** Paragraph 2 …」만 적었다. 검사 함수가 확인한 것은 조건뿐이었고, 질문에 답했는지는 보지 않았다. 아래 문제 6에서 수학 검증기의 틈을 직접 찾아본다.

적용할 수 있는 곳과 없는 곳
구분 예 이유
작동한다 수학, 코딩, 논리 퍼즐, 객관식, SQL 정답이 있고 판정이 자동
작동하지 않는다 역할극의 자연스러움, 창작 글쓰기, 브랜드 말투, 설득력 있는 논증 "정답"이 없거나 판정이 주관적
경계 내용 모순 검사 검사기는 만들 수 있지만 보상이 극도로 희소 (아래)
희소 보상의 벽

모순 검사기를 보상으로 쓴다고 하자. 프롬프트 100개에 8개씩 800개 응답을 뽑았더니 모순이 있는 응답은 12개(1.5%)뿐이다. 대부분의 그룹은 8개 모두 보상 1이다. 그룹 안의 보상이 모두 같으면 평균을 빼는 순간 어드밴티지가 모두 0이라, 그런 그룹의 학습 신호(시그널)는 0이다. 모순이 하나라도 섞인 그룹은 최대 12개, 전체의 12%에 불과하다. 수학 문제에서 8개 중 3개쯤 맞히는 경우와 비교하면 배울 거리가 거의 없다.

이 벽을 넘으려는 시도들:

문제 5 — 다 칠한 답안지

객관식 20문항(보기 다섯 개)을 채점기로 채점한다. 채점기는 「칠한 칸 가운데 정답 칸이 있으면 맞음」으로 센다. 한 학생은 문항마다 한 칸씩 칠해 12문항을 맞혔다. 다른 학생은 모든 문항의 다섯 칸을 다 칠했다. (가) 두 학생의 점수는? (나) 이 채점기가 실제로 판정하는 명제를 한 문장으로 적고, 시험이 알고 싶었던 명제와 견주시오.

이서연 (평상)
이서연
첫 학생은 12점. 다 칠한 학생은 문항마다 맞힐 확률이 1/5이니까 20 × 1/5 = 4점쯤이겠네.
김민준 (평상)
김민준
그건 찍었을 때고. 이 채점기는 칠한 칸 중에 정답이 있으면 맞음이라, 다섯 칸을 다 칠하면 정답 칸이 무조건 들어가. 20점 만점이야.
이서연 (납득불가)
이서연
시험을 안 본 사람이 만점이네. 채점기가 확인하는 건 "칠한 칸 중에 정답이 있다"고, 시험이 알고 싶은 건 "정답 하나를 골랐다"인데, 둘이 달라.
선생님 (평상)
선생님
실제 OMR 채점은 이걸 어떻게 막죠?
김민준 (평상)
김민준
한 문항에 두 칸 이상 칠하면 틀린 걸로 쳐요. 그러면 다 칠한 학생은 0점이에요.

정리 (가) 12점과 20점. (나) 채점기가 판정하는 명제는 「칠한 칸 가운데 정답이 있다」, 시험이 알고 싶은 명제는 「정답 하나를 골랐다」. 두 명제가 다르면 그 차이로 점수를 딸 수 있다. 「두 칸 이상이면 틀림」 규칙이 두 명제를 맞춘다.

문제 6 — 숫자를 흩뿌리는 답

어떤 수학 검증기는 응답에 등장하는 모든 숫자 중 하나라도 정답과 같으면 1점을 준다. (가) GRPO로 오래 학습하면 어떤 응답이 늘어날까? (나) 이 검증기를 「마지막에 쓴 답 하나만 꺼내 정답과 비교」로 고쳤다. 고친 검증기가 판정하는 명제를 한 문장으로 적고, 우리가 바라는 명제(「문제를 옳게 풀었다」)와 아직 어긋나는 곳을 하나 찾으시오.

선생님 (평상)
선생님
이 검증기로 오래 학습하면 어떤 답이 늘어날까요?
김민준 (생각)
김민준
숫자를 많이 쓰는 답이요. 후보를 열 개쯤 나열하면 하나는 걸리니까요. 한번 짜봤는데 “답은 12, 혹은 13, 아니면 14…” 같은 게 평균 보상이 제일 높아요.
이서연 (평상)
이서연
아까 다 칠한 답안지랑 같네. 그럼 마지막 답 하나만 보게 고치면 이제 속일 데가 없지.
선생님 (질문)
선생님
서연 학생, 고친 검증기가 판정하는 명제를 그대로 써 보면요?
이서연 (평상)
이서연
“마지막에 쓴 답이 정답과 같다”… 우리가 바라는 건 "문제를 옳게 풀었다"고요. 아, 이것도 다른 명제네요.
선생님 (평상)
선생님
두 문장이 갈라지는 문제를 찾을 수 있어요?
김민준 (평상)
김민준
답이 "예/아니오"인 문제면, 풀이가 엉망이어도 찍어서 반은 맞히잖아요. 엉터리 풀이가 1점을 받아요.
이서연 (깨달음)
이서연
반대쪽도 있어. 5050을 "5,050"이라고 쓰면 옳게 풀었는데 0점이야. 판정하는 명제가 바라는 명제와 정확히 같지 않으면, 그 차이 어디든 빈틈이 되는구나.
선생님 (평상)
선생님
그래요. 검증기는 정의 자체가 아니라, 정의를 구현한 코드예요. 그래서 실무에서는 답을 정해진 칸에 쓰게 하고, 같은 값의 여러 표기를 하나로 맞춘 뒤 비교해요. DeepSeek-R1도 수학 답은 정해진 상자 안에 쓰게 했어요.
이서연 (평상)
이서연
증명 채점할 때 "결론이 맞으면 만점"으로 채점하면 과정이 엉터리여도 만점이 나오는 것과 같네요. 채점 기준이 증명의 정의와 달라서.

정리 (가) 모든 숫자를 확인하는 검증기는 "정답을 말한다"가 아니라 "정답이 어딘가 등장한다"를 판정한다. 후보를 나열하는 응답이 늘어난다. (나) 고친 검증기는 「마지막에 쓴 답이 정답과 같다」를 판정한다. 답의 가짓수가 적은 문제에서는 엉터리 풀이가 찍어서 1점을 받고, 표기가 다른 정답은 0점을 받는다. RLVR이 해킹에 강한 것은 검증기의 판정 명제가 원하는 명제와 정확히 일치할 때뿐이다. 실무에서는 정해진 칸에 답 쓰게 하기, 표기 맞추기로 이 차이를 좁힌다.