모델 운영

MLOPS / 77번째 글

보상 모델 만들기 — 점수를 매기는 모델을 학습시킨다

검증기를 짤 수 없는 과제에서는 점수를 매기는 모델을 따로 학습합니다. 구조와 손실이 무엇을 최적화하는지, 데이터 일치도를 왜 먼저 재야 하는지, 그리고 보상은 오르는데 답이 나빠지는 지점을 어떻게 잡아내는지 정리합니다.

PALDYN Team13 MIN READ

지난 글에서 검증기로 채점할 수 있는 과제의 경계를 그었다. 그 경계 밖 — 요약이 잘 됐는지, 상담 답변이 적절한지, 문서의 어조가 우리 회사 같은지 — 에는 실행해 볼 것도 맞춰 볼 정답도 없다. 그렇다고 사람이 학습 스텝마다 점수를 매길 수는 없다. 한 스텝에 수백 개가 나오고 스텝은 수만 번이다.

그래서 사람의 판단을 한 번 모아 그것을 흉내 내는 모델을 만든다. 이것이 보상 모델(reward model)이다. 답을 넣으면 점수 하나를 내놓고, 그 점수가 강화학습의 보상이 된다.

구조는 단순하다

보상 모델은 대개 언어 모델을 그대로 쓰고 마지막 층만 바꾼다. 다음 토큰의 확률 분포를 내놓던 자리에 스칼라 하나를 내놓는 층을 붙이는 것이다. 이 층을 점수 헤드라 부른다. 입력은 프롬프트와 답을 이어 붙인 문자열이고 출력은 실수 하나다.

같은 모델에 두 번 넣고 차이를 본다

학습은 선호 쌍으로 한다. 고른 답 ywy_w 와 버린 답 yly_l 을 각각 넣어 점수 rwr_w 와 rlr_l 을 얻고, 둘의 차이가 커지도록 민다.

L=−log⁡σ(rθ(x,yw)−rθ(x,yl))\mathcal{L} = -\log \sigma\left(r_\theta(x, y_w) - r_\theta(x, y_l)\right)

이 손실을 브래들리-테리 손실이라 부른다. 두 후보 중 하나가 이길 확률을 두 점수의 차이로 설명하는 오래된 통계 모형에서 왔다.

여기서 반드시 알고 넘어갈 성질이 하나 있다. 손실에 들어가는 것은 차이뿐이라 점수의 절댓값에는 의미가 없다. 어떤 프롬프트에서 좋은 답이 8점을 받고 다른 프롬프트에서 좋은 답이 1점을 받는 일이 얼마든지 생긴다. 그래서 보상 모델의 점수로 「이 답은 8점짜리」라고 말할 수 없고, 프롬프트가 다른 답끼리 비교해서도 안 된다. 앞 글의 GRPO가 무리를 같은 프롬프트에서 뽑는 이유가 여기에도 걸린다.

데이터가 모델의 상한이다

보상 모델의 성능은 대체로 데이터에서 결정된다. 그런데 선호 데이터에는 정답이 없다. 사람 둘에게 같은 쌍을 보여 주면 상당한 비율로 갈린다.

그래서 데이터를 모으기 전에 일치도부터 잰다. 같은 쌍 200개를 두 사람에게 각각 보여 주고 답이 얼마나 겹치는지 세면 된다. 이 값이 우리 데이터의 상한이다.

두 사람의 일치 비율 무슨 뜻인가 무엇을 하나
0.85 이상 기준이 뚜렷하다 그대로 모은다
0.70~0.85 보통 수준 갈린 쌍을 빼고 쓴다
0.70 미만 기준이 없는 것이다 가이드라인부터 다시 쓴다

마지막 줄이 중요하다. 일치도가 낮은 상태에서 데이터를 열 배로 늘려도 보상 모델은 좋아지지 않는다. 사람도 못 가르는 것을 모델이 가를 수는 없기 때문이다. 이럴 때는 「무엇이 좋은 답인가」를 문장으로 적는 일 — 채점 가이드라인 — 이 먼저다. 가이드라인을 고치고 일치도를 다시 재는 순환이 데이터 수집의 실제 작업이다.

그리고 앞서 DPO에서 말한 두 규칙이 그대로 적용된다. 두 답은 같은 모델이 같은 프롬프트에서 낸 것이어야 하고, 길이를 맞춰야 한다. 이것을 어기면 보상 모델이 「좋은 답」이 아니라 「긴 답」이나 「특정 모델의 문체」에 점수를 준다. 그리고 정책이 그 점수를 최대화하므로, 학습이 끝난 모델은 정확히 길고 그 문체인 답을 낸다.

학습 설정

값 자체는 평범하다. 어려운 것은 언제 멈출지 아는 쪽이다.

  • 베이스 모델은 SFT를 끝낸 것을 쓴다. 정책이 낼 법한 답을 이미 이해하는 모델이어야 그 답들을 잘 가른다
  • 크기는 정책과 같거나 작아도 된다. 다만 너무 작으면 미묘한 차이를 못 가르고, 그 자리를 길이 같은 표면적 신호가 채운다
  • 에포크는 1이다. 선호 데이터는 두 번째 에포크에서 대개 외운다
  • 학습률은 SFT보다 작게. 10−610^{-6} 대에서 시작한다
  • 지표는 검증 쌍의 정확도 — 보상 모델이 사람과 같은 쪽을 고른 비율이다. 앞에서 잰 사람 사이의 일치도가 이 값의 천장이므로, 일치도가 0.8인데 정확도가 0.95면 잘된 것이 아니라 어딘가 새고 있는 것이다

새는 곳으로 가장 흔한 것이 길이다. 검증 쌍에서 「긴 쪽을 고른다」는 규칙만으로 얻는 정확도를 함께 계산해 두면 바로 보인다. 그 값이 0.72인데 우리 모델이 0.74라면, 모델은 사실상 길이만 보고 있는 것이다. 이 한 줄짜리 대조군이 보상 모델 평가에서 가장 값싸고 효과적인 점검이다.

보상은 오르는데 답이 나빠질 때

보상 모델을 쓰는 학습의 핵심 위험은 하나로 요약된다. 보상 모델은 학습 때 본 답의 범위에서만 믿을 수 있는데, 정책은 그 범위를 벗어나는 방향으로 학습한다.

보상은 계속 오르는데 답은 나빠진다

강화학습은 점수를 최대화하는 지점을 찾는다. 그 지점이 보상 모델이 잘 아는 영역 안에 있으면 좋은 답이지만, 밖에 있으면 보상 모델이 우연히 높은 점수를 주는 이상한 답이다. 학습이 길어질수록 정책은 그런 지점을 찾아낸다. 이것이 앞 글에서 말한 보상 해킹이고, 검증기와 달리 보상 모델에는 그 빈틈이 반드시 있다.

곡선 하나만 보면 성공으로 보인다는 점이 이 실패를 위험하게 만든다. 대응은 겹쳐서 쓴다.

  • KL 항을 살린다. 참조 모델에서 멀어지는 것을 막는 것이 곧 보상 모델의 학습 범위를 벗어나지 않는 것이다. RLVR과 달리 여기서는 β\beta 를 0으로 두면 안 된다
  • 사람 평가를 주기적으로 끼워 넣는다. 체크포인트마다 답 100개를 사람이 훑는다. 위 그림의 두 곡선을 실제로 그려 보는 유일한 방법이다
  • 보상 모델을 여럿 두고 가장 낮은 점수를 쓴다. 서로 다른 시드로 학습한 세 개를 두면 빈틈의 위치가 서로 다르므로, 최솟값을 쓰면 어느 하나의 빈틈으로 달아나기 어려워진다
  • 다시 모아 다시 학습한다. 지금 정책이 내는 답으로 새 선호 쌍을 모아 보상 모델을 갱신한다. 학습 범위를 정책 쪽으로 옮기는 것이라 가장 근본적인 대응이고, 그래서 실무에서는 이 순환을 몇 바퀴 돌린다

어떤 보상 모델을 만들 것인가

같은 이름 아래 성격이 꽤 다른 것들이 있다. 고르는 기준은 무엇을 채점하고 싶은가다.

갈래 채점 대상 어울리는 자리
결과 보상 모델 최종 답 하나 대화·요약처럼 결과만 있는 과제
과정 보상 모델 풀이의 각 단계 여러 단계를 거치는 추론
생성형 심판 점수와 이유를 글로 낸다 기준을 문장으로 적어 둘 수 있을 때
규칙 혼합 모델 점수 + 규칙 점수 지켜야 할 제약이 분명할 때

과정 보상 모델은 신호가 촘촘하다는 것이 장점이다. 답이 틀렸을 때 어디서부터 틀렸는지를 알려 주므로, 마지막에만 0점을 주는 방식보다 학습이 빠르다. 대신 단계마다 라벨이 필요해 데이터 비용이 몇 배가 된다.

생성형 심판은 다루기 쉬운 대신 느리다. 점수 헤드 대신 큰 모델에게 기준을 주고 판정을 받는 방식이라 별도 학습이 없고 기준을 고치기도 쉽지만, 채점 한 번이 생성 한 번이라 강화학습 루프에 넣기에는 비싸다. 그래서 학습 보상보다는 평가 쪽에서 더 많이 쓴다.

마지막 줄이 실무에서 가장 흔한 구성이다. 앞 글에서 만든 규칙 기반 점수를 보상 모델 점수와 더해 쓰면, 규칙이 지켜지는 범위 안에서만 모델 점수를 최대화하게 된다. 규칙이 울타리를 치고 모델이 그 안에서 품질을 재는 모양이다.

정리

보상 모델은 사람의 판단을 학습 루프 안으로 들여오는 장치이고, 그래서 사람의 판단이 얼마나 일관됐는지가 그대로 상한이 된다.

  • 데이터를 모으기 전에 사람 사이의 일치도를 재고, 낮으면 가이드라인부터 고친다
  • 검증 쌍 정확도와 함께 「긴 쪽을 고르는 규칙」의 정확도를 계산해 둔다
  • 점수의 절댓값을 믿지 않는다. 같은 프롬프트 안에서만 비교한다
  • KL 항을 살리고, 체크포인트마다 사람이 답을 훑고, 정책이 변하면 보상 모델을 다시 학습한다

여기까지 세 글이 모두 모아 둔 데이터가 있다는 전제 위에 있었다. 다음 글에서는 그 데이터를 사람이 아니라 모델로 만드는 방법을 다룬다.


읽어주셔서 감사합니다. 😊

LATEST

모델 운영의 최신 글

모델 운영2026.09.04

KV 캐시 양자화 — 가중치보다 이쪽이 먼저 넘친다

긴 문맥에서 GPU 메모리를 실제로 잡아먹는 것은 가중치가 아니라 KV 캐시입니다. 캐시 크기를 계산하는 법, K와 V를 다르게 다뤄야 하는 이유, 어디까지 줄여도 되는지를 정리합니다.

16 MIN
모델 운영2026.09.04

양자화 보정 — 데이터 128개가 모델 품질을 정한다

양자화에서 스케일을 정하는 절차가 보정입니다. 무엇을 재는지, 데이터를 어디서 몇 개 뽑아야 하는지, 자르는 지점을 어떻게 고르는지, 그리고 잘못된 보정이 어떤 모양으로 드러나는지를 정리합니다.

21 MIN
모델 운영2026.09.03

과제 특화 증류 — 큰 모델의 답을 작은 모델에 옮긴다

범용 성능이 아니라 우리 과제 하나만 잘하는 작은 모델을 만드는 방법입니다. 교사에게 무엇을 받아야 하는지, 데이터를 어떻게 모으고 거르는지, 손익 분기가 어디인지를 정리합니다.

15 MIN