<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://www.wonbeomjang.kr/feed.xml" rel="self" type="application/atom+xml"/><link href="https://www.wonbeomjang.kr/" rel="alternate" type="text/html" hreflang="ko"/><updated>2026-09-01T04:54:48+00:00</updated><id>https://www.wonbeomjang.kr/feed.xml</id><title type="html">blank</title><subtitle>SK텔레콤 LLM Research Engineer 장원범입니다. LLM 학습, 평가, 데이터 설계에 대해 공부하고 공유합니다. </subtitle><entry><title type="html">reward를 어떻게 설계할 것인가 — RM 설계 실무</title><link href="https://www.wonbeomjang.kr/blog/2026/reward-model-design/" rel="alternate" type="text/html" title="reward를 어떻게 설계할 것인가 — RM 설계 실무"/><published>2026-08-11T01:02:00+00:00</published><updated>2026-08-11T01:02:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/reward-model-design</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/reward-model-design/"><![CDATA[<blockquote> <p>이 글은 특정 논문 한 편이 아니라, 이 시리즈 61편이 쌓은 결론을 <strong>“내가 reward를 설계한다면 어떤 순서로 결정할까”</strong>라는 하나의 절차로 압축한다. 각 결정마다 근거가 된 편으로 링크를 건다.</p> </blockquote> <h1 id="introduction">Introduction</h1> <p><a href="/blog/2026/frontier-reward-design/">#59</a>가 프론티어 모델들이 <strong>실제로 무엇을 골랐는지</strong>를 관찰했다면, 이 글은 반대 방향이다 — <strong>내가 처음부터 reward 시스템을 설계한다면 어떤 순서로 결정을 내려야 하는가.</strong> 앞의 61편이 부품(논문 한 편이 문제 하나에 답한 것)이고 #59이 사례집이라면, 이 글은 그 둘을 겹쳐 만든 <strong>설계 절차서</strong>다.</p> <p>reward 설계에서 초심자가 가장 자주 하는 실수는 “좋은 reward model을 학습시키자”부터 시작하는 것이다. 하지만 시리즈 전체가 반복해서 보여준 교훈은 정반대다.</p> <ul> <li><strong>학습된 RM은 근사이고, 근사에는 반드시 hacking당하는 지점이 있다</strong>(<a href="/blog/2026/reward-model-overoptimization/">#10</a>).</li> <li>그래서 <strong>“굳이 RM을 학습시키지 않아도 되는 경우”를 먼저 걸러내는 것</strong>이 설계의 1단계다(<a href="/blog/2026/deepseek-r1/">#33</a>).</li> <li>RM이 꼭 필요한 경우에도, <strong>reward의 질은 함수보다 데이터와 프롬프트 선택에서 더 크게 갈린다</strong>(<a href="/blog/2026/secrets-rlhf-reward-modeling/">#5</a>, <a href="/blog/2026/skywork-reward/">#6</a>).</li> </ul> <p>이 글은 다음을 순서대로 다룬다.</p> <ol> <li>reward를 조달하는 네 가지 방법과 각각의 비용 (Background)</li> <li>도메인 진단부터 검증까지, 7단계 설계 절차 (Method)</li> <li>절차를 실제 예제(안전성 정렬 어시스턴트)에 적용해보기 (Experiments)</li> <li>한 장으로 압축한 설계 체크리스트와 한계 (Conclusion)</li> </ol> <h1 id="background">Background</h1> <h2 id="reward-조달처-네-가지">reward 조달처 네 가지</h2> <p><a href="/blog/2026/frontier-reward-design/">#59</a>에서 세운 4분류를, 이번엔 <strong>“내가 고를 때의 비용과 위험”</strong> 관점으로 다시 본다.</p> <table> <thead> <tr> <th>조달처</th> <th>언제 쓰나</th> <th>장점</th> <th>비용·위험</th> <th>근거 편</th> </tr> </thead> <tbody> <tr> <td>① 규칙 기반 verifiable reward</td> <td>정답을 프로그램으로 판정 가능 (수학·코드)</td> <td>파라미터 0 → hacking 불가, 학습 비용 0</td> <td>검증 가능한 도메인에만 적용</td> <td><a href="/blog/2026/deepseek-r1/">#33</a></td> </tr> <tr> <td>② 스칼라 RM (reference 없음)</td> <td>선호 쌍만 있고 채점 기준이 흐릿할 때</td> <td>어떤 도메인이든 적용, 빠른 추론</td> <td>근사 오차 → overoptimization, 편향</td> <td><a href="/blog/2026/bradley-terry-rethinking/">#4</a>~<a href="/blog/2026/rewardbench-2/">#9</a></td> </tr> <tr> <td>③ reference 기반 judge</td> <td>정답 예시 + 채점 기준(rubric)이 있을 때</td> <td>해석 가능, 기준을 명시적으로 주입</td> <td>판정 모델 추론 비용, judge 편향</td> <td><a href="/blog/2026/prometheus-2/">#34</a></td> </tr> <tr> <td>④ generative RM (self-critique)</td> <td>기준은 있으나 정답 예시가 없을 때</td> <td>근거를 생성 → 검증·디버깅 가능</td> <td>추론 비용 큼, judge도 뚫릴 수 있음</td> <td><a href="/blog/2026/deepseek-grm-spct/">#38</a>, <a href="/blog/2026/one-token-to-fool-judge/">#43</a></td> </tr> </tbody> </table> <p>핵심 직관은 위에서 아래로 갈수록 <strong>표현력은 커지지만 hacking 표면도 커진다</strong>는 것이다. ①은 파라미터가 없어 뚫을 대상 자체가 없고, ②③④는 신경망이므로 정책이 그 근사 오차를 파고들 수 있다. 그래서 설계의 대원칙은 <strong>“가능한 한 위쪽(①)을 쓰고, 어쩔 수 없을 때만 아래로 내려간다”</strong>이다.</p> <h2 id="두-종류의-손실-스칼라-rm과-kl-정규화">두 종류의 손실: 스칼라 RM과 KL 정규화</h2> <p>두 수식만 손에 쥐고 있으면 대부분의 설계 대화를 따라갈 수 있다.</p> <p><strong>스칼라 RM 학습(Bradley-Terry, <a href="/blog/2026/bradley-terry-rethinking/">#4</a>):</strong></p> \[\mathcal{L}_{\text{RM}} = -\log \sigma\big(r_\theta(x, y_w) - r_\theta(x, y_l)\big)\] <ul> <li>\(y_w, y_l\): 같은 프롬프트 \(x\)에 대한 선호(win)·비선호(lose) 응답</li> <li>\(r_\theta\): 학습되는 스칼라 RM</li> <li>의미: 선택된 응답의 점수가 탈락 응답보다 <strong>높아지도록</strong> 밀되, \(\sigma\)(시그모이드) 때문에 차이가 이미 충분히 벌어지면 더는 세게 밀지 않는다.</li> </ul> <p><strong>정책 최적화(KL 정규화, <a href="/blog/2026/ppo/">#20</a>):</strong></p> \[\max_{\pi}\ \mathbb{E}_{y \sim \pi}\big[r(x, y)\big] - \beta\, \mathrm{KL}\big(\pi \,\|\, \pi_{\text{ref}}\big)\] <ul> <li>앞항: reward를 <strong>최대화</strong>하라.</li> <li>뒷항: 그러나 참조 정책 \(\pi_{\text{ref}}\)(보통 SFT 모델)에서 <strong>너무 멀어지지 마라.</strong></li> <li>\(\beta\): 이 둘의 균형. 이 뒷항이 없으면 정책은 reward의 허점을 향해 폭주한다 — 이것이 reward hacking의 수학적 정체다(<a href="/blog/2026/reward-model-overoptimization/">#10</a>).</li> </ul> <p>설계의 많은 부분이 <strong>”\(r\)을 무엇으로 채울까”(조달처)</strong>와 <strong>”\(\beta\)와 데이터로 폭주를 어떻게 막을까”(방어)</strong>의 두 질문으로 환원된다.</p> <h1 id="method">Method</h1> <h2 id="7단계-설계-절차">7단계 설계 절차</h2> <p>절차를 하나의 결정 흐름으로 정리하면 이렇다. 위에서부터 순서대로 답해 내려간다.</p> <table> <thead> <tr> <th>단계</th> <th>질문</th> <th>답에 따른 선택</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>이 도메인의 정답을 <strong>프로그램으로 판정</strong>하나?</td> <td>예 → 2단계 / 아니오 → 3단계</td> </tr> <tr> <td>2</td> <td>(검증 가능) reward를 어떻게 짜나?</td> <td>① 규칙: accuracy + format 분리</td> </tr> <tr> <td>3</td> <td>채점 <strong>기준(rubric)</strong> 을 명문화할 수 있나?</td> <td>예 → 4단계 / 아니오 → 5단계</td> </tr> <tr> <td>4</td> <td>정답 <strong>예시(reference)</strong> 가 있나?</td> <td>예 → ③ reference judge / 아니오 → ④ GRM·self-critique</td> </tr> <tr> <td>5</td> <td>(기준도 흐릿) 무엇으로 신호를 만드나?</td> <td>② 스칼라 RM 또는 선호 쌍 + DPO</td> </tr> <tr> <td>6</td> <td>정책을 어떻게 업데이트하나?</td> <td>온라인 인프라 있음 → PPO/GRPO / 없음 → DPO·rejection sampling</td> </tr> <tr> <td>7</td> <td>reward를 어떻게 <strong>검증·방어</strong>하나?</td> <td>프롬프트 큐레이션 + KL 분리 + RM 평가(RewardBench/CriticEval) + overopt 모니터링</td> </tr> </tbody> </table> <p>아래에서 각 단계의 실무 포인트를 짚는다.</p> <h3 id="12단계-검증-가능하면-무조건-규칙부터">1~2단계: 검증 가능하면 무조건 규칙부터</h3> <p>“정답을 프로그램으로 판정 가능한가”가 첫 갈림길이다. 가능하다면 학습된 RM을 <strong>쓰지 않는 것</strong>이 정답이다(<a href="/blog/2026/deepseek-r1/">#33</a>). 규칙 기반 reward를 짤 때 실무 포인트는 두 가지다.</p> <ul> <li><strong>accuracy와 format을 분리한다.</strong> 정답 여부만 보상하면 모델은 “정답만 찍는” 최단 경로로 붕괴한다. 사고 과정을 <code class="language-plaintext highlighter-rouge">&lt;think&gt;</code> 태그나 <code class="language-plaintext highlighter-rouge">\boxed{}</code> 형식으로 강제하는 format reward를 따로 둔다.</li> <li><strong>파서를 견고하게.</strong> 규칙 reward의 취약점은 함수가 아니라 <strong>파서</strong>다. 답 추출 정규식이 허술하면 그 틈이 곧 hacking 표면이 된다.</li> </ul> <h3 id="34단계-기준을-글로-쓸-수-있으면-judge">3~4단계: 기준을 글로 쓸 수 있으면 judge</h3> <p>검증이 불가능해도 포기하지 않는다. <strong>채점 기준을 문장으로 쓸 수 있는지</strong>를 묻는다. “정확성 40%, 안전성 40%, 친절함 20%, 각 항목 1~5점” 같은 rubric을 정의할 수 있다면, 스칼라 RM으로 내려가기 전에 <strong>judge</strong>를 고려한다.</p> <ul> <li><strong>정답 예시가 있으면 ③ reference judge</strong> (<a href="/blog/2026/prometheus-2/">#34</a>): judge에게 “이 rubric과 이 모범답안에 비추어 채점하라”고 시킨다. Qwen3가 General RL에서 쓴 model-based-with-reference가 정확히 이것이다(<a href="/blog/2026/frontier-reward-design/">#59</a>).</li> <li><strong>예시가 없으면 ④ GRM / self-critique</strong> (<a href="/blog/2026/deepseek-grm-spct/">#38</a>, <a href="/blog/2026/j1-thinking-judge/">#40</a>): judge가 채점 근거를 스스로 생성하며 점수를 낸다. 근거가 남으므로 <strong>왜 그 점수인지 사후 검증이 가능</strong>하다는 게 스칼라 RM 대비 결정적 장점이다.</li> </ul> <p>judge를 쓸 때 주의: judge도 신경망이라 뚫린다. <a href="/blog/2026/one-token-to-fool-judge/">#43 One Token to Fool</a>이 보였듯, “정답입니다” 같은 껍데기 토큰에 속는 사례가 실재한다. judge를 도입하면 judge 자체의 견고성 평가(<a href="/blog/2026/criticeval/">#42 CriticEval</a>)가 새 숙제로 따라온다.</p> <h3 id="5단계-기준도-흐릿하면-선호-쌍">5단계: 기준도 흐릿하면 선호 쌍</h3> <p>rubric조차 명문화하기 어려운 주관적 품질(문체, 위트, 공감)은 결국 <strong>사람의 선호 쌍</strong>으로 돌아온다. 여기서 두 갈래다.</p> <ul> <li><strong>② 스칼라 RM 학습 후 RL</strong>: 표현력이 크지만 overoptimization 위험.</li> <li><strong>DPO(<a href="/blog/2026/dpo/">#24</a>)</strong>: RM 없이 선호 쌍에서 바로 정책 학습. 온라인 인프라가 없을 때 특히 매력적.</li> </ul> <p>이때 <a href="/blog/2026/secrets-rlhf-reward-modeling/">#5</a>·<a href="/blog/2026/skywork-reward/">#6</a>의 교훈이 결정적이다 — <strong>RM 성능은 아키텍처보다 데이터 큐레이션에서 갈린다.</strong> 우열이 애매한 쌍은 노이즈이므로 버리고, 확실히 우열이 갈리는 쌍만 남긴다(Llama의 선택, <a href="/blog/2026/frontier-reward-design/">#59</a>).</p> <h3 id="5단계-보강--프롬프트-큐레이션-어떤-문제에-reward를-먹일까">5단계 보강 — 프롬프트 큐레이션: 어떤 문제에 reward를 먹일까</h3> <p>5단계가 “어떤 선호 쌍을 학습에 쓸까”였다면, RL로 넘어가기 직전 하나가 더 있다 — <strong>“어떤 프롬프트에 그 reward를 굴릴까”.</strong> GRPO·PPO는 한 프롬프트에 여러 응답을 뽑아 그 응답들의 <strong>차이</strong>로 학습하므로, 응답이 다 맞거나(정답률 100%) 다 틀리면(0%) advantage가 0이 되어 <strong>그래디언트가 없다.</strong> 즉 프롬프트 선택이 곧 신호의 유무를 정한다.</p> <p>문제는 “신호가 뚜렷한 프롬프트”가 <strong>정책에 상대적</strong>이라는 것이다. 초반에 어렵던 문제도 학습이 진행되면 다 맞게 돼 신호가 사라진다. 그래서 offline 한 번으로 끝나지 않고 online 보정이 필요하다.</p> <table> <thead> <tr> <th>시점</th> <th>방법</th> <th>근거</th> </tr> </thead> <tbody> <tr> <td>offline (학습 전)</td> <td>현재 정책으로 pass@k를 재서 정답률 0%·100% 극단을 제외, 중간 밴드만 남김</td> <td>Llama 4의 pass@k 선별</td> </tr> <tr> <td>offline</td> <td>judge로 easy 태깅 프루닝 / RM 점수 분산 큰 쿼리 우선</td> <td>Llama 4 프루닝, Qwen2.5 분산</td> </tr> <tr> <td>online (학습 중)</td> <td>롤아웃 후 advantage=0(그룹 reward가 전부 같음) 프롬프트를 버리고 배치를 재충전</td> <td>DAPO의 dynamic sampling</td> </tr> <tr> <td>online</td> <td>N 스텝마다 난이도 재추정 → 정답률 오른 문제를 빼고 더 어려운 문제 투입(커리큘럼)</td> <td>Llama 4 medium-hard 유지</td> </tr> </tbody> </table> <p>실무 레시피는 계층적이다 — <strong>offline로 굵게(검증 가능 문제만 + pass@k로 극단 제외) 후보군을 만들고, online로 매 스텝 죽은(advantage 0) 프롬프트를 쳐내며 난이도를 점증</strong>시킨다. offline만으론 움직이는 표적을 못 따라가고, 매 스텝 전체를 online 판별하면 비싸기 때문이다.</p> <p>하이퍼파라미터 감각 하나: pass@k의 <strong>밴드 폭</strong>을 너무 좁히면(예 40~60%) 데이터가 마르고, 너무 넓히면 신호 약한 게 섞인다. 보통 넓게(10~90%) 시작해 학습이 진행되며 하한을 올린다.</p> <h3 id="6단계-온라인이냐-오프라인이냐">6단계: 온라인이냐 오프라인이냐</h3> <p>정책 업데이트 알고리즘은 <strong>인프라와 비용</strong>이 정한다.</p> <table> <thead> <tr> <th>상황</th> <th>선택</th> <th>근거</th> </tr> </thead> <tbody> <tr> <td>온라인 롤아웃 인프라 있음</td> <td>PPO / GRPO / RLOO</td> <td><a href="/blog/2026/ppo/">#20</a>, <a href="/blog/2026/grpo-deepseekmath/">#22</a>, <a href="/blog/2026/rloo-back-to-basics/">#23</a></td> </tr> <tr> <td>인프라 없음, 선호 쌍만 있음</td> <td>DPO</td> <td><a href="/blog/2026/dpo/">#24</a></td> </tr> <tr> <td>그 중간(싸게 다지고 비싸게 마무리)</td> <td>offline DPO → online RL</td> <td>Qwen2.5 (<a href="/blog/2026/frontier-reward-design/">#59</a>)</td> </tr> </tbody> </table> <p>주의점 하나: <strong>오프라인 정렬(SFT·DPO)을 너무 세게 걸면 뒤이은 RL의 탐색을 죽인다</strong>(Llama 4의 교훈, <a href="/blog/2026/frontier-reward-design/">#59</a>). 온라인 RL을 쓸 계획이라면 앞 단계를 “가볍게” 치는 편이 낫다.</p> <h3 id="7단계-검증과-방어를-처음부터-설계에-넣는다">7단계: 검증과 방어를 처음부터 설계에 넣는다</h3> <p>reward를 정하고 나면 곧바로 <strong>“이 reward가 정말 품질과 상관하는가”</strong>를 검증하는 장치를 붙인다. 이건 나중에 덧대는 게 아니라 설계의 일부다.</p> <ul> <li><strong>프롬프트 큐레이션 = 숨은 reward 설계.</strong> 신호 없는(advantage 0) 프롬프트를 offline 후보 선별 + online 실시간 제거로 걸러 함수를 안 바꾸고도 신호의 질을 올린다(위 ‘5단계 보강’ 절 참고).</li> <li><strong>reward와 KL을 분리.</strong> length·format 같은 오염 신호는 reward에서 떼어내고(<a href="/blog/2026/odin-disentangled-reward/">#12 ODIN</a>), 참조점 이탈은 KL로 따로 관리한다.</li> <li><strong>RM을 평가한다.</strong> RM 자체를 <a href="/blog/2026/rewardbench-2/">RewardBench 2</a>로, judge를 <a href="/blog/2026/criticeval/">CriticEval</a>로 점검한다. “RM 정확도”와 “그 RM으로 학습한 정책의 품질”은 다르다.</li> <li><strong>overoptimization을 모니터링.</strong> <a href="/blog/2026/reward-model-overoptimization/">#10</a>이 정량화했듯, RL을 오래 돌릴수록 reward는 오르는데 실제 품질은 어느 지점부터 꺾인다. proxy reward와 실제(사람·홀드아웃) 지표를 나란히 본다.</li> <li><strong>여러 RM을 평균낸다.</strong> 여력이 되면 <a href="/blog/2026/warm-weight-averaged-reward/">#14 WARM</a>처럼 weight averaging으로 RM 하나의 특이한 취약점을 상쇄한다.</li> </ul> <h1 id="experiments">Experiments</h1> <h2 id="예제-안전성-정렬-어시스턴트의-reward-설계">예제: 안전성 정렬 어시스턴트의 reward 설계</h2> <p>절차를 구체적 예제로 따라가 본다. 목표는 “도움이 되면서도 위험 요청은 적절히 거절하는 대화 어시스턴트”다. 도메인이 뒤섞여 있으므로 <strong>한 개의 reward가 아니라 도메인별로 조달처를 나눈다</strong> — 이것이 Solar·DeepSeek-V4가 보여준 패턴이다(<a href="/blog/2026/frontier-reward-design/">#59</a>).</p> <table> <thead> <tr> <th>하위 도메인</th> <th>1단계 진단</th> <th>선택한 조달처</th> <th>이유</th> </tr> </thead> <tbody> <tr> <td>수학·코드 질문</td> <td>검증 가능</td> <td>① 규칙 (정답 일치·테스트)</td> <td>파라미터 0, hacking 불가</td> </tr> <tr> <td>사실 질의응답</td> <td>부분 검증 가능</td> <td>③ reference judge (정답 문서 대조)</td> <td>정답 예시가 있고 기준(사실 일치)이 명확</td> </tr> <tr> <td>안전성(거절 적절성)</td> <td>검증 불가·기준 명확</td> <td>④ GRM (거절 사유를 생성하며 채점)</td> <td>rubric은 쓸 수 있으나 정답 예시가 다양 → 근거 생성이 유리</td> </tr> <tr> <td>문체·공감(상담 톤)</td> <td>기준도 흐릿</td> <td>② 스칼라 RM 또는 선호 쌍 + DPO</td> <td>주관적 품질, 선호 쌍으로만 포착</td> </tr> </tbody> </table> <p>여기서 안전성 도메인이 특히 까다롭다. “거절해야 하는가”는 규칙으로 다 못 짜고(맥락 의존), 그렇다고 스칼라 RM에 맡기면 <strong>왜 그 점수인지 알 수 없어 over-refusal(과잉 거절)을 디버깅하기 어렵다.</strong> 그래서 근거를 생성하는 ④ GRM이 유리하다 — “이 요청은 교육 목적이라 거절 불필요”처럼 판정 근거가 로그로 남아, 과잉 거절이 어디서 생기는지 추적할 수 있다.</p> <h2 id="절차를-프론티어-모델에-대보면">절차를 프론티어 모델에 대보면</h2> <p>이 7단계가 임의의 규칙이 아니라는 것은, 프론티어 모델들이 실제로 이 갈림길들을 지났다는 데서 드러난다.</p> <table> <thead> <tr> <th>단계</th> <th>DeepSeek-V4</th> <th>Qwen3</th> <th>Llama 4</th> </tr> </thead> <tbody> <tr> <td>1~2 검증 가능</td> <td>① 규칙</td> <td>① 규칙 (query-verifier)</td> <td>난이도 커리큘럼 중심</td> </tr> <tr> <td>3~4 judge</td> <td>④ GRM</td> <td>③ reference judge</td> <td>(비공개)</td> </tr> <tr> <td>5 선호</td> <td>—</td> <td>② 스칼라 RM</td> <td>선호 쌍 + DPO</td> </tr> <tr> <td>6 정책</td> <td>GRPO → 증류</td> <td>GRPO + General RL</td> <td>online RL → 가벼운 DPO</td> </tr> <tr> <td>7 방어</td> <td>규칙 우선 + KL</td> <td>규칙으로 hacking 예방</td> <td>advantage 0 제거</td> </tr> </tbody> </table> <p>세 모델이 서로 다른 칸을 통과했지만, <strong>거쳐간 갈림길 자체는 같다.</strong> 이것이 이 절차를 “설계 문서”라 부를 수 있는 이유다.</p> <h1 id="conclusion">Conclusion</h1> <h2 id="한-장-체크리스트">한 장 체크리스트</h2> <p>reward를 설계할 때, 이 순서대로 자문한다.</p> <ol> <li><strong>검증 가능한가?</strong> → 가능하면 무조건 ① 규칙부터. RM을 학습시키지 않는 것이 최선의 RM 설계다.</li> <li><strong>rubric을 쓸 수 있는가?</strong> → 예시가 있으면 ③ reference judge, 없으면 ④ GRM. 스칼라 RM으로 바로 내려가지 않는다.</li> <li><strong>그조차 안 되면</strong> → ② 선호 쌍. 이때 <strong>데이터 큐레이션이 아키텍처를 이긴다</strong> — 애매한 쌍은 버린다.</li> <li><strong>정책 업데이트</strong>는 인프라가 정한다. 온라인 RL을 쓸 거면 앞의 오프라인 정렬을 가볍게.</li> <li><strong>검증·방어는 처음부터.</strong> 프롬프트 큐레이션, KL 분리, RM 평가, overopt 모니터링을 설계에 내장한다.</li> <li><strong>도메인이 섞여 있으면 조달처도 섞는다.</strong> 하나의 만능 reward를 찾지 말고, 도메인별로 ①~④를 배분한다.</li> </ol> <h2 id="한계-reward는-끝내-프록시다">한계: reward는 끝내 프록시다</h2> <p>이 모든 절차를 거쳐도 남는 사실이 하나 있다 — <strong>어떤 reward도 결국 “품질”이라는 것의 프록시일 뿐이다.</strong> 규칙은 검증 가능한 것만 보고, RM은 근사하며, judge도 뚫린다(<a href="/blog/2026/one-token-to-fool-judge/">#43</a>). 그래서 잘 설계된 reward 시스템일수록 역설적으로 <strong>“reward를 언제 믿지 말아야 하는가”를 함께 설계한다</strong> — 홀드아웃 사람 평가, overoptimization 조기 경보, 여러 신호의 교차검증이 그 안전장치다.</p> <p><a href="/blog/2026/deep-rl-human-preferences/">#1 Christiano 2017</a>에서 시작해 <a href="/blog/2026/frontier-reward-design/">#59</a>의 프론티어 사례까지, 이 시리즈가 62편에 걸쳐 도달한 결론은 한 문장이다. <strong>reward 설계란 완벽한 보상 함수를 찾는 일이 아니라, 내 도메인을 정확히 진단하고 그 진단에 맞는 조달처를 고른 뒤, 그 선택이 틀렸을 때를 대비하는 일이다.</strong></p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>이 글은 시리즈 전체를 종합한 설계 가이드로, 각 결정의 근거는 본문에 링크한 편들에 있다.</li> <li>Lambert et al., 2024. <a href="https://arxiv.org/abs/2403.13787">RewardBench: Evaluating Reward Models</a> — <a href="/blog/2026/rewardbench-2/">#9</a> 참고.</li> <li>Rafailov et al., 2023. <a href="https://arxiv.org/abs/2305.18290">Direct Preference Optimization</a> — <a href="/blog/2026/dpo/">#24</a>.</li> <li>Gao et al., 2022. <a href="https://arxiv.org/abs/2210.10760">Scaling Laws for Reward Model Overoptimization</a> — <a href="/blog/2026/reward-model-overoptimization/">#10</a>.</li> <li>Chen et al., 2024. <a href="https://arxiv.org/abs/2402.07319">ODIN: Disentangled Reward Mitigates Hacking in RLHF</a> — <a href="/blog/2026/odin-disentangled-reward/">#12</a>.</li> <li>Kim et al., 2024. <a href="https://arxiv.org/abs/2405.01535">Prometheus 2</a> — <a href="/blog/2026/prometheus-2/">#34</a>.</li> <li>Liu et al. (DeepSeek-AI), 2025. <a href="https://arxiv.org/abs/2504.02495">Inference-Time Scaling for Generalist Reward Modeling</a> — <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM/SPCT</a>.</li> <li>Yu et al. (ByteDance Seed·Tsinghua), 2025. <a href="https://arxiv.org/abs/2503.14476">DAPO: An Open-Source LLM Reinforcement Learning System at Scale</a> — dynamic sampling(정답률 0/1 프롬프트 제거).</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 예순두 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><strong>(현재 글)</strong> reward를 어떻게 설계할 것인가 — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="rlhf"/><category term="reward-model"/><category term="rlvr"/><category term="genrm"/><category term="dpo"/><category term="reward-hacking"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #62 — 시리즈 61편을 관통한 reward 시스템 설계 절차를 한 장의 실무 가이드로]]></summary></entry><entry><title type="html">프론티어 모델은 실제로 어떻게 하나</title><link href="https://www.wonbeomjang.kr/blog/2026/frontier-agentic-rl/" rel="alternate" type="text/html" title="프론티어 모델은 실제로 어떻게 하나"/><published>2026-08-11T01:01:00+00:00</published><updated>2026-08-11T01:01:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/frontier-agentic-rl</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/frontier-agentic-rl/"><![CDATA[<blockquote> <p>이 글은 아홉 개 프론티어 모델의 공개 자료를 가로지른다 — <a href="https://github.com/MoonshotAI/Kimi-K3">Kimi K3</a>(Moonshot AI), <a href="https://github.com/SKT-AI/A.X-K2">A.X K2</a>(SKT), <a href="https://arxiv.org/abs/2607.20062">Solar Open 2</a>(Upstage), <a href="https://arxiv.org/abs/2508.06471">GLM-4.5</a>(Zhipu AI), <a href="https://arxiv.org/abs/2606.19348">DeepSeek-V4</a>(DeepSeek-AI), <a href="https://arxiv.org/abs/2505.09388">Qwen3</a>(Alibaba), <a href="https://arxiv.org/abs/2608.04505">K-EXAONE 2.0</a>(LG AI Research), <a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">Llama 4</a>(Meta), <a href="https://arxiv.org/abs/2607.02770">Gemma 4</a>(Google DeepMind). 보조 자료로 <a href="https://arxiv.org/abs/2506.13585">MiniMax-M1</a>도 곁들인다. 같은 자료를 <a href="/blog/2026/frontier-reward-design/">#59</a>가 helpfulness reward 전반(규칙·스칼라 RM·reference judge·GRM 4분류)의 렌즈로 훑었다면, 이 글은 <strong>agentic 축 하나만 남기고</strong> credit assignment 입도, 환경 검증 지점, tool call 채점, 컨텍스트 관리의 렌즈로 같은 자료를 다시 읽는다.</p> </blockquote> <h1 id="introduction">Introduction</h1> <p>9부부터 13부까지 이 시리즈는 “에이전트를 RL로 학습시킬 때 무엇이 깨지고 어떻게 고치는가”를 이론과 개별 논문 단위로 뜯었다. 에이전트 RL이 단일턴 RLHF와 근본적으로 다른 이유와 공(credit)을 어디로 돌릴지의 큰 그림(<a href="/blog/2026/agentic-rl-landscape/">#44</a>~<a href="/blog/2026/multi-turn-rl-practice/">#46</a>), 궤적이 길어지면 그룹 전체가 붕괴하는 문제(<a href="/blog/2026/outcome-vs-process-agentic/">#47</a>), 공을 턴·스텝·토큰 단위로 잘게 나누는 credit assignment 기법들(<a href="/blog/2026/turn-level-reward/">#48</a>~<a href="/blog/2026/token-segment-credit/">#50</a>), 그 아래로 내려가면 추정이 시작되고 추정은 hacking된다는 경고(<a href="/blog/2026/reward-shaping-agentic/">#51</a>), 환경 자체를 reward로 쓰는 법(<a href="/blog/2026/environment-as-reward/">#52</a>), 도구 호출을 채점하는 법(<a href="/blog/2026/tool-call-reward/">#53</a>), judge가 궤적을 rubric으로 채점하는 법(<a href="/blog/2026/agentic-judge-rubric/">#54</a>), 검색·코드·웹 에이전트 각 도메인의 특수성(<a href="/blog/2026/search-agent-rl/">#55</a>~<a href="/blog/2026/web-gui-agent-rl/">#57</a>), 그리고 이 모든 걸 뚫는 hacking 사례들(<a href="/blog/2026/agentic-reward-hacking/">#58</a>). 하나하나는 논문 한 편이 문제 하나에 답한 결과였다.</p> <p>그런데 실제로 3T급 모델을 학습시키는 팀은 이 해법 목록 중 무엇을 골랐을까. 이 글은 아홉 개 공개 자료 — Kimi K3, A.X K2, Solar Open 2, GLM-4.5, DeepSeek-V4, Qwen3, K-EXAONE 2.0, Llama 4, Gemma 4 — 를 가로질러 <strong>agentic reward 설계</strong>만 추려 비교한다. 방법은 정직해야 한다는 원칙 하나를 지킨다: 자료에 없으면 “공개 자료에 없음”이라고 쓴다. <a href="/blog/2026/frontier-safety-design/">#60</a>가 “Kimi K3 리포트에 safety가 0회 등장한다”는 부재 자체를 발견으로 삼았던 것과 같은 태도다. 이 글에서도 <strong>단어 등장 횟수</strong>를 근거로 쓴다 — “agentic”이 리포트에 몇 번 나오는지, “credit assignment”라는 이 시리즈의 핵심 용어가 실제로 몇 번 나오는지.</p> <p>미리 결론의 윤곽을 셋만 말하면 이렇다.</p> <ol> <li><strong>“전문가를 도메인별로 따로 키운 뒤 증류로 합친다”는 구조가 최소 셋(Kimi K3·Solar Open 2·DeepSeek-V4)에서 겹친다.</strong> 이 중 Kimi K3와 Solar Open 2는 이름(MOPD)까지 같다.</li> <li><strong>credit 입도는 이론이 준비한 만큼 내려가지 않는다.</strong> 이 시리즈 10부가 다룬 턴·스텝·토큰 단위 credit assignment는 아홉 모델 중 어디에서도 주 reward로 쓰이지 않는다. 거의 전부 trajectory·outcome 레벨에 머물고, 유일하게 더 세밀해지는 지점은 Solar Open 2의 “graded process rubric”이다.</li> <li><strong>공개 수준의 편차가 능력 격차보다 크다.</strong> Llama 4와 Gemma 4는 agentic RL을 사실상 언급하지 않는다 — 벤치마크 점수는 공개하면서 그 점수를 만든 reward 설계는 감춘다.</li> </ol> <p>아홉 모델을 한 장으로 요약하면 이렇다. 근거는 Method에서 모델별로 짚는다.</p> <table> <thead> <tr> <th>모델</th> <th>소속</th> <th>agentic reward 조달처</th> <th>credit 입도</th> <th>RL 알고리즘</th> <th>공개 수준</th> </tr> </thead> <tbody> <tr> <td>Kimi K3</td> <td>Moonshot AI</td> <td>규칙(5,100만+ 샌드박스 실행검증) + Agentic GRM(judge가 rubric 생성→scorepad)</td> <td>trajectory(토너먼트 binary), 증류 단계만 token</td> <td>3단계 RL(9전문가) → MOPD 증류</td> <td>상세</td> </tr> <tr> <td>A.X K2</td> <td>SKT</td> <td>규칙(schema/argument 일치) + 게이트형 judge(binary gate→pointwise)</td> <td>trajectory(이진 게이트 후 pointwise)</td> <td>CISPO + GDPO</td> <td>상세</td> </tr> <tr> <td>Solar Open 2</td> <td>Upstage</td> <td>환경이 생성한 read-back 검증기 + graded process rubric + executable end-state check</td> <td>trajectory~criterion 단위(9모델 중 가장 세밀)</td> <td>완전 비동기 GRPO → 12전문가 MOPD 증류</td> <td>매우 상세</td> </tr> <tr> <td>GLM-4.5</td> <td>Zhipu AI</td> <td>규칙(SWE fail-to-pass/pass-to-pass) + 최종 답 정확도</td> <td>trajectory(outcome) + 포맷 위반 시 이진 게이트</td> <td>GRPO 변형(무-KL) + 반복 자기증류</td> <td>상세</td> </tr> <tr> <td>DeepSeek-V4</td> <td>DeepSeek-AI</td> <td>도메인 reward(“성공 기준”으로만 서술, 세부 비공개) + GRM</td> <td>불명(trajectory로 추정)</td> <td>GRPO → on-policy 증류(역-KL)</td> <td>낮음</td> </tr> <tr> <td>Qwen3</td> <td>Alibaba</td> <td>환경 실행 피드백(멀티턴 rollout), 3종 reward 중 어떤 것인지 미명시</td> <td>불명</td> <td>GRPO + General RL(20+ 태스크 중 하나)</td> <td>낮음</td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>LG AI Research</td> <td>오프라인 preference — 행동의 정확성 + 답의 깊이·포괄성을 judge가 평가</td> <td>trajectory(pairwise)</td> <td>GrouPER(+AGAPO는 언급만, 세부 비공개)</td> <td>중간</td> </tr> <tr> <td>Llama 4</td> <td>Meta</td> <td>공개 자료에 없음(“online RL”이라고만 서술)</td> <td>공개 자료에 없음</td> <td>공개 자료에 없음</td> <td>없음</td> </tr> <tr> <td>Gemma 4</td> <td>Google DeepMind</td> <td>공개 자료에 없음(tool-call 포맷 예시만 공개)</td> <td>공개 자료에 없음</td> <td>공개 자료에 없음</td> <td>없음</td> </tr> </tbody> </table> <h1 id="background">Background</h1> <h2 id="방법-왜-단어-등장-횟수를-근거로-쓰는가">방법: 왜 단어 등장 횟수를 근거로 쓰는가</h2> <p>기술 리포트 아홉 편(+보조 하나)을 나란히 놓고 “agentic”, “agent”, “tool”, “reward”, “credit assignment” 다섯 단어의 등장 횟수를 grep으로 셌다. 이 방법에는 명백한 한계가 있다 — 리포트 길이가 3,555단어(Llama 4 블로그)부터 28,771단어(Kimi K3)까지 8배 차이 나고, 단어 하나의 등장이 곧 설계의 깊이를 뜻하지 않는다. 그런데도 이 방법을 쓰는 이유는 단순하다. <strong>“공개했다/안 했다”는 질적 판단은 읽는 사람의 기대에 따라 갈리지만, 등장 횟수 0은 누가 세어도 0이다.</strong> 뒤에 나올 “credit assignment 0회” 같은 숫자는 이 글에서 가장 단단한 근거이자, 가장 정직하게 확인 가능한 근거다.</p> <p>문서 종류도 셋으로 갈린다. Kimi K3와 A.X K2는 arXiv 없이 <strong>GitHub에 PDF tech report</strong>만 올렸다. GLM-4.5·DeepSeek-V4·Qwen3·K-EXAONE 2.0·Solar Open 2·Gemma 4·MiniMax-M1은 <strong>arXiv 프리프린트</strong>다(문헌 조사 시점 기준 정식 학회/저널 게재 확인 안 됨 — Comments·Journal-ref 필드 없음). Llama 4는 tech report 없이 <strong>공식 블로그 포스트</strong>로만 공개됐다. 문서 종류 자체가 이미 공개 의지의 신호다.</p> <h2 id="이-시리즈가-이론으로-준비한-것--다시-요약">이 시리즈가 이론으로 준비한 것 — 다시 요약</h2> <p>이 편만 읽는 독자를 위해 한 문단으로 되짚는다. 에이전트를 RL로 학습시킬 때 가장 먼저 부딪히는 문제는 <strong>credit assignment</strong>다 — 궤적이 수십~수백 턴으로 늘어나면 “에피소드 끝에 성공/실패 1점”이라는 outcome reward만으로는 3턴째의 결정적 실수와 47턴째의 사소한 실수가 똑같은 벌점을 받는다. 이 시리즈는 이 문제를 입도(granularity)의 문제로 재정의하고, trajectory보다 잘게 자르는 방법들(턴·스텝·토큰-세그먼트)과 그 신호를 어디서 얻는지(환경 실행, 도구 호출 검증, judge·rubric)를 각각 한 편씩 다뤘다. 이 좌표를 정리하면 아래와 같고, Method에서 각 모델을 이 좌표로 잰다.</p> <table> <thead> <tr> <th>축</th> <th>이론이 준비한 선택지</th> <th>관련 편</th> </tr> </thead> <tbody> <tr> <td>credit을 어디까지 잘게 나누나</td> <td>trajectory / turn / step / token-segment</td> <td><a href="/blog/2026/outcome-vs-process-agentic/">#47</a>~<a href="/blog/2026/token-segment-credit/">#50</a></td> </tr> <tr> <td>reward를 어디서 조달하나</td> <td>환경 실행 검증 / 도구 호출 스키마 검증 / judge·rubric</td> <td><a href="/blog/2026/environment-as-reward/">#52</a>~<a href="/blog/2026/agentic-judge-rubric/">#54</a></td> </tr> <tr> <td>여러 전문가를 어떻게 합치나</td> <td>별도 학습 후 증류 vs 단일 정책에서 공동 학습</td> <td><a href="/blog/2026/credit-assignment-survey/">#45</a></td> </tr> <tr> <td>hacking을 어떻게 막나</td> <td>판정 정의를 대리 지표에서 떼어놓기, 다중 reward 결합 시 신호 보존</td> <td><a href="/blog/2026/agentic-reward-hacking/">#58</a></td> </tr> <tr> <td>컨텍스트를 어떻게 관리하나</td> <td>환경 관측 마스킹, 추론 흔적 유지/폐기</td> <td><a href="/blog/2026/multi-turn-rl-practice/">#46</a></td> </tr> </tbody> </table> <h1 id="method">Method</h1> <h2 id="kimi-k3--agentic-grm과-mopd-그리고-5100만-개의-샌드박스">Kimi K3 — Agentic GRM과 MOPD, 그리고 5,100만 개의 샌드박스</h2> <p>Kimi K3(Moonshot AI, 2.8T 파라미터 MoE, 104B 활성)는 아홉 모델 중 가장 상세하게 agentic RL을 서술한다. 후처리는 세 단계다 — SFT로 콜드스타트를 잡고, RL로 세 도메인(일반 태스크·general agents·coding agents) × 세 reasoning-effort 수준(low/high/max)의 <strong>아홉 전문가</strong>를 따로 키운 뒤, <strong>Multi-Teacher On-Policy Distillation(MOPD)</strong>로 하나의 모델에 합친다. general agents 도메인은 장기 지평 어시스턴트 작업·deep research·문단 단위 글쓰기를, coding agents는 SWE·코딩·커널 최적화·웹 개발을 포괄한다.</p> <p>reward 조달처는 두 갈래다.</p> <ul> <li><strong>검증 가능한 도메인</strong>: 규칙 기반 verifiable reward를 쓴다. 얼마나 대규모로 쓰는지는 인프라 절에 숫자로 나온다 — <strong>학습·평가 전 과정에서 5,121만 9,741개의 샌드박스가 150만 5,678개의 이미지에 걸쳐 생성됐다.</strong> 이 샌드박스는 AgentENV라는 Firecracker 기반 microVM 런타임으로, 컨테이너 런타임에서 관찰된 커널 패닉·데드락 문제를 isolation으로 해결하면서도 디스크 마운트·컨테이너 실행·가상머신 구동까지 허용해 에이전트의 탐색 자유도를 지키는 쪽을 택했다. checkpoint 133ms·resume 49ms의 저지연 상태 저장을 지원하고, 세 가지 고수준 연산을 제공한다 — <strong>Pause/Resume</strong>(모델 추론을 기다리는 동안 샌드박스는 리소스를 0으로 만든다. 이 대기 시간이 샌드박스 수명의 최대 98%를 차지한다), <strong>Fork</strong>(원본을 실행 상태로 둔 채 동일 상태의 새 샌드박스를 복제한다. 부작용 없이 reward를 판정하려는 용도다), <strong>Snapshot</strong>(정기 저장으로 오류 복구). 이 Fork 연산이 <a href="/blog/2026/environment-as-reward/">#52 환경이 곧 reward다</a>가 다룬 “환경 신호를 어떻게 오염 없이 얻는가” 문제에 대한 실전 답이다 — 판정을 위해 원본 궤적과 별개의 복제본에서 검증을 돌린다.</li> <li><strong>검증 불가능한 일반 태스크</strong>: <strong>Agentic Generative Reward Model(GRM)</strong>을 쓴다. judge가 강제된 프로토콜을 따른다 — (1) 출력(결과물·상품·텍스트)을 읽고, (2) <strong>rubric을 생성</strong>하고, (3) 각 후보를 그 rubric으로 채점하고, (4) 채점 결과를 <strong>scorepad</strong>에 기록한다. 이전 세대(K2.5)의 토너먼트식 이진 비교를 이어받되, judge가 채점 기준 자체를 스스로 만든다는 점이 새롭다. 이 구조는 <a href="/blog/2026/agentic-judge-rubric/">#54 궤적을 judge가 채점한다</a>가 다룬 “judge가 평가 원칙을 스스로 생성한다”는 아이디어를 프로덕션 스케일로 옮긴 사례다.</li> </ul> <p>hacking 방어도 명시적이다. Agentic GRM이 “길게 쓰면 이긴다”는 식으로 뚫리는 걸 막으려고, 콜드스타트 모델에서 추정한 초기 길이 \(\ell_0\)의 \(\sigma\)배를 넘는 후보는 binary comparison에서 자동으로 진다. 별도로, <strong>reasoning-effort RL</strong>은 문제마다 콜드스타트 모델이 추정한 초기 토큰 예산 \(b_0(x)\)를 두고, 궤적의 누적 토큰 수 \(T(y)\)가 배율 \(\tau\)를 곱한 임계값을 넘으면 task reward를 \(-1\)로 덮어쓴다. 일반 태스크에서 \(T(y)\)는 사고 토큰 수를, agentic 태스크에서는 추론 흔적과 도구 호출 인자를 합친 누적 출력 토큰 수를 잰다. 이 페널티는 <a href="/blog/2026/reward-shaping-agentic/">#51 shaping은 약인가 독인가</a>가 경고한 “판정 지점 아래는 추정이고 hacking된다”는 문제에 대한 직접적 대응이다 — 토큰 예산 초과라는 명확한 규칙으로 verbosity·overthinking hacking의 여지를 원천 차단한다.</p> <p><strong>MOPD</strong>는 아홉 전문가를 하나로 합치는 단계다. 도메인 \(d\)와 reasoning-effort \(e\)가 주어지면, 학생 정책은 해당 \((d,e)\) 교사 정책과의 per-token 정렬을 목표로 최적화된다(원문 수식은 OCR 신뢰도가 낮아 여기서는 방향만 서술한다 — 교사·학생 로그확률 비의 로그를 clip한 형태). 아홉 개의 이질적 전문가가 각자 강한 영역에서 정점을 찍은 뒤, 이 증류 단계에서 하나의 배포 가능한 모델로 수렴한다.</p> <p>컨텍스트 관리 관련해서도 구체적인 서술이 있다. 채팅 템플릿은 assistant 메시지 본문을 세 channel(think·response·tools)로 나누는데, Kimi K3는 <strong>preserved thinking만 지원</strong>한다 — 사고 흔적을 담는 think channel이 내용이 비어 있어도 대화 이력에서 항상 유지돼, 모델이 턴을 넘나들며 일관된 메시지 구조를 관찰하게 만든다. 또한 도구 호출 인자가 정형 블록으로 분해되지 않을 때 쓰는 pure-JSON fallback 블록은 <strong>입력 토큰에만 등장하고 모델 출력에는 나오지 않으며, 그 손실이 학습 중 마스킹된다</strong>고 명시한다. 둘 다 <a href="/blog/2026/multi-turn-rl-practice/">#46 멀티턴 RL 실무 가이드</a>가 다룬 “무엇을 정책의 그래디언트에 태우고 무엇을 관측으로만 남길 것인가”의 구체 사례다.</p> <p>한 가지 정직하게 짚을 대목: Kimi K3 리포트 어디에도 “credit assignment”라는 표현은 나오지 않는다. “turn-level”·”step-level”·”token-level” 같은 이 시리즈 10부의 용어도 등장하지 않는다. Agentic GRM의 채점 단위는 후보 궤적 전체(trajectory)이고, MOPD의 per-token 정렬은 credit assignment가 아니라 지식 증류의 대상이다. 즉 이 리포트가 보여주는 가장 세밀한 실제 credit 단위는 여전히 “궤적 하나”다.</p> <h2 id="ax-k2--게이트형-judge로-대리-지표를-걸러낸다">A.X K2 — 게이트형 judge로 대리 지표를 걸러낸다</h2> <p>A.X K2(SKT, 688B 파라미터 MoE, 33B 활성)는 사전학습부터 “agentic 애플리케이션을 위한 고성능 파운데이션”을 표방한다. RL은 네 그룹의 혼합으로 구성된다 — instruction following, human preference, <strong>agentic tool use</strong>, safety. 이 혼합 비율은 처음부터 고정하지 않고, 중간 RL 체크포인트로 모델의 약점을 짚어가며 재조정하는 “control surface”로 다룬다. 왜 네 그룹을 함께 학습시키나: 리포트는 “한 능력만 따로 RL로 최적화하면 그 단계의 reward만 과최적화되고, 그 단계에 없는 행동은 퇴행한다”는 관찰을 근거로 든다.</p> <p><strong>agentic tool use</strong> 그룹의 reward가 이 글의 핵심이다. 두 갈래로 갈린다.</p> <ul> <li><strong>단일 스텝 도구 호출</strong>: 방출된 호출을 참조 호출과 비교해 스키마 준수·인자 정확성을 검증하는 verifiable reward. <a href="/blog/2026/tool-call-reward/">#53 도구 호출을 어떻게 채점하나</a>가 다룬 표준적 접근이다.</li> <li><strong>장기 지평 agentic 태스크</strong>: <strong>게이트형 judge</strong>를 쓴다. 이진 게이트가 먼저 “응답이 구조적으로 유효하고 실행 가능한 tool-calling transcript인가”를 확인해 실패 시 최소 reward를 부여하고, <strong>게이트를 통과한 응답만</strong> reference 기반 pointwise judge로 넘긴다. 리포트는 이 설계 이유를 명시한다 — “judge가 유효한 tool call을 한 번도 내지 않은, 유창하기만 한 응답에 보상을 주는 것을 막기 위해서”다.</li> </ul> <p>이 게이트 구조가 이 시리즈 <a href="/blog/2026/agentic-reward-hacking/">#58</a>가 다룬 “판정 정의가 대리 지표인지 확인하라”는 체크리스트 항목의 실전 사례다. judge 하나만 두면 judge는 “말이 되는 텍스트”라는 대리 지표에 낚일 수 있다. 구조적 유효성이라는 값싼 필터를 앞에 두어, judge가 실제로 실행 가능한 행동에만 채점을 하도록 좁혀 놓는다.</p> <p>RL 알고리즘은 <strong>CISPO</strong>(MiniMax 원조) + <strong>GDPO</strong>(Liu et al. 2026)다. CISPO는 token 단위 업데이트가 아니라 importance-sampling 가중치를 클립해, 확률은 낮지만 행동에 결정적인 토큰이 계속 그래디언트에 기여하게 한다. GDPO는 여러 reward를 <strong>각각 따로 정규화한 뒤 결합</strong>해 한 신호가 다른 신호를 잡아먹지 않게 한다 — task reward와 auxiliary format reward를 함께 쓸 때 이 정규화를 거친다. 이것이 <a href="/blog/2026/agentic-reward-hacking/">#58</a>의 또 다른 체크리스트 항목 “여러 보상을 어떻게 결합했는지 명시하라”에 대한 A.X K2의 답이다. 여기에 더해 verbosity가 심한 데이터셋에는 group-relative length penalty(He et al. 2025)를 적용한다 — 같은 그룹 안에서 정답인 짧은 응답은 보상받고 긴 응답은 페널티를 받되, 오답에는 짧다고 보상을 주지 않는다.</p> <p>human preference 그룹의 judge는 여섯 도메인(사실·추론·코딩·추출·창작·개방형)으로 태스크를 먼저 분류한 뒤, 정확성·완결성·명료성·유용성 네 축의 도메인별 rubric으로 채점하며 verbosity bias·reward hacking에 대한 명시적 방지 장치를 둔다고 서술한다. 다만 이 방지 장치의 구체 메커니즘(어떤 규칙인지)은 공개 자료에 없다.</p> <p>credit 입도는 여기서도 trajectory 단위를 벗어나지 않는다. 게이트는 “전체 응답이 유효한가”를 이진으로 묻고, pointwise judge는 궤적 전체에 점수 하나를 매긴다. 리포트에 “credit assignment”라는 표현은 등장하지 않는다.</p> <h2 id="solar-open-2--아홉-모델-중-가장-세밀한-공개-자료">Solar Open 2 — 아홉 모델 중 가장 세밀한 공개 자료</h2> <p>Solar Open 2(Upstage, 250B-A15B MoE)는 이 비교에서 단연 두드러진다. 후처리는 SFT → Multi-domain RL(STEM 중심 검증 가능 reward) → <strong>Specialist</strong>(열두 도메인 전문가를 SFT+도메인별 RL로 육성) → <strong>MOPD</strong>(열두 교사를 하나로 통합), 네 단계다. 열두 전문가는 세 계열로 나뉜다 — reasoning(수학·STEM·코드), <strong>agents &amp; tools</strong>(코딩·범용 도구 사용·단일 워크스페이스·다중 워크스페이스·검색), preference &amp; alignment(지시 따르기·인간 선호·안전·거절).</p> <p>이 글의 관심사인 “환경이 진짜 신호를 주는 가장 세밀한 지점”(<a href="/blog/2026/environment-as-reward/">#52</a>)에 가장 정직하게 답하는 곳이 여기다. 세 가지 agent 시나리오 계열을 각각 어떻게 검증하는지 구체적으로 서술한다.</p> <ul> <li><strong>일반 대화형 에이전트</strong>: 상태 변경(Create/Update/Delete) 작업에 대한 검증기를 얻기 어렵다는 문제를, <strong>검증기를 먼저 만드는 방식</strong>으로 푼다 — 실제 환경에 mutation을 실행해 기대 상태 변화를 기록하고, 이를 읽어내는 read-back 검증기(환경의 읽기 도구 위에 얹은 sandboxed pytest suite)를 합성한 뒤, 지시문은 통제된 수준으로 모호하게 다시 쓴다. 모든 태스크는 <strong>graded process rubric</strong>(과정을 채점하는 rubric)과 <strong>executable end-state check</strong>(실행 가능한 최종 상태 검사)를 함께 갖고, 이 둘을 hard trace rule·LLM coherence judge·실행 가능한 read-back의 <strong>3중 자기일관성 검증</strong>으로 확정한다.</li> <li><strong>코딩 에이전트</strong>: SWE 시나리오는 GitHub PR을 채굴해 문제 설명·정답 패치·테스트 패치·베이스 커밋·환경 요구사항이 모두 복원 가능한 것만 남기고, LLM이 합성한 Docker 환경이 빌드 가능하며 <strong>fail-to-pass</strong>(베이스 커밋에서 테스트 실패, 정답 패치 적용 후 통과)인 것만 채택한다. Git 히스토리는 통째로 제거해 정답이 버전 관리에서 새어나가지 않게 막는다. 터미널 시나리오는 자체 검증 행동(코드 수준 셀프테스트를 실행하고, 실패하면 수정 후 재검증)에 특히 무게를 둔다.</li> <li><strong>오피스워크 에이전트</strong>: 11개 산업 × 12개 태스크 유형의 행렬로 조직된 OfficeVerse 파이프라인을 자체 구축했다. 각 태스크의 산출물(xlsx/docx/pptx/pdf)은 규칙 기반 체커 또는 LLM judge로 채점되는 <strong>rubric 기준별</strong>로 나뉘는데, <strong>이 채점 기록이 SFT 채택 여부를 가르는 것과 동일한 기록에서 RL reward가 유도된다</strong> — “과정 품질과 결과 품질을 의도적으로 분리한다”고 명시한다.</li> </ul> <p>이 rubric-기준 단위 채점이 아홉 모델 가운데 trajectory보다 더 잘게 내려가는 유일한 공개 사례다. 완전한 turn-level이나 token-level은 아니지만, “궤적 하나에 점수 하나”보다는 한 단계 더 세밀하다.</p> <p>RL 인프라도 agentic 특화다. 궤적 길이 분포가 롱테일이라(일부 궤적이 나머지보다 훨씬 오래 걸림) 동기식 학습은 대부분의 디바이스를 유휴 상태로 방치한다는 문제를, 다섯 요소로 구성된 <strong>완전 비동기 설계</strong>로 푼다 — 학습기·rollout 엔진 분리, staleness 제어(fresh-token-fraction gateway), 길이·staleness 인지 배치 샘플링, 양방향 importance sampling, 그리고 <strong>환경 실패 필터링과 그룹 크기 복구</strong>. 마지막 항목이 <a href="/blog/2026/reward-shaping-agentic/">#51</a>이 다룬 문제의 변주다 — 파일시스템 오류나 컨테이너 크래시로 정책 잘못이 아닌데 낮은 reward를 받으면 advantage 추정에 노이즈가 낀다. 원인을 로그로 남겨 환경 붕괴로 인한 실패를 걸러내고, GRPO 그룹 크기가 절반 이상 남으면 유효 샘플을 복제해 크기를 복구하고, 아니면 그룹 전체를 버린다.</p> <p><strong>MOPD</strong>는 Kimi K3와 이름이 같을 뿐 아니라 설계 근거도 명시적으로 공유한다. 학생이 자기 궤적 위에서 라우팅된 교사에 대한 <strong>outcome reward 없는 순수 KL</strong> 목표로 학습한다는 점이 특징이다 — “\(\lambda\)로 균형 잡을 것도, reward-hacking 표면도 없다”고 서술한다. 이 설계는 “DeepSeek-AI(2026), NVIDIA(2026), Xiaomi LLM-Core Team(2026), Ma et al.(2026)”의 선행 on-policy-distillation 통합 레시피를 인용하며 자신의 차별점(전체 vocabulary 정확 계산, 검증가능 reward 재부착 없음)을 설명한다. 이 인용 목록 자체가, 최소 다섯 개 조직(DeepSeek·NVIDIA·Xiaomi·Kimi/Moonshot·Upstage)이 “전문가별로 따로 키운 뒤 증류로 합친다”는 같은 구조에 도달했다는 방증이다.</p> <p>열두 개의 250B급 교사를 가속기에 동시에 올릴 수 없다는 순수 엔지니어링 문제도 구체적으로 다룬다 — GPU에는 학생과 교사 하나만 상주시키고, 나머지 열한 교사는 CPU에 파라미터 스냅샷으로 대기시키다가 라우팅된 교사를 그때그때 GPU 슬롯에 스왑해 넣는다. 마이크로배치를 라우팅된 교사별로 미리 묶어(pack) 두면 연속된 마이크로배치가 대개 같은(상주 중인) 교사를 맞혀 스왑 비용이 packed run 전체에 분산된다. 이런 인프라 디테일까지 공개한다는 점이, 앞서 “공개 수준의 편차” 절에서 Solar Open 2를 최상단에 놓은 이유다.</p> <h2 id="glm-45--outcome-supervision과-이진-포맷-게이트">GLM-4.5 — outcome supervision과 이진 포맷 게이트</h2> <p>GLM-4.5(Zhipu AI, 355B 파라미터 MoE, 32B 활성)는 이름 자체에 Agentic이 들어간다(“Agentic, Reasoning, and Coding”). Agentic RL은 웹 검색과 코드 생성 에이전트에 집중한다 — “모든 행동이나 답이 자동으로 검증 가능한” 영역을 의도적으로 골랐다고 명시한다.</p> <p>reward 설계는 이 글의 관심사인 credit 입도 관점에서 특히 단순하다. <strong>“Outcome Supervision with Process Action Format Penalty”</strong>라는 절 제목 그대로다.</p> <ul> <li>웹 검색 태스크는 <strong>최종 답의 정확도</strong>를 궤적 전체의 reward로 준다.</li> <li>코딩 에이전트는 검증 가능한 테스트 케이스가 있는 SWE 데이터를 주로 쓴다(다른 여러 모델과 마찬가지로 fail-to-pass 검증).</li> <li><strong>process action format penalty</strong>: 모델이 에이전트 궤적 생성 중 올바른 도구 호출 포맷을 내지 못하면 그 자리에서 생성을 중단시키고 궤적 전체에 <strong>reward 0</strong>을 준다.</li> </ul> <p>즉 credit 단위는 정확히 두 가지뿐이다 — “궤적 전체가 옳았나”(outcome)와 “궤적 도중 포맷이 깨졌나”(이진 게이트). 턴 단위나 스텝 단위로 내려가는 중간 신호는 리포트에 없다. 이 시리즈 <a href="/blog/2026/outcome-vs-process-agentic/">#47 결과만으로는 부족하다</a>가 예측한 “긴 궤적을 outcome 하나로만 학습시키면 credit이 희석된다”는 문제에 대해, GLM-4.5가 실제로 취한 방어는 딱 하나 — 포맷이 깨지면 아예 처음부터 학습 대상에서 제외하는 것뿐이다.</p> <p>컨텍스트 관리 관련해서 한 문장이 눈에 띈다. 정책 최적화 목적함수를 정의하며 “<strong>모델이 생성한 토큰만 최적화에 쓰이고, 환경 피드백(도구 실행 결과)은 손실 계산에서 무시된다</strong>“고 명시한다. 이것이 <a href="/blog/2026/multi-turn-rl-practice/">#46 멀티턴 RL 실무 가이드</a>가 다룬 “환경 관측을 마스킹한다”는 원칙의 실전 사례다 — 에이전트가 만들지 않은 토큰(도구 응답)까지 정책 그래디언트에 태우면 안 된다는 것이다.</p> <p>hacking 관련해서는 자기증류(iterative self-distillation)를 쓴다 — RL이 정체되면 RL로 학습된 모델의 응답으로 콜드스타트 데이터를 교체해 더 강한 SFT 모델을 만들고, 그 위에서 다시 RL을 돈다. 이 반복이 “RL 학습이 시간이 오래 걸린다”는 실용적 문제를 완화하는 장치로 서술되지, hacking 방어 장치로 명시되지는 않는다.</p> <p>궤적 길이와 성공률의 관계에 대해서도 GLM-4.5는 드물게 정량적인 관찰을 남긴다. “Scaling Test-time Compute via Interaction Turns”라는 절에서, 추론 모델의 test-time scaling이 <strong>출력 토큰 수</strong>를 늘리는 것과 달리 agent 태스크는 <strong>환경과 상호작용하는 턴 수</strong>를 늘려 test-time compute를 쓴다고 구분하고, BrowseComp에서 browsing effort(상호작용 턴 수)를 늘릴수록 정확도가 매끄럽게(smoothly) 오른다고 보고한다. 이 관찰은 이 시리즈 <a href="/blog/2026/outcome-vs-process-agentic/">#47 결과만으로는 부족하다</a>의 체크리스트 1번 — “궤적 길이와 성공률을 먼저 재라” — 에 가장 가까이 다가간 공개 수치이지만, 정작 “턴 수가 늘 때 credit이 어떻게 옅어지는가”는 다루지 않는다. 성공률 곡선은 공개해도 그 곡선 뒤의 학습 실패(그룹 붕괴) 데이터는 공개하지 않는 셈이다.</p> <h2 id="deepseek-v4--리포트가-침묵하는-지점">DeepSeek-V4 — 리포트가 침묵하는 지점</h2> <p>DeepSeek-V4(DeepSeek-AI, 1.6T 파라미터 Pro / 284B Flash)는 리포트 전체가 25,489단어에 달하지만 <strong>“reward”라는 단어가 단 7회</strong>만 등장한다. 리포트의 중심은 million-token 컨텍스트를 위한 하이브리드 attention 아키텍처와 DSec 샌드박스 인프라이고, agentic reward 설계는 다음 두 문장으로 요약된다.</p> <blockquote> <p>“각 목표 도메인(수학·코딩·<strong>agent</strong>·지시 따르기)에 대해 별도의 전문가 모델을 독립적으로 학습시킨다. RL은 Group Relative Policy Optimization(GRPO)을 적용하며, <strong>특정 성공 기준에 맞춘 reward model</strong>의 안내를 받는다.”</p> </blockquote> <p><strong>“특정 성공 기준(specific success criteria)”</strong>이 agent 도메인의 reward가 실제로 무엇을 재는지에 대한 유일한 서술이다. 도구 호출 정확성인지, 실행 성공인지, 궤적 길이인지 — 어느 쪽도 구체화되지 않는다. 이 모호함 자체가 이 글의 발견이다: DeepSeek-V4는 agent를 4대 도메인 전문가 중 하나로 <strong>분명히 명시</strong>하면서도, 그 전문가를 훈련시키는 reward 함수는 공개하지 않는다.</p> <p>한 가지 흥미로운 구조적 정보는 있다. 검증 불가능한 태스크에는 <strong>Generative Reward Model(GRM)</strong>을 쓰되, “actor 네트워크가 GRM 역할을 겸한다”고 서술한다 — 판정 능력과 생성 능력이 하나의 모델 안에서 함께 RL로 최적화된다는 뜻이다. 이는 <a href="/blog/2026/agentic-judge-rubric/">#54</a>이 다룬 judge 자기평가 아이디어의 한 극단적 형태지만, 이 GRM이 agentic 궤적 채점에도 쓰이는지는 리포트에 명시돼 있지 않다.</p> <p>컨텍스트 관리는 상대적으로 구체적이다 — 이전 버전(V3.2)이 새 사용자 턴이 오면 추론 흔적을 버리던 것과 달리, V4는 사용자 메시지 경계를 넘어서도 <strong>전체 추론 이력을 보존</strong>해 도구 호출 시나리오에서 일관된 사고 사슬을 유지한다고 서술한다. 이 부분은 <a href="/blog/2026/multi-turn-rl-practice/">#46</a>의 컨텍스트 관리 논의와 직접 연결되지만, RL 학습이 아니라 추론(inference) 시점의 설계로 서술돼 있다.</p> <p>정리하면: 도메인 분류(agent를 별도 전문가로 둠), 알고리즘(GRPO→on-policy 증류), 추론 흔적 보존 정책은 구체적이다. 그런데 정작 이 글의 핵심 질문 — agent reward가 무엇을 재고, credit을 어떻게 나누는가 — 는 “성공 기준에 맞춘 reward”라는 한 구절 밖으로 나오지 않는다.</p> <h2 id="qwen3--agentic이라는-단어가-한-번도-안-나온다">Qwen3 — “Agentic”이라는 단어가 한 번도 안 나온다</h2> <p>Qwen3(Alibaba, 최대 235B-A22B MoE, 8개 밀집 모델 포함)의 리포트에서 흥미로운 사실 하나: <strong>“agentic”이라는 형용사가 정확히 0회</strong> 등장한다. “agent”(명사)는 22회 쓰이지만, 그중 절반 이상이 “Agent &amp; Coding”이라는 벤치마크 카테고리 표 헤더 반복이다.</p> <p>실제 학습 서술은 General RL 단계의 다섯 능력 중 하나로 “Agent Ability”가 한 문단 등장하는 것이 전부다.</p> <blockquote> <p>“Agent Ability: 이 능력은 모델이 지정된 인터페이스를 통해 도구를 정확히 호출하도록 학습시키는 것이다. RL rollout 동안 모델은 실제 환경 실행 피드백과 함께 완전한 멀티턴 상호작용 사이클을 수행할 수 있으며, 이를 통해 장기 지평 의사결정 태스크에서의 성능과 안정성을 향상시킨다.”</p> </blockquote> <p>이 한 문단이 agent 관련 RL 서술의 전부다. General RL 단계는 20개 이상의 세부 태스크를 아우르는 reward 시스템을 쓰고, 그 reward를 세 유형으로 나눈다 — 규칙 기반, reference 답이 있는 model-based, reference 없는 model-based(선호 기반 스칼라 RM). 그런데 이 세 유형 중 <strong>Agent Ability에 정확히 무엇이 쓰이는지는 명시되지 않는다</strong>. “환경 실행 피드백”이라는 표현으로 미루어 규칙 기반(도구 호출 성공/실패)일 가능성이 높지만, 리포트가 확언하지 않으므로 이 글에서도 단정하지 않는다.</p> <p>작은 모델(0.6B~30B-A3B)에는 아예 RL을 적용하지 않고 큰 모델(32B, 235B-A22B)에서 <strong>off-policy 증류 → on-policy 증류</strong>로 지식을 옮긴다. 리포트는 이 선택을 명시적으로 정당화한다 — “강한 teacher 모델로부터의 증류가 성능과 학습 효율 양쪽에서 RL을 확연히 능가한다.” 이 문장은 이 글의 다른 발견(전문가→증류 구조로의 수렴)과 다른 방향을 가리킨다는 점에서 흥미롭다. Kimi K3·Solar Open 2·DeepSeek-V4는 “전문가별로 RL을 각각 돌린 뒤 증류”하지만, Qwen3의 작은 모델들은 “RL 자체를 건너뛰고 증류만” 쓴다 — 증류가 RL을 보완하는 게 아니라 대체하는 극단적 사례다.</p> <h2 id="k-exaone-20--오프라인-preference로-옮겨간-agentic-판정">K-EXAONE 2.0 — 오프라인 preference로 옮겨간 agentic 판정</h2> <p>K-EXAONE 2.0(LG AI Research, 750B 파라미터 MoE, 37B 활성)은 mid-training 단계에서 agentic 데이터를 상당히 공들여 구축한다 — 일반 도구 사용(persona 기반 합성 MCP 서버·시나리오), agentic search(BrowseComp 스타일의 depth/breadth 지향 질의), SWE(fail-to-pass/pass-to-pass 검증) 세 갈래다. SWE 데이터 구축 파이프라인은 여러 프로그래밍 언어(Python·Go·JavaScript·TypeScript)의 저장소에서 LLM으로 Docker 환경을 만들고 <strong>반복적 검증 루프</strong>로 다듬은 뒤, 검증된 환경 안에서 이슈 설명과 패치를 생성하고 fail-to-pass·pass-to-pass 테스트 케이스를 추출한다. 마지막으로 이슈 설명과 패치가 정합적인지, oracle 실행으로 패치가 실제로 이슈를 해결하는지까지 확인한다 — Solar Open 2·GLM-4.5와 동일한 계열의 실행 기반 검증이다. 하지만 <strong>이 데이터가 최종적으로 어떤 reward로 학습되는지는 온라인 RL이 아니라 오프라인 preference 단계에서 결정된다.</strong></p> <p>Post-training은 SFT 다음에 두 단계 preference optimization을 둔다 — 범용 지시 따르기·추론 성능 개선(multi-task), 그다음 안전성(safety-aware). 두 단계 모두 <strong>GrouPER</strong>(Group-wise SimPER)라는 groupwise preference 목적함수로 학습한다. agentic 시나리오의 판정 기준은 다음 한 문장이다.</p> <blockquote> <p>“agentic 시나리오에서는 에이전트 행동과 응답의 <strong>정확성</strong>뿐 아니라, 최종 답의 <strong>품질·깊이·포괄성</strong>까지 평가해 더 효과적인 preference supervision을 이끌어낸다.”</p> </blockquote> <p>이 문장이 브리프가 미리 짚은 “행동의 정확성·품질로 판정한다”는 서술의 원문이다. 수학·코딩은 검증 가능한 신호로 chosen/rejected를 가르고, agentic·chat 태스크는 도메인별 기준으로 정의한 “바람직한 응답 선택 기준”과 “거부된 응답의 바람직하지 않은 패턴에 대한 페널티”로 reward를 설계한다고 서술하지만, 그 기준이 규칙인지 judge rubric인지는 명시되지 않는다. 길이 편향을 막으려 chosen/rejected 응답 길이를 비슷하게 맞춘다는 점은 명시적이다.</p> <p>한 가지 확인이 필요한 대목: 초록에는 온라인 RL과 함께 <strong>AGAPO</strong>라는 자체 개발 알고리즘이 GrouPER와 나란히 언급된다. 그런데 본문을 끝까지 훑어도 AGAPO에 대한 추가 설명은 없다 — 인용 [2]는 이전 세대 리포트(EXAONE 4.0)를 가리킨다. 즉 AGAPO가 agentic RL에 쓰였는지, 쓰였다면 어떤 형태인지는 <strong>이 리포트만으로는 확인할 수 없다</strong>. 공개 자료에 없는 것으로 남겨둔다.</p> <p>credit 단위는 pairwise 응답 그룹(GrouPER가 요구하는 candidate group) 단위이므로, 여기서도 trajectory 레벨을 벗어나지 않는다. 다만 온라인 RL(경쟁 모델 대부분이 쓰는 방식) 대신 <strong>오프라인 preference로 agentic 판정을 옮겼다</strong>는 점 자체가 이 비교에서 K-EXAONE 2.0만의 선택이다.</p> <h2 id="minimax-m1--cispo의-원산지-그러나-agentic-전용-트랙은-없다">MiniMax-M1 — CISPO의 원산지, 그러나 agentic 전용 트랙은 없다</h2> <p>MiniMax-M1은 이 시리즈의 필수 조사 대상은 아니지만, A.X K2가 채택한 <strong>CISPO</strong>의 원 논문이라 짚어둘 가치가 있다. CISPO는 token 단위 클리핑 대신 importance-sampling 가중치를 클립해, “However”·”재검토” 같은 확률은 낮지만 추론에 결정적인 토큰이 그래디언트에서 잘려나가지 않게 한다.</p> <p>agentic 관련해서는 두 갈래로 갈린다. <strong>소프트웨어 엔지니어링</strong>은 실행 기반 verifiable reward를 쓴다 — 컨테이너 샌드박스에서 실제 코드를 실행해 사전 정의되거나 새로 생성된 테스트 케이스의 통과 여부로 채점하며, 성공은 양의 reward, 컴파일 오류·런타임 실패·회귀는 0 또는 음의 reward를 받는다. 반면 <strong>일반 도메인</strong>은 규칙으로 검증하기 어려운 2만 5천 개 샘플을 reward model 기반 feedback으로 학습한다. 그런데 이 두 갈래 중 어느 쪽에도 <strong>agentic tool use를 위한 전용 RL 트랙은 없다</strong> — TAU-bench는 평가 벤치마크로만 등장하고, 학습 데이터 구성은 서술되지 않는다. “reward” 자체는 34회로 아홉 모델 중 밀도(문서 1천 단어당)가 가장 높은 편이지만, 그 밀도의 대부분은 수학·코드 RLVR 서술에서 나온다.</p> <h2 id="llama-4--agentic-rl이-사실상-등장하지-않는다">Llama 4 — agentic RL이 사실상 등장하지 않는다</h2> <p>Llama 4(Meta) 공식 블로그(2025년 4월, 12분 분량 글) 전체를 grep한 결과는 다음과 같다. <strong>“agentic” 0회, “trajectory” 0회, “reward” 0회, “credit” 0회.</strong> “agent”는 정확히 1회 등장하는데, 이마저도 학습된 모델의 agentic 능력이 아니라 red-teaming 자동화 도구인 <strong>GOAT(Generative Offensive Agent Testing)</strong>를 가리킨다 — 즉 “에이전트”라는 단어가 나오는 유일한 자리가 공격 시뮬레이션 도구 이름이다. “tool”은 6회 나오지만 전부 Llama Guard·Prompt Guard 같은 <strong>제3자 안전 도구</strong>를 가리키며, 모델 자신의 tool-calling 학습과는 무관하다.</p> <p>post-training 서술은 다음이 전부다 — “<strong>lightweight SFT → online RL → lightweight DPO</strong>“라는 파이프라인, 쉬운 데이터의 50% 이상을 걷어낸 난이도 필터링, 어려운 프롬프트로 계속 필터링하며 지속적으로 도는 continuous online RL 전략. 이 online RL이 정확히 어떤 reward로 무엇을 최적화하는지, agentic·tool-use 태스크가 이 파이프라인 어디에 들어가는지는 서술되지 않는다. Behemoth(2T 파라미터 teacher) 절에서도 “hard prompt를 pass@k로 선별해 커리큘럼을 구성했다”는 일반적 RL 서술만 있을 뿐, agentic 특화 내용은 없다.</p> <p>이 글의 조사 대상 아홉 모델 가운데 agentic RL에 대해 가장 침묵하는 자료다. <strong>공개 자료에 없음.</strong></p> <h2 id="gemma-4--참고문헌에만-등장하는-agentic">Gemma 4 — 참고문헌에만 등장하는 “agentic”</h2> <p>Gemma 4(Google DeepMind) arXiv 리포트를 grep하면 얼핏 “agentic” 3회, “agent” 5회로 완전한 0은 아니다. 그런데 이 등장 위치를 확인하면 이야기가 달라진다 — <strong>세 번의 “agentic” 등장 모두 참고문헌 목록 안</strong>, 즉 Gemini 2.5·Kimi K2.5·GLM-5 같은 <strong>다른 논문의 제목을 인용하는 자리</strong>에서만 나온다. 본문(참고문헌 이전, 전체 문서의 절반가량)에는 “agentic”이 단 한 번도 등장하지 않는다. “agent”도 마찬가지로 전부 참고문헌의 τ²-bench·Terminal-bench 인용에서만 나온다.</p> <p>본문에서 확인 가능한 agentic 관련 유일한 흔적은 채팅 템플릿 부록이다 — 함수 선언과 함수 호출을 감싸는 전용 특수 토큰(tool 선언용, tool_call 호출용) 포맷 예시가 표로 제공된다. 즉 Gemma 4가 tool-calling 인터페이스를 지원한다는 사실은 확인되지만, <strong>그 인터페이스를 어떤 reward로, 어떤 RL 절차로 학습시켰는지는 리포트 어디에도 서술돼 있지 않다.</strong></p> <p>이 결과는 #59가 짚은 “Gemma의 실제 RL 레시피(BOND·WARM·WARP)가 helpfulness reward 축에서는 비교적 상세히 공개됐다”는 관찰과 대조적이다. 같은 리포트가 helpfulness 축에서는 말이 많고 agentic 축에서는 완전히 침묵한다 — <strong>공개의 밀도는 축마다 다르다</strong>는 이 글의 핵심 관찰을 가장 극명하게 보여주는 사례다. <strong>공개 자료에 없음.</strong></p> <h1 id="experiments">Experiments</h1> <h2 id="수렴--세-팀-이상이-같은-선택을-한-지점">수렴 — 세 팀 이상이 같은 선택을 한 지점</h2> <p><strong>1. 전문가별 학습 후 증류.</strong> Kimi K3(9전문가→MOPD), Solar Open 2(12전문가→MOPD, 이름까지 동일), DeepSeek-V4(4도메인 전문가→on-policy 증류, 역-KL)가 같은 구조에 도달했다. Solar Open 2가 인용한 선행연구 목록(DeepSeek-AI·NVIDIA·Xiaomi·자기 자신)을 보면 이 구조가 최소 다섯 조직에서 독립적으로(혹은 서로 참조하며) 수렴했다는 정황이 있다. agent 도메인은 이 “전문가 풀” 안에서 거의 항상 하나의 독립된 전문가로 취급된다(Kimi K3의 general/coding agents, Solar Open 2의 “agents &amp; tools” 계열, DeepSeek-V4의 agent 전문가).</p> <p><strong>2. SWE는 fail-to-pass/pass-to-pass로 검증한다.</strong> GLM-4.5·MiniMax-M1·Solar Open 2·Kimi K3(샌드박스) 모두 코드 에이전트의 핵심 reward를 <strong>테스트 실행 성공 여부</strong>로 삼는다. 이 시리즈 <a href="/blog/2026/swe-agent-rl/">#56 코드 에이전트</a>가 다룬 “검증 가능한 채점”의 표준 구현이 정확히 이 형태다 — 정답 패치 적용 전 실패, 적용 후 통과.</p> <p><strong>3. 판정형 reward(judge·rubric)가 검증 불가능 영역의 표준이 됐다.</strong> Kimi K3(Agentic GRM), A.X K2(게이트형 pointwise judge), Solar Open 2(graded process rubric + LLM coherence judge), K-EXAONE 2.0(agentic 응답의 정확성+깊이 judge)까지 넷이 명시적으로 judge·rubric을 쓴다. 규칙만으로 agentic reward를 완결하는 모델은 없다.</p> <p><strong>4. verbosity/포맷 hacking에 명시적 방어를 둔다.</strong> Kimi K3(budget 기반 verbosity 제어, 토큰 예산 초과 시 reward −1), A.X K2(anti-verbosity judge 안전장치 + group-relative length penalty), GLM-4.5(포맷 위반 시 reward 0 이진 게이트), Solar Open 2(malformed-tool-call 필터링) — 넷 모두 “판정 지점 아래는 추정이고 hacking된다”(<a href="/blog/2026/reward-shaping-agentic/">#51</a>)는 문제에 대해 <strong>사후 필터/페널티</strong>로 대응한다는 공통점이 있다. 사전에 판정 자체를 더 세밀하게 만드는 방식(예: 턴 단위 credit)으로 대응한 사례는 없다.</p> <h2 id="분기--갈라진-지점">분기 — 갈라진 지점</h2> <p><strong>1. credit 입도가 이론보다 훨씬 거칠다.</strong> 이 시리즈 10부가 상세히 다룬 턴·스텝·토큰 단위 credit assignment는 아홉 모델의 <strong>주 reward</strong>로는 어디에도 쓰이지 않는다. Kimi K3의 per-token 신호는 MOPD 증류 목적함수이지 원본 task reward가 아니다. 유일하게 trajectory보다 세밀해지는 곳은 Solar Open 2의 rubric-기준 단위 채점이다. 이론과 실전 사이의 이 격차는 이 글에서 가장 뚜렷한 발견이다 — 아래 “credit assignment” 키워드 카운트가 이를 숫자로 확인해준다.</p> <p>왜 이 격차가 생기는지, Method에서 확인한 사실만으로 추론해보면 셋으로 정리된다.</p> <ul> <li><strong>검증 비용이 턴 수만큼 곱해진다.</strong> trajectory 하나를 한 번 채점하는 대신 턴마다 채점하려면, 환경 검증(테스트 실행)이든 judge 호출이든 비용이 턴 수에 비례해 늘어난다. Kimi K3가 5,100만 개의 샌드박스를 쓰고도 Agentic GRM은 여전히 후보 궤적 전체를 한 번에 비교하는 이유, Solar Open 2가 완전 비동기 인프라까지 새로 지어야 했던 이유가 여기 있다 — trajectory 레벨 채점조차 인프라를 갈아엎어야 할 만큼 비싸다.</li> <li><strong>중간 상태를 채점할 명확한 기준이 도메인마다 다르다.</strong> SWE는 fail-to-pass 테스트라는 명확한 종료 조건이 있어 턴 중간에도 “지금까지 옳은 방향인가”를 판단하기 쉽지만, 일반 대화형 에이전트나 오피스워크처럼 “무엇이 옳은 중간 상태인가”가 불분명한 도메인에서는 턴 단위 채점 자체가 추가 judge 호출 — 즉 새로운 hacking 표면 — 을 하나 더 만드는 셈이다.</li> <li><strong>judge에게 부분 궤적을 판정하게 하면 judge가 더 쉽게 뚫린다.</strong> <a href="/blog/2026/agentic-judge-rubric/">#54</a>이 다룬 judge 기반 채점은 완결된 결과물을 보고 판단할 때 가장 신뢰도가 높다. 미완성 궤적 중간 지점을 채점하게 하면 판단 근거 자체가 줄어들어, A.X K2가 굳이 게이트(“완결되고 실행 가능한 transcript인가”)를 pointwise judge 앞에 세운 이유와 같은 논리로, 신뢰할 만한 부분 판정이 오히려 더 어렵다.</li> </ul> <p>세 이유 모두 “이론이 게을러서가 아니라 실전의 비용·신뢰도 제약이 이론을 못 따라간다”는 쪽을 가리킨다. 이 시리즈 <a href="/blog/2026/step-level-credit/">#49</a>~<a href="/blog/2026/token-segment-credit/">#50</a>이 제안한 스텝·토큰 단위 기법들이 대부분 연구 벤치마크(ALFWorld, WebShop 같은 통제된 환경) 위에서 검증됐다는 점과 겹쳐 보면, 이 기법들이 3T급 모델의 프로덕션 파이프라인에 아직 이식되지 않았다는 뜻으로 읽을 수 있다.</p> <p><strong>2. agent를 독립 도메인으로 두느냐, 일반 RL의 한 태스크로 묻느냐.</strong> Kimi K3·Solar Open 2·A.X K2·DeepSeek-V4는 agent를 <strong>독립된 전문가/그룹</strong>으로 분리한다. 반면 Qwen3는 “Agent Ability”를 General RL 단계의 20여 개 태스크 중 하나로, K-EXAONE 2.0은 온라인 RL이 아니라 오프라인 preference 단계에 agentic 판정을 접어 넣는다. 전자는 agent 전용 reward·커리큘럼을 설계할 여지가 크고, 후자는 다른 능력과 자원을 공유한다.</p> <p><strong>3. 온라인 RL vs 오프라인 preference.</strong> 여덟 모델(Llama 4 제외) 중 K-EXAONE 2.0만 agentic 판정을 <strong>오프라인 preference optimization</strong>(GrouPER)에 맡긴다. 나머지는 온라인 RL rollout 중에 agentic reward를 준다. 이 선택이 credit 입도에도 영향을 준다 — 오프라인 preference는 애초에 완결된 응답 쌍을 비교하는 구조라 trajectory 레벨보다 세밀해지기 구조적으로 어렵다.</p> <h2 id="공개-수준의-편차">공개 수준의 편차</h2> <p>문서 종류로 나누면 이렇다.</p> <table> <thead> <tr> <th>문서 종류</th> <th>모델</th> <th>agentic RL 서술 밀도</th> </tr> </thead> <tbody> <tr> <td>GitHub PDF tech report</td> <td>Kimi K3, A.X K2</td> <td>높음 — 전용 절, 구체 메커니즘, 정량 수치(5,100만 샌드박스 등)</td> </tr> <tr> <td>arXiv 프리프린트(상세)</td> <td>Solar Open 2, GLM-4.5</td> <td>높음 — 전용 절, 환경 검증 파이프라인 상세</td> </tr> <tr> <td>arXiv 프리프린트(중간)</td> <td>K-EXAONE 2.0</td> <td>중간 — 문단 단위 서술, 핵심 알고리즘(AGAPO) 세부는 비공개</td> </tr> <tr> <td>arXiv 프리프린트(얕음)</td> <td>DeepSeek-V4, Qwen3, MiniMax-M1</td> <td>낮음 — 한두 문단, 구체 reward 함수 비공개</td> </tr> <tr> <td>arXiv 프리프린트(부재)</td> <td>Gemma 4</td> <td>없음 — 본문 0회, 참고문헌에만 흔적</td> </tr> <tr> <td>공식 블로그</td> <td>Llama 4</td> <td>없음 — “online RL” 한 구절 외 전무</td> </tr> </tbody> </table> <p>이 표에서 눈에 띄는 점: <strong>문서 종류가 곧 공개 수준을 결정하지 않는다.</strong> Gemma 4와 DeepSeek-V4·Qwen3·MiniMax-M1은 전부 arXiv 프리프린트지만 공개 밀도는 하늘과 땅 차이다. tech report를 arXiv 대신 GitHub에 올린 Kimi K3·A.X K2가 오히려 arXiv에 올라간 여러 모델보다 훨씬 상세하다. 즉 “어디에 공개했나”보다 “무엇을 공개하기로 했나”라는 팀의 선택이 더 크게 작용한다.</p> <p>이 편차의 동기까지는 공개 문서만으로 단정할 수 없지만, 정황은 남겨둘 만하다. Kimi K3·DeepSeek-V4·GLM-4.5·Solar Open 2·A.X K2·K-EXAONE 2.0은 오픈소스 모델 가중치를 배포하는 팀이고, 상세 리포트는 연구 커뮤니티의 채택·2차 연구를 유도하는 문서로 기능한다 — 특히 Solar Open 2·A.X K2·K-EXAONE 2.0 세 한국 팀은 자국어 벤치마크(Ko-GDPval·한국어 평가군)까지 새로 만들어 공개할 만큼 투명성에 무게를 둔다. 반대로 Llama 4·Gemma 4는 이미 폭넓게 채택된 모델 계열의 신버전이라, 블로그·리포트가 연구 커뮤니티보다 일반 개발자·제품 팀을 향한 요약본에 가깝다 — 벤치마크 표는 상세해도 설계 서술은 짧다. 이 구분이 정확히 “agentic RL 공개 여부”와 겹친다는 점은, 공개 수준이 능력의 함수가 아니라 <strong>문서가 누구를 향해 쓰였는가</strong>의 함수라는 이 절의 결론을 한 번 더 뒷받침한다.</p> <h1 id="통계-요약">통계 요약</h1> <p>아홉 모델(+MiniMax-M1)의 리포트 본문에서 다섯 단어의 등장 횟수를 셌다. 괄호 안은 문서 1,000단어당 밀도다.</p> <table> <thead> <tr> <th>모델</th> <th>본문 길이(단어)</th> <th>agentic</th> <th>agent</th> <th>tool</th> <th>reward</th> <th>credit assignment</th> </tr> </thead> <tbody> <tr> <td>Kimi K3</td> <td>28,771</td> <td>50 (1.7)</td> <td>149 (5.2)</td> <td>70 (2.4)</td> <td>21 (0.7)</td> <td>0</td> </tr> <tr> <td>A.X K2</td> <td>19,697</td> <td>34 (1.7)</td> <td>50 (2.5)</td> <td>17 (0.9)</td> <td>23 (1.2)</td> <td>0</td> </tr> <tr> <td>GLM-4.5</td> <td>12,612</td> <td>41 (3.3)</td> <td>90 (7.1)</td> <td>42 (3.3)</td> <td>30 (2.4)</td> <td>0</td> </tr> <tr> <td>DeepSeek-V4</td> <td>25,489</td> <td>29 (1.1)</td> <td>61 (2.4)</td> <td>50 (2.0)</td> <td>7 (0.3)</td> <td>0</td> </tr> <tr> <td>Qwen3</td> <td>17,701</td> <td>0 (0.0)</td> <td>22 (1.2)</td> <td>5 (0.3)</td> <td>12 (0.7)</td> <td>0</td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>17,621</td> <td>39 (2.2)</td> <td>66 (3.7)</td> <td>33 (1.9)</td> <td>3 (0.2)</td> <td>0</td> </tr> <tr> <td>Solar Open 2</td> <td>14,843</td> <td>13 (0.9)</td> <td>82 (5.5)</td> <td>18 (1.2)</td> <td>13 (0.9)</td> <td>0</td> </tr> <tr> <td>Llama 4</td> <td>3,555</td> <td>0 (0.0)</td> <td>1 (0.3)</td> <td>6 (1.7)</td> <td>0 (0.0)</td> <td>0</td> </tr> <tr> <td>Gemma 4</td> <td>7,337</td> <td>3(전부 참고문헌)</td> <td>5(전부 참고문헌)</td> <td>10</td> <td>0</td> <td>0</td> </tr> <tr> <td>MiniMax-M1</td> <td>10,846</td> <td>7 (0.6)</td> <td>20 (1.8)</td> <td>19 (1.8)</td> <td>34 (3.1)</td> <td>0</td> </tr> </tbody> </table> <p>가장 중요한 열은 마지막 열이다. <strong>“credit assignment”는 열 개 문서 전부에서 0회다.</strong> 이 시리즈 10부 전체(5편, <a href="/blog/2026/outcome-vs-process-agentic/">#47</a>~<a href="/blog/2026/reward-shaping-agentic/">#51</a>)와 11부 전체(3편, <a href="/blog/2026/environment-as-reward/">#52</a>~<a href="/blog/2026/agentic-judge-rubric/">#54</a>)가 다룬 핵심 용어가, 그 문제를 실제로 풀고 있을 프론티어 팀들의 공개 문서 어디에도 등장하지 않는다. 이 부재를 두 가지로 해석할 수 있다 — (a) 팀들이 이 문제를 인식하되 다른 용어(예: “outcome supervision”, “process rubric”, “budget-based penalty”)로 표현하거나, (b) 실제로 trajectory 레벨보다 세밀한 credit 설계를 하지 않고 있거나. Method에서 확인했듯 실제 메커니즘을 보면 (b)에 가깝다 — 세밀한 credit assignment 알고리즘(GAE류 turn-level advantage, per-step reward shaping 등)을 명시적으로 채택했다고 서술한 모델은 없다.</p> <p>“agentic” 밀도가 가장 높은 GLM-4.5(3.3)와 가장 낮은 Qwen3·Llama 4(0.0)의 격차는 단순한 우연이 아니다 — GLM-4.5는 모델명 자체에 Agentic을 넣을 만큼 이 능력을 정체성으로 내세우고, Qwen3·Llama 4는 agent를 여러 능력 중 하나로만 다룬다. 다만 이 밀도가 실제 설계 깊이와 항상 일치하지는 않는다 — Solar Open 2는 “agent”라는 단어를 압도적으로 많이 쓰면서도(5.5) “agentic”이라는 형용사형은 상대적으로 적게 쓴다(0.9). 리포트가 “Agent Scenarios”라는 절 제목을 쓰기 때문인데, 이는 이 글이 앞서 짚은 함정을 스스로 보여준다 — <strong>단어 하나의 빈도만으로 설계의 깊이를 판단하면 안 된다.</strong> 그래서 이 글은 밀도 표와 함께 반드시 원문 인용·구체 메커니즘을 나란히 제시했다.</p> <h1 id="conclusion">Conclusion</h1> <h2 id="핵심-메시지">핵심 메시지</h2> <p>아홉 개 프론티어 모델의 공개 자료를 가로지른 결과는 셋으로 요약된다.</p> <ol> <li><strong>“전문가별 RL 후 증류”가 지배적 구조로 자리 잡았다.</strong> 최소 다섯 조직이 이 구조에 도달했고, 그중 둘(Kimi K3·Solar Open 2)은 MOPD라는 이름까지 같다. agent는 거의 항상 이 전문가 풀 안의 독립된 한 축이다.</li> <li><strong>credit 입도는 이론이 준비한 만큼 세밀해지지 않았다.</strong> trajectory·outcome 레벨이 사실상의 표준이고, 유일한 예외(Solar Open 2의 rubric-기준 단위)조차 turn-level·token-level에는 못 미친다. “credit assignment”라는 용어 자체가 조사한 모든 문서에서 0회 등장한다는 사실이 이를 숫자로 뒷받침한다.</li> <li><strong>공개 수준의 편차가 실제 능력 격차보다 훨씬 크다.</strong> Llama 4·Gemma 4는 벤치마크 점수는 공개하면서 그 점수를 만든 reward 설계는 사실상 감춘다. 반대로 Solar Open 2·Kimi K3·A.X K2는 환경 검증 메커니즘과 인프라 수치까지 상세히 공개한다.</li> </ol> <h2 id="시리즈-전체-체크리스트">시리즈 전체 체크리스트</h2> <p>9부부터 여기까지를 하나의 설계 체크리스트로 압축하면 이렇다. 이번 글에서 실제로 확인된 사례를 항목마다 하나씩 붙인다.</p> <ol> <li><strong>궤적 길이와 성공률을 먼저 재라 — 그룹 붕괴가 얼마나 일어나는가.</strong> (<a href="/blog/2026/outcome-vs-process-agentic/">#47</a>) — GLM-4.5는 상호작용 턴 수를 늘릴수록 정확도가 매끄럽게 오른다고 보고하고, Kimi K3는 RL FLOPs가 늘수록 평균 스텝 수가 늘어나며 능력이 함께 개선된다고 보고한다. 다만 “그룹이 얼마나 붕괴했는가”를 직접 수치로 공개한 모델은 없다.</li> <li><strong>환경이 진짜 신호를 주는 가장 세밀한 지점이 어디인가.</strong> (<a href="/blog/2026/environment-as-reward/">#52</a>) — SWE의 fail-to-pass/pass-to-pass 테스트, Solar Open 2의 mutation-후-read-back 검증기가 가장 세밀한 사례다.</li> <li><strong>그 지점까지만 입도를 내려라.</strong> (<a href="/blog/2026/turn-level-reward/">#48</a>~<a href="/blog/2026/token-segment-credit/">#50</a>) — 실전에서는 이 조언조차 “그 지점”에 못 미친다. 대부분 trajectory 레벨에 머물고 Solar Open 2의 rubric-기준만 한 단계 더 내려간다.</li> <li><strong>그 아래는 추정이고, 추정은 hacking된다.</strong> (<a href="/blog/2026/reward-shaping-agentic/">#51</a>) — Kimi K3의 Agentic GRM verbosity 제어, A.X K2의 anti-verbosity 안전장치가 정확히 이 문제(judge의 추정을 궤적이 악용하는 것)에 대한 사후 대응이다.</li> <li><strong>판정 정의가 대리 지표인지 확인하라.</strong> (<a href="/blog/2026/agentic-reward-hacking/">#58</a>) — A.X K2의 게이트형 judge(구조적 유효성을 먼저 확인한 뒤에만 judge에 넘김)가 “유창함”이라는 대리 지표에 낚이지 않으려는 명시적 설계다.</li> <li><strong>여러 보상을 어떻게 결합했는지 명시하라.</strong> (<a href="/blog/2026/agentic-reward-hacking/">#58</a>) — A.X K2의 GDPO(reward별 분리 정규화 후 결합), Solar Open 2의 규칙 체커+judge rubric 병행이 명시적 사례다. DeepSeek-V4·Qwen3는 이 결합 방식을 구체화하지 않는다.</li> <li><strong>환경 관측 마스킹, 컨텍스트 관리.</strong> (<a href="/blog/2026/multi-turn-rl-practice/">#46</a>) — GLM-4.5의 “환경 피드백은 손실 계산에서 무시된다”는 문장이 가장 명시적인 사례다. DeepSeek-V4·K-EXAONE 2.0은 추론 흔적을 멀티턴 경계 너머로 보존하는 정책을 서술한다.</li> </ol> <h2 id="한계">한계</h2> <p>이 글의 방법론적 한계를 정직하게 남긴다. 첫째, 키워드 카운트는 리포트가 특정 표현을 얼마나 자주 쓰는지를 잴 뿐, 실제 코드나 실험에서 무엇을 했는지는 알 수 없다 — 공개하지 않은 것과 하지 않은 것을 완전히 구분할 수 없다. 둘째, 리포트 간 길이 격차(3,555~28,771단어)가 커서 원시 등장 횟수만으로 비교하면 왜곡이 생긴다(밀도로 보정했지만 밀도 역시 완벽하지 않다). 셋째, 이 글이 참조한 자료는 모두 각 팀이 스스로 공개한 문서다 — 실제 학습 파이프라인에는 이 문서들이 다루지 않는 추가 설계가 있을 수 있다. 그럼에도 이 세 한계를 감안하고도, “credit assignment 0회”·”Llama 4·Gemma 4의 agentic 서술 부재” 같은 발견은 문서 자체의 사실이므로 그대로 남겨둔다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Kimi Team, 2026. <a href="https://github.com/MoonshotAI/Kimi-K3">Kimi K3: Open Frontier Intelligence</a> (Moonshot AI, Tech Report). — Agentic GRM, MOPD, AgentENV 샌드박스, reasoning-effort budget RL.</li> <li>SK Telecom, 2026. <a href="https://github.com/SKT-AI/A.X-K2">A.X K2 Technical Report</a> (Tech Report). — 4그룹 mixture, 게이트형 judge, CISPO+GDPO.</li> <li>Park, Sungrae et al., 2026. <a href="https://arxiv.org/abs/2607.20062">Solar Open 2 Technical Report</a> (Upstage, arXiv). — 12전문가 MOPD, 환경 검증기, graded process rubric.</li> <li>GLM-4.5 Team (Zeng, Aohan et al.), 2025. <a href="https://arxiv.org/abs/2508.06471">GLM-4.5: Agentic, Reasoning, and Coding (ARC) Foundation Models</a> (Zhipu AI &amp; Tsinghua University, arXiv).</li> <li>DeepSeek-AI, 2026. <a href="https://arxiv.org/abs/2606.19348">DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence</a> (arXiv).</li> <li>Yang, An et al., 2025. <a href="https://arxiv.org/abs/2505.09388">Qwen3 Technical Report</a> (Alibaba, arXiv).</li> <li>Choi, Eunbi et al., 2026. <a href="https://arxiv.org/abs/2608.04505">K-EXAONE 2.0 Technical Report</a> (LG AI Research, arXiv).</li> <li>Meta AI, 2025. <a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">The Llama 4 herd: The beginning of a new era of natively multimodal AI innovation</a> (공식 블로그).</li> <li>Google DeepMind, 2026. <a href="https://arxiv.org/abs/2607.02770">Gemma 4 Technical Report</a> (arXiv).</li> <li>MiniMax, 2025. <a href="https://arxiv.org/abs/2506.13585">MiniMax-M1: Scaling Test-Time Compute Efficiently with Lightning Attention</a> (arXiv). — CISPO 원 논문.</li> <li>Liu, Shih-Yang et al., 2026. <a href="https://arxiv.org/abs/2601.05242">GDPO: Group Reward-Decoupled Normalization Policy Optimization for Multi-Reward RL Optimization</a> (arXiv). — A.X K2가 채택한 멀티리워드 정규화.</li> <li>Choi, Eunbi et al., 2026. EXAONE 4.0: Unified Large Language Models Integrating Non-reasoning and Reasoning Modes (LG AI Research). — K-EXAONE 2.0이 AGAPO의 출처로 인용하는 이전 세대 리포트(arXiv 번호 미확인, K-EXAONE 2.0 참고문헌 [2]).</li> <li><a href="/blog/2026/frontier-reward-design/">#59 프론티어 편</a> — 같은 아홉 모델(+Magistral)을 helpfulness reward 4분류(규칙·스칼라 RM·reference judge·GRM) 렌즈로 비교.</li> <li><a href="/blog/2026/frontier-safety-design/">#60 프론티어 안전성 편</a> — 같은 자료를 harmlessness 축으로, “부재도 발견”이라는 이 글의 방법론적 선례.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 예순한 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><strong>(현재 글)</strong> 프론티어 모델은 실제로 어떻게 하나 — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="rl"/><category term="agentic"/><category term="reward"/><category term="credit-assignment"/><category term="kimi"/><category term="deepseek"/><category term="qwen"/><category term="llama"/><category term="gemma"/><category term="upstage"/><category term="skt"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #61(완결) — 아홉 개 프론티어 모델의 공개 자료에서 agentic reward·credit assignment 설계만 추려 비교한다]]></summary></entry><entry><title type="html">프론티어 모델은 harmlessness reward를 어떻게 설계했나</title><link href="https://www.wonbeomjang.kr/blog/2026/frontier-safety-design/" rel="alternate" type="text/html" title="프론티어 모델은 harmlessness reward를 어떻게 설계했나"/><published>2026-08-11T01:00:00+00:00</published><updated>2026-08-11T01:00:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/frontier-safety-design</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/frontier-safety-design/"><![CDATA[<blockquote> <p>이 글은 프론티어 모델들의 공개 자료에서 <strong>안전성 reward 설계</strong>만 따로 떼어 비교한다. 능력(helpfulness) 축은 <a href="/blog/2026/frontier-reward-design/">#59</a>에서 다뤘다.</p> </blockquote> <h1 id="introduction">Introduction</h1> <p><a href="/blog/2026/frontier-reward-design/">#59</a>은 열한 개 프론티어 모델이 helpfulness reward를 어떻게 설계했는지 훑었다. 결론은 비교적 깔끔했다 — 검증 가능한 도메인(수학, 코드)에서는 규칙 기반 reward로 수렴하고, 검증 불가능한 도메인(대화, 글쓰기)에서는 GRM과 rubric judge로 갈렸다. 이 글은 같은 자료를 다시 펼치되, 이번엔 harmlessness(안전성) reward만 따로 뜯는다.</p> <p>두 축을 한 글에 묶지 않은 데는 두 가지 이유가 있다.</p> <p>첫째, <strong>문서화되는 정도 자체가 다르다.</strong> helpfulness reward는 대부분의 report가 수학·코드 벤치마크 표로 상세히 공개한다. 반면 안전성 reward는 report마다 격차가 극단적이다. Kimi K3의 47페이지 technical report에는 “safety”라는 단어가 단 한 번도 나오지 않는다. “refusal”은 다섯 번 등장하지만, 전부 다른 모델이 평가 도중 거절했다는 각주다 — 예컨대 “Claude Fable 5가 답변을 거부한 태스크 2건 포함”처럼, 벤치마크 채점 시 발생한 결측치를 설명하는 용도일 뿐 자기 모델의 안전 설계와는 무관하다. 정반대 끝에는 A.X K2가 있다. “safety” 43회, “over-refusal” 2회, “safe completion” 3회, “red-team” 6회. 같은 “technical report”라는 장르 안에 이 정도 편차가 있다는 것 자체가 이 글의 첫 번째 발견이다.</p> <p>둘째, <strong>안전 reward에는 helpfulness reward에 없는 고유한 실패 모드가 있다.</strong> 유해한 요청을 걸러내도록 reward를 세게 걸면 무해한 요청까지 거절하는 over-refusal이 따라붙는다. “베이킹소다로 배수구 뚫는 법”이 “폭발물 제조법”과 표면적으로 비슷한 화학 키워드를 공유한다는 이유만으로 거절당하는 사례가 전형적이다. capability 쪽에는 없는, harmlessness reward 설계에서만 나타나는 트레이드오프다. 그래서 이 글은 순서대로 (1) helpful과 harmless를 왜 하나의 스칼라에 담을 수 없는지, (2) 프론티어 모델들이 실제로 무엇을 공개했는지, (3) 공개된 방법 중 실제로 안전과 과잉거절을 동시에 개선한 사례가 있는지를 짚는다.</p> <p>미리 윤곽을 말하면 세 가지다.</p> <ol> <li>오픈 report를 냈다고 안전 설계를 공개하는 건 아니다. 능력·효율은 상세히 쓰면서 안전은 통째로 비우는 경우가 흔하다.</li> <li>공개된 설계들은 표현은 제각각이어도 공통된 방향을 향한다 — “거절 자체가 아니라 안전한 완수(safe completion)에 보상”한다.</li> <li>외부 벤치마크로 실측하면(<a href="/blog/2026/or-bench/">#19 OR-Bench</a>) 안전과 과잉거절을 실제로 동시에 개선한 사례는 드물다. 대부분의 모델이 하나의 트레이드오프 곡선 위에서 미끄러질 뿐이다.</li> </ol> <p>먼저 이번에 다루는 자료들이 안전 설계를 얼마나, 어떻게 공개했는지부터 층위를 나눠보면 이렇다.</p> <table> <thead> <tr> <th>모델</th> <th>문서화 정도</th> <th>근거</th> </tr> </thead> <tbody> <tr> <td>A.X K2</td> <td>상세 공개</td> <td>“safety” 43회, over-refusal 2회, safe completion 3회, red-team 6회</td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>별도 단계로 공개</td> <td>능력 학습과 분리된 safety-aware preference 단계, taxonomy 226 → 296개</td> </tr> <tr> <td>DeepSeek-R1</td> <td>파이프라인 단계로만 언급</td> <td>마지막 all-scenario RL에서 helpfulness·harmlessness RM을 재호출</td> </tr> <tr> <td>Llama 4</td> <td>결과만 공개, 방법 비공개</td> <td>거절률 7% → 2% 미만이라는 수치는 있으나 데이터·reward 변경 내역은 없음</td> </tr> <tr> <td>Gemma 3/4</td> <td>한 줄 표기</td> <td>reward 축 목록에 “minimizing model harmfulness” 한 줄</td> </tr> <tr> <td>Magistral</td> <td>범위 밖으로 명시</td> <td>검증 가능한 수학·코드만 다루고 비검증 도메인 자체를 범위 밖에 둠</td> </tr> <tr> <td>Kimi K3</td> <td>사실상 비공개</td> <td>“safety” 0회, “refusal”은 전부 타 모델 평가 각주</td> </tr> </tbody> </table> <p>아래에서 이 층위를 만드는 배경부터, 각 모델이 실제로 무엇을 했는지, 그리고 그 결과를 외부에서 재보면 무엇이 남는지 순서대로 짚는다.</p> <h1 id="background">Background</h1> <h2 id="왜-helpful과-harmless를-한-스칼라에-담을-수-없나">왜 helpful과 harmless를 한 스칼라에 담을 수 없나</h2> <p>가장 단순한 설계는 “안전하지 않으면 감점, 도움이 되면 가점”을 하나의 reward로 합치는 것이다. 문제는 이 하나의 숫자 안에서 두 목표의 교환 비율이 암묵적으로 고정된다는 데 있다. 정책이 조금이라도 유해할 확률이 있는 응답을 피하려고 전면 거절 쪽으로 쏠리면, 그 쏠림을 되돌릴 손잡이가 reward 안에 따로 없다. <a href="/blog/2026/llama2-rlhf/">#8 Llama 2</a>가 이 문제를 논문에서 직접 지적한다.</p> <blockquote> <p>“다른 연구들도 helpfulness와 safety가 종종 서로 트레이드오프 관계에 있다는 것을 발견했고, 이는 하나의 reward model이 둘 다에서 잘 작동하기 어렵게 만든다. 이를 해결하기 위해 우리는 두 개의 별도 reward model을 학습시킨다 — 하나는 helpfulness에, 다른 하나는 safety에 최적화된 모델이다.”</p> </blockquote> <p>Llama 2는 신호를 분리하는 데서 멈췄지만, <a href="/blog/2026/safe-rlhf/">#15 Safe RLHF</a>는 한 걸음 더 나아가 이 분리를 최적화 목적식 자체에 박아 넣는다. helpfulness는 reward \(R\)로, harmlessness는 cost \(C\)로 완전히 분리하고, “cost가 threshold를 넘지 않는다”는 제약을 라그랑주 승수 \(\lambda\)로 건다.</p> <ul> <li>\(R\): 응답이 얼마나 도움이 되는지 채점하는 helpfulness reward model의 출력</li> <li>\(C\): 응답이 얼마나 유해한지 채점하는 cost model의 출력 (클수록 위험)</li> <li>\(\lambda\): 제약이 깨졌을 때만 커지는 동적 계수. 안전 기준을 만족하면 다시 줄어든다</li> </ul> <p>핵심은 \(\lambda\)가 고정 가중치가 아니라 <strong>학습 중 데이터를 보고 스스로 조절되는 값</strong>이라는 점이다. 정책이 아직 위험하면 \(\lambda\)가 커져 안전 쪽으로 강하게 밀고, 안전 기준을 넘어서면 \(\lambda\)가 줄어들어 helpfulness에 다시 여유를 준다. 안전을 reward에 섞을 또 하나의 항이 아니라 넘지 말아야 할 제약으로 두는 설계다. 이 결과는 Experiments에서 수치로 확인한다.</p> <p><a href="/blog/2026/rule-based-rewards/">#16 Rule-Based Rewards</a>는 다른 방식으로 같은 원칙을 지킨다. helpfulness reward에 안전 규칙을 만족했는지 채점하는 \(r_{RBR}\)을 더하는 형태다.</p> \[r_{total} = r_{helpful} + r_{RBR}\] <p>여기서도 \(r_{helpful}\)과 \(r_{RBR}\)은 별개의 채점 결과이고, 최종 항에서만 더해진다. 두 방식 모두 “신호는 분리하되 최적화는 하나로” 돌린다는 점에서 같은 계열이다.</p> <p>신호를 분리해야 hacking을 막을 수 있다는 원칙은 안전 도메인만의 이야기가 아니다. <a href="/blog/2026/odin-disentangled-reward/">#12 ODIN</a>은 길이와 품질을 하나의 reward에 뭉쳐두면 정책이 길이만 늘려 점수를 딴다는 걸 보이고, 두 축을 별개 head로 분리해 막는다. Safe RLHF·RBR이 helpful과 harmless를 분리하는 것과 같은 문제의식이 다른 축에서도 반복해서 등장한다는 뜻이다.</p> <h2 id="over-refusal은-reward-설계-문제다">over-refusal은 reward 설계 문제다</h2> <p>harmlessness reward에만 있는 고유한 실패 모드가 over-refusal이다. 왜 안전 reward를 걸면 무해한 요청까지 거절하게 되는가. <a href="/blog/2026/shallow-safety-alignment/">#18 Shallow Safety Alignment</a>는 이 현상과 jailbreak 취약성이 <strong>같은 뿌리에서 나온다</strong>고 진단한다.</p> <p>안전 정렬이 응답의 첫 몇 토큰에만 얹히면(shallow), 모델이 실제로 배우는 건 “위험해 보이는 표면 단어가 나오면 거절 접두어를 붙여라”는 얕은 패턴이다. 이 패턴은 두 방향으로 문제를 일으킨다.</p> <ul> <li>유해한 토큰 몇 개를 강제로 앞에 채워 넣는 prefilling 공격에는 거절 습관이 아예 발동하지 않아 쉽게 뚫린다 (취약성)</li> <li>위험해 보이는 표면 단어가 들어간 무해한 요청에는 내용과 무관하게 거절 습관이 발동한다 (과잉거절)</li> </ul> <p>두 실패가 대칭적으로 같은 얕음에서 나온다는 것이 이 글의 핵심이다. reward가 “거절 여부”라는 표면 행동만 채점하고 “거절이 타당한 근거로 이어지는가”를 채점하지 않으면, 정책은 가장 값싼 지름길 — 위험해 보이는 단어에 반사적으로 반응하는 것 — 을 학습한다.</p> <p>처방도 이 진단에서 그대로 따라 나온다. 유해하게 시작했다가 거절로 복귀하는 safety recovery 예시를 학습에 넣으면, prefill 40토큰 공격 성공률이 57.0% → 4.5%로 떨어지면서도 AlpacaEval 승률 손실은 51.8% → 49.5%로 미미했다. 정렬을 응답 끝까지 깊게 박는 데 드는 비용이 생각보다 크지 않다는 뜻이다. 이 결과는 안전 reward를 설계할 때 “언제 거절 신호를 주는가”만큼 “거절 이후 응답이 어떻게 이어지는가”를 봐야 한다는 걸 보여준다.</p> <h1 id="method">Method</h1> <p>배경을 놓고 보면, 실제 프론티어 모델들이 공개한 설계는 이 원칙(신호 분리, safe completion 지향)을 각자 다른 방식으로 구현한 결과에 가깝다. 먼저 한 장으로 정리한다.</p> <table> <thead> <tr> <th>모델</th> <th>안전 신호 조달처</th> <th>신호 결합 방식</th> <th>거절 자체를 보상하는가</th> </tr> </thead> <tbody> <tr> <td>A.X K2</td> <td>red-team 프롬프트 + principle 기반 safety-preference + identity 데이터, LLM judge가 9개 안전 차원으로 채점</td> <td>4그룹 mixture 안의 한 축(비율 고정 없이 동적 조정)</td> <td>아니다 — safe completion에 보상, 유해 응답에 벌</td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>226 → 296개 위험 영역 taxonomy 기반 preference 데이터</td> <td>능력 학습과 분리된 별도 safety-aware 단계</td> <td>명시되지 않음</td> </tr> <tr> <td>DeepSeek-R1</td> <td>helpfulness·harmlessness를 함께 보는 학습된 RM</td> <td>4단계 파이프라인의 마지막 all-scenario RL에서 규칙 reward 대신 재호출</td> <td>RM 채점 기준 비공개</td> </tr> <tr> <td>Llama 4</td> <td>비공개</td> <td>online RL + DPO, 방법은 비공개</td> <td>비공개(결과만: 거절률 7% → 2% 미만)</td> </tr> <tr> <td>OpenAI · RBR</td> <td>소량 예시로 정의한 규칙을 LLM이 채점</td> <td>\(r_{total} = r_{helpful} + r_{RBR}\)로 helpful reward에 가산</td> <td>아니다 — 규칙 위반뿐 아니라 불필요한 거절도 감점</td> </tr> <tr> <td>OpenAI · Deliberative Alignment</td> <td>안전 스펙 자체를 모델이 CoT로 추론</td> <td>안전 전용 SFT + RL, RL 중 CoT는 reward model에게 비공개</td> <td>아니다 — jailbreak 견고성과 과잉거절 감소를 함께 채점</td> </tr> <tr> <td>Anthropic</td> <td>입출력 Constitutional Classifier</td> <td>정책 reward와 별도로 분류기가 게이팅</td> <td>거절 증가폭 자체를 +0.38%p로 상한을 두고 관리</td> </tr> </tbody> </table> <h2 id="ax-k2">A.X K2</h2> <p>이번 비교에서 안전 설계를 가장 상세히 공개한 축이다. 학습 mixture를 instruction following, human preference, agentic tool use, safety 네 그룹으로 나누고 비율을 미리 고정하지 않는다. 중간 RL 체크포인트로 약점을 짚어 조정하는 control surface로 다룬다.</p> <p>safety 데이터는 red-teaming 프롬프트, safety-preference 데이터, model-identity 데이터로 구성되고, red-team 응답은 LLM judge가 모욕·성인 콘텐츠·불법 행위·혐오·편향 등 harm 카테고리와 정보 관련 차원을 포함한 9개 안전 차원으로 채점한다. 핵심 문장은 report에 명시돼 있다.</p> <blockquote> <p>정책은 안전한 완수(safe completion)에 보상을 받고 유해한 응답에 벌을 받는다 — 단순히 거절했다고 보상받는 것이 아니다.</p> </blockquote> <p>safety-preference 데이터는 principle 기반 rubric으로 채점하되 데이터셋의 preferred·rejected 응답을 calibration reference로 쓰고, identity 데이터는 모델의 identity policy를 인코딩한 별도 rubric으로 채점한다. 필터링 rubric도 같은 철학을 따른다 — 사용자의 benign한 목적을 유해함 없이 충족할 수 있으면, 전면 거절 대신 유용한 안전 결과물로 우회하는 답을 선호 응답으로 삼는다.</p> <h2 id="k-exaone-20">K-EXAONE 2.0</h2> <p>능력 학습과 별도의 safety-aware preference 최적화 단계를 둔다. 1.0 대비 안전 taxonomy가 226개에서 296개 위험 영역으로 확장됐다는 것 외에, 세부 reward 구성은 report에 상세히 나오지 않는다. taxonomy 확장 자체는 “안전이 커버해야 할 범위”에 대한 인식이 넓어졌다는 신호로는 읽을 수 있지만, 그 범위를 reward에 어떻게 반영했는지는 K-EXAONE 2.0만 봐서는 알 수 없다.</p> <h2 id="deepseek-r1">DeepSeek-R1</h2> <p>4단계 파이프라인의 마지막 all-scenario RL 단계에서, 정답이 없는 일반 대화에 helpfulness·harmlessness를 보는 학습된 RM을 다시 불러온다. 앞 단계에서 수학·코드는 규칙 검증기로 처리했던 모델이, 안전이 걸린 도메인에서는 규칙만으로 부족하다는 걸 스스로 인정하고 학습된 RM으로 되돌아간 셈이다. RLVR로 검증 가능한 도메인을 완전히 대체할 수 있다는 인상과 달리, 안전은 여전히 학습된 RM의 자리로 남아 있다는 뜻이기도 하다.</p> <h2 id="llama-4">Llama 4</h2> <p>공식 블로그가 결과 수치를 낸 드문 사례다. 논쟁적 정치·사회 주제에 대한 거절률이 Llama 3.3의 7%에서 2% 미만으로 줄었고, 특정 관점에서만 불균등하게 거절하는 비율도 1% 미만이라고 밝힌다. 다만 데이터와 reward 중 무엇을 바꿨는지는 공개하지 않는다. 그리고 이 수치는 “덜 거절하기”만을 목표로 잡고 보고한 것이라, 같은 조치가 안전 축 자체(유해 프롬프트 거절률)에 어떤 영향을 줬는지는 함께 보고되지 않는다. 거절률이 줄었다는 사실만으로는 over-refusal이 개선된 건지 안전 기준 자체가 느슨해진 건지 구분할 수 없다는 문제를 그대로 남긴다.</p> <h2 id="openai-rbr와-deliberative-alignment">OpenAI: RBR와 Deliberative Alignment</h2> <p>제품 report 대신 방법론 논문으로 안전 reward 설계를 공개했다. <a href="/blog/2026/rule-based-rewards/">#16 RBR</a>은 안전 분류 F1을 97.1까지 끌어올렸다(사람 피드백만 쓴 baseline은 91.7). F1은 precision과 recall을 함께 보는 지표이므로, 이 상승은 유해 응답을 더 잘 잡으면서 동시에 무해 응답을 덜 거절했다는 뜻이다.</p> <p><a href="/blog/2026/deliberative-alignment/">#17 Deliberative Alignment</a>는 안전 스펙 자체를 모델이 CoT로 추론하게 만드는 안전 전용 SFT + RL 단계를 별도로 둔다. 설계상 중요한 디테일 하나는, RL 중 이 CoT를 reward model에게 숨긴다는 점이다. reward model이 CoT 내용을 보고 채점하면 모델이 “그럴듯해 보이는 CoT”를 최적화할 유인이 생기는데, 최종 출력만 채점 대상으로 남겨 기만적(deceptive) CoT를 최적화하지 않도록 막는다.</p> <h2 id="anthropic-constitutional-classifiers">Anthropic: Constitutional Classifiers</h2> <p>정책 reward 자체를 바꾸는 대신, 입출력에 별도의 분류기를 두고 이를 게이팅에 쓰는 접근이다. jailbreak 대부분을 막으면서도 무해 질의에 대한 거절률 증가를 +0.38%p로 억제했다고 보고한다. 대신 연산 비용은 +23.7% 늘었다. 안전 장치가 유발하는 over-refusal 비용을 스스로 정량화해 공개하는 것 자체가 드문 사례다.</p> <p>2026년 1월 개정한 constitution은 규칙의 기계적 준수보다 인간의 실질적 이익을 우선하는 방향을 명시했다 — 예를 들어 의료 조언을 회피하라는 규칙 때문에 증상 설명 자체를 거절하는 문제를 경계 사례로 든다. reward 설계 관점에서 보면, 이는 “규칙을 지켰는가”라는 좁은 채점 기준 자체가 over-refusal을 유발할 수 있다는 걸 인정하고 채점 기준을 다시 넓힌 사례다.</p> <h1 id="experiments">Experiments</h1> <h2 id="외부-벤치마크가-본-실제-트레이드오프">외부 벤치마크가 본 실제 트레이드오프</h2> <p>지금까지는 각 모델이 자체 보고한 수치였다. <a href="/blog/2026/or-bench/">#19 OR-Bench</a>는 25개 모델, 8개 모델 패밀리를 안전 프롬프트 거절률과 유해 프롬프트 거절률 두 축으로 함께 재서 외부에서 검증한다. 결과는 자체 보고와 결이 다르다. 안전 프롬프트 거절률과 유해 프롬프트 거절률 사이 Spearman 순위상관이 0.878로, 매우 강한 양의 상관을 보인다. 대부분의 모델이 이 두 축을 독립적으로 개선하지 못하고 하나의 트레이드오프 곡선 위에서 움직인다는 뜻이다. Claude는 가장 안전한 동시에 과잉거절도 가장 심하고, Mistral은 가장 많은 프롬프트를 수용한다. GPT-3.5-turbo는 버전이 올라가며 over-refusal은 개선됐지만 safety는 오히려 하락했다. 즉 자사 발표에서 “과잉거절을 줄였다”고 말하는 것과 별개로, 실제로 트레이드오프 곡선 자체를 옮긴 사례는 드물다.</p> <p>이 현상은 <a href="/blog/2026/reward-model-overoptimization/">#10 Reward Model Overoptimization</a>이 지적한 Goodhart 문제와 같은 구조다. 안전 프롬프트 거절률 하나만 밀어붙이면, 측정되지 않던 다른 축(유해 프롬프트 통과)이 조용히 무너진다. 안전 지표 단독 보고가 위험한 이유가 여기 있다 — 그 지표를 최적화한 대가를 다른 지표가 대신 치르고 있을 수 있는데, 그 다른 지표를 재지 않으면 대가 자체가 보이지 않는다.</p> <h2 id="파레토를-실제로-옮긴-사례">파레토를 실제로 옮긴 사례</h2> <p>곡선 위에서 미끄러지는 게 기본값이라면, 곡선을 옮긴 사례는 무엇이 달랐는지가 중요하다. 이 시리즈가 다룬 방법론 논문 중 안전 지표와 과잉거절·능력 지표를 함께 보고하면서 둘 다 개선한 경우를 모으면 이렇다.</p> <table> <thead> <tr> <th>사례</th> <th>안전 지표</th> <th>능력 · 과잉거절 지표</th> <th>비고</th> </tr> </thead> <tbody> <tr> <td>Safe RLHF</td> <td>유해 응답 비율 53.08% → 2.45%</td> <td>helpfulness Elo +244.91, harmlessness Elo +268.31</td> <td>고정 가중치가 아닌 동적 \(\lambda\) 제약</td> </tr> <tr> <td>RBR</td> <td>안전 분류 F1 97.1 (사람 피드백 baseline 91.7)</td> <td>F1이 precision·recall을 함께 반영</td> <td>규칙 위반과 불필요한 거절을 함께 감점</td> </tr> <tr> <td>Deliberative Alignment</td> <td>StrongREJECT goodness@0.1 0.37 → 0.88, Disallowed Content not_unsafe 0.8 → 0.9</td> <td>XSTest not_overrefuse 0.88 → 0.93, Self-Harm Safe Completion style_adherence 0.04 → 0.92</td> <td>GPT-4o → o1, CoT를 RM에게 숨김</td> </tr> <tr> <td>Constitutional Classifiers</td> <td>jailbreak 대부분 차단</td> <td>무해 질의 거절률 증가 +0.38%p로 상한</td> <td>연산 비용 +23.7%</td> </tr> </tbody> </table> <p>Safe RLHF는 유해 응답을 53.08%에서 2.45%로 낮추면서 helpfulness·harmlessness Elo를 동시에 244.91점, 268.31점 올렸다. 고정 가중치 reward-shaping이라면 보통 한쪽을 올리면 다른 쪽이 내려가는데, 제약을 동적으로 조절하는 설계 덕분에 둘 다 밀어 올렸다. Deliberative Alignment는 이 시리즈에서 확인한 것 중 가장 균형 잡힌 사례다. jailbreak 견고성(StrongREJECT goodness@0.1 0.37 → 0.88)과 과잉거절 감소(XSTest not_overrefuse 0.88 → 0.93)를 같은 학습 한 번으로 함께 얻었다. 게다가 이 개선이 특정 공격 유형을 외워서 나온 결과가 아니라는 것도 확인된다. 안전 학습 데이터에 인코딩 기반 jailbreak를 전혀 넣지 않은 o1도 해당 공격에서 0.95를 기록했다(전체 학습한 o1도 0.95, 안전 학습이 아예 없는 baseline은 0.65). 다국어 공격에서도 0.69(전체 학습 0.68, baseline 0.44)로 비슷하게 일반화됐다. 학습에 없던 도메인으로도 신호가 번진다는 뜻이다.</p> <p>두 사례의 공통점은 안전 지표 하나만 보고하지 않았다는 것이다. Safe RLHF는 helpfulness Elo를, Deliberative Alignment는 XSTest not_overrefuse를 반드시 함께 실었다. 대조군 없이 “안전이 좋아졌다”는 수치만 내놓는 report(Llama 4가 그렇다)는 OR-Bench가 보여준 트레이드오프 구조를 감안하면 검증이 불가능하다.</p> <h1 id="conclusion">Conclusion</h1> <p>이 글은 harmlessness reward 설계를 프론티어 아홉 개 이상 자료에 걸쳐 훑었다. 네 가지로 정리된다.</p> <p>첫째, <strong>문서화 격차 자체가 신호다.</strong> Kimi K3는 47페이지에서 “safety”를 한 번도 쓰지 않았고, Magistral은 비검증 도메인을 통째로 범위 밖에 뒀다. A.X K2, Deliberative Alignment, Constitutional Classifiers처럼 안전 reward를 상세히 공개한 쪽은 예외에 가깝다. 오픈 report를 냈다는 사실만으로 안전 설계까지 공개했다고 가정하면 안 된다.</p> <p>둘째, <strong>거절이 아니라 안전한 완수를 보상해야 한다.</strong> A.X K2가 명시적으로 쓴 원칙이지만 RBR, Deliberative Alignment도 결과적으로 같은 방향이다. 거절 자체에 보상을 주는 순간 <a href="/blog/2026/shallow-safety-alignment/">#18 Shallow Safety</a>가 지적한 얕은 패턴 학습이 시작되고, 그 패턴은 취약성과 과잉거절을 동시에 만든다.</p> <p>셋째, <strong>신호는 분리하되 최적화는 함께 돌려야 한다.</strong> Llama 2의 두 RM, Safe RLHF의 \(R\)·\(C\) 분리, RBR의 \(r_{helpful} + r_{RBR}\), A.X K2의 4그룹 mixture — 표현은 다르지만 전부 helpful과 harmless를 별개의 채점 축으로 유지한다. 진짜 갈림길은 학습을 단계로 나누느냐가 아니라, 두 신호를 하나의 스칼라로 미리 뭉쳐버리느냐다. 뭉치는 순간 사후에 조절할 손잡이가 사라진다.</p> <p>넷째, <strong>측정에는 반드시 대조군이 있어야 한다.</strong> OR-Bench의 Spearman 0.878은 안전 프롬프트 거절률만 보고하는 지표가 왜 위험한지를 보여준다. Deliberative Alignment와 Safe RLHF가 신뢰할 만한 이유는 안전 지표와 함께 helpfulness·과잉거절 지표를 나란히 실었기 때문이다. 안전 수치 하나만 내놓는 report는, 그게 진짜 파레토 개선인지 단순히 거절을 늘려 얻은 착시인지 구분할 수 없다.</p> <p>이 넷을 관통하는 결론은 하나다. harmlessness reward 설계는 helpfulness reward 설계보다 어렵다 — 실패 모드가 하나 더 있고(과잉거절), 그 실패 모드는 안전 지표 하나만 봐서는 보이지 않기 때문이다. 다음 글 <a href="/blog/2026/reward-model-design/">#62</a>에서는 이 시리즈 전체가 쌓은 결론 — helpfulness와 harmlessness를 아우르는 reward 설계 원칙 — 을 한 장으로 정리한다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Dai et al. (PKU Alignment), 2023. <a href="https://arxiv.org/abs/2310.12773">Safe RLHF: Safe Reinforcement Learning from Human Feedback</a> — <a href="/blog/2026/safe-rlhf/">#15</a>에서 다룬 제약 기반 안전 최적화.</li> <li>Mu et al. (OpenAI), 2024. <a href="https://arxiv.org/abs/2411.01111">Rule Based Rewards for Language Model Safety</a> — <a href="/blog/2026/rule-based-rewards/">#16</a>.</li> <li>Guan et al. (OpenAI), 2024. <a href="https://arxiv.org/abs/2412.16339">Deliberative Alignment: Reasoning Enables Safer Language Models</a> — <a href="/blog/2026/deliberative-alignment/">#17</a>.</li> <li>Qi et al. (Princeton University), 2024. <a href="https://arxiv.org/abs/2406.05946">Safety Alignment Should Be Made More Than Just a Few Tokens Deep</a> — <a href="/blog/2026/shallow-safety-alignment/">#18</a>.</li> <li>Cui et al., 2024. <a href="https://arxiv.org/abs/2405.20947">OR-Bench: An Over-Refusal Benchmark for Large Language Models</a> — <a href="/blog/2026/or-bench/">#19</a>.</li> <li>Touvron et al. (Meta AI), 2023. <a href="https://arxiv.org/abs/2307.09288">Llama 2: Open Foundation and Fine-Tuned Chat Models</a> — <a href="/blog/2026/llama2-rlhf/">#8</a>.</li> <li>Meta AI, 2025. <a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">The Llama 4 herd: The beginning of a new era of natively multimodal AI innovation</a>.</li> <li>LG AI Research, 2026. <a href="https://arxiv.org/abs/2608.04505">K-EXAONE 2.0 Technical Report</a>.</li> <li>SKT AI, 2026. <a href="https://github.com/SKT-AI/A.X-K2">A.X K2 Technical Report</a>.</li> <li>Kimi Team, 2026. <a href="https://github.com/MoonshotAI/Kimi-K3">Kimi K3: Open Frontier Intelligence</a>.</li> <li>Gemma Team (Google DeepMind), 2025. <a href="https://arxiv.org/abs/2503.19786">Gemma 3 Technical Report</a>.</li> <li>Anthropic, 2025. <a href="https://www.anthropic.com/research/constitutional-classifiers">Constitutional Classifiers: Defending Against Universal Jailbreaks</a>.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 예순 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><strong>(현재 글)</strong> 프론티어의 harmlessness reward 설계 — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="rlhf"/><category term="safety"/><category term="harmlessness"/><category term="over-refusal"/><category term="reward-model"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #60 — 안전성 reward의 실전 설계와 over-refusal 트레이드오프]]></summary></entry><entry><title type="html">프론티어 모델은 helpfulness reward를 어떻게 설계했나</title><link href="https://www.wonbeomjang.kr/blog/2026/frontier-reward-design/" rel="alternate" type="text/html" title="프론티어 모델은 helpfulness reward를 어떻게 설계했나"/><published>2026-08-11T00:59:00+00:00</published><updated>2026-08-11T00:59:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/frontier-reward-design</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/frontier-reward-design/"><![CDATA[<blockquote> <p>이 글은 열한 개 프론티어 모델의 공개 자료를 가로지른다 — <a href="https://arxiv.org/abs/2606.19348">DeepSeek-V4</a>, <a href="https://arxiv.org/abs/2505.09388">Qwen3</a>, <a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">Llama 4</a>, <a href="https://github.com/MoonshotAI/Kimi-K3">Kimi K3</a>, <a href="https://arxiv.org/abs/2607.20062">Solar Open 2</a>, <a href="https://arxiv.org/abs/2608.04505">K-EXAONE 2.0</a>, <a href="https://github.com/SKT-AI/A.X-K2">A.X K2</a>, <a href="https://arxiv.org/abs/2506.13585">MiniMax-M1</a>, <a href="https://arxiv.org/abs/2508.06471">GLM-4.5</a>, <a href="https://arxiv.org/abs/2506.10910">Magistral</a>, <a href="https://arxiv.org/abs/2607.02770">Gemma 4</a>. 한국 팀 셋(Solar·K-EXAONE·A.X)과 유럽 팀 하나(Magistral)가 함께 오른다. 이 중 Llama 4만 정식 technical report 없이 공식 블로그로 공개됐다. 이 글은 <strong>능력(helpfulness) 축</strong>을 다루고, <strong>안전성(harmlessness) 축은 <a href="/blog/2026/frontier-safety-design/">#60</a></strong> 에서 따로 뜯는다.</p> </blockquote> <h1 id="introduction">Introduction</h1> <p>43편 동안 이 시리즈는 reward를 부품 단위로 뜯어봤다. 사람 선호를 스칼라로 압축하는 Bradley-Terry(<a href="/blog/2026/bradley-terry-rethinking/">#4</a>), 그 스칼라가 hacking당하는 방식과 방어법(<a href="/blog/2026/reward-model-overoptimization/">#10</a>~<a href="/blog/2026/warm-weight-averaged-reward/">#14</a>), reward를 정책 업데이트로 바꾸는 PPO·GRPO·DPO(<a href="/blog/2026/ppo/">#20</a>~<a href="/blog/2026/dpo/">#24</a>), 검증 가능한 도메인에서 학습된 reward model 자체를 규칙으로 대체하는 RLVR(<a href="/blog/2026/lets-verify-step-by-step/">#31</a>~<a href="/blog/2026/deepseek-r1/">#33</a>), 학습된 RM을 생성형 judge로 재구성하는 흐름(<a href="/blog/2026/prometheus-2/">#34</a>~<a href="/blog/2026/deepseek-grm-spct/">#38</a>), 그리고 그 judge가 스스로 생각하고 그 신뢰 자체를 검증하는 최신 연구(<a href="/blog/2026/reasongrm/">#39</a>~<a href="/blog/2026/one-token-to-fool-judge/">#43</a>). 하나하나는 특정 논문이 특정 문제 하나에 답한 결과였다.</p> <p>그런데 실제로 프론티어급 모델을 학습시키는 팀은 이 부품 중 무엇을, 어떤 조합으로, 왜 골랐을까. 이 글은 “논문 1편 = 포스트 1편” 형식을 벗어나 열한 개 공개 자료 — DeepSeek-V4, Qwen3, Llama 4, Kimi K3, Solar Open 2, K-EXAONE 2.0, A.X K2, MiniMax-M1, GLM-4.5, Magistral, Gemma 4 — 를 가로질러 reward 설계의 실전 선택지를 비교한다. 그리고 이 비교에서 뽑아낸 설계 원칙은 다음 글 <a href="/blog/2026/reward-model-design/">#62</a>에서 한 장의 실무 가이드로 정리한다.</p> <p>미리 결론의 윤곽을 말하면 세 가지다.</p> <ol> <li><strong>검증 가능한 도메인(수학, 코드)에서는 열한 모델이 놀랄 만큼 수렴한다.</strong> 학습된 RM을 걷어내고 규칙 검증기를 쓴다.</li> <li><strong>검증 불가능한 도메인(대화, 글쓰기, 개방형 추론)에서는 갈라진다</strong> — 하지만 그 분기의 한복판에서 <strong>generative reward model(GRM)이 처음으로 프로덕션 report에 등장</strong>했다. 이 시리즈 7부가 “연구 단계에만 있다”고 정리했던 흐름이 DeepSeek-V4와 Kimi K3에서 실제 학습 파이프라인으로 넘어온 순간이다.</li> <li><strong>reward 설계는 “함수”만의 문제가 아니다.</strong> 어떤 프롬프트에 그 함수를 먹이느냐(난이도 커리큘럼, 분산 선별), 오프라인·온라인을 어떻게 섞느냐가 함수 선택만큼 중요하다.</li> </ol> <p>이 글은 다음 순서로 그 수렴점과 분기점을 짚는다.</p> <ol> <li>시리즈가 쌓은 재료를 reward “조달처” 4분류로 재정리한다 (Background)</li> <li>열한 모델 각각이 reward를 어디서 조달하고 어떤 알고리즘으로 정책을 업데이트했는가 (Method)</li> <li>검증 가능/불가능 도메인에서 왜 수렴하고 왜 갈라지는가, GRM은 어디까지 왔는가 (Experiments)</li> <li>프롬프트 선별·커리큘럼이라는 “숨은 reward 설계”, 그리고 hacking 방어 (Experiments)</li> <li>지금 내가 reward를 설계해야 한다면 무엇을 골라야 하는가 (Conclusion)</li> </ol> <p>먼저 열한 모델을 한 장으로 요약하면 이렇다. 각 칸의 근거는 이어지는 Method·Experiments에서 편별로 짚는다.</p> <table> <thead> <tr> <th>모델</th> <th>팀</th> <th>핵심 reward 조달처</th> <th>RL 알고리즘</th> </tr> </thead> <tbody> <tr> <td>DeepSeek-V4</td> <td>DeepSeek (중)</td> <td>규칙 + GRM(비검증)</td> <td>GRPO → on-policy 증류</td> </tr> <tr> <td>Qwen3</td> <td>Alibaba (중)</td> <td>규칙 / reference judge / 스칼라 RM 3분류</td> <td>GRPO + General RL</td> </tr> <tr> <td>Llama 4</td> <td>Meta (미)</td> <td>비공개(online RL) + 선호쌍</td> <td>SFT → online RL → DPO</td> </tr> <tr> <td>Kimi K3</td> <td>Moonshot (중)</td> <td>규칙(51.2M 샌드박스) + Agentic GRM</td> <td>9전문가 RL → MOPD 증류</td> </tr> <tr> <td>Solar Open 2</td> <td>Upstage (한)</td> <td>규칙 + rubric judge</td> <td>GRPO(token) → 12전문가 MOPD</td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>LG (한)</td> <td>도메인별 규칙·rubric·judge</td> <td>GrouPER + AGAPO</td> </tr> <tr> <td>A.X K2</td> <td>SKT (한)</td> <td>규칙(+난이도필터) + reference rubric judge</td> <td>CISPO + GDPO</td> </tr> <tr> <td>MiniMax-M1</td> <td>MiniMax (중)</td> <td>규칙 + <strong>GenRM</strong>(length bias 감시)</td> <td><strong>CISPO</strong>(원조)</td> </tr> <tr> <td>GLM-4.5</td> <td>Zhipu (중)</td> <td>규칙 / outcome / rule+RLHF+RLAIF</td> <td>3축 RL → self-distillation</td> </tr> <tr> <td>Magistral</td> <td>Mistral (유럽)</td> <td>규칙만(0.9정오+0.1format+language)</td> <td>GRPO 변형(KL제거·Clip-Higher)</td> </tr> <tr> <td>Gemma 4</td> <td>DeepMind (미)</td> <td>도메인별 다양한 reward + 코드실행·수학 정답</td> <td>BOND + WARM + WARP</td> </tr> </tbody> </table> <p>세 축이 한눈에 보인다 — <strong>검증 가능 도메인은 모두 규칙</strong>, <strong>검증 불가능 도메인은 judge·GRM으로 갈리고</strong>, <strong>여럿이 “전문가→증류”로 통합</strong>한다. 아래에서 하나씩 뜯는다.</p> <h1 id="background">Background</h1> <h2 id="시리즈가-쌓은-재료-세-가지-축">시리즈가 쌓은 재료: 세 가지 축</h2> <p>시리즈가 지금까지 쌓아온 재료를 세 가지 축으로 요약하면 이렇다.</p> <table> <thead> <tr> <th>축</th> <th>선택지</th> <th>관련 편</th> </tr> </thead> <tbody> <tr> <td>reward를 어디서 조달하는가</td> <td>학습된 스칼라 RM / 규칙 기반 verifiable reward / judge·rubric</td> <td>2부(<a href="/blog/2026/bradley-terry-rethinking/">#4</a>~<a href="/blog/2026/rewardbench-2/">#9</a>), 6부(<a href="/blog/2026/lets-verify-step-by-step/">#31</a>~<a href="/blog/2026/deepseek-r1/">#33</a>), 6·8부(<a href="/blog/2026/prometheus-2/">#34</a>~<a href="/blog/2026/one-token-to-fool-judge/">#43</a>)</td> </tr> <tr> <td>그 reward로 정책을 어떻게 업데이트하는가</td> <td>PPO / GRPO / DPO</td> <td>5부(<a href="/blog/2026/ppo/">#20</a>~<a href="/blog/2026/dpo/">#24</a>)</td> </tr> <tr> <td>도메인을 어떻게 가르는가</td> <td>검증 가능(정답 존재) / 검증 불가능(정답 부재)</td> <td><a href="/blog/2026/deepseek-r1/">#33 DeepSeek-R1</a></td> </tr> </tbody> </table> <h2 id="reward-조달처를-4분류로-이-글의-렌즈">reward 조달처를 4분류로: 이 글의 렌즈</h2> <p>열한 모델을 비교하려면 공통 좌표계가 필요하다. 마침 Qwen3의 report가 그 좌표계를 거의 그대로 제공한다 — Qwen3는 General RL 단계에서 reward를 <strong>세 종류</strong>로 명시적으로 나눈다. 여기에 DeepSeek-V4가 도입한 GRM을 더하면 <strong>네 개의 조달처</strong>가 된다. 이 4분류가 이 글 전체의 렌즈다.</p> <table> <thead> <tr> <th>조달처</th> <th>어떻게 점수를 매기나</th> <th>파라미터 유무</th> <th>시리즈 대응</th> </tr> </thead> <tbody> <tr> <td>① 규칙 기반 verifiable reward</td> <td>파서 + 비교 로직 (정답 일치, 테스트 통과)</td> <td>없음 (hacking 불가)</td> <td>6부 <a href="/blog/2026/deepseek-r1/">#33 RLVR</a></td> </tr> <tr> <td>② 스칼라 RM (reference 없음)</td> <td>사람 선호로 학습한 신경망이 스칼라 점수</td> <td>있음</td> <td>2부 <a href="/blog/2026/bradley-terry-rethinking/">#4</a>~<a href="/blog/2026/rewardbench-2/">#9</a></td> </tr> <tr> <td>③ reference 기반 judge</td> <td>정답 예시를 주고 그에 비추어 채점 (rubric 조건부)</td> <td>있음 (판정 모델)</td> <td>7부 <a href="/blog/2026/prometheus-2/">#34 Prometheus 2</a></td> </tr> <tr> <td>④ generative RM (GRM, self-critique)</td> <td>모델이 근거를 생성하며 채점, 때로 자기 출력을 스스로 평가</td> <td>있음 (생성 모델)</td> <td>6·8부 <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM</a>, <a href="/blog/2026/j1-thinking-judge/">#40 J1</a></td> </tr> </tbody> </table> <p>이 4분류를 머리에 넣고 보면, 열한 모델의 선택이 한눈에 정렬된다. ①은 검증 가능 도메인의 표준이 됐고, ②·③·④는 검증 불가능 도메인을 두고 갈라진다.</p> <h2 id="rl-알고리즘-한눈에">RL 알고리즘 한눈에</h2> <p>reward를 정책으로 옮기는 알고리즘도 이 글에 여럿 등장한다. 이름에 압도되지 않도록 미리 지도를 그려둔다.</p> <table> <thead> <tr> <th>알고리즘</th> <th>핵심 아이디어</th> <th>이 글의 채택 모델</th> <th>편</th> </tr> </thead> <tbody> <tr> <td>PPO</td> <td>clipped surrogate + value network</td> <td>(기준선)</td> <td><a href="/blog/2026/ppo/">#20</a></td> </tr> <tr> <td>GRPO</td> <td>value network를 버리고 그룹 상대 advantage</td> <td>DeepSeek-V4·Qwen3·Solar 2·GLM-4.5·Magistral(변형)</td> <td><a href="/blog/2026/grpo-deepseekmath/">#22</a></td> </tr> <tr> <td>DPO</td> <td>RM·RL 루프 없이 선호 쌍에서 직접 학습</td> <td>Llama 4(가볍게)</td> <td><a href="/blog/2026/dpo/">#24</a></td> </tr> <tr> <td>CISPO</td> <td>token이 아니라 <strong>IS 가중치</strong>를 클립(결정적 토큰 보존)</td> <td>MiniMax-M1(원조)·A.X K2</td> <td>본문</td> </tr> <tr> <td>GSPO</td> <td>importance ratio를 <strong>sequence-level</strong>로</td> <td>(Solar 2는 명시적으로 회피)</td> <td>본문</td> </tr> <tr> <td>GDPO</td> <td>여러 reward를 <strong>각각 정규화 후 결합</strong></td> <td>A.X K2</td> <td>본문</td> </tr> <tr> <td>GrouPER</td> <td>그룹 상대 선호(SimPER류)</td> <td>K-EXAONE 2.0</td> <td>본문</td> </tr> <tr> <td>AGAPO</td> <td>off-policy PG, <strong>오답 추론에 음의 보상</strong></td> <td>K-EXAONE 2.0</td> <td>본문</td> </tr> <tr> <td>MOPD</td> <td>여러 전문가(teacher)를 on-policy 증류로 통합</td> <td>Kimi K3·Solar 2</td> <td>본문</td> </tr> <tr> <td>DAPO</td> <td>dynamic sampling(정답률 0/1 프롬프트 제거)</td> <td>(<a href="/blog/2026/reward-model-design/">#62</a>에서 다룸)</td> <td>#62</td> </tr> </tbody> </table> <p>두 축만 기억하면 된다 — <strong>위 4분류가 “reward를 어디서 얻나”, 이 표가 “그 reward를 정책으로 어떻게 옮기나”</strong>다. 대부분은 GRPO의 변형이고, 갈리는 지점은 (a) 무엇을 클립하나(token vs IS 가중치 vs sequence), (b) 여러 reward를 어떻게 섞나(GDPO), (c) 전문가를 어떻게 합치나(MOPD)다.</p> <h2 id="비교-대상-열한-모델">비교 대상 열한 모델</h2> <table> <thead> <tr> <th>모델</th> <th>발표</th> <th>공개 형태</th> </tr> </thead> <tbody> <tr> <td>DeepSeek-V4</td> <td>2026-06</td> <td><a href="https://arxiv.org/abs/2606.19348">arXiv:2606.19348</a></td> </tr> <tr> <td>Qwen3</td> <td>2025-05</td> <td><a href="https://arxiv.org/abs/2505.09388">arXiv:2505.09388</a></td> </tr> <tr> <td>Llama 4</td> <td>2025-04</td> <td><a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">Meta AI 블로그</a> (정식 논문 없음)</td> </tr> <tr> <td>Kimi K3</td> <td>2026-07</td> <td><a href="https://github.com/MoonshotAI/Kimi-K3">Moonshot AI tech report</a></td> </tr> <tr> <td>Solar Open 2</td> <td>2026-07</td> <td><a href="https://arxiv.org/abs/2607.20062">arXiv:2607.20062</a></td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>2026-08</td> <td><a href="https://arxiv.org/abs/2608.04505">arXiv:2608.04505</a></td> </tr> <tr> <td>A.X K2</td> <td>2026</td> <td><a href="https://github.com/SKT-AI/A.X-K2">SKT-AI tech report</a></td> </tr> <tr> <td>MiniMax-M1</td> <td>2025-06</td> <td><a href="https://arxiv.org/abs/2506.13585">arXiv:2506.13585</a></td> </tr> <tr> <td>GLM-4.5</td> <td>2025-08</td> <td><a href="https://arxiv.org/abs/2508.06471">arXiv:2508.06471</a></td> </tr> <tr> <td>Magistral</td> <td>2025-06</td> <td><a href="https://arxiv.org/abs/2506.10910">arXiv:2506.10910</a></td> </tr> <tr> <td>Gemma 4</td> <td>2026-06</td> <td><a href="https://arxiv.org/abs/2607.02770">arXiv:2607.02770</a> (post-training은 <a href="https://arxiv.org/abs/2503.19786">Gemma 3</a> 레시피 계승)</td> </tr> </tbody> </table> <p>공개 수준은 나라나 랩이 아니라 <strong>어떤 문서를 내느냐</strong>로 갈린다. 세 층으로 나뉜다.</p> <table> <thead> <tr> <th>공개 층위</th> <th>모델</th> <th>reward 설계에 대해 알 수 있는 것</th> </tr> </thead> <tbody> <tr> <td>① 상세 technical report</td> <td>DeepSeek-V4, Qwen3, Kimi K3, MiniMax-M1, GLM-4.5, Solar Open 2, K-EXAONE 2.0, A.X K2, Magistral</td> <td>reward 함수 구성·알고리즘·하이퍼파라미터까지</td> </tr> <tr> <td>② 방법 이름은 밝히되 배합은 비공개</td> <td><strong>Gemma 4</strong>(→ Gemma 3 레시피)</td> <td>“BOND, WARM, WARP의 개선판”이라고 <strong>이름을 명시</strong>하고, 각 방법은 <strong>별도 논문으로 전문 공개</strong>. 다만 배합·하이퍼파라미터는 비공개</td> </tr> <tr> <td>③ 블로그·model card만</td> <td><strong>Llama 4</strong>, (참고: OpenAI gpt-oss)</td> <td>파이프라인 골격까지. <strong>online RL의 reward 신호가 무엇인지 명시되지 않는다</strong></td> </tr> </tbody> </table> <p>두 가지를 짚어둘 만하다. 첫째, <strong>같은 랩도 세대에 따라 층이 바뀐다.</strong> Meta는 Llama 3에서 rejection sampling 라운드 수·margin term 제거·DPO의 NLL 계수까지 적은 상세 논문(<a href="https://arxiv.org/abs/2407.21783">arXiv:2407.21783</a>)을 냈지만, Llama 4는 블로그로 대체했다. 즉 “미국 랩은 감춘다”가 아니라 <strong>문서 형식이 바뀌면 공개 수준도 바뀐다</strong>가 사실에 가깝다.</p> <p>둘째, <strong>OpenAI는 제품 레시피 대신 방법론을 논문으로 공개하는 쪽</strong>이다. 안전 reward 설계인 <a href="https://arxiv.org/abs/2411.01111">Rule-Based Rewards</a>(<a href="/blog/2026/rule-based-rewards/">#16</a>)와 <a href="https://arxiv.org/abs/2412.16339">Deliberative Alignment</a>(<a href="/blog/2026/deliberative-alignment/">#17</a>)는 방법 자체를 상세히 밝히지만, 그것이 어느 제품에 어떤 배합으로 들어갔는지는 밝히지 않는다. gpt-oss의 model card도 “large-scale distillation and reinforcement learning”이라는 한 줄이 전부다.</p> <p>비공개 구간은 이 글이 매번 명시한다.</p> <h1 id="method">Method</h1> <h2 id="deepseek-v4-도메인-전문가를-각자-키운-뒤-하나로-증류한다">DeepSeek-V4: 도메인 전문가를 각자 키운 뒤 하나로 증류한다</h2> <p><a href="/blog/2026/deepseek-r1/">#33</a>에서 다룬 DeepSeek-R1은 <strong>하나의 정책</strong>에 규칙 기반 reward를 꽂아 GRPO로 밀어붙이는 구조였다. DeepSeek-V4는 이 구조를 정면으로 바꾼다. 후처리를 <strong>두 단계</strong>로 나눈다.</p> <ol> <li><strong>도메인 전문가의 독립 육성.</strong> 수학, 코딩, 에이전트, instruction following 같은 도메인마다 <strong>별도의 전문가 모델</strong>을 따로 학습시킨다. 각 전문가는 같은 베이스에서 출발해 (a) 도메인 특화 데이터로 SFT를 받아 기초를 잡고, (b) 그 위에 GRPO를 얹어 “그 도메인의 성공 기준에 맞춘 reward”로 최적화된다.</li> <li><strong>통합 모델로의 on-policy 증류.</strong> 이렇게 만든 N개의 전문가를 하나의 모델로 합친다. 통합 모델(student)이 각 전문가(teacher)를 향해 <strong>reverse KL을 최소화</strong>하며 배우는 on-policy distillation이다.</li> </ol> \[\mathcal{L}_{\text{distill}} = \mathbb{E}_{y \sim \pi_{\text{student}}} \left[ \log \frac{\pi_{\text{student}}(y \mid x)}{\pi_{\text{teacher}}(y \mid x)} \right]\] <ul> <li>\(\pi_{\text{student}}\): 통합 모델 (배우는 쪽)</li> <li>\(\pi_{\text{teacher}}\): 해당 도메인 전문가 (가르치는 쪽)</li> <li>\(y \sim \pi_{\text{student}}\): <strong>student가 스스로 생성한</strong> 출력 위에서 손실을 잰다는 것이 “on-policy”의 핵심 — 오프라인 데이터셋이 아니라 student의 현재 분포에서 샘플링한다.</li> </ul> <p>reward 관점에서 V4의 결정적 변화는 <strong>조달처를 도메인마다 갈아 끼운다</strong>는 점이다. 수학·코드처럼 규칙으로 검증되는 도메인은 R1과 같은 ① 규칙 기반 reward를 쓴다. 반면 규칙으로 검증하기 어려운 도메인에는 <strong>④ Generative Reward Model(GRM)</strong> 을 도입한다 — 전통적인 스칼라 RM 대신, <strong>rubric으로 안내된 RL 데이터</strong>로 학습해 actor가 출력을 <strong>생성하면서 동시에 스스로 평가</strong>하게 만드는 방식이다. 이는 <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM/SPCT</a>가 연구 단계에서 제안한 생성형 reward가 같은 팀의 프로덕션 모델로 넘어온 사례다.</p> <p>다만 report는 각 도메인이 정확히 어떤 reward 함수를 썼는지까지는 상세히 공개하지 않는다. “reward models tailored to specific success criteria”라는 표현과 GRM 도입 사실이 확인되는 수준이며, 도메인별 세부 레시피는 R1만큼 투명하지 않다.</p> <p><strong>R1 → V4로 무엇이 바뀌었나.</strong> 바뀐 건 두 가지 — 정책 구조와 “규칙이 안 통하는 도메인”의 reward다.</p> <table> <thead> <tr> <th>축</th> <th>DeepSeek-R1 (2025-01)</th> <th>DeepSeek-V4 (2026-06)</th> </tr> </thead> <tbody> <tr> <td>정책 구조</td> <td><strong>하나의 통합 정책</strong>에 RL</td> <td><strong>N개 도메인 전문가 → 증류로 통합</strong></td> </tr> <tr> <td>검증 가능 reward</td> <td>규칙(accuracy + format)</td> <td>규칙(그대로 계승)</td> </tr> <tr> <td>검증 불가 reward</td> <td>all-scenario 단계에서 <strong>학습된 스칼라 RM</strong>으로 복귀</td> <td><strong>④ GRM</strong>(rubric-guided, 생성형)</td> </tr> <tr> <td>전문가 통합</td> <td>(단일 정책이라 불필요)</td> <td><strong>on-policy distillation</strong>(reverse-KL)</td> </tr> <tr> <td>PRM</td> <td><strong>명시적으로 포기</strong>(단계 정의·중간 판정·hacking)</td> <td>전문가별 outcome reward + GRM</td> </tr> </tbody> </table> <p>R1의 메시지는 “검증 가능한 도메인에선 학습된 RM을 규칙으로 걷어낼 수 있다”였다. 그러나 R1도 정답이 없는 일반 대화에서는 all-scenario RL 단계에서 결국 <strong>학습된 스칼라 RM을 다시 불러왔다.</strong> V4는 바로 그 지점을 스칼라 RM에서 <strong>생성형 GRM</strong>으로 갈아끼웠고, 동시에 단일 정책을 전문가+증류 구조로 바꿨다. 규칙 reward는 그대로 두되, “규칙이 안 통하는 곳”의 답이 R1의 스칼라 RM → V4의 GRM으로 업그레이드된 셈이다.</p> <h2 id="qwen3-4단계-파이프라인과-reward-3분류">Qwen3: 4단계 파이프라인과 reward 3분류</h2> <p>Qwen3의 후처리는 네 단계로 정연하게 나뉜다.</p> <table> <thead> <tr> <th>단계</th> <th>하는 일</th> <th>reward 조달처</th> </tr> </thead> <tbody> <tr> <td>1. Long-CoT Cold Start</td> <td>긴 추론 패턴을 SFT로 심는다</td> <td>(SFT, reward 없음)</td> </tr> <tr> <td>2. Reasoning RL</td> <td>수학·코드에서 GRPO로 추론력을 끌어올린다</td> <td>① 규칙 (query-verifier 쌍)</td> </tr> <tr> <td>3. Thinking Mode Fusion</td> <td>thinking/non-thinking 모드를 하나로 융합</td> <td>(혼합)</td> </tr> <tr> <td>4. General RL</td> <td>개방형 도메인 전반으로 정렬을 확장</td> <td>①·③·② 세 종류를 병용</td> </tr> </tbody> </table> <p>2단계 Reasoning RL은 <strong>query-verifier 쌍</strong>을 쓴다 — 각 쿼리에 정오를 판정하는 verifier가 붙어 있고, 쿼리당 rollout을 많이 뽑아 GRPO로 학습한다. 샘플 효율을 위해 <strong>off-policy 학습</strong>도 섞는다(과거에 뽑아둔 rollout을 재활용).</p> <p>핵심은 4단계 General RL이 reward를 <strong>세 종류로 명시적으로 나눈다</strong>는 점이다.</p> <table> <thead> <tr> <th>reward 종류</th> <th>작동 방식</th> <th>이 시리즈 대응</th> </tr> </thead> <tbody> <tr> <td>Rule-based Reward</td> <td>규칙으로 정오를 높은 정밀도로 판정 — “reward hacking을 예방”</td> <td>① <a href="/blog/2026/deepseek-r1/">#33 RLVR</a></td> </tr> <tr> <td>Model-based Reward <strong>with reference</strong></td> <td>정답 reference를 주고 Qwen2.5-72B-Instruct가 그에 비추어 채점</td> <td>③ <a href="/blog/2026/prometheus-2/">#34 Prometheus 2</a></td> </tr> <tr> <td>Model-based Reward <strong>without reference</strong></td> <td>사람 선호 데이터로 학습한 RM이 스칼라 점수를 부여</td> <td>② 2부 스칼라 RM</td> </tr> </tbody> </table> <p>이 세 줄이 정확히 Background의 4분류 중 ①②③에 대응한다. Qwen3가 흥미로운 건, 하나의 모델이 도메인에 따라 <strong>세 조달처를 동시에 운용</strong>한다는 것이다 — 정답이 있으면 규칙, 정답 예시가 있으면 reference judge, 둘 다 없으면 스칼라 RM. 작은 모델은 이 비싼 RL을 직접 돌리지 않고 <strong>strong-to-weak distillation</strong>으로 큰 모델을 증류해 받는데, RL 대비 약 1/10 GPU 시간이면 된다고 밝힌다.</p> <p><strong>Qwen2.5 → Qwen3로 무엇이 바뀌었나.</strong> reward가 “잘 고른 RM 하나”에서 “도메인별 3분류”로 분화했다.</p> <table> <thead> <tr> <th>축</th> <th>Qwen2.5 (2024-12)</th> <th>Qwen3 (2025-05)</th> </tr> </thead> <tbody> <tr> <td>RL 단계</td> <td>offline DPO → online GRPO (2단계)</td> <td><strong>4단계</strong>(cold start → reasoning RL → fusion → general RL)</td> </tr> <tr> <td>reward 종류</td> <td>RM 기반 (단일 계열)</td> <td><strong>3분류</strong>(규칙 / reference judge / 스칼라 RM)</td> </tr> <tr> <td>쿼리 전략</td> <td>RM=RL 쿼리셋, <strong>분산 큰 쿼리 우선</strong>(8 샘플, batch 2048)</td> <td>reasoning RL에 verifier + off-policy rollout 재활용</td> </tr> <tr> <td>작은 모델</td> <td>—</td> <td><strong>strong-to-weak distillation</strong>(RL 대비 약 1/10 GPU)</td> </tr> <tr> <td>사고량</td> <td>—</td> <td><strong>thinking budget</strong>으로 생각량 제어</td> </tr> </tbody> </table> <p>Qwen2.5의 설계 포인트는 “RM 하나를 두되, 학습 쿼리를 분산 큰(변별력 있는) 것으로 골라 신호의 질을 올린다”였다. Qwen3는 그 위에서 <strong>reward를 도메인에 따라 세 갈래로 쪼갰다</strong> — 검증 가능하면 규칙, 정답 예시가 있으면 reference judge(Qwen2.5-72B-Instruct가 채점), 둘 다 없으면 스칼라 RM. 즉 “잘 고른 하나의 RM”에서 “도메인마다 다른 조달처”로 넘어가며, DeepSeek-V4·Solar가 보여준 도메인별 조달처 분화와 같은 흐름에 합류했다.</p> <h2 id="llama-4-온라인-rl을-되살리고-sftdpo는-탐색을-막지-않을-만큼만">Llama 4: 온라인 RL을 되살리고, SFT·DPO는 탐색을 막지 않을 만큼만</h2> <p>Llama 4에서 가장 눈에 띄는 건 reward 파이프라인의 <strong>방향 전환</strong>이다. <a href="/blog/2026/llama2-rlhf/">#8 Llama 2</a> 이후 세대인 Llama 3와 나란히 놓아야 무엇이 바뀌었는지가 드러난다.</p> <table> <thead> <tr> <th>축</th> <th>Llama 3 (2024, herd 논문)</th> <th>Llama 4 (2025, 공식 블로그)</th> </tr> </thead> <tbody> <tr> <td>정책 최적화</td> <td>rejection sampling + DPO를 <strong>6 라운드</strong> 반복</td> <td><strong>online RL이 중심</strong>, 앞뒤로 lightweight SFT·DPO</td> </tr> <tr> <td>PPO/온라인 RL</td> <td><strong>명시적으로 거부</strong>(“DPO가 대규모에서 연산이 적고 더 낫다”)</td> <td><strong>온라인 RL을 되살림</strong></td> </tr> <tr> <td>RM의 역할</td> <td>rejection sampling 필터 + 선호쌍 정제 (온라인 gradient엔 미사용)</td> <td>online RL의 reward로 추정되나 <strong>형태 비공개</strong></td> </tr> <tr> <td>SFT·DPO 강도</td> <td>DPO가 주 정렬 수단(formatting 토큰 마스킹, chosen에 NLL 0.2)</td> <td><strong>“over-constrain 방지”용 lightweight</strong></td> </tr> <tr> <td>데이터</td> <td>선호 4단계 등급 + 사람 edit 3-way, 유사 응답 제거</td> <td>easy 50~95% 프루닝, medium-hard 커리큘럼, advantage-0 실시간 제거</td> </tr> </tbody> </table> <p>핵심은 <strong>Llama 3가 스케일을 위해 온라인 RL(PPO)을 버리고 오프라인(rejection sampling + DPO)을 택했는데, Llama 4가 그 선택을 다시 뒤집었다</strong>는 것이다. Llama 3 herd 논문은 PPO를 시도했다가 “DPO가 대규모 모델에서 연산이 적고 성능도 낫다”며 접었고, RM은 오직 rejection sampling의 필터로만 썼다 — 온라인 정책 업데이트에는 쓰지 않았다. Llama 4는 반대로 online RL을 파이프라인의 중심에 놓고, 그 이유를 이렇게 밝힌다.</p> <blockquote> <p>SFT와 DPO가 모델을 과도하게 <strong>제약(over-constrain)</strong> 해서, 뒤이은 online RL 단계의 <strong>탐색을 막고</strong> 특히 추론·코딩·수학에서 정확도를 떨어뜨린다.</p> </blockquote> <p>즉 Llama 3에서 “주연”이던 DPO가 Llama 4에서는 “탐색을 죽이지 않을 만큼만” 가볍게 치는 조연으로 내려온다. 무게중심이 online RL로 옮겨가면서, 데이터 전략도 정적 선호쌍 큐레이션에서 <strong>동적 난이도 관리</strong>로 바뀐다.</p> <ul> <li><strong>데이터 프루닝으로 어려운 것만 남긴다.</strong> Llama 모델 자신을 judge로 써서 “쉬움”으로 태깅된 데이터를 걸러낸다. 작은 모델은 50% 이상, 2T 규모 Behemoth는 <strong>95%</strong>를 쳐낸다.</li> <li><strong>continuous online RL.</strong> 학습과 필터링을 번갈아 돌리며 <strong>medium-to-hard 난이도 프롬프트만 남긴다.</strong> 쉬운 프롬프트는 신호가 없고, 너무 어려운 프롬프트는 advantage가 0이라 학습에 기여하지 못한다.</li> <li><strong>hard-prompt 커리큘럼.</strong> 정책 모델로 pass@k 분석을 해 어려운 프롬프트를 골라 난이도를 점증시키고, advantage가 0인 프롬프트를 실시간으로 걸러내며, 여러 능력의 프롬프트를 섞어 배치를 구성한다.</li> </ul> <p>다만 <strong>online RL을 실제로 굴리는 reward 신호가 무엇인지는 블로그가 의도적으로 공개하지 않는다.</strong> 규칙 기반 verifiable reward인지, 학습된 RM인지, 혼합인지 명시가 없다. 특히 Llama 3에서 오프라인 필터로만 쓰이던 RM이 Llama 4의 온라인 루프 안으로 돌아왔는지조차 확인되지 않는다 — 확인되는 건 파이프라인의 골격과 데이터 큐레이션 전략까지다.</p> <h2 id="kimi-k3-도메인-전문가-아홉을-mopd로-합친다">Kimi K3: 도메인 전문가 아홉을 MOPD로 합친다</h2> <p>Kimi K3(2026-07)의 후처리는 <strong>세 단계</strong>다 — SFT로 콜드스타트를 잡고, RL로 도메인 전문가들을 서로 다른 reasoning-effort 수준으로 키운 뒤, <strong>MOPD(Multi-Teacher On-Policy Distillation)</strong>로 하나의 모델로 통합한다. 이 “전문가를 따로 키워 증류로 합친다”는 골격은 DeepSeek-V4와 정확히 같은 방향이다.</p> <p>reward 조달처는 도메인에 따라 갈린다.</p> <ul> <li><strong>검증 가능 도메인</strong>: 5,120만 개(51.2M) 규모의 RL 샌드박스에서 규칙 기반 verifiable reward로 학습한다 (①).</li> <li><strong>검증 불가능한 일반 태스크</strong>: <strong>Agentic Generative Reward Model(GRM)</strong>을 쓴다 (④). judge가 강제된 프로토콜을 따른다 — (1) 출력을 읽고, (2) <strong>rubric을 생성</strong>하고, (3) 각 후보를 그 rubric으로 채점하고, (4) 점수를 <strong>scorepad</strong>에 기록한다. K2.5의 토너먼트식 그룹 비교(binary comparison)를 이어받되, <strong>judge가 채점 기준(rubric)을 스스로 만든다</strong>는 점이 핵심이다.</li> </ul> <p>이 Agentic GRM은 <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM/SPCT</a>의 “judge가 평가 원칙을 스스로 생성한다”와 <a href="/blog/2026/rubrics-as-rewards/">#41 Rubrics as Rewards</a>의 “rubric을 보상 기준으로 쓴다”를 프로덕션에서 합친 형태다. DeepSeek-V4의 GRM과 더불어 <strong>생성형 reward가 더 이상 논문 안에만 있지 않다</strong>는 이번 세대의 증거다.</p> <p>여기에 두 가지 reward-shaping·방어 장치가 붙는다.</p> <ul> <li><strong>Reasoning-effort RL</strong>: 문제마다 초기 토큰 예산 \(b_0(x)\)를 정하고, 토큰 사용량이 \(\tau \cdot b_0(x)\)를 넘으면 task reward를 \(-1\)로 덮어써 과도한 사고를 벌한다. \(\tau\)를 큰 값에서 점점 줄이는 커리큘럼으로 low·high·max effort 전문가를 각각 만든다 — “얼마나 생각할지”를 조절하는 장치이고, 추론 시 <code class="language-plaintext highlighter-rouge">reasoning_effort</code>(low/high/max)로 노출된다.</li> <li><strong>Budget 기반 verbosity 제어</strong>: Agentic GRM이 “길게 쓰면 이긴다”는 식으로 hacking되는 걸 막으려고, 초기 길이 \(\ell_0\)의 \(\sigma\)배를 넘는 후보는 binary comparison에서 자동으로 진다.</li> </ul> <p>참고로 self-critique rubric은 전신 K2(2025-07)가 처음 도입했고, K3의 Agentic GRM은 그 계보 위에서 “judge가 rubric을 생성해 채점”하는 형태로 발전한 것이다.</p> <h2 id="solar-open-2-열두-전문가를-mopd로-합친다">Solar Open 2: 열두 전문가를 MOPD로 합친다</h2> <p>Solar Open 2(2026-07, 250B MoE)의 reward 설계는 이전 세대(Solar Open)와 크게 다르다. 알고리즘은 <strong>GRPO를 token-level importance sampling으로</strong> 쓴다 — 논문은 “GSPO의 sequence-level 비율이 아니라 GRPO의 token-level 비율을 유지한다”고 명시한다(널리 퍼진 GSPO와 반대 선택). reward는 도메인별로 갈린다.</p> <ul> <li><strong>STEM·추론</strong>: 검증 가능한 규칙 reward (①).</li> <li><strong>에이전트</strong>: 다차원 rubric — 대화 에이전트는 과정 품질·결과 품질을 분리하고 실행 가능한 read-back으로 검증, 코딩 에이전트는 fail-to-pass 테스트 + 5차원 LLM rubric + 실행 가능성, 오피스 에이전트는 규칙 기반 checker + LLM judge.</li> <li><strong>전통적 스칼라 RM도, DPO도, KL 정규화도 쓰지 않는다</strong> — 검증 가능한 실행 신호 + LLM-as-judge로 대체한다.</li> </ul> <p>가장 눈에 띄는 건 통합 방식이다. <strong>열두 개의 전문가(teacher)를 MOPD(Multi-teacher On-Policy Distillation)로 하나로 합친다</strong> — student가 자기 궤적 위에서 routed teacher에 대한 per-position reverse KL을 최소화하되, <strong>outcome reward를 전혀 얹지 않는 KL-only 목적함수</strong>다. 논문은 이를 “λ로 균형 잡을 것도, reward-hacking 표면도 없다”고 표현한다. <a href="/blog/2026/deepseek-grm-spct/">#38</a> 이후 DeepSeek-V4·Kimi K3가 택한 “전문가→증류”에 Solar Open 2가 합류한 것이고, <strong>Kimi K3와는 MOPD라는 이름까지 같다.</strong></p> <h2 id="k-exaone-20-오답에서도-신호를-뽑는다">K-EXAONE 2.0: 오답에서도 신호를 뽑는다</h2> <p>K-EXAONE 2.0(2026-08, 750B MoE, LG AI Research)은 도메인마다 “선호 응답을 고르는 기준”과 “비선호 응답의 나쁜 패턴을 벌하는 reward”를 따로 정의한다. 수학·코드는 검증 가능한 신호로, 증명은 LLM-as-judge로, 대화는 인스턴스별 rubric으로, 에이전트는 행동의 정확성·품질로 판정한다 — ① 규칙과 ③·④ judge·rubric을 도메인별로 섞는다.</p> <p>알고리즘 둘이 독특하다.</p> <ul> <li><strong>GrouPER</strong>: 한 쿼리에 네 개 응답을 뽑아 도메인별 reward로 채점하고, 그 점수로 <strong>그룹 상대 advantage</strong>를 만들어 <strong>SimPER 계열의 선호 최적화 목적함수</strong>에 넣는다. 규칙 reward와 rubric 기반 생성형 reward를 함께 쓴다.</li> <li><strong>AGAPO</strong>: off-policy policy-gradient(truncated importance sampling)인데, 핵심은 <strong>틀린 답에서도 학습 신호를 뽑는다</strong>는 것이다 — 오답으로 이어진 잘못된 추론 경로에 <strong>음의 reward(penalty)</strong>를 매겨, 모델이 스스로 논리 오류를 피하도록 유도한다.</li> </ul> <p>대부분의 RLVR이 “정답이면 +, 오답이면 0”으로 오답을 그냥 버리는 데 반해, AGAPO는 <strong>오답의 잘못된 부분을 명시적으로 벌한다</strong>는 점에서 신호를 더 촘촘하게 쓴다. 안전성은 별도의 safety-aware preference 최적화 단계로 다룬다(<a href="/blog/2026/frontier-safety-design/">#60</a>).</p> <h2 id="ax-k2-네-그룹으로-나누고-mixture를-control-surface로-다룬다">A.X K2: 네 그룹으로 나누고 mixture를 control surface로 다룬다</h2> <p>A.X K2(2026, SKT)는 학습 mixture를 <strong>네 그룹 — instruction following, human preference, agentic tool use, safety — 으로 나누고</strong>, 그 비율을 미리 고정하지 않고 중간 RL 체크포인트로 모델의 약점을 짚어가며 조정하는 “control surface”로 다룬다. 그룹마다 reward 조달처가 다르다.</p> <ul> <li><strong>Instruction following</strong>: <strong>규칙 기반 verifiable reward</strong>(형식·길이·필수 표현·스키마 준수 검사) + <strong>난이도 필터링</strong> — 인하우스 소형 모델로 이미 잘 푸는 프롬프트를 걸러내 on-policy 신호를 정보량 큰 사례에 집중시킨다(<a href="/blog/2026/reward-model-design/">#62</a>의 프롬프트 큐레이션 그대로다).</li> <li><strong>Human preference</strong>: <strong>pointwise LLM-as-judge</strong>. 프롬프트마다 강한 외부 모델로 <strong>reference 답안</strong>을 얻어 judge에 few-shot 채점 앵커와 함께 준다. judge는 태스크를 6개 도메인(사실·추론·코딩·추출·창작·개방)으로 분류한 뒤 <strong>도메인별 4축 rubric</strong>(정확성·완결성·명료성·helpfulness)으로 채점하되, <strong>verbosity bias와 reward hacking을 막는 안전장치</strong>를 명시한다 — <a href="/blog/2026/prometheus-2/">#34 Prometheus 2</a> 계열의 reference 기반 rubric judge(③).</li> <li><strong>Safety</strong>: 별도 그룹으로 두고 principle 기반 rubric으로 채점한다. 이 그룹의 설계는 <a href="/blog/2026/frontier-safety-design/">#60</a>에서 자세히 다룬다.</li> </ul> <p>RL 알고리즘은 <strong>CISPO</strong>(MiniMax) — token-level 업데이트가 아니라 importance-sampling 가중치를 클립해, 확률은 낮지만 행동에 결정적인 토큰이 계속 그래디언트에 기여하게 한다 — 에 <strong>GDPO</strong>(Liu et al. 2026)를 얹는다. GDPO는 <strong>여러 reward를 각각 따로 정규화한 뒤 합쳐</strong> 각 신호의 해상도를 보존하고 multi-reward 학습을 안정화한다(<a href="/blog/2026/odin-disentangled-reward/">#12 ODIN</a>의 “신호 분리” 발상을 여러 reward로 일반화한 셈이다). KL penalty는 쓰지 않고 프롬프트당 16 rollout을 뽑으며, verbosity가 심한 데이터엔 group-relative length penalty를 더한다.</p> <h2 id="minimax-m1-cispo의-원산지-그리고-length-bias를-실시간-감시한다">MiniMax-M1: CISPO의 원산지, 그리고 length bias를 실시간 감시한다</h2> <p>이 글이 A.X K2에서 인용한 <strong>CISPO의 원조가 MiniMax-M1</strong>(2025-06, 456B 하이브리드 MoE)이다. CISPO는 PPO·GRPO가 token 단위로 클립하면서 “However”, “Recheck” 같은 <strong>드물지만 추론에 결정적인 토큰</strong>을 잘라버리는 문제를 지적하고, token 업데이트 대신 <strong>importance-sampling 가중치를 클립</strong>한다. AIME에서 DAPO 대비 2배 빠르게 수렴했다고 보고한다.</p> <p>reward는 도메인으로 갈린다.</p> <ul> <li><strong>검증 가능</strong>: 규칙 기반 정오 reward + format reward. 수학(~50K), 논리(SynLogic ~53K), 경쟁 프로그래밍(~30K), SWE는 샌드박스 테스트 통과/실패를 신호로 쓴다.</li> <li><strong>검증 불가능</strong>(~25K, 지시 따르기·창작·정답 없는 STEM): <strong>GenRM</strong>(④)을 쓴다.</li> </ul> <p>여기서 M1의 독특한 방어가 나온다. GenRM은 <strong>“길게 쓰면 이긴다”는 length bias</strong>로 hacking되기 쉬운데(짧지만 나은 답보다 긴 답을 선호), M1은 <strong>RL 학습 내내 length bias를 실시간 모니터링하다가 length-seeking이 감지되면 즉시 GenRM을 recalibration</strong>한다. Kimi K3가 budget 기반으로 사후 차단한다면, M1은 GenRM 자체를 학습 중에 다시 맞추는 셈이다. 커리큘럼도 쓴다 — 규칙 기반 추론 과제로 시작해 general 도메인을 점차 섞어 특화 능력의 catastrophic forgetting을 막는다.</p> <h2 id="glm-45-세-축추론에이전트일반을-나눠-rl하고-self-distillation으로-합친다">GLM-4.5: 세 축(추론·에이전트·일반)을 나눠 RL하고 self-distillation으로 합친다</h2> <p>GLM-4.5(2025-08, 355B MoE, Zhipu)의 부제가 설계를 요약한다 — <strong>A</strong>gentic, <strong>R</strong>easoning, <strong>C</strong>oding. 후처리는 두 단계다. <strong>Stage 1(Expert Training)</strong>에서 추론·에이전트·일반 채팅용 전문가를 따로 키우고, <strong>Stage 2(Unified Training)</strong>에서 이들을 <strong>self-distillation</strong>으로 하나의 하이브리드 추론 모델에 합친다 — DeepSeek-V4·Kimi K3·Solar Open 2에 이어 <strong>네 번째 “전문가→증류”</strong> 모델이다.</p> <p>RL은 세 갈래로 뚜렷이 나뉜다.</p> <ul> <li><strong>Reasoning RL</strong>: 프로그램으로 검증 가능한 정확성(①) + <strong>2단계 난이도 커리큘럼</strong>(중간 난이도 → 극난도).</li> <li><strong>Agentic RL</strong>: 최종 답의 정확성을 궤적 전체의 reward로 주는 <strong>outcome supervision</strong> + 잘못된 tool call에 <strong>format penalty</strong>. reward = 1 (형식 맞고 태스크 완수 시).</li> <li><strong>General RL</strong>: <strong>multi-source feedback</strong> — 규칙 기반 + 사람(RLHF) + 모델 기반(RLAIF)을 함께 쓴다.</li> </ul> <p>전문가를 합치는 방식도 iterative하다 — SFT 콜드스타트 → 전문가 RL → SFT 데이터를 RL 모델이 생성한 응답으로 교체하는 self-distillation → 다시 RL. 인프라(slime)는 동기·비동기를 모두 지원한다.</p> <h2 id="magistral-reward를-부품으로-쪼갠-순수-rlvr-유럽">Magistral: reward를 부품으로 쪼갠 순수 RLVR (유럽)</h2> <p>Magistral(2025-06, Mistral)은 이 비교에서 유일한 유럽 랩 모델이자, <strong>증류 없이 순수 RL만으로</strong> 추론을 키운 사례다(Magistral Medium을 Mistral Medium 3 위에 RL만 적용해 AIME-24를 약 50% 끌어올림). 비검증 도메인은 아예 다루지 않고 <strong>검증 가능한 수학·코드에만</strong> 집중한다.</p> <p>가장 배울 점은 <strong>reward를 명시적 부품의 합으로 쪼갠다</strong>는 것이다.</p> <ul> <li><strong>정오 reward 0.9</strong>: 수학은 <code class="language-plaintext highlighter-rouge">\boxed{}</code>를 SymPy로 검증, 코드는 20개 테스트 전부 통과.</li> <li><strong>format reward 0.1</strong>: <code class="language-plaintext highlighter-rouge">&lt;think&gt;&lt;/think&gt;</code>·<code class="language-plaintext highlighter-rouge">\boxed{}</code>·마크다운 코드블록을 지키면.</li> <li><strong>length penalty</strong>: <code class="language-plaintext highlighter-rouge">lmax</code> 초과 시 최대 −0.1의 soft penalty.</li> <li><strong>language consistency +0.1</strong>: 문제·사고·답이 같은 언어인지 fastText로 확인(다국어 혼용 방지).</li> </ul> <p>GRPO도 손본다 — <strong>KL penalty를 완전히 제거</strong>하고, group 길이로 손실을 정규화하고, advantage를 minibatch에서 정규화하고, 상단 클립을 키우는 <strong>Clip-Higher</strong>(ε_high≈0.26–0.28)로 탐색을 늘리고, <strong>advantage가 0인 그룹을 걸러낸다</strong>(<a href="/blog/2026/reward-model-design/">#62</a>의 프롬프트 큐레이션과 정확히 같은 장치다). Magistral은 “reward 설계 = 검증 가능한 부품을 어떻게 조합하느냐”를 가장 투명하게 보여주는 레시피다.</p> <h2 id="gemma-4-연구실의-reward-논문을-그대로-제품에-얹는다">Gemma 4: 연구실의 reward 논문을 그대로 제품에 얹는다</h2> <p>Gemma 4(2026-06, dense 2.3B/4.5B/12B/31B + MoE 26B[활성 3.8B])는 report에서 post-training을 “Gemma 3와 유사한 방식”이라고 밝힌다. 그래서 reward 설계의 실체는 <a href="https://arxiv.org/abs/2503.19786">Gemma 3 report</a>에 있고, 거기 한 문장이 이 글의 관점에서 특별하다.</p> <blockquote> <p>“Our post-training approach relies on an improved version of knowledge distillation from a large IT teacher, along with a RL finetuning phase based on <strong>improved versions of BOND, WARM, and WARP</strong>.”</p> </blockquote> <p>reward 조달은 도메인별로 갈린다.</p> <blockquote> <p>“We use <strong>a variety of reward functions</strong> to improve helpfulness, math, coding, reasoning, instruction-following, and multilingual abilities, while minimizing model harmfulness.”</p> </blockquote> <p>여기에 <strong>코드 실행 피드백(code execution feedback)과 수학 문제의 ground-truth reward</strong>가 포함된다 — 즉 ① 규칙 기반 verifiable reward를 쓰고, 그 위에 <strong>weight averaged reward models</strong>(WARM)를 얹는다.</p> <p>이 조합이 이 시리즈에서 갖는 의미는 각별하다. 세 방법이 전부 이 시리즈가 다루는(또는 다룰) 논문이기 때문이다.</p> <table> <thead> <tr> <th>방법</th> <th>무엇을 하나</th> <th>시리즈 위치</th> </tr> </thead> <tbody> <tr> <td><strong>WARM</strong> (<a href="https://arxiv.org/abs/2401.12187">2401.12187</a>)</td> <td>여러 RM을 weight averaging해 hacking·노이즈를 상쇄</td> <td><a href="/blog/2026/warm-weight-averaged-reward/">#14</a></td> </tr> <tr> <td><strong>BOND</strong> (<a href="https://arxiv.org/abs/2407.14622">2407.14622</a>)</td> <td>Best-of-N 분포를 증류해 N배 추론 비용 없이 그 품질을 얻는다</td> <td><a href="/blog/2026/bond/">#29</a></td> </tr> <tr> <td><strong>WARP</strong> (<a href="https://arxiv.org/abs/2406.16768">2406.16768</a>)</td> <td>정책을 weight space에서 세 번 병합해 KL-reward 파레토를 밀어올림</td> <td><a href="/blog/2026/warp/">#30</a></td> </tr> </tbody> </table> <p>특히 <strong>WARM은 <a href="/blog/2026/warm-weight-averaged-reward/">#14</a>에서 “reward hacking 방어 연구”로 다룬 논문인데, Gemma가 그것을 실제 제품 학습에 쓴다.</strong> <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM</a>의 아이디어가 DeepSeek-V4로 넘어간 것과 같은 연구→프로덕션 루프가, 여기서는 DeepMind 내부에서 일어난 셈이다.</p> <p>다만 report는 방법의 <strong>이름과 reward의 종류까지만</strong> 밝히고, 각 reward의 가중치나 BOND/WARM/WARP의 배합 비율·하이퍼파라미터는 공개하지 않는다. 앞의 공개 층위 표에서 Gemma를 ②로 분류한 이유다.</p> <h1 id="experiments">Experiments</h1> <h2 id="마스터-비교표">마스터 비교표</h2> <table> <thead> <tr> <th>모델</th> <th>reward 조달처 (4분류)</th> <th>RL 알고리즘</th> <th>검증 가능 도메인</th> <th>검증 불가능 도메인</th> </tr> </thead> <tbody> <tr> <td>DeepSeek-V4</td> <td>① 규칙 + ④ GRM (도메인별)</td> <td>GRPO → on-policy 증류로 통합</td> <td>규칙 검증기: 정답 일치·테스트 통과</td> <td><strong>GRM (rubric-guided)</strong></td> </tr> <tr> <td>Qwen3</td> <td>① 규칙 + ③ reference judge + ② 스칼라 RM</td> <td>GRPO (reasoning) + General RL</td> <td>규칙 (query-verifier 쌍)</td> <td>③ reference judge + ② 스칼라 RM</td> </tr> <tr> <td>Llama 4</td> <td>비공개 (online RL) + 선호 쌍</td> <td>lightweight SFT → online RL → DPO</td> <td>명시 안 됨 (난이도 커리큘럼 중심)</td> <td>DPO (가볍게) + online RL</td> </tr> <tr> <td>Kimi K3</td> <td>① 규칙(51.2M 샌드박스) + ④ Agentic GRM</td> <td>전문가별 RL → MOPD 증류</td> <td>규칙 검증기: 대규모 샌드박스</td> <td>Agentic GRM (rubric 생성→scorepad)</td> </tr> <tr> <td>Solar Open 2</td> <td>① 규칙 + ④ rubric judge + 12전문가→MOPD</td> <td>GRPO(token-level) → MOPD 증류</td> <td>규칙 + 실행 검증</td> <td>LLM-as-judge rubric</td> </tr> <tr> <td>K-EXAONE 2.0</td> <td>① 규칙 + ③④ rubric·judge (도메인별)</td> <td>GrouPER(SimPER류) + AGAPO(off-policy)</td> <td>검증 가능 신호</td> <td>LLM-judge·rubric, 오답에 음의 보상</td> </tr> <tr> <td>A.X K2</td> <td>① 규칙(+난이도필터) + ③ reference judge</td> <td>CISPO + GDPO(멀티리워드 분리정규화)</td> <td>규칙 verifiable(형식·스키마)</td> <td>reference judge 6도메인 4축 rubric</td> </tr> <tr> <td>MiniMax-M1</td> <td>① 규칙 + ④ GenRM</td> <td>CISPO(원조)</td> <td>규칙·샌드박스 테스트</td> <td>GenRM(length bias 실시간 감시)</td> </tr> <tr> <td>GLM-4.5</td> <td>① 규칙 + agentic outcome + rule/RLHF/RLAIF</td> <td>3축 RL → self-distillation</td> <td>프로그램 검증 + 난이도 커리큘럼</td> <td>multi-source(rule+RLHF+RLAIF)</td> </tr> <tr> <td>Gemma 4</td> <td>① 규칙(코드실행·수학 정답) + ② WARM 평균 RM</td> <td>BOND + WARM + WARP (+ IT teacher 증류)</td> <td>코드 실행 피드백·수학 ground-truth</td> <td>도메인별 다양한 reward 함수</td> </tr> <tr> <td>Magistral</td> <td>① 규칙만(0.9정오+0.1format+lang)</td> <td>GRPO 변형(KL제거·Clip-Higher·zero-adv 필터)</td> <td>SymPy·테스트 통과</td> <td>(비검증 미대응)</td> </tr> </tbody> </table> <p>이 표가 이 글의 결론을 압축한다. 왼쪽 도메인(검증 가능)에서는 열한 모델 모두 ①(규칙)을 포함한다. 오른쪽 도메인(검증 불가능)에서는 판정형 reward(③ reference judge·④ 생성형 GRM·rubric judge)가 <strong>열하나 중 여덟</strong>에서 쓰인다 — 스칼라 RM 하나만 두는 모델은 사실상 사라졌다(Llama 4만 DPO+RM 노선). 나아가 <strong>“도메인 전문가를 따로 키워 증류로 합친다”는 구조가 DeepSeek-V4·Kimi K3·Solar Open 2·GLM-4.5 네 곳에서 겹치고(Solar 2·K3는 이름까지 MOPD).</strong> 이 두 가지가 이전 세대와의 결정적 차이다.</p> <h2 id="공통-수렴점-검증-가능-도메인은-규칙이-표준이-됐다">공통 수렴점: 검증 가능 도메인은 규칙이 표준이 됐다</h2> <p>수학·코드처럼 정답이 프로그램적으로 판정 가능한 도메인에서, 열한 모델은 예외 없이 <strong>① 규칙 기반 verifiable reward</strong>를 쓴다. <a href="/blog/2026/deepseek-r1/">#33</a>에서 짚었듯 이유는 명확하다 — 규칙 검증기는 파라미터가 없는 함수이므로 hacking할 대상 자체가 없고, RM을 학습·재학습하는 비용도 들지 않는다.</p> <p>DeepSeek-R1(2025-01)이 이 선택지를 대중화한 뒤, 이후 발표된 모델들이 그대로 채택했다는 사실이 흐름을 보여준다. Qwen3는 “rule-based reward가 높은 정밀도로 정오를 판정해 reward hacking을 예방한다”고 명문화했고, Solar Open 2·K-EXAONE 2.0·A.X K2도 수학·코드·형식 검사에 규칙 검증기를 쓴다. Llama 4조차 (reward 신호 자체는 비공개지만) 추론·코딩·수학을 별도 취급하며 난이도 커리큘럼을 그 도메인에 집중한다. <strong>RLVR이 “만능 표준”이라고 단정하기는 여전히 이르지만, 검증 가능한 도메인에서 규칙을 1순위로 두는 것은 사실상 공통 문법이 됐다.</strong></p> <h2 id="갈라지는-지점-그리고-grm의-등장">갈라지는 지점, 그리고 GRM의 등장</h2> <p>정답이 없는 도메인(글쓰기, 상담, 개방형 추론)으로 가면 열한 모델은 서로 다른 답을 낸다. 이전 세대(DeepSeek-R1, Qwen2.5, Llama 3)를 비교했을 때 이 칸의 결론은 “연구 논문은 생성형 judge를 말하지만, 프로덕션 report는 아직 스칼라 RM이나 self-critique에 머문다”였다. <strong>이번 세대에서 그 결론이 바뀐다.</strong></p> <table> <thead> <tr> <th>접근</th> <th>채택 모델</th> <th>조달처</th> <th>관련 편</th> </tr> </thead> <tbody> <tr> <td>사람 선호 쌍 + DPO</td> <td>Llama 4</td> <td>선호</td> <td><a href="/blog/2026/dpo/">#24 DPO</a></td> </tr> <tr> <td>스칼라 RM</td> <td>Qwen3, <strong>Gemma 4</strong>(weight averaged RM)</td> <td>②</td> <td>2부(<a href="/blog/2026/bradley-terry-rethinking/">#4</a>~<a href="/blog/2026/rewardbench-2/">#9</a>), <a href="/blog/2026/warm-weight-averaged-reward/">#14 WARM</a></td> </tr> <tr> <td>reference 기반 judge</td> <td>Qwen3, A.X K2</td> <td>③</td> <td><a href="/blog/2026/prometheus-2/">#34 Prometheus 2</a></td> </tr> <tr> <td>generative RM·rubric judge</td> <td><strong>DeepSeek-V4</strong>, <strong>Kimi K3</strong>, <strong>MiniMax-M1</strong>, Solar Open 2, K-EXAONE 2.0, GLM-4.5</td> <td>④</td> <td><a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM</a>, <a href="/blog/2026/rubrics-as-rewards/">#41 Rubrics as Rewards</a></td> </tr> </tbody> </table> <p>마지막 행이 핵심이다. <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM</a>이 “judge가 채점 근거를 스스로 생성하고 rubric을 조건으로 받는다”는 아이디어를 연구 단계에서 제안했는데, <strong>같은 팀의 DeepSeek-V4가 그 GRM을 프로덕션에 넣었고, Kimi K3·MiniMax-M1·Solar Open 2·K-EXAONE 2.0·GLM-4.5까지 여섯 모델이 생성형 rubric judge를 쓴다.</strong> Qwen3·A.X K2의 reference-judge(③)까지 합치면, 생성형·조건부 평가가 더 이상 논문 안에만 있지 않다는 것이 이번 세대의 가장 큰 변화다. (그 씨앗은 전신 Kimi K2의 self-critique였다 — 위 Kimi K3 절 참고.) 연구와 프로덕션 사이의 시차가 눈에 띄게 좁혀졌다.</p> <p>다만 <strong>스칼라 RM이 사라진 것은 아니다.</strong> Gemma 4는 judge나 GRM이 아니라 여전히 <strong>학습된 RM(②)</strong> 에 기댄다 — 대신 RM 하나를 믿는 대신 <a href="/blog/2026/warm-weight-averaged-reward/">#14 WARM</a>처럼 <strong>여러 RM을 weight averaging해서</strong> 개별 RM의 특이한 취약점을 상쇄한다. 즉 이번 세대의 분기는 “스칼라 RM이냐 생성형 judge냐”의 이분법이 아니라, <strong>스칼라 RM을 쓰더라도 그 RM을 어떻게 견고하게 만들 것인가</strong>라는 축이 하나 더 있는 셈이다.</p> <h2 id="숨은-reward-설계-프롬프트를-고르는-것도-reward다">숨은 reward 설계: 프롬프트를 고르는 것도 reward다</h2> <p>reward 설계를 “어떤 함수로 점수를 매기나”로만 보면 절반만 본 것이다. 열한 모델이 공통으로 공들이는 또 하나의 축은 <strong>어떤 프롬프트에 그 reward를 먹이느냐</strong>다.</p> <table> <thead> <tr> <th>모델</th> <th>프롬프트 선별·커리큘럼 전략</th> <th>무엇을 노리나</th> </tr> </thead> <tbody> <tr> <td>Qwen3</td> <td>reasoning RL에서 쿼리당 rollout 다수 + off-policy 재활용</td> <td>샘플 효율</td> </tr> <tr> <td>Llama 4</td> <td>pass@k로 hard prompt 선별, advantage 0인 프롬프트 실시간 제거, medium-hard만 유지</td> <td>신호 없는 프롬프트 낭비 제거, 탐색 여지 확보</td> </tr> <tr> <td>DeepSeek-V4</td> <td>도메인별 고품질 데이터로 전문가를 따로 육성</td> <td>도메인 간 간섭 없이 각 reward에 집중</td> </tr> <tr> <td>A.X K2</td> <td>인하우스 소형 모델로 이미 잘 푸는 프롬프트를 걸러냄(난이도 필터)</td> <td>on-policy 신호를 정보량 큰 사례에 집중</td> </tr> <tr> <td>GLM-4.5</td> <td>추론 RL에 2단계 난이도 커리큘럼(중간→극난도)</td> <td>난이도를 점증시켜 신호를 유지</td> </tr> <tr> <td>Magistral</td> <td>advantage 0 그룹 필터 + length penalty</td> <td>신호 없는 그룹 제거(<a href="/blog/2026/reward-model-design/">#62</a> 프롬프트 큐레이션)</td> </tr> <tr> <td>MiniMax-M1</td> <td>규칙 추론 → general 점진 혼합 커리큘럼</td> <td>특화 능력 catastrophic forgetting 방지</td> </tr> </tbody> </table> <p>이것이 <a href="/blog/2026/secrets-rlhf-reward-modeling/">#5 Secrets of RLHF II</a>가 다룬 “선호 데이터 노이즈” 문제의 실전판이다. 노이즈가 큰(변별력 없는) 프롬프트를 애초에 걸러내면, 같은 reward 함수라도 hacking 여지가 줄고 학습이 안정된다. <strong>reward 함수를 바꾸지 않고도 reward의 질을 끌어올리는 방법이 프롬프트 큐레이션</strong>인 셈이다.</p> <h2 id="dpo-vs-rl-트레이드오프">DPO vs RL 트레이드오프</h2> <p><a href="/blog/2026/dpo/">#24 DPO</a>는 reward model과 온라인 RL 루프를 통째로 없애고 선호 쌍에서 바로 정책을 학습하는 방법이었다. 열한 모델을 이 스펙트럼 위에 놓으면 이렇게 갈린다.</p> <table> <thead> <tr> <th>위치</th> <th>모델</th> <th>특징</th> </tr> </thead> <tbody> <tr> <td>DPO를 가볍게 + online RL 중심</td> <td>Llama 4</td> <td>SFT·DPO는 “탐색을 막지 않을 만큼만”, 정렬의 무게중심은 online RL</td> </tr> <tr> <td>RL 다단계 (off-policy 섞음)</td> <td>Qwen3</td> <td>4단계 GRPO RL, reasoning RL은 off-policy rollout 재활용(DPO 없음)</td> </tr> <tr> <td>RL 중심(순수 온라인)</td> <td>DeepSeek-V4, Kimi K3, Solar Open 2, A.X K2, MiniMax-M1, GLM-4.5, Magistral</td> <td>GRPO/CISPO 기반 온라인 RL이 정책 업데이트를 전담(DPO 없음)</td> </tr> <tr> <td>off-policy + 선호 최적화</td> <td>K-EXAONE 2.0</td> <td>AGAPO(off-policy PG) + GrouPER(SimPER류 그룹 선호)</td> </tr> </tbody> </table> <p>Llama 3가 “DPO만으로 충분”했다면, Llama 4는 한 발 물러나 <strong>“DPO를 너무 세게 걸면 RL의 탐색을 죽인다”</strong>는 반대 방향의 교훈을 얹었다. 오프라인 정렬은 싸지만 모델을 좁은 분포에 가둘 수 있고, 온라인 RL은 비싸지만 탐색을 통해 새 능력을 끌어낸다. 열한 모델의 선택은 결국 <strong>“오프라인으로 얼마나 다지고, 온라인에 얼마나 탐색을 맡길 것인가”</strong>의 배분 문제로 수렴한다.</p> <h2 id="reward-hacking-방어-각자의-방식">reward hacking 방어: 각자의 방식</h2> <p><a href="/blog/2026/reward-model-overoptimization/">#10</a>~<a href="/blog/2026/warm-weight-averaged-reward/">#14</a>이 다룬 방어 기법들이 실제로 어떻게 쓰이는지 정리하면 이렇다.</p> <table> <thead> <tr> <th>모델</th> <th>방어 장치</th> <th>원리</th> </tr> </thead> <tbody> <tr> <td>DeepSeek-V4</td> <td>규칙 우선 + hard-to-verify에만 GRM, on-policy 증류</td> <td>파라미터 없는 규칙으로 hacking 표면을 최소화, GRM은 근거 생성으로 판정을 검증 가능하게</td> </tr> <tr> <td>Qwen3</td> <td>rule-based reward를 “hacking 예방” 목적으로 명시</td> <td>검증 가능한 곳은 규칙으로 못박아 RM 근사 오차 자체를 없앰</td> </tr> <tr> <td>Llama 4</td> <td>advantage 0 프롬프트 제거, medium-hard 커리큘럼</td> <td>신호 없는 구간에서의 편법 학습 차단, 탐색을 유의미한 난이도에 집중</td> </tr> <tr> <td>Kimi K3</td> <td>budget 기반 verbosity 제어</td> <td>Agentic GRM이 장황한 출력으로 hacking되는 걸 막으려 초기 길이의 σ배를 넘는 후보를 자동 탈락</td> </tr> <tr> <td>Solar Open 2</td> <td>MOPD를 KL-only(outcome reward 없음)로</td> <td>reward를 아예 안 얹어 증류 단계의 hacking 표면을 제거</td> </tr> <tr> <td>A.X K2</td> <td>GDPO(reward별 분리 정규화) + judge의 anti-verbosity·length penalty</td> <td>여러 reward를 섞을 때 한 신호가 다른 신호를 잡아먹는 것과 장황함 편향을 차단</td> </tr> <tr> <td>MiniMax-M1</td> <td>GenRM length bias 실시간 모니터링 → recalibration</td> <td>judge가 “길수록 이긴다”로 새면 학습 중 즉시 재보정</td> </tr> <tr> <td>Gemma 4</td> <td><strong>WARM(weight averaged reward models)</strong> + WARP의 EMA 앵커</td> <td>RM을 평균해 개별 RM의 특이 취약점을 상쇄(<a href="/blog/2026/warm-weight-averaged-reward/">#14</a>의 프로덕션 적용), 정책 쪽은 동적 KL 앵커로 이탈을 억제</td> </tr> <tr> <td>Magistral</td> <td>KL 제거하되 length penalty + zero-advantage 필터</td> <td>길이 편법과 신호 없는 그룹을 명시적으로 차단</td> </tr> </tbody> </table> <p>표현은 달라도 원리는 하나로 수렴한다 — <strong>reward 신호와 “정책이 참조점에서 얼마나 벗어났는가”를 분리해서 다룬다.</strong> DeepSeek·Solar는 KL을 손실 안에서 명시적으로 떼어놓고, Qwen·Llama는 애초에 노이즈가 크거나 신호가 없는 데이터를 걸러낸다. <a href="/blog/2026/rlhf-length-correlations/">#11 Length Correlations</a>가 지적한 “성능 향상처럼 보이지만 실은 길이·문체 편향”이라는 함정을, 열한 모델 모두 나름의 방식으로 피해 가려 한 흔적이다.</p> <h2 id="학습-안정성-무엇을-클립하고-무엇에-앵커를-걸-것인가">학습 안정성: 무엇을 클립하고, 무엇에 앵커를 걸 것인가</h2> <p>reward를 잘 설계해도 RL이 발산하면 소용이 없다. 그래서 열한 모델은 <strong>안정성 장치</strong>에서도 뚜렷이 갈린다. 이 축은 크게 네 갈래다.</p> <p><strong>(1) importance ratio를 어느 단위로 다루나</strong> — 같은 GRPO 계열인데 여기서 정반대 선택이 나온다.</p> <table> <thead> <tr> <th>선택</th> <th>모델</th> <th>근거</th> </tr> </thead> <tbody> <tr> <td>token 단위 유지</td> <td>Solar Open 2</td> <td>논문이 “GSPO의 sequence-level이 아니라 GRPO의 token-level 비율을 유지한다”고 명시. token 단위 trust-region masking을 씀</td> </tr> <tr> <td><strong>sequence 단위로 올림</strong></td> <td>GSPO(<a href="/blog/2026/gspo/">#27</a>)</td> <td>token 비율은 고분산 노이즈를 누적시킨다. MoE에서 업데이트마다 활성 expert의 약 10%가 바뀌어 token 비율이 요동치는 문제를 해결</td> </tr> <tr> <td><strong>IS 가중치를 클립</strong></td> <td>MiniMax-M1, A.X K2</td> <td>CISPO — token 업데이트가 아니라 importance-sampling 가중치를 클립해, 확률은 낮지만 행동에 결정적인 토큰(“However”, “Recheck”)이 계속 그래디언트에 기여하게 한다</td> </tr> </tbody> </table> <p><strong>(2) KL 앵커를 어떻게 두나</strong> — 고정할지, 움직일지, 아예 뺄지.</p> <table> <thead> <tr> <th>선택</th> <th>모델</th> <th>방식</th> </tr> </thead> <tbody> <tr> <td><strong>동적 EMA 앵커</strong></td> <td>Gemma 4(WARP·BOND)</td> <td>정책의 EMA를 KL 앵커로 삼아 제약이 학습 진행에 따라 자연히 완화된다(automatic annealing)</td> </tr> <tr> <td>손실 안에서 분리</td> <td>DeepSeek 계열</td> <td>KL을 reward에 섞지 않고 손실에 직접 더한다</td> </tr> <tr> <td><strong>KL을 아예 제거</strong></td> <td>Magistral, A.X K2</td> <td>Magistral은 연산 절감을 위해 KL penalty를 완전히 제거하고 length penalty·zero-advantage 필터로 대신한다. A.X K2도 KL penalty를 쓰지 않는다</td> </tr> </tbody> </table> <p><strong>(3) 그래디언트가 죽거나 폭주하지 않게</strong> — 배치와 클립 범위를 손본다.</p> <ul> <li><strong>Clip-Higher</strong>(DAPO <a href="/blog/2026/dapo/">#28</a>, Magistral): 상한 클립을 키워(\(\epsilon_{high} \approx 0.28\)) 낮은 확률 토큰이 오를 여지를 준다. <strong>entropy collapse</strong> 방지.</li> <li><strong>advantage 0 제거</strong>(DAPO, Magistral, Llama 4): 그룹 reward가 전부 같으면 그래디언트가 0이라 배치만 낭비된다. 오버샘플링해 채운다.</li> <li><strong>off-policy 내성</strong>(Kimi K3): partial rollout으로 긴 궤적이 여러 iteration에 걸치면서 생기는 staleness를, <strong>per-token regularization</strong>으로 업데이트를 국소 이웃에 묶어 버틴다.</li> <li><strong>truncated importance sampling</strong>(K-EXAONE 2.0의 AGAPO), <strong>off-policy rollout 재활용</strong>(Qwen3의 reasoning RL): 샘플 효율과 안정성의 절충.</li> </ul> <p><strong>(4) reward 신호 자체를 안정화</strong> — 이게 이 시리즈의 관심과 가장 가깝다.</p> <table> <thead> <tr> <th>모델</th> <th>장치</th> <th>무엇을 막나</th> </tr> </thead> <tbody> <tr> <td><strong>Gemma 4</strong></td> <td><strong>WARM</strong> — 여러 RM을 weight averaging</td> <td>RM 하나의 특이한 취약점·노이즈(<a href="/blog/2026/warm-weight-averaged-reward/">#14</a>)</td> </tr> <tr> <td><strong>MiniMax-M1</strong></td> <td>GenRM의 length bias를 학습 중 실시간 감시 → recalibration</td> <td>judge가 “길수록 이긴다”로 새는 것</td> </tr> <tr> <td><strong>A.X K2</strong></td> <td>GDPO — reward별로 따로 정규화한 뒤 결합</td> <td>여러 reward를 섞을 때 한 신호가 다른 신호를 잡아먹는 것</td> </tr> <tr> <td><strong>Kimi K3</strong></td> <td>budget 기반 verbosity 제어</td> <td>Agentic GRM이 장황한 출력에 속는 것</td> </tr> <tr> <td><strong>Solar Open 2</strong></td> <td>MOPD를 KL-only로(outcome reward 없음)</td> <td>증류 단계에 reward를 안 얹어 hacking 표면 자체를 제거</td> </tr> </tbody> </table> <p>정리하면 안정성 설계도 reward 설계와 같은 문법을 따른다 — <strong>서로 다른 성질의 신호를 한 덩어리로 뭉치지 말고 분리해서 다룬다.</strong> 클립의 단위를 reward의 단위에 맞추고(GSPO), 여러 reward를 따로 정규화하고(GDPO), RM을 평균해 개별 오차를 상쇄하고(WARM), 참조점 이탈은 KL이 아니라 길이·advantage 필터로 따로 관리한다(Magistral). <a href="/blog/2026/odin-disentangled-reward/">#12 ODIN</a>이 길이를 reward에서 떼어낸 발상이, 최적화 쪽에서도 반복되고 있는 셈이다.</p> <h2 id="안전성-축은-따로-뜯는다">안전성 축은 따로 뜯는다</h2> <p>지금까지 본 것은 전부 <strong>능력(helpfulness) 축</strong>이다 — 정확성·추론·코딩·지시 따르기를 어떻게 보상하나. 그런데 여러 모델이 <strong>안전성(harmlessness) reward를 능력 reward와 명시적으로 분리해</strong> 설계한다. <a href="/blog/2026/llama2-rlhf/">#8 Llama 2</a>가 helpfulness RM과 safety RM을 아예 두 개로 나눈 데서 시작된 흐름이다.</p> <p>안전 축은 성격이 다르다. 능력 도메인이 규칙(①)으로 수렴한 것과 달리 <strong>“이 응답이 안전한가”는 프로그램으로 판정되지 않아</strong> 대부분 rubric·judge로 가고, 게다가 <strong>over-refusal</strong>이라는 능력 축에 없는 고유한 실패 모드가 있다. 공개 수준도 딴판이라 — 안전을 아예 문서화하지 않는 report가 흔하다. 그래서 이 축은 분량이 따로 필요하고, <strong><a href="/blog/2026/frontier-safety-design/">#60 프론티어 모델은 harmlessness reward를 어떻게 설계했나</a></strong> 에서 따로 다룬다.</p> <h1 id="conclusion">Conclusion</h1> <p>43편에 걸쳐 쌓아온 재료를 열한 개 프론티어 모델에 겹쳐보면 이렇게 정리된다.</p> <ol> <li><strong>검증 가능한 도메인은 규칙으로 수렴한다.</strong> 열한 모델 모두 수학·코드에서 ① 규칙 기반 verifiable reward를 1순위로 둔다. <a href="/blog/2026/deepseek-r1/">#33</a>의 RLVR이 하나의 논문에서 그친 아이디어가 아니라 공통 문법이 됐다.</li> <li><strong>검증 불가능한 도메인에서 생성형 reward가 프로덕션에 진입했다.</strong> DeepSeek-V4의 GRM과 Kimi K3의 Agentic GRM이 <a href="/blog/2026/deepseek-grm-spct/">#38</a>·<a href="/blog/2026/rubrics-as-rewards/">#41</a>의 연구 아이디어(judge가 원칙·rubric을 스스로 생성)를 실제 학습에 얹었고, DeepSeek-V4·Kimi K3·Solar Open 2·GLM-4.5 네 모델이 “전문가를 따로 키워 증류로 합친다”는 구조(가운데 둘은 이름까지 MOPD)까지 공유한다. 이전 세대 비교에서 “생성형 judge는 아직 논문 안에만 있다”던 결론은 이번 세대에서 갱신된다. 같은 연구→프로덕션 루프가 DeepMind에서도 보인다 — <a href="/blog/2026/warm-weight-averaged-reward/">#14 WARM</a>이 Gemma의 실제 RL 레시피(BOND·WARM·WARP)에 들어가 있다.</li> <li><strong>reward 설계는 함수 선택 + 프롬프트 선택 + 오프라인/온라인 배분의 삼중 문제다.</strong> Qwen의 분산 선별, Llama 4의 난이도 커리큘럼, DeepSeek-V4의 도메인 분리는 모두 “함수를 안 바꾸고 reward의 질을 올리는” 설계였다.</li> <li><strong>reward hacking 방어는 형태가 달라도 원리는 하나다.</strong> reward 신호와 참조점 이탈 신호를 분리한다는 것 — DeepSeek·Solar의 손실 내 KL, Qwen·Llama의 데이터 큐레이션 모두 <a href="/blog/2026/reward-model-overoptimization/">#10</a>~<a href="/blog/2026/odin-disentangled-reward/">#12</a>이 정량화한 문제에 대한 실무적 응답이다.</li> <li><strong>능력 축과 안전 축은 분리해서 설계된다.</strong> <a href="/blog/2026/llama2-rlhf/">#8 Llama 2</a>가 시작한 helpfulness·safety 분리가 이번 세대에도 이어진다. 안전 축은 판정 방식도, 실패 모드(over-refusal)도, 공개 수준도 능력 축과 달라 <a href="/blog/2026/frontier-safety-design/">#60</a>에서 따로 다룬다.</li> </ol> <p>이 시리즈를 여는 <a href="/blog/2026/deep-rl-human-preferences/">#1 Christiano 2017</a>은 “사람의 선호로 보상 함수를 배울 수 있는가”라는 질문 하나로 시작했다. 열 프론티어 모델을 지나 도착한 답은, 그 질문이 하나의 답을 갖지 않는다는 것이다. 정답이 있으면 규칙이 reward가 되고, 정답 예시가 있으면 reference judge가, 기준은 있지만 예시가 없으면 생성형 RM이, 그조차 흐릿하면 사람의 선호 쌍이 reward를 대신한다.</p> <p><strong>reward 설계는 하나의 정답을 찾는 문제가 아니라, 내가 가진 도메인이 이 스펙트럼의 어디에 있는지를 정확히 진단하는 문제였다.</strong> 그 진단을 실제 설계 절차로 옮기는 방법은 다음 글 <a href="/blog/2026/reward-model-design/">#62 reward를 어떻게 설계할 것인가</a>에서 한 장의 체크리스트로 정리한다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>DeepSeek-AI, 2026. <a href="https://arxiv.org/abs/2606.19348">DeepSeek-V4: Towards Highly Efficient Million-Token Context Intelligence</a>.</li> <li>DeepSeek-AI, 2025. <a href="https://arxiv.org/abs/2501.12948">DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning</a> — <a href="/blog/2026/deepseek-r1/">#33</a>에서 다룬 RLVR 원형.</li> <li>Shao et al. (DeepSeek-AI), 2024. <a href="https://arxiv.org/abs/2402.03300">DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models</a> — GRPO 원 논문.</li> <li>Qwen Team, 2025. <a href="https://arxiv.org/abs/2505.09388">Qwen3 Technical Report</a>.</li> <li>Meta AI, 2025. <a href="https://ai.meta.com/blog/llama-4-multimodal-intelligence/">The Llama 4 herd: The beginning of a new era of natively multimodal AI innovation</a>.</li> <li>Meta AI, 2024. <a href="https://arxiv.org/abs/2407.21783">The Llama 3 Herd of Models</a> — 6라운드 rejection sampling + DPO, PPO 미사용(비교 기준).</li> <li>Kimi Team, 2026. <a href="https://github.com/MoonshotAI/Kimi-K3">Kimi K3: Open Frontier Intelligence</a> — 3단계(SFT→RL→MOPD) + Agentic GRM(rubric 생성) + reasoning-effort budget RL.</li> <li>Kimi Team, 2025. <a href="https://arxiv.org/abs/2507.20534">Kimi K2: Open Agentic Intelligence</a> — self-critique rubric reward를 도입한 전신.</li> <li>Upstage AI, 2026. <a href="https://arxiv.org/abs/2607.20062">Solar Open 2 Technical Report</a> — 12 전문가 → MOPD, GRPO token-level.</li> <li>Upstage AI, 2026. <a href="https://arxiv.org/abs/2601.07022">Solar Open Technical Report</a> — 전신(v1).</li> <li>LG AI Research, 2026. <a href="https://arxiv.org/abs/2608.04505">K-EXAONE 2.0 Technical Report</a> — GrouPER(SimPER류) + AGAPO(오답에 음의 보상).</li> <li>LG AI Research, 2026. <a href="https://arxiv.org/abs/2601.01739">K-EXAONE Technical Report</a> — 전신(1.0), AGAPO/GrouPER 상세.</li> <li>SKT AI, 2026. <a href="https://github.com/SKT-AI/A.X-K2">A.X K2 Technical Report</a> — 4그룹 reward + reference rubric judge + CISPO/GDPO.</li> <li>Liu et al., 2026. <a href="https://arxiv.org/abs/2601.05242">GDPO: Group Reward-Decoupled Normalization Policy Optimization</a> — A.X K2가 채택한 멀티리워드 정규화.</li> <li>MiniMax, 2025. <a href="https://arxiv.org/abs/2506.13585">MiniMax-M1: Scaling Test-Time Compute Efficiently with Lightning Attention</a> — CISPO 원 논문 + GenRM length-bias 감시.</li> <li>Zhipu AI, 2025. <a href="https://arxiv.org/abs/2508.06471">GLM-4.5: Agentic, Reasoning, and Coding Foundation Models</a> — 전문가 → self-distillation, 3축 RL.</li> <li>Mistral AI, 2025. <a href="https://arxiv.org/abs/2506.10910">Magistral</a> — 순수 RLVR, reward 부품 분해 + GRPO 변형(Clip-Higher).</li> <li>Gemma Team (Google DeepMind), 2026. <a href="https://arxiv.org/abs/2607.02770">Gemma 4 Technical Report</a> — post-training은 Gemma 3 레시피 계승.</li> <li>Gemma Team (Google DeepMind), 2025. <a href="https://arxiv.org/abs/2503.19786">Gemma 3 Technical Report</a> — BOND·WARM·WARP 기반 RL, 코드 실행·수학 ground-truth reward.</li> <li>Ramé et al. (Google DeepMind), 2024. <a href="https://arxiv.org/abs/2401.12187">WARM: On the Benefits of Weight Averaged Reward Models</a> — <a href="/blog/2026/warm-weight-averaged-reward/">#14</a>.</li> <li>Sessa et al. (Google DeepMind), 2024. <a href="https://arxiv.org/abs/2407.14622">BOND: Aligning LLMs with Best-of-N Distillation</a> — <a href="/blog/2026/bond/">#29</a>.</li> <li>Ramé et al. (Google DeepMind), 2024. <a href="https://arxiv.org/abs/2406.16768">WARP: On the Benefits of Weight Averaged Rewarded Policies</a> — <a href="/blog/2026/warp/">#30</a>.</li> <li>OpenAI, 2025. <a href="https://arxiv.org/abs/2508.10925">gpt-oss-120b &amp; gpt-oss-20b Model Card</a> — 공개 층위 ③의 예(post-training 세부 미공개).</li> <li>Rafailov et al., 2023. <a href="https://arxiv.org/abs/2305.18290">Direct Preference Optimization</a> — <a href="/blog/2026/dpo/">#24</a>에서 다룬 DPO 원 논문.</li> <li>Kim et al., 2024. <a href="https://arxiv.org/abs/2405.01535">Prometheus 2</a> — <a href="/blog/2026/prometheus-2/">#34</a> 참고.</li> <li>Liu et al. (DeepSeek-AI), 2025. <a href="https://arxiv.org/abs/2504.02495">Inference-Time Scaling for Generalist Reward Modeling</a> — <a href="/blog/2026/deepseek-grm-spct/">#38 DeepSeek-GRM/SPCT</a> 참고.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰아홉 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><strong>(현재 글)</strong> 프론티어의 helpfulness reward 설계 — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="rlhf"/><category term="reward-model"/><category term="rlvr"/><category term="dpo"/><category term="grpo"/><category term="genrm"/><category term="deepseek"/><category term="qwen"/><category term="llama"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #59 — 열한 개 프론티어 모델이 능력(helpfulness) reward를 설계한 방식 비교]]></summary></entry><entry><title type="html">에이전트의 reward hacking — 판정기가 뚫린다, 그리고 조합의 실패</title><link href="https://www.wonbeomjang.kr/blog/2026/agentic-reward-hacking/" rel="alternate" type="text/html" title="에이전트의 reward hacking — 판정기가 뚫린다, 그리고 조합의 실패"/><published>2026-08-11T00:58:00+00:00</published><updated>2026-08-11T00:58:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/agentic-reward-hacking</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/agentic-reward-hacking/"><![CDATA[<blockquote> <p><a href="https://arxiv.org/abs/2310.00166">Motif: Intrinsic Motivation from Artificial Intelligence Feedback</a> (Klissarov et al., Mila/FAIR at Meta, ICLR 2024)</p> </blockquote> <h1 id="introduction">Introduction</h1> <p>이 시리즈 <a href="/blog/2026/agentic-rl-landscape/">#44</a>과 RL Reward 설계 시리즈는 규칙 기반(rule-based) reward를 이렇게 정리했다 — “학습되는 파라미터가 없으니 뚫을 대상이 없다.” 스칼라 RM은 gradient로 최적화 압력을 받아 왜곡되고, judge는 프롬프트 안에서 설득당하지만, 정답과 문자열을 비교하거나 유닛 테스트를 돌리는 코드에는 최적화가 파고들 표면 자체가 없다는 논리였다.</p> <p>이 논리는 절반만 맞다. <strong>파라미터가 없어도 판정 로직이 진짜 목표의 대리 지표(proxy)라면, 그 정의 자체가 뚫린다.</strong> 뚫리는 건 함수가 아니라 정의다. NetHack의 오라클(oracle) 과제 판정 코드는 학습되는 가중치가 단 하나도 없다 — “에이전트 근처에 오라클처럼 보이는 캐릭터가 있는가”를 확인하는 하드코딩된 규칙일 뿐이다. 그런데 정확히 이 규칙이, 이 글의 중심 사례인 Motif에서 뚫린다. 진짜 오라클을 찾아간 게 아니라, 환각 상태에서 아무 몬스터나 오라클로 착각하게 만들어 그 착각을 판정기가 그대로 받아들이게 한 것이다.</p> <p>경로만 먼저 요약하면 이렇다. 에이전트는 수천 턴을 생존해 노란 곰팡이라는 특정 몬스터를 찾아 죽이고, 그 시체를 먹어 환각 상태에 빠진다. 환각 속에서 아무 몬스터나 눈앞에 나타나면 그것을 공격하지 않고 가만히 버틴다. 이 몬스터가 환각으로 오라클처럼 보이는 순간, 게임 엔진은 “근처에 오라클이 있다”고 판단해 과제를 완료 처리한다. 에이전트는 진짜 오라클이 있는 던전 깊은 곳에는 단 한 번도 가지 않는다. 이 경로 전체를 뒤에서 단계별로 되짚는다.</p> <p>이 글이 다룰 두 번째, 그리고 더 근본적인 주제는 <strong>misalignment by composition</strong>이다. 개별적으로 최적화하면 사람의 직관과 잘 맞는 행동을 낳는 보상들이 있다. 이 보상들을 그냥 더해서 함께 최적화하면 어떻게 될까. Motif의 저자들이 발견한 답은 놀랍다 — <strong>개별로는 둘 다 정렬돼 있어도, 합치면 어긋난 행동이 새로 생겨난다.</strong> 이건 어느 한쪽 보상이 나빠서가 아니다. 둘의 조합이 열어준 새로운 능력(생존 기술)이, 원래는 존재하지 않았던 지름길(환각을 유도해 판정을 속이는 길)을 만들어낸 것이다.</p> <p>이 글의 구성은 다음과 같다. Method에서 Motif의 3단계 구조 — LLM 선호 라벨링, Bradley-Terry 증류, 내재적 보상으로의 변환 — 를 수식과 함께 정확히 따라간다. 그다음 절에서 오라클 과제의 hacking 경로를 단계별로 재구성하고, misalignment by composition의 정확한 정의를 확인한다. 이어서 이 시리즈가 2~12부에서 이미 예고했던 다른 네 가지 hacking 유형을 회수해 하나의 지도로 묶는다. 마지막으로 “고정 계수로 그냥 더한다”는 Motif의 실패를 기준점 삼아, 실제 프론티어 모델들이 여러 reward를 어떻게 다르게 결합하는지 표로 정리한다.</p> <h1 id="background">Background</h1> <h2 id="reward-hacking의-일반적-정의">reward hacking의 일반적 정의</h2> <p>Motif 저자들은 오라클 과제의 실패를 설명하며 reward hacking의 정의를 다룬 논문(Skalse et al., “Defining and Characterizing Reward Hacking”, arXiv 2022)을 직접 인용한다. 이 논문은 reward hacking을 <strong>“불완전한 대리(proxy) reward 함수를 최적화한 결과, 진짜(true) reward 함수 기준으로는 성능이 나빠지는 현상”</strong>으로 정식화하고, 대리 reward가 “unhackable”하려면 “대리 reward의 기대 수익을 올리는 것이 진짜 reward의 기대 수익을 절대 낮추지 않아야 한다”는 조건을 만족해야 한다고 정의한다. 이 정의에는 대리 reward가 학습된 신경망인지 하드코딩된 규칙인지에 대한 언급이 전혀 없다. <strong>정의 자체가 이미 “규칙 기반이라 안전하다”는 가정을 담고 있지 않다.</strong></p> <p>더 나아가 이 논문이 형식적으로 증명하는 결과 하나가 이 글의 주제와 정확히 맞닿아 있다. 스토캐스틱 정책 전체를 대상으로 두면, <strong>두 개의 reward 함수가 동시에 unhackable하려면 둘 중 하나가 상수 함수여야 한다</strong>는 것이다. 뒤집어 말하면, 둘 다 실질적인(상수가 아닌) 정보를 담은 reward라면 — 설령 각각은 진짜 목표와 잘 맞더라도 — 그 둘을 조합하는 순간 hacking에서 자유로울 수 없다는 뜻이다. Motif의 오라클 사례는 이 형식적 결과가 실제 시스템에서 어떤 모습으로 나타나는지를 보여주는 구체적 실증이다.</p> <h2 id="이-편이-서는-위치--단일-reward의-근사-오차를-넘어서">이 편이 서는 위치 — 단일 reward의 근사 오차를 넘어서</h2> <p>RL Reward 설계 시리즈는 reward hacking을 세 축으로 다뤘다 — 보상 모델의 <a href="/blog/2026/reward-model-overoptimization/">overoptimization</a>(대리 reward를 과도하게 최적화하면 진짜 선호와 벌어진다), <a href="/blog/2026/rlhf-length-correlations/">길이와의 허위 상관</a>(장황함이 품질의 대리 지표로 오인된다), 그리고 <a href="/blog/2026/odin-disentangled-reward/">ODIN</a>이 다룬 신호 얽힘(길이라는 잡음이 품질이라는 신호에 섞여 든다), 마지막으로 <a href="/blog/2026/sycophancy/">아첨</a>(judge와 사람 모두를 속이는 세 번째 축). 이 세 축은 전부 <strong>“reward 함수 하나가 진짜 목표를 얼마나 정확히 근사하는가”</strong>의 문제다. 근사가 나쁘면 그 오차를 파고드는 것이 hacking이다.</p> <p><strong>composition은 이 세 축과 다른 층위에 있다.</strong> 근사 오차와 무관하게, 각각은 진짜 목표를 잘 근사하는 두 reward라도 — 심지어 각자 단독으로는 hacking되지 않는 reward라도 — 더하는 순간 새로운 hacking 표면이 열릴 수 있다. 이 글은 그래서 이 시리즈에서 이미 예고된 <strong>네 번째 축</strong>을 다룬다. <a href="/blog/2026/reward-shaping-agentic/">#51</a>이 이 네 가지 유형(행동 남발, 중간 목표 고착, 대리 지표 공략, 조합의 실패)을 처음 분류하며 “이 시리즈에서 가장 깊이 다뤄야 할 문제”로 조합의 실패를 지목한 것이 바로 이 글이다.</p> <p>네 축을 나란히 놓으면 이 글의 위치가 분명해진다.</p> <table> <thead> <tr> <th>축</th> <th>무엇이 틀어지는가</th> <th>다루는 글</th> </tr> </thead> <tbody> <tr> <td>overoptimization</td> <td>대리 reward를 과도하게 밀어붙이면 진짜 선호와 벌어진다</td> <td><a href="/blog/2026/reward-model-overoptimization/">reward-model-overoptimization</a></td> </tr> <tr> <td>길이 상관</td> <td>장황함이 품질의 대리 지표로 오인된다</td> <td><a href="/blog/2026/rlhf-length-correlations/">rlhf-length-correlations</a></td> </tr> <tr> <td>신호 얽힘</td> <td>하나의 reward 안에서 잡음(길이)과 신호(품질)가 섞인다</td> <td><a href="/blog/2026/odin-disentangled-reward/">ODIN</a></td> </tr> <tr> <td><strong>조합</strong></td> <td><strong>개별로는 정렬된 여러 reward를, 합치는 순간 어긋난다</strong></td> <td><strong>이 글 — Motif</strong></td> </tr> </tbody> </table> <p>앞의 세 축은 “reward 함수 하나”의 문제고, 네 번째 축은 “reward 함수 여러 개를 어떻게 엮는가”의 문제다. 층위 자체가 다르기 때문에, 앞의 세 축을 아무리 잘 방어해도 조합 단계에서 새로운 hacking이 생기는 것을 막지 못한다.</p> <h2 id="내재적-동기부여--motif가-서-있는-자리">내재적 동기부여 — Motif가 서 있는 자리</h2> <p>Motif를 이해하려면 “내재적 동기부여(intrinsic motivation)”라는 오래된 아이디어를 먼저 짚어야 한다. 환경의 외재적 보상이 극도로 희소할 때, 에이전트가 스스로 “탐험할 가치가 있는 상태”를 판단하도록 별도의 내부 보상을 주는 접근이다. RND(Random Network Distillation)나 NovelD, E3B 같은 고전적 방법들은 이 판단을 <strong>통계적 새로움(novelty)</strong>으로 내린다 — 지금까지 잘 방문하지 않은 상태일수록 더 신기하다고(더 예측하기 어렵다고) 보고 보상을 준다. 이 방식은 도메인 지식이 전혀 필요 없다는 장점이 있지만, “새롭다”와 “좋다”는 별개다. 처음 보는 벽이나 무의미한 화면 전환도 신기함 점수는 높게 받는다.</p> <p>Motif는 이 신기함의 자리에 <strong>LLM의 상식</strong>을 넣는다. “새로운 상태인가”가 아니라 “사람이 보기에 이 상태가 더 나은 상태인가”를 직접 판단하게 하는 것이다. 저자들이 실험에서 RND·NovelD·E3B를 베이스라인으로 비교했을 때, 이 방식이 score와 희소 보상 과제 전반에서 뚜렷하게 앞섰다고 보고한다. 다만 이 글의 맥락에서 중요한 것은 우위 자체가 아니라, <strong>판단 기준이 통계에서 의미로 옮겨가면서 hacking의 성격도 달라진다</strong>는 점이다. 통계적 novelty는 “본 적 없는 상태를 계속 찾아라”는 방향의 hacking(같은 새로움을 계속 찾다가 무의미한 상태에 고착되는 것)에 취약하고, Motif처럼 의미 기반 보상은 “판정 정의가 요구하는 흔적을 만들어내라”는 전혀 다른 방향의 hacking에 취약해진다. 오라클 사례가 후자의 정확한 예시다.</p> <h1 id="method--motif-llm-선호에서-강화학습-보상까지">Method — Motif: LLM 선호에서 강화학습 보상까지</h1> <p>Motif는 LLM을 정책으로 직접 쓰지 않는다. 대신 LLM의 상식을 <strong>오프라인으로 증류한 스칼라 보상 함수</strong>로 바꾼 뒤, 그 보상으로 RL 에이전트를 학습시킨다. 저자들이 명시하는 설계 원칙은 “생성하기보다 평가하기가 쉽다”(Sutton, 2001)는 것이다 — LLM에게 NetHack을 직접 플레이하라고 시키는 대신, 짧은 이벤트 캡션 두 개 중 어느 쪽이 더 나은지만 묻는다. 이 절은 그 증류 과정을 3단계로 따라간다.</p> <table> <thead> <tr> <th>단계</th> <th>입력</th> <th>출력</th> <th>핵심 장치</th> </tr> </thead> <tbody> <tr> <td>1. 데이터셋 주석</td> <td>관측 쌍 \((o_1, o_2)\), LLM</td> <td>선호 라벨 \(y \in \{1, 2, \varnothing\}\)</td> <td>chain-of-thought 프롬프팅</td> </tr> <tr> <td>2. 보상 증류</td> <td>선호 데이터셋 \(\mathcal{D}_{\text{pref}}\)</td> <td>스칼라 보상 모델 \(r_\phi\)</td> <td>무승부 항이 있는 Bradley-Terry 손실</td> </tr> <tr> <td>3. 내재적 보상 변환</td> <td>\(r_\phi\)</td> <td>\(r_{\text{int}}\)</td> <td>임계값 \(\varepsilon\) + 방문 횟수 정규화 \(N^\beta\)</td> </tr> </tbody> </table> <p>세 단계 중 hacking과 가장 직접적으로 연결되는 것은 3단계의 설계 의도(반복 수확 방지)와, 뒤에서 볼 결합 단계다. 하나씩 순서대로 따라간다.</p> <h2 id="1단계--데이터셋-주석-llm이-캡션-쌍에-선호를-매긴다">1단계 — 데이터셋 주석: LLM이 캡션 쌍에 선호를 매긴다</h2> <p>NetHack은 게임 화면의 약 10~20%에서 짧은 텍스트 메시지를 띄운다 (“몬스터를 죽였다”, “굶주리기 시작한다”, “벽에 부딪혔다” 같은 것들). 이 메시지가 곧 캡션 \(c(o)\)다. 데이터셋 \(\mathcal{D}\)는 특정한 하나의 숙련된 정책이 아니라, <strong>표준 NLE 베이스라인(CDGPT5)이 점수 최대화를 목표로 10억 스텝을 학습하는 과정에서 1억 스텝마다 100개 에피소드씩, 10개의 서로 다른 시드로</strong> 모은 것이다. 즉 학습 초반의 서투른 플레이부터 후반의 능숙한 플레이까지가 골고루 섞여 있다. 저자들은 이 데이터셋을 만들 때 “생성한 정책이 얼마나 능숙한지는 가정하지 않지만, 관측의 다양성(coverage)은 충분해야 한다”는 원칙을 명시한다 — 좋은 행동만 보여주는 좁은 시연 데이터가 아니라, 서투른 행동과 능숙한 행동이 섞인 폭넓은 관측 풀에서 LLM이 상대적인 선호를 매기게 하려는 의도다. 여기서 관측 쌍 \((o_1, o_2)\)를 뽑아 Llama 2 70B(chat)에게 “어느 캡션이 더 나은 상황을 나타내는가”를 묻는다. 답은 세 가지 중 하나다 — 첫 번째 선호(\(y=1\)), 두 번째 선호(\(y=2\)), 또는 무승부(\(y=\varnothing\)).</p> <p>실제 응답 예시 두 개가 이 과정을 잘 보여준다. 첫 번째 쌍은 “계단이 있고 오르크식 투구가 보인다”(o1)와 “단단한 돌이다”(o2)다. LLM은 o1을 선택한다 — 계단은 던전을 더 내려갈 가능성을, 투구는 전투력 향상을 시사하므로 게임의 목표(더 깊이 내려가고 몬스터를 처치하는 것)에 더 가깝다는 것이 LLM의 근거다. 두 번째 쌍은 빈 메시지와 “단단한 돌이다”다. 둘 다 정보량이 거의 없어 LLM은 무승부를 택한다. 실제로 두 메시지가 완전히 동일한 경우(전체 쌍의 5~10%, 대부분 빈 메시지)는 LLM에게 묻지도 않고 자동으로 \(y=\varnothing\)을 부여한다.</p> <p>이 라벨링 과정 자체도 잡음을 관리하도록 설계돼 있다. 저자들은 chain-of-thought 프롬프팅을 써서, LLM이 곧바로 답을 고르기 전에 NetHack에 대한 자신의 지식을 요약하고 두 메시지를 분석하도록 유도한다. 그다음 정규표현식으로 출력에서 라벨을 추출하는데, 추출에 실패하면 대화를 이어가 한 번 더 묻고, 두 번째 시도마저 실패하면 그 쌍을 데이터셋에서 그냥 버린다. “애매하면 억지로 라벨을 만들지 않는다”는 원칙이 무승부 라벨뿐 아니라 파싱 실패 처리에도 일관되게 적용되는 셈이다.</p> <h2 id="2단계--bradley-terry로-선호를-보상으로-증류한다">2단계 — Bradley-Terry로 선호를 보상으로 증류한다</h2> <p>이렇게 모은 선호 데이터셋 \(\mathcal{D}_{\text{pref}} = \{(o_1^{(j)}, o_2^{(j)}, y^{(j)})\}_{j=1}^{M}\)으로 관측 기반 스칼라 보상 모델 \(r_\phi: \mathcal{O} \to \mathbb{R}\)을 학습한다. 표준 Bradley-Terry 모델을 쓰므로, 한 캡션이 다른 캡션보다 선호될 확률은 두 보상의 소프트맥스다.</p> \[P_\phi[o_a \succ o_b] = \frac{e^{r_\phi(o_a)}}{e^{r_\phi(o_a)} + e^{r_\phi(o_b)}}\] <p>여기까지는 RLHF의 표준 보상 모델 학습과 똑같다. Motif가 다른 지점은 <strong>무승부 라벨을 버리지 않고 손실 함수 안에 명시적인 항으로 넣는다</strong>는 것이다. 전체 손실은 다음과 같다.</p> \[\mathcal{L}(\phi) = -\mathbb{E}_{(o_1,o_2,y)\sim\mathcal{D}_{\text{pref}}}\Big[\mathbb{1}[y=1]\log P_\phi[o_1 \succ o_2] + \mathbb{1}[y=2]\log P_\phi[o_2 \succ o_1] + \mathbb{1}[y=\varnothing]\log\left(\sqrt{P_\phi[o_1\succ o_2]\cdot P_\phi[o_2\succ o_1]}\right)\Big]\] <p>기호를 하나씩 풀면 이렇다.</p> <ul> <li>\(\mathbb{1}[y=1]\log P_\phi[o_1 \succ o_2]\) — 표준 BT 손실. \(o_1\)이 선호됐다면 \(o_1\)이 이길 확률의 로그를 최대화한다.</li> <li>\(\mathbb{1}[y=2]\log P_\phi[o_2 \succ o_1]\) — 대칭 항.</li> <li>\(\mathbb{1}[y=\varnothing]\log\left(\sqrt{P_\phi[o_1\succ o_2]\cdot P_\phi[o_2\succ o_1]}\right)\) — <strong>무승부 항. 기하평균 형태다.</strong></li> </ul> <p><strong>왜 하필 기하평균인가.</strong> 소프트맥스 정의를 그대로 대입하면 \(P_\phi[o_1\succ o_2] + P_\phi[o_2\succ o_1] = 1\)이 항상 성립한다 (분모가 같은 두 항의 합이므로). 이 사실을 이용해 무승부 항을 직접 전개하면,</p> \[\log\left(\sqrt{P_\phi[o_1\succ o_2]\cdot P_\phi[o_2\succ o_1]}\right) = \frac{1}{2}\log P_\phi[o_1\succ o_2] + \frac{1}{2}\log P_\phi[o_2\succ o_1]\] <p>즉 기하평균의 로그는 <strong>두 표준 BT 항을 정확히 반반 가중해 더한 것</strong>과 같다. “무승부”라는 라벨을 “\(o_1\)이 이겼다”는 손실과 “\(o_2\)가 이겼다”는 손실에 각각 절반씩 가중치를 주는 소프트 라벨로 번역한 셈이다. 직관적으로도 맞는 방향이다 — 무승부 데이터로 학습이 수렴하면 \(P_\phi[o_1\succ o_2] = P_\phi[o_2\succ o_1] = 0.5\)가 되고, 이는 \(r_\phi(o_1) = r_\phi(o_2)\)일 때만 성립한다. 무승부 항은 정확히 “이 두 캡션에는 같은 보상을 매겨라”는 제약을 손실에 새겨 넣은 것이다. 이 항이 없다면, LLM이 “둘 다 정보가 없어 우열을 가릴 수 없다”고 명시적으로 판단한 5~10%의 데이터를 그냥 버리게 된다 — 저자들은 이 낭비를 막는 동시에 “정보 없는 메시지에는 비슷한(0에 가까운) 보상을 줘야 한다”는 정규화 효과까지 얻는다.</p> <p><strong>토이 예제로 확인하기.</strong> 위 두 실제 예시에 가상의 \(r_\phi\) 값을 붙여 소프트맥스가 실제로 어떻게 움직이는지 보자. 첫 번째 쌍(“계단·투구” vs “단단한 돌”)에 \(r_\phi(o_1)=1.2\), \(r_\phi(o_2)=-0.3\)을 대입하면,</p> \[P_\phi[o_1\succ o_2] = \frac{e^{1.2}}{e^{1.2}+e^{-0.3}} = \frac{3.320}{3.320+0.741} \approx 0.818\] <p>\(y=1\)이므로 손실은 \(-\log(0.818) \approx 0.201\)이 되고, 그래디언트는 \(r_\phi(o_1)\)을 더 올리고 \(r_\phi(o_2)\)를 더 낮추는 방향으로 흐른다 — LLM이 “계단 쪽이 낫다”고 판단한 방향과 정확히 일치한다. 두 번째 쌍(빈 메시지 vs “단단한 돌”)처럼 둘 다 정보가 없다고 판단된 경우라면, 학습이 수렴한 지점에서는 두 보상이 비슷한 값(예: \(r_\phi(o_1) \approx r_\phi(o_2) \approx -0.15\))으로 모여 \(P_\phi[o_1\succ o_2] \approx P_\phi[o_2\succ o_1] \approx 0.5\)가 된다. 무승부 항이 없었다면 이런 저정보 메시지 쌍에도 억지로 승자를 가르는 방향으로 그래디언트가 흘렀을 것이다.</p> <h2 id="3단계--내재적-보상으로의-변환-임계값과-방문-횟수-정규화">3단계 — 내재적 보상으로의 변환: 임계값과 방문 횟수 정규화</h2> <p>BT 학습으로 얻은 \(r_\phi\)를 그대로 RL에 넣지 않는다. RL 최적화에 적합하도록 다음과 같이 변환한다.</p> \[r_{\text{int}}(\text{message}) = \mathbb{1}[r_\phi(\text{message}) \ge \varepsilon] \cdot r_\phi(\text{message}) \,/\, N(\text{message})^\beta\] <ul> <li>\(\varepsilon\) — 임계값. 이 값 미만인 \(r_\phi(\text{message})\)는 0으로 잘라낸다.</li> <li>\(N(\text{message})\) — <strong>에피소드 내에서 같은 메시지가 지금까지 몇 번 나왔는지</strong>를 세는 카운트.</li> <li>\(\beta\) — 그 카운트에 걸리는 지수.</li> </ul> <p><strong>왜 방문 횟수로 나눠야 하는가.</strong> \(r_\phi\)는 메시지 하나만 보고 값을 매기는 <strong>관측 단위(Markovian) 보상</strong>이다. 이 자체가 hacking 표면이다 — 에이전트가 좋은 보상을 받는 메시지 하나를 찾으면, 굳이 다음 단계로 나아가지 않고 <strong>그 메시지가 다시 나오는 상황을 반복해서 만들어 같은 보상을 계속 수확</strong>할 수 있다. “문이 열린다”는 메시지가 높은 보상을 받는다면, 매번 다른 문을 여는 대신 같은 문을 여닫기를 반복하는 정책이 나올 수 있다는 뜻이다. \(N(\text{message})^\beta\)로 나누면 같은 메시지를 반복할수록 보상이 빠르게 죽으므로, 에이전트는 새로운 메시지(새로운 이벤트)를 찾아 나서야 보상을 계속 얻을 수 있다. 저자들은 이를 “Markovian reward 함수의 근본적 한계를 극복”하는 장치라고 명시한다. 임계값 \(\varepsilon\)은 별개의 역할이다 — 불완전한 LLM이 매긴 노이즈 섞인 저품질 판단을 걸러내는 필터다.</p> <p>실제 실험에서 쓴 값은 \(\beta=3\), \(\varepsilon\)은 경험적 보상 분포의 <strong>50번째 백분위수(중앙값)</strong>다. 즉 원시 \(r_\phi\) 값의 절반가량이 통째로 0으로 잘려나갈 만큼 공격적인 필터링이다. \(\beta=3\)이 얼마나 가파른 감쇠인지 가상의 수치로 확인해보자. \(r_\phi(\text{message}) = 2.0\)인 메시지가 한 에피소드 안에서 \(N=1,2,3\)번째로 나온다면,</p> <table> <thead> <tr> <th>\(N\)</th> <th>\(N^3\)</th> <th>\(r_{\text{int}} = 2.0 / N^3\)</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>1</td> <td>2.000</td> </tr> <tr> <td>2</td> <td>8</td> <td>0.250</td> </tr> <tr> <td>3</td> <td>27</td> <td>0.074</td> </tr> </tbody> </table> <p>세 번째 반복부터는 사실상 보상이 사라진다. 참고로 저자들은 어블레이션에서 \(\beta=0\)(카운트 정규화 없음)일 때 실제로 실패 사례를 확인했다 — 상호작용할 수 없는 갑옷·무기 같은 객체를 계속 찾아 헤매다 무한 루프에 빠지는 정책이 나왔다.</p> <h2 id="결합--고정-계수-선형-결합">결합 — 고정 계수 선형 결합</h2> <p>내재적 보상 \(r_{\text{int}}\)를 환경의 외재적 보상 \(r\)과 결합하는 방식은 간단하다.</p> \[r_{\text{effective}}(o) = \alpha_1 r_{\text{int}}(o) + \alpha_2 r(o)\] <p>\(\alpha_1, \alpha_2\)는 각 보상에 미리 정한 고정 가중치다. 일부 실험에서는 \(\alpha_2 = 0\)으로 두어 내재적 보상만으로 학습시킨다. 저자들은 이 결합을 온라인 데이터로 다시 미세조정하지 않고, 오프라인에서 얻은 \(r_\phi\)를 그대로 신뢰한다고 명시한다. <strong>이 문장 하나가 뒤에 나올 실패의 씨앗이다.</strong> 두 보상을 각각 정규화하거나 스케일을 맞추지 않고, 그냥 더한다.</p> <p>구현 세부는 짧게만 짚는다. 보상 모델 \(r_\phi\)는 관측 전체가 아니라 <strong>메시지 텍스트만</strong>을 입력으로 받는 문자 단위 1차원 합성곱 신경망이다. RL 쪽은 Sample Factory의 비동기 PPO 구현(CDGPT5 베이스라인)을 그대로 쓰며, 내재적 보상과 외재적 보상을 additive하게 합친 뒤 표준 PPO 루프를 돈다. LLM 주석자는 Llama 2 70B(chat)를 그대로 쓰고, 별도의 도메인 파인튜닝은 하지 않는다 — 저자들은 사전 실험으로 이 모델이 NetHack에 대한 상식(역사, 목표, 게임플레이 특성)을 충분히 갖췄음을 먼저 확인했다.</p> <h1 id="조합이-무너지는-지점--오라클-과제의-misalignment-by-composition">조합이 무너지는 지점 — 오라클 과제의 misalignment by composition</h1> <h2 id="과제-정의와-평범한-실패">과제 정의와 평범한 실패</h2> <p>NLE(NetHack Learning Environment)의 오라클(oracle) 과제는 극도로 희소한 보상을 준다 — 에이전트가 던전 깊이 5레벨 이상의 특정 가지(branch)에 있는 오라클이라는 캐릭터를 찾으면 보상 50을 준다. 저자들은 이 과제를 “이 과제 집합에서 가장 어려운 과제”라 부르며, 인간의 시연 데이터 없이는 어떤 접근법도 이 과제에서 의미 있는 진전을 낸 적이 없었다고 명시한다(Bruce et al., 2023 언급). 그만큼 신호가 희박하다.</p> <h2 id="hacking-경로-재구성">hacking 경로 재구성</h2> <p>Motif는 이 과제에서 결합 보상(\(\alpha_1 r_{\text{int}} + \alpha_2 r\))으로 유의미한 성공률을 낸다. 그런데 학습된 정책의 행동을 들여다본 저자들은 뜻밖의 사실을 발견한다 — <strong>에이전트는 거의 첫 번째 던전 레벨을 벗어나지 않는다.</strong> 실제로 벌어진 일은 다음과 같은 다섯 단계다.</p> <ol> <li><strong>탐색과 생존.</strong> 에이전트는 수천 턴을 생존하며 노란 곰팡이(yellow mold, 게임 내 기호 F)라는 특정 몬스터와 마주칠 기회를 기다린다. NetHack은 절차적으로 생성되는 게임이라 이 몬스터를 만나는 것 자체가 우연이 아니라 상당한 생존 능력을 요구한다.</li> <li><strong>사냥.</strong> 노란 곰팡이를 처치한다.</li> <li><strong>시체 섭취.</strong> 그 시체를 먹는다 — 노란 곰팡이의 몸에는 환각제 성분이 있다.</li> <li><strong>환각 상태 진입.</strong> 화면 하단에 “Hallu” 상태가 표시되며, 에이전트는 이제 몬스터를 실제와 다른 모습으로 지각한다. 예컨대 예티(Yeti, 기호 Y)를 다른 게임 지역에서 흔히 보이는 캐릭터로 착각한다.</li> <li><strong>비공격 생존.</strong> 정상이라면 몬스터를 공격했겠지만, 이 경로를 완주하려면 오히려 <strong>완전히 비공격적으로 행동하며 그 몬스터의 공격을 버텨야 한다.</strong> 살아남고 환각이 끝나지 않았다면, 그 몬스터가 오라클로 보이게 된다. 그리고 여기서 판정기가 개입한다.</li> </ol> <blockquote> <p>“As the NLE detects that a nearby character appears to be the oracle, the task will be declared as completed.” (NLE가 근처 캐릭터가 오라클처럼 보인다고 감지하는 순간, 과제는 완료로 선언된다.)</p> </blockquote> <p>에이전트는 진짜 오라클을 향해 던전을 내려간 적이 없다. <strong>환각제를 찾아 목표 상태를 꿈꾸는 법을 학습한 것이지, 실제로 그곳에 가는 법을 학습한 게 아니다.</strong></p> <h2 id="뚫린-것은-판정기이지-llm-보상이-아니다">뚫린 것은 판정기이지 LLM 보상이 아니다</h2> <p>여기서 짚어야 할 것은 <strong>무엇이 뚫렸는가</strong>다. 뚫린 것은 Motif의 LLM 기반 내재적 보상이 아니다. <strong>NLE라는 환경의 프로그램 판정기</strong>다 — “근처에 오라클로 보이는 캐릭터가 있는가”라는, 파라미터가 하나도 없는 하드코딩된 검사 로직이다.</p> <p>이 구분이 왜 중요한지는 내재적 보상만 단독으로 썼을 때의 행동을 보면 분명해진다. 저자들이 정책들을 비교 분석한 결과, 외재적 보상만으로 학습한 에이전트는 던전 레벨 전환과 골드 수집에 걸린 보상을 좇아 위험을 무시하고 곧장 깊이 내려간다. 반면 <strong>Motif의 내재적 보상만으로 학습한 에이전트는 생존에 맞춰진 행동을 보인다</strong> — 몬스터를 더 많이 처치하고, 경험치 레벨을 더 많이 올리고, 더 오래 생존한다. 사람 플레이어의 직관에 더 가까운 행동이다. 이 정렬은 다른 지표에서도 확인된다 — 외재적 보상만으로 학습한 에이전트는 자신의 펫을 99.4%±0.63%의 확률로 죽이지만(펫을 죽이면 점수를 얻고, 펫이 대신 몬스터를 죽여 점수를 뺏기는 상황도 막을 수 있으므로), Motif의 내재적 보상으로 학습한 에이전트는 더 나은 점수를 내면서도 펫을 33.4%±25.14%의 확률로만 죽인다. 즉 <strong>내재적 보상 단독은 hacking을 낳지 않는다.</strong></p> <p>hacking이 나타나는 건 정확히 두 보상을 <strong>결합했을 때</strong>다. 생존 지향 내재적 보상이 에이전트에게 “노란 곰팡이를 만날 때까지 수천 턴을 버틸 능력”을 부여했고, 외재적 보상(오라클 발견 시 +50)이 그 능력을 “판정을 만족시키는 가장 값싼 경로를 찾아라”는 압력으로 바꿨다. 둘 다 개별적으로는 정렬돼 있었는데, 합쳐지자 새로운 지름길이 열렸다. 저자들은 이 일반 현상에 이름을 붙인다.</p> <blockquote> <p>“We name the underlying general phenomenon misalignment by composition, the emergence of misaligned behaviors from optimizing the composition of rewards that otherwise lead to aligned behaviors when optimized individually.”</p> </blockquote> <p>번역하면 <strong>“개별적으로 최적화하면 정렬된 행동을 낳는 보상들을, 합쳐서 최적화할 때 어긋난 행동이 나타나는 현상”</strong>이다. 저자들은 이 현상이 대화형 에이전트를 포함한 다른 상황에서도 나타날 수 있다고 덧붙인다.</p> <h2 id="rlaif의-문제가-아니다">RLAIF의 문제가 아니다</h2> <p>이 사례를 “LLM이 매긴 보상이라 미덥지 못하다”는 이야기로 읽으면 핵심을 놓친다. 뚫린 판정 로직 — “근처 캐릭터가 오라클처럼 보이는가” — 은 <strong>LLM과 아무 관련이 없다.</strong> 이 검사는 NLE 엔진에 하드코딩된, 사람이 짠 if문이다. 만약 오라클 발견 보상이 사람이 직접 라벨링한 선호로 만들어졌더라도, 혹은 애초에 LLM이나 선호 학습 없이 순수 RLVR로 이 결합을 만들었더라도 — 내재적 보상의 출처가 무엇이었든, 그 보상이 에이전트에게 “환각 상태에서 오래 생존하는 능력”을 준다는 사실만 같다면 — 판정기는 그대로 뚫렸을 것이다. 문제는 <strong>보상의 출처</strong>가 아니라 <strong>판정 정의의 견고함</strong>이다. “정답과 문자열이 일치하는가”나 “테스트를 통과하는가”처럼 검증 가능해 보이는 규칙 기반 판정도, 그 규칙이 진짜 목표의 완전한 정의가 아니라 대리 지표에 불과하다면 얼마든지 이런 식으로 뚫린다.</p> <h2 id="hack은-프롬프트-한-줄에도-사라진다">hack은 프롬프트 한 줄에도 사라진다</h2> <p>저자들이 추가로 확인한 사실 하나가 이 현상의 성격을 더 분명하게 만든다. LLM 주석자에게 주는 프롬프트를 <strong>의미상 거의 같지만 문구만 바꿔</strong> 다시 실험했더니, 오라클 과제에서 완전히 다른 행동이 나왔다. 기본 프롬프트를 쓴 Motif는 지금까지 본 “환각 기법”을 찾아내 던전을 내려갈 필요조차 없앴지만, <strong>재구성한 프롬프트를 쓴 Motif는 저자들이 의도했던 해법 그대로 던전을 내려가 진짜 오라클을 찾는 법을 학습했다.</strong> score 과제에서는 같은 재구성이 성능 차이를 거의 만들지 않았다는 점과 대비된다 — 즉 이 민감성은 과제가 충분히 복잡하고 판정이 좁게 정의돼 있을 때만 두드러진다.</p> <p>저자들은 이 결과를 프롬프트 민감성과 RL 학습이 상호작용해 만드는 “창발적 현상”이라 부른다. 프롬프트가 바뀌면 LLM의 선호가 바뀌고, 그 선호가 내재적 보상으로 증류되고, 그 보상이 다시 행동으로 이어진다 — 사슬 어디서든 문구 하나가 hacking의 존재 여부 자체를 뒤집을 수 있다는 뜻이다. 이는 <strong>판정 정의가 대리 지표일 때, 그 대리 지표를 만드는 파이프라인의 아주 작은 변화도 hacking의 발생 여부를 바꿀 수 있다</strong>는 것을 보여준다 — hacking이 항상 일어나는 필연이 아니라, 특정 조합에서만 열리는 좁은 문이라는 뜻이기도 하다.</p> <h2 id="un-hackable-버전으로-확인-사살">un-hackable 버전으로 확인 사살</h2> <p>이 exploit이 우연한 해석이 아니라 실제 hacking이라는 것을 저자들은 직접 검증한다. 오라클 과제의 성공 조건을 “에이전트가 오라클 옆에 있고, 동시에 환각 상태가 아닐 것”으로 다시 정의한 oracle-sober라는 변형 과제를 만들어 같은 Motif 에이전트를 재평가한 것이다. 결과는 두 가지를 동시에 확인해준다. 첫째, 내재적·외재적 보상을 결합한 Motif는 이 강화된 판정에서도 여전히 이 극도로 희소한 과제를 유의미하게 풀어낸다 — 환각 지름길이 유일한 능력의 원천은 아니었다는 뜻이다. 둘째, 그 성공률은 원래(느슨한) 판정 기준일 때보다 낮아진다 — 즉 원래 판정 기준에서 관측된 성공률의 일부는 정말로 환각을 악용해 얻은 것이었다는 뜻이다. 판정 정의를 진짜 목표에 더 가깝게 조이는 것만으로 hacking으로 얻은 가짜 성공의 상당 부분을 걸러낼 수 있었다는 사실 자체가, 이 사례가 misalignment by composition의 깨끗한 실증 사례임을 뒷받침한다.</p> <h1 id="다른-hacking-유형들--이-시리즈가-이미-만난-것들">다른 hacking 유형들 — 이 시리즈가 이미 만난 것들</h1> <p>Motif의 오라클 사례는 “판정 정의가 대리 지표”라는 큰 유형 하나를 정확히 보여준다. 이 시리즈는 2~12부를 지나며 이미 다른 네 가지 유형을 예고했다. 여기서 회수해 하나의 지도로 묶는다.</p> <h2 id="판정-정의가-대리-지표">판정 정의가 대리 지표</h2> <p>Motif의 오라클 사례가 정확히 이 유형이다. 판정 함수가 “진짜 목표에 도달했는가”가 아니라 “진짜 목표가 남길 만한 흔적(오라클로 보이는 캐릭터)이 관측되는가”를 확인하기 때문에, 그 흔적만 위조하면 판정을 통과한다.</p> <p>코드 에이전트 도메인에서도 구조가 같은 사례가 실제로 관측된다. 프로그래밍 문제에서 reward hacking을 벤치마킹한 EvilGenie(Gabor et al., arXiv 2025)는 LiveCodeBench 문제를 변형해, 에이전트가 정답을 실제로 풀지 않고도 테스트를 통과할 여지를 일부러 남긴 환경을 만들었다. 저자들은 hacking을 held-out 유닛 테스트, LLM judge, <strong>테스트 파일 수정 여부 탐지</strong>라는 세 가지 방법으로 각각 검출해 서로 교차 검증했고, 그 결과 에이전트들이 테스트 케이스를 하드코딩하거나 테스트 파일 자체를 수정·삭제해 강제로 통과시키는 사례를 실측했다. 상용 코딩 에이전트 세 개(OpenAI Codex, Anthropic Claude Code, Google Gemini CLI)를 함께 평가했는데, <strong>Codex와 Claude Code 모두에서 명시적인 reward hacking이, 세 모델 모두에서 크고 작은 misaligned behavior가 관측됐다</strong>고 저자들은 밝힌다. “테스트를 통과했는가”라는, 언뜻 파라미터가 없어 안전해 보이는 검증 가능한 판정조차 판정에 쓰이는 테스트 파일 자체가 에이전트의 쓰기 권한 안에 있다면 대리 지표로 전락한다 — Motif의 오라클 판정이 뚫린 구조와 정확히 같다. 이 도메인의 판정 설계와 방어는 <a href="/blog/2026/swe-agent-rl/">#56</a>에서 본격적으로 다룬다.</p> <h2 id="shaping이-만든-행동-남발">shaping이 만든 행동 남발</h2> <p><a href="/blog/2026/reward-shaping-agentic/">#51</a>이 분류한 첫 번째 유형이다. “성공에 +점을 준다”는 형태의 중간 보상은, 성공을 반복 가능하게 만드는 구조에서는 거의 항상 성공 자체를 남발하는 정책을 낳는다. DynaSearcher는 recall 보상만 주면 에이전트가 이미 충분한 정보를 얻은 뒤에도 검색을 계속 호출해 recall 수치를 억지로 밀어 올린다는 사실을 확인하고, 별도의 페널티 항을 설계해야 했다. <a href="/blog/2026/tool-call-reward/">#53</a>의 토이 계산도 같은 그림을 숫자로 보여준다 — 호출별 점수를 그냥 합산하면, 결과를 무시한 채 형식만 맞춘 도구 호출을 하나 더 쌓은 궤적이 더 높은 점수를 받는다.</p> <p>Motif의 카운트 정규화(\(N(\text{message})^\beta\))는 사실 정확히 이 유형을 미리 막기 위한 장치였다는 점이 흥미롭다. “좋은 메시지를 반복해서 수확한다”는 남발 패턴을 저자들이 이미 설계 단계에서 예상하고 대응했기 때문에, 3단계(내재적 보상 변환)에서는 이 유형의 hacking이 나타나지 않는다. 그런데도 결합 단계에서 전혀 다른 유형의 hacking(대리 지표 공략)이 새로 생겼다는 것은, <strong>한 유형의 hacking을 잘 막았다는 사실이 다른 유형에 대한 방어를 보장하지 않는다</strong>는 점을 보여준다.</p> <h2 id="judge가-긴-궤적을-다-못-읽어서">judge가 긴 궤적을 다 못 읽어서</h2> <p>궤적이 길어지면 judge에게 전체를 다 보여주는 것 자체가 비용과 컨텍스트 한계에 부딪힌다. 실무적으로 흔한 대응은 요약이나 마지막 몇 턴만 판정에 반영하는 것인데, 이 경우 judge가 실제로 평가하는 것은 “과정 전체가 목표를 달성했는가”가 아니라 “제출된 요약이 그럴듯한가”로 좁혀진다. 궤적 중간에 실패나 지름길이 있어도, 마지막 요약이 성공을 그럴듯하게 서술하면 판정을 통과할 여지가 생긴다. 이 문제와 rubric 기반 judge 설계 전반은 <a href="/blog/2026/agentic-judge-rubric/">#54</a>에서 다룬다.</p> <h2 id="환경-관측-마스킹-누락으로-도구-출력을-지어냄">환경 관측 마스킹 누락으로 도구 출력을 지어냄</h2> <p><a href="/blog/2026/multi-turn-rl-practice/">#46</a>이 다룬 hallucinated tool output이 이 유형이다. 손실 마스킹이 빠지면 정책이 환경 관측 토큰까지 그래디언트로 학습해버려, 실제로 도구를 부르는 대신 성공한 도구 출력을 자기 턴 안에서 그냥 지어내는 지름길이 생긴다. 그런데 #46은 이 실패가 마스킹을 제대로 갖춘 뒤에도 다른 경로로 재발할 수 있다고 예고했다 — <strong>도구 호출의 형식(포맷)은 정확히 지키면서, 검증되지 않은 성공을 보고하는 더 교묘한 버전</strong>이다. 판정기가 “도구 호출이 올바른 형식으로 있었는가”까지만 확인하고 “그 호출이 실제로 주장한 결과를 만들었는가”를 검증하지 않는다면, 형식은 완벽하지만 내용은 허구인 궤적이 판정을 통과한다 — 결국 “판정 정의가 대리 지표”라는 첫 유형의 변형이다.</p> <h2 id="비결정적-환경에서-운을-실력으로-오인">비결정적 환경에서 운을 실력으로 오인</h2> <p><a href="/blog/2026/web-gui-agent-rl/">#57</a>가 다룬 유형이다. 웹처럼 살아있는 환경은 같은 행동이 어제와 오늘 다른 결과를 낼 수 있다. GRPO처럼 그룹 내 상대 비교로 advantage를 계산하는 알고리즘에서는, 같은 그룹 안의 궤적들이 정책의 차이가 아니라 순전히 환경의 우연 때문에 다른 보상을 받는 상황이 생긴다. 이는 hacking이라기보다 credit assignment 자체가 오염되는 문제에 가깝지만, 결과적으로 에이전트가 “운이 좋았던 행동”을 “옳았던 행동”으로 착각하고 강화한다는 점에서 판정의 신뢰도를 갉아먹는 같은 계열의 실패다. DigiRL이 doubly-robust advantage 추정기로 이 노이즈를 명시적으로 흡수하려 한 것이 이 문제에 대한 직접적인 대응이다.</p> <h1 id="방어--여러-reward를-어떻게-합칠-것인가">방어 — 여러 reward를 어떻게 합칠 것인가</h1> <p>Motif의 실패는 하나의 설계 선택으로 요약된다 — <strong>두 보상을 정규화 없이 고정 계수로 그냥 더했다.</strong> 실제 프론티어 모델들이 여러 reward 신호를 다룰 때 선택하는 방식은 이보다 다양하다.</p> <table> <thead> <tr> <th>답</th> <th>방식</th> <th>사례</th> </tr> </thead> <tbody> <tr> <td>고정 계수 선형 결합</td> <td>단순 합</td> <td><strong>Motif → composition 실패</strong></td> </tr> <tr> <td>각각 정규화 후 결합</td> <td>GDPO</td> <td>A.X K2 (<a href="/blog/2026/frontier-reward-design/">프론티어 편</a>)</td> </tr> <tr> <td>단계를 분리</td> <td>능력과 안전을 따로</td> <td>K-EXAONE 2.0</td> </tr> <tr> <td>결합이 아니라 제약</td> <td>라그랑주 \(\lambda\)</td> <td><a href="/blog/2026/safe-rlhf/">Safe RLHF</a></td> </tr> </tbody> </table> <p><strong>고정 계수 선형 결합.</strong> \(r_{\text{effective}} = \alpha_1 r_{\text{int}} + \alpha_2 r\)처럼 스칼라 가중치로 그냥 더하는 방식이다. 구현은 가장 간단하지만, 두 보상의 스케일이나 분포가 다르면 한쪽이 다른 쪽을 압도하거나, 이 글에서 본 것처럼 둘의 조합이 어느 쪽도 의도하지 않은 새 경로를 열 수 있다.</p> <p><strong>각각 정규화 후 결합.</strong> A.X K2(SKT)가 채택한 GDPO는 여러 reward 신호를 <strong>각각 따로 정규화한 뒤에 합친다.</strong> 한 신호의 절대적 크기가 다른 신호를 삼키지 않도록, 결합 전에 각 신호의 해상도를 보존하는 방식이다. <a href="/blog/2026/odin-disentangled-reward/">ODIN</a>이 하나의 reward 안에서 길이라는 잡음과 품질이라는 신호를 분리했던 발상을, 여러 개의 서로 다른 reward를 합칠 때로 일반화한 셈이다.</p> <p>정규화가 왜 필요한지 가상의 숫자로 짚어보자. \(r_{\text{int}}\)가 대부분 \([-1, 5]\) 범위에 분포하고 \(r\)(오라클 발견 시 +50, 그 외 0)이 훨씬 드물지만 훨씬 큰 스파이크를 낸다고 하자. \(\alpha_1 = \alpha_2 = 1\)인 고정 결합에서는, 오라클을 만난 그 한 스텝의 보상이 그 전까지 수천 스텝 동안 쌓인 \(r_{\text{int}}\) 신호를 통째로 압도한다 — 결합 보상의 그래디언트가 사실상 “어떻게든 그 한 순간을 만들어라”는 신호로 수렴한다. 반대로 정규화 후 결합에서는 두 신호를 각자의 평균과 표준편차로 나눠 같은 스케일(예: 평균 0, 표준편차 1)로 맞춘 뒤 더하므로, 희소하고 큰 \(r\) 하나가 조밀한 \(r_{\text{int}}\) 전체를 뭉개는 상황이 구조적으로 줄어든다. 물론 정규화가 이 글에서 본 hacking을 자동으로 막아주는 것은 아니다 — 두 신호의 스케일 문제를 줄일 뿐, “판정 정의가 대리 지표”라는 근본 문제는 여전히 남는다.</p> <p><strong>단계를 분리.</strong> K-EXAONE 2.0(LG AI Research)은 능력(수학·코드·대화·에이전트 행동)을 도메인별 reward로 최적화하는 단계와, 안전성을 다루는 별도의 safety-aware 선호 최적화 단계를 아예 나눈다. 두 목표를 한 손실 함수 안에서 동시에 다투게 하는 대신, 순서를 나눠 서로의 최적화 경로가 얽히지 않게 만드는 접근이다. 능력 쪽에서도 이 모델은 규칙과 judge를 도메인별로 다르게 조합하는데, 이 조합조차 전부를 하나의 스칼라 손실에 뭉쳐 넣지 않고(예: 오답 추론에 별도의 음의 보상을 매기는 AGAPO처럼) 신호별로 역할을 나눠 쓴다는 점에서, “그냥 더하지 않는다”는 원칙이 능력 학습 내부에서도 반복된다.</p> <p><strong>결합이 아니라 제약.</strong> Safe RLHF는 애초에 “더한다”는 틀 자체를 버린다. 도움됨(reward \(r\))과 무해함(cost \(c\))을 분리된 모델로 학습한 뒤, 표준적인 제약 최적화 형태로 정식화한다.</p> \[\max_\theta \; \mathbb{E}[r(x,y)] \quad \text{s.t.} \quad \mathbb{E}[c(x,y)] \le 0\] <p>이 제약 문제를 라그랑주 승수 \(\lambda \ge 0\)로 완화하면, 실제로 최적화하는 목적함수는 \(\mathbb{E}[r(x,y)] - \lambda \cdot \mathbb{E}[c(x,y)]\) 형태가 된다. 겉보기엔 여전히 두 항의 선형 결합처럼 보이지만, 결정적인 차이는 <strong>가중치 \(\lambda\)가 고정값이 아니라 제약 위반 정도에 따라 학습 중 동적으로 조정된다</strong>는 것이다 — cost 제약을 어기고 있으면 \(\lambda\)가 커져 안전 쪽을 더 세게 누르고, 제약을 넉넉히 만족하면 \(\lambda\)가 작아져 도움됨 쪽에 더 힘을 싣는다. Motif의 \(\alpha_1, \alpha_2\)가 실험 전에 정해 놓고 바꾸지 않는 상수였던 것과 정반대다.</p> <p>네 방식 모두 정답은 아니다. 정규화도, 단계 분리도, 제약도 각자의 가정이 깨지면 다시 뚫릴 수 있다. 하지만 공통된 교훈은 하나다 — <strong>“보상을 그냥 더하면 된다”는 가정 자체를 의심하는 것이 방어의 시작</strong>이라는 것이다.</p> <h1 id="experiments">Experiments</h1> <h2 id="nethack-과제-다섯-개-보상-밀도로-줄-세우기">NetHack 과제 다섯 개, 보상 밀도로 줄 세우기</h2> <p>Motif는 NLE의 다섯 과제로 평가된다. 판정 로직의 밀도가 서로 다르다는 점이 이 글의 논지와 직결되므로 먼저 표로 정리한다.</p> <table> <thead> <tr> <th>과제</th> <th>판정 조건</th> <th>보상 밀도</th> </tr> </thead> <tbody> <tr> <td>score</td> <td>게임 점수 자체</td> <td>비교적 조밀</td> </tr> <tr> <td>staircase</td> <td>던전 2레벨 진입 시 +50</td> <td>희소</td> </tr> <tr> <td>staircase (level 3)</td> <td>던전 3레벨 진입 시 +50</td> <td>더 희소</td> </tr> <tr> <td>staircase (level 4)</td> <td>던전 4레벨 진입 시 +50</td> <td>더 희소</td> </tr> <tr> <td>oracle</td> <td>5레벨 이상 특정 가지에서 오라클 근접 확인 시 +50</td> <td>극도로 희소 — 이 글의 사례</td> </tr> </tbody> </table> <p>score를 제외한 네 과제는 전부 이진에 가까운 희소 보상이다. 판정 조건이 좁게 정의될수록(oracle처럼 “오라클이 근처에 있는가”라는 단일 확인 하나로 좁혀질수록) 그 정의를 만족시키는 값싼 지름길이 생길 여지도 커진다 — 이 글이 다루는 misalignment by composition이 하필 다섯 과제 중 가장 좁게 정의된 oracle에서 나타난 것은 우연이 아니다.</p> <h2 id="motif-hacking-경로-표로-재구성">Motif hacking 경로, 표로 재구성</h2> <p>앞서 산문으로 따라간 경로를 표로 다시 정리하면 이렇다.</p> <table> <thead> <tr> <th>단계</th> <th>행동</th> <th>원래 의도했던 목표와의 관계</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>노란 곰팡이(F)를 발견할 때까지 수천 턴 생존</td> <td>생존 능력 축적 — 내재적 보상이 유도</td> </tr> <tr> <td>2</td> <td>노란 곰팡이를 처치</td> <td>정상적인 전투</td> </tr> <tr> <td>3</td> <td>시체를 섭취</td> <td>여기서부터 지름길로 방향 전환</td> </tr> <tr> <td>4</td> <td>환각 상태 진입</td> <td>지각이 왜곡되기 시작</td> </tr> <tr> <td>5</td> <td>몬스터의 공격에도 비공격적으로 생존</td> <td>진짜 오라클을 찾는 행동과 무관</td> </tr> <tr> <td>6</td> <td>환각으로 몬스터가 오라클로 보임</td> <td>판정기가 이 착각을 그대로 수용</td> </tr> <tr> <td>결과</td> <td>NLE가 과제 완료로 선언</td> <td>진짜 오라클에는 한 번도 가지 않음</td> </tr> </tbody> </table> <h2 id="성공률과-반직관적-결과">성공률과 반직관적 결과</h2> <p>결합 보상(\(r_{\text{effective}} = \alpha_1 r_{\text{int}} + \alpha_2 r\))으로 학습했을 때 오라클 과제의 성공률은 <strong>약 30%</strong>였다. 저자들은 이 과제를 다섯 개 과제 중 가장 어려운 것으로 규정하며, 인간 시연 없이는 어떤 접근도 의미 있는 진전을 낸 적이 없었다고 명시한다. 더 쉬운 계단(staircase) 레벨 3·4 과제에서는 extrinsic 전용이나 RND 베이스라인의 성공률이 정확히 <strong>0%</strong>였다고 논문이 직접 밝힌다.</p> <p>score 과제에서는 더 반직관적인 결과가 나온다. <strong>Motif의 내재적 보상만으로(외재적 보상 없이) 학습한 에이전트가, 점수 자체를 직접 최대화하도록 학습한 베이스라인보다 더 높은 점수를 낸다.</strong> 저자들은 이것이 “내재적 보상만으로 딥 RL 에이전트를 학습시켜 환경 보상으로 학습한 에이전트를 능가한, 상대적으로 밀도 높은 복잡한 과제에서의 첫 사례”라고 명시한다. 정확한 절대 점수는 그림으로만 제시돼 본문에서 수치로 확인되지 않으므로 여기서는 방향과 정성적 결론만 옮긴다.</p> <p>이 결과의 배경에는 세 정책의 행동 자체가 질적으로 다르다는 사실이 있다. 저자들이 정책들을 직접 비교 분석한 내용을 표로 옮기면 다음과 같다.</p> <table> <thead> <tr> <th>학습 보상</th> <th>행동 특징</th> </tr> </thead> <tbody> <tr> <td>외재적 보상만</td> <td>던전 레벨 전환·골드 수집이 주는 보상을 좇아 위험을 무시하고 곧장 깊이 내려간다</td> </tr> <tr> <td>Motif 내재적 보상만</td> <td>생존에 맞춰진 행동 — 몬스터를 더 많이 처치하고, 경험치 레벨을 더 많이 올리고, 더 오래 생존한다</td> </tr> <tr> <td>결합(내재적+외재적)</td> <td>내재적 보상이 준 생존 기술을 활용하되, 그 수명을 깎아서라도 더 나은 전투력으로 던전을 내려가 더 많은 골드와 점수를 모은다 — “둘의 상호작용을 지렛대 삼아 최고의 결과”를 낸다</td> </tr> </tbody> </table> <p>이 표는 이 글의 논지를 다른 각도에서 한 번 더 확인해준다. <strong>결합 정책은 내재적 정책의 생존 기술과 외재적 정책의 진취성을 둘 다 물려받는다.</strong> score 과제에서는 이 상속이 순수하게 이득이지만, oracle 과제에서는 정확히 같은 상속(생존 기술)이 판정을 속이는 데 전용된다. 표현을 바꾸면, <strong>결합이 만들어내는 능력 자체는 한 종류인데, 그 능력이 어느 방향으로 쓰이는지는 판정 정의가 결정한다.</strong></p> <h2 id="유능하게-만드는-보상--허술한-목표--사고">“유능하게 만드는 보상 + 허술한 목표 = 사고”</h2> <p>Motif의 오라클 사례를 한 문장으로 일반화하면 이렇다. <strong>보상이 에이전트를 유능하게 만들수록, 그 능력이 허술한 목표 정의와 만났을 때 열리는 구멍도 커진다.</strong> 노란 곰팡이를 만나 처치하고 환각 상태에서 살아남는 경로는 아무 능력도 없는 에이전트에게는 불가능하다. 수천 턴을 생존할 능력, 몬스터를 상대로 판단력 있게 행동할 능력이 먼저 있어야 이 지름길에 도달할 수 있다. 즉 내재적 보상이 만든 생존 역량 자체가, 원래는 존재하지 않던 hacking 경로를 새로 열어준 것이다.</p> <p>이 일반화는 이 시리즈 전체에 적용된다. 약한 에이전트는 애초에 유닛 테스트를 조작할 만큼 코드베이스를 이해하지 못하고, 도구 호출을 남발할 만큼 도구 사용에 능숙하지도 못하고, 긴 궤적 끝에 그럴듯한 요약을 지어낼 만큼 언어 능력이 정교하지도 못하다. <strong>모델이 약할 때는 안 보이던 구멍이, 유능해지는 순간 드러난다.</strong> 이는 능력이 오른 모델을 배포하기 전에 판정 정의를 다시 검토해야 하는 이유이기도 하다 — 어제까지 안전했던 판정 로직이, 더 유능한 모델 앞에서는 더 이상 안전하지 않을 수 있다.</p> <p>Motif 안에서도 이 패턴이 그대로 반복된다. 내재적 보상만으로는 부족했다 — 노란 곰팡이를 찾아 처치하고 환각 속에서 몬스터의 공격을 버텨내는 경로는, 애초에 생존 능력이 낮은 에이전트에게는 성립하지 않는 시나리오다. score 과제에서 관측된 “내재적 보상만으로 베이스라인을 능가한다”는 결과와, oracle 과제에서 관측된 hacking은 <strong>같은 원인의 두 얼굴</strong>이다. 내재적 보상이 만들어낸 생존·전투 역량이 score 과제에서는 그대로 유용하게 쓰였고, oracle 과제에서는 판정의 허점을 파고드는 데 전용됐다.</p> <h2 id="방어-체크리스트">방어 체크리스트</h2> <p>Motif 사례와 앞선 네 유형을 종합하면, 에이전트 RL에서 reward/판정을 설계할 때 던져야 할 질문은 다음 네 가지로 좁혀진다.</p> <ol> <li><strong>판정 정의가 진짜 목표인가, 아니면 진짜 목표가 남긴 흔적을 확인하는 대리 지표인가.</strong> “오라클 근처에 있는가”는 흔적이고, “오라클을 실제로 만났는가”가 진짜 목표다. 이 둘의 간극이 hacking의 여지다.</li> <li><strong>대리 지표라면, 무엇으로 그 흔적을 위조할 수 있는가.</strong> 환각, 하드코딩된 테스트 통과, 형식만 맞춘 도구 호출 — 흔적을 만드는 더 값싼 경로가 있는지 미리 물어야 한다.</li> <li><strong>여러 보상을 어떻게 결합했는가.</strong> 고정 계수로 그냥 더했다면, 각 보상이 개별적으로 안전하다는 사실이 조합에서도 안전하다는 것을 보장하지 않는다.</li> <li><strong>능력이 오르면 새로 열리는 구멍은 무엇인가.</strong> 지금 모델이 못 찾는 지름길이, 다음 세대 모델에서는 발견될 수 있다는 전제로 판정을 설계해야 한다.</li> </ol> <h2 id="핵심-정리">핵심 정리</h2> <p>이 글에서 다룬 다섯 가지 hacking 유형과 그 방어를 하나의 표로 묶는다.</p> <table> <thead> <tr> <th>hacking 유형</th> <th>판정이 실제로 확인하는 것</th> <th>방어</th> <th>관련 편</th> </tr> </thead> <tbody> <tr> <td>판정 정의가 대리 지표</td> <td>목표의 흔적(환각된 오라클, 통과된 테스트)</td> <td>판정을 진짜 목표에 가깝게 좁힌다(oracle-sober)</td> <td>이 글, <a href="/blog/2026/swe-agent-rl/">#56</a></td> </tr> <tr> <td>shaping이 만든 행동 남발</td> <td>성공 신호의 누적 횟수</td> <td>반복에 페널티, 필요성·활용까지 반영한 가중치</td> <td><a href="/blog/2026/reward-shaping-agentic/">#51</a>, <a href="/blog/2026/tool-call-reward/">#53</a></td> </tr> <tr> <td>judge가 긴 궤적을 못 읽음</td> <td>마지막 요약의 그럴듯함</td> <td>rubric으로 판정 범위를 명시적으로 좁힌다</td> <td><a href="/blog/2026/agentic-judge-rubric/">#54</a></td> </tr> <tr> <td>마스킹 누락으로 출력을 지어냄</td> <td>도구 호출의 형식</td> <td>환경 토큰 마스킹, 형식과 별개로 실제 수행 여부 검증</td> <td><a href="/blog/2026/multi-turn-rl-practice/">#46</a></td> </tr> <tr> <td>비결정적 환경에서 운을 실력으로 오인</td> <td>그룹 내 상대적 결과</td> <td>doubly-robust advantage로 환경 노이즈 흡수</td> <td><a href="/blog/2026/web-gui-agent-rl/">#57</a></td> </tr> <tr> <td><strong>조합의 실패</strong></td> <td><strong>개별 보상들의 고정 계수 합</strong></td> <td><strong>정규화 후 결합, 단계 분리, 또는 제약으로 전환</strong></td> <td><strong>이 글 — Motif, A.X K2, K-EXAONE 2.0, Safe RLHF</strong></td> </tr> </tbody> </table> <h1 id="conclusion">Conclusion</h1> <p>이 글은 두 가지를 확인했다. 첫째, 규칙 기반 판정기는 파라미터가 없어서가 아니라 <strong>판정 정의가 진짜 목표를 정확히 담아낼 때만</strong> 안전하다 — Motif의 오라클 판정은 파라미터가 0개였지만, 그 정의(근처에 오라클처럼 보이는 캐릭터가 있는가)가 진짜 목표(오라클을 실제로 찾아가는가)와 어긋나 있었기에 뚫렸다. 둘째, <strong>개별적으로 정렬된 보상들도 조합하면 어긋날 수 있다.</strong> 생존을 가르친 내재적 보상과 오라클 발견에 상을 주는 외재적 보상은 각각 사람의 직관과 잘 맞았지만, 둘을 고정 계수로 더하는 순간 어느 쪽도 의도하지 않은 지름길이 열렸다. 저자들이 이 현상에 misalignment by composition이라는 이름을 붙인 이유다.</p> <p>이 사례는 RLAIF 특유의 문제가 아니다. LLM이 선호를 매겼든, 사람이 라벨링했든, 순수 RLVR로 조합을 만들었든 — NLE의 오라클 판정 로직 자체는 바뀌지 않았을 것이고, 환각으로 그 판정을 속이는 경로도 그대로 열려 있었을 것이다. 뚫린 건 보상의 출처가 아니라 판정의 정의였다.</p> <p>이 시리즈가 2~12부에서 이미 예고한 네 가지 hacking 유형 — shaping이 만든 행동 남발, judge의 긴 궤적 처리 실패, 마스킹 누락으로 인한 출력 조작, 비결정적 환경에서의 운과 실력 혼동 — 은 Motif의 오라클 사례가 대표하는 “판정 정의가 대리 지표”라는 큰 틀 아래 나란히 놓인다. 각 방어 장치(다중 판정 결합, held-out 테스트, doubly-robust advantage)는 개별 hacking 표면 하나씩을 막지만, 그 방어들을 다시 조합하는 순간 같은 질문이 재귀적으로 돌아온다 — <strong>이 방어들의 조합은 정말 안전한가.</strong> 마지막 편(<a href="/blog/2026/frontier-agentic-rl/">#61</a>)에서 실제 프론티어 모델들이 이 질문에 어떻게 답하는지 종합한다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Klissarov et al., ICLR 2024. <a href="https://arxiv.org/abs/2310.00166">Motif: Intrinsic Motivation from Artificial Intelligence Feedback</a>.</li> <li>Skalse et al., arXiv 2022. <a href="https://arxiv.org/abs/2209.13085">Defining and Characterizing Reward Hacking</a>.</li> <li>Gabor et al., arXiv 2025. <a href="https://arxiv.org/abs/2511.21654">EvilGenie: A Reward Hacking Benchmark</a>.</li> <li>Dai et al., 2023. <a href="https://arxiv.org/abs/2310.12773">Safe RLHF: Safe Reinforcement Learning from Human Feedback</a>.</li> <li>Küttler et al., NeurIPS 2020. <a href="https://arxiv.org/abs/2006.13760">The NetHack Learning Environment</a> — NLE 원 논문, 오라클 과제를 포함한 환경 정의.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰여덟 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><strong>(현재 글)</strong> 에이전트의 reward hacking — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="reinforcement-learning"/><category term="agentic-rl"/><category term="reward-hacking"/><category term="intrinsic-motivation"/><category term="credit-assignment"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #58 — Motif(Klissarov et al., ICLR 2024)의 misalignment by composition: 개별로는 정렬된 보상들이 합쳐지면 왜 뚫리는가]]></summary></entry><entry><title type="html">웹·GUI 에이전트 — end-to-end 멀티턴 RL</title><link href="https://www.wonbeomjang.kr/blog/2026/web-gui-agent-rl/" rel="alternate" type="text/html" title="웹·GUI 에이전트 — end-to-end 멀티턴 RL"/><published>2026-08-11T00:57:00+00:00</published><updated>2026-08-11T00:57:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/web-gui-agent-rl</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/web-gui-agent-rl/"><![CDATA[<blockquote> <p><a href="https://arxiv.org/abs/2505.16421">WebAgent-R1: Training Web Agents via End-to-End Multi-Turn Reinforcement Learning</a> (Wei et al., Amazon, EMNLP 2025)</p> </blockquote> <h1 id="introduction">Introduction</h1> <p><a href="/blog/2026/search-agent-rl/">#55</a>의 검색 에이전트는 정답 문자열과 대조할 수 있었고, <a href="/blog/2026/swe-agent-rl/">#56</a>의 코드 에이전트는 유닛 테스트라는 촘촘한 신호를 가졌다. 이번 편은 12부의 마지막 도메인이자, 신호 밀도 스펙트럼의 가장 척박한 끝이다. 웹·GUI 에이전트에게 주어지는 신호는 대개 딱 하나뿐이다 — “완료했는가(0 또는 1).”</p> <p>문제는 이것만이 아니다. 웹 페이지는 계속 바뀌고, 팝업이 뜨고, 네트워크가 흔들리고, 똑같은 행동을 두 번 반복해도 결과가 달라진다. <a href="/blog/2026/environment-as-reward/">#52</a>에서 짚은 “환경이 결정적이지 않으면 credit이 오염된다”는 문제가 이 도메인에서는 이론이 아니라 매일의 실무다. 게다가 시작점부터 나쁘다 — 파인튜닝 없이 프롬프팅만으로 웹 태스크를 시키면 최신 모델도 한 자릿수~십몇 퍼센트 성공률에 머문다. <a href="/blog/2026/outcome-vs-process-agentic/">#47</a>가 경고한 “성공률이 낮으면 GRPO 그룹이 통째로 붕괴한다”는 문제가 가장 먼저, 가장 세게 터지는 도메인이 바로 여기다.</p> <p>이 글은 이 척박한 조건에서 실제로 작동한 세 가지 접근을 다룬다.</p> <ol> <li><strong>WebAgent-R1</strong> — 규칙 기반 이진 보상 하나만으로 GRPO를 멀티턴으로 확장해, behavior cloning(BC) 웜업과 결합했을 때 3B~8B 모델의 성공률을 3~5배 끌어올린다.</li> <li><strong>PAE (Proposer-Agent-Evaluator)</strong> — 애초에 “무엇을 연습시킬지”조차 사람이 정하지 않는다. VLM이 스스로 과제를 제안하고, VLM이 스스로 채점한다.</li> <li><strong>DigiRL</strong> — 환경의 비결정성을 회피하지 않고 advantage 추정 수식 안에 명시적으로 집어넣는다.</li> </ol> <p>결론을 먼저 말하면, 세 논문 모두 “보상이 희소하다”는 사실 자체는 바꾸지 않는다. 대신 (1) BC나 필터링으로 시작 성공률을 끌어올려 그룹 붕괴를 피하고, (2) 비결정성을 노이즈로 방치하지 않고 추정기 설계에 반영하고, (3) 최종 상태 하나만 보는 아웃컴 판정을 오히려 가장 신뢰할 수 있는 신호로 재발견한다. 이 세 가지 대응을 하나씩 뜯어본다.</p> <h1 id="background">Background</h1> <h2 id="신호-밀도-스펙트럼에서-가장-척박한-자리">신호 밀도 스펙트럼에서 가장 척박한 자리</h2> <p>12부의 세 도메인을 신호 밀도 하나의 축 위에 놓으면 이렇다.</p> <ul> <li><strong>코드 (<a href="/blog/2026/swe-agent-rl/">#56</a>)</strong>: 유닛 테스트가 파일 단위, 함수 단위로 통과/실패를 알려준다. 보상이 조밀하고, 대부분 프로그램적으로 검증 가능하다.</li> <li><strong>검색 (<a href="/blog/2026/search-agent-rl/">#55</a>)</strong>: 최종 답과 정답 문자열을 비교하는 정도의 중간 밀도. 검색-답변 사이클마다 판정이 가능하지만 “왜 그 문서를 골랐는가”까지는 잘 안 보인다.</li> <li><strong>웹·GUI (이 글)</strong>: 대개 에피소드가 끝나야만, 그것도 최종 상태 하나만 보고 성공/실패가 갈린다. 10~30턴짜리 궤적에서 중간 스텝에 대한 직접적인 신호가 거의 없다.</li> </ul> <p>WebAgent-R1은 이 점을 문제 정식화 단계에서부터 명시한다. 웹 태스크를 부분관측 마르코프 결정 과정(POMDP) \((\mathcal{S}, \mathcal{A}, \mathcal{T}, \mathcal{R})\)으로 정의하고, 에이전트는 매 스텝 \(t\)마다 현재 웹페이지의 HTML을 상태 \(s_t\)로 관측해 행동 \(a_t\)를 생성한다. 에피소드가 끝나면(성공하거나 최대 스텝에 도달하면) 딱 한 번, 이진 보상 \(r_t \in \{0, 1\}\)을 받는다. 중간 스텝에는 보상이 없다.</p> <h2 id="환경-비결정성--같은-행동-다른-결과">환경 비결정성 — 같은 행동, 다른 결과</h2> <p><a href="/blog/2026/environment-as-reward/">#52</a>가 짚은 결정성 문제를 DigiRL은 세 가지로 구체화한다.</p> <ol> <li><strong>비정상성(non-stationarity)</strong>: 웹사이트와 앱이 계속 업데이트된다. 어제 학습한 UI 레이아웃이 오늘은 다를 수 있다.</li> <li><strong>예측 불가능한 방해 요소</strong>: 팝업 광고, 로그인 요청, 검색 결과의 무작위한 순서.</li> <li><strong>기술적 결함</strong>: 페이지 로딩 미완료, 일시적 접근 제한.</li> </ol> <p>DigiRL은 이 주장을 실험으로 직접 보여준다. 학습된 정책을 6월 1~3일 데이터로 고정(“frozen”)해 두고, 6월 7~11일에 재평가하면 성능이 서서히 떨어진다. 반면 같은 기간 온라인으로 계속 업데이트한 정책은 성능을 유지한다. 즉 웹 환경에서는 “정책이 나빠서” 실패한 것과 “환경이 바뀌어서” 실패한 것이 뒤섞여 있고, 이 둘을 구분하지 못하면 credit assignment 자체가 오염된다 — 똑같이 옳은 행동을 했는데 어제는 성공, 오늘은 실패로 기록되기 때문이다. GRPO 계열에서 이는 같은 그룹 안의 궤적들이 정책 차이가 아니라 환경의 우연 때문에 다른 보상을 받는 상황으로 이어진다.</p> <h2 id="판정이-어렵다--규칙과-판정자-사이">판정이 어렵다 — 규칙과 판정자 사이</h2> <p>WebArena류 벤치마크는 태스크마다 세 가지 규칙 기반 판정 중 하나를 쓴다.</p> <table> <thead> <tr> <th>판정 방식</th> <th>확인 대상</th> <th>예시</th> </tr> </thead> <tbody> <tr> <td>String Match</td> <td>에이전트가 낸 답 문자열이 기대값과 일치하는가</td> <td>“이번 달 베스트셀러 3개는?”에 대한 답</td> </tr> <tr> <td>URL Match</td> <td>최종적으로 도달한 URL이 기준 URL과 일치하는가</td> <td>“설정 페이지로 이동하라”</td> </tr> <tr> <td>Program Execution</td> <td>웹페이지의 실제 상태(DB, 설정값)를 스크립트로 검증</td> <td>“이 상품을 장바구니에 추가하라”</td> </tr> </tbody> </table> <p>“장바구니에 넣었는가”는 Program Execution으로 프로그램적으로 확인된다. 하지만 “사용자 의도대로 했는가”는 대부분 이 세 규칙 중 어느 것으로도 잡히지 않는다. 예컨대 “이 항공권 중 가장 저렴하면서도 경유가 없는 것을 찾아라” 같은 태스크는 규칙 기반 검증기를 짜기 어렵다. 그래서 PAE와 DigiRL은 규칙 대신 VLM/LLM을 판정자로 쓴다 — <a href="/blog/2026/agentic-judge-rubric/">#54</a>에서 다룬 judge 채점의 웹 버전이다.</p> <h1 id="method">Method</h1> <h2 id="webagent-r1--grpo를-멀티턴으로-확장하다">WebAgent-R1 — GRPO를 멀티턴으로 확장하다</h2> <p>WebAgent-R1(Wei, Yao, Liu, Zhang, Lu, Qiu, Yu, Xu, Zhang, Yin, Yun, Li, Amazon/University of Virginia/Georgia Tech, EMNLP 2025)은 온라인 웹 환경과의 상호작용에서 직접 학습하는 end-to-end 멀티턴 RL 프레임워크다. 오프라인이나 반복적 off-policy RL(트래젝토리 필터링, 별도의 outcome reward model 학습 등)에 의존하던 기존 방식과 달리, 규칙 기반 이진 보상 하나만으로 on-policy 학습을 굴린다.</p> <p><strong>1단계 — Behavior Cloning 웜업.</strong> 전문가 시연 데이터셋 \(\mathcal{D} = \{(h_t, a_t)\}\)로 지도학습을 먼저 한다. 여기서 \(h_t = (s_1, a_1, s_2, a_2, \ldots, s_t)\)는 시점 \(t\)까지의 전체 상호작용 이력이다.</p> \[\mathcal{L}_{\text{BC}} = -\mathbb{E}_{(h_t, a_t) \sim \mathcal{D}}\left[\log \pi_\theta(a_t \mid h_t)\right]\] <p>이 웜업 단계가 왜 필수인지는 뒤의 토이 계산에서 정량적으로 확인한다.</p> <p><strong>2단계 — Multi-turn GRPO (M-GRPO).</strong> BC로 초기화한 정책을 GRPO의 멀티턴 확장으로 추가 학습한다. 태스크 \(q\)마다 궤적 그룹 \(\{\tau_1, \ldots, \tau_G\}\)를 샘플링하고 다음 손실을 최소화한다.</p> \[\mathcal{L}_{\text{M-GRPO}}(\theta) = -\frac{1}{G}\sum_{i=1}^{G}\frac{1}{|\tau_i|}\sum_{j=1}^{|\tau_i|}\left(\frac{1}{|a_{i,j}|}\sum_{t=1}^{|a_{i,j}|}\left[\tilde{A}_{i,j,t} - \beta\,\mathbb{D}_{\text{KL}}(\theta)\right]\right)\] <p>기호를 풀면,</p> <ul> <li>\(\tau_i = \{a_{i,1}, \ldots, a_{i,\lvert \tau_i \rvert}\}\): \(i\)번째 궤적을 구성하는 행동(턴)들의 시퀀스.</li> <li>\(\tilde{A}_{i,j,t} = \min\{r_{i,j,t}(\theta) A_{i,j},\ \text{clip}(r_{i,j,t}(\theta), 1-\epsilon, 1+\epsilon) A_{i,j}\}\): PPO식 클리핑이 적용된 토큰 단위 advantage.</li> <li>\(r_{i,j,t}(\theta) = \pi_\theta(a_{i,j,t} \mid q, a_{i,j,&lt;t}) / \pi_{\text{old}}(a_{i,j,t} \mid q, a_{i,j,&lt;t})\): 중요도 샘플링 비율.</li> <li>\(A_{i,j} = (r_i - \text{mean}(\boldsymbol{r})) / \text{std}(\boldsymbol{r})\): 그룹 상대 advantage. \(\boldsymbol{r} = \{r_1, \ldots, r_G\}\)는 규칙 기반 보상 함수가 매긴 그룹 내 보상들이다.</li> </ul> <p>턴을 기준으로 바깥쪽 두 겹의 평균을 취하고, 그 안에서 토큰 단위로 advantage를 다시 평균 낸다 — 즉 “궤적 평균 → 턴 평균 → 토큰 평균”의 3중 정규화다. 이렇게 하지 않으면 턴 수가 많은 궤적의 손실이 턴 수가 적은 궤적을 압도해버린다.</p> <p><strong>공학적 장치 둘.</strong> HTML 관측 하나가 수천 토큰을 차지하기 때문에, 멀티턴이 누적되면 컨텍스트가 폭발한다. 이를 막기 위해 <strong>동적 컨텍스트 압축</strong>을 쓴다 — 새 관측이 들어오면 직전 관측 \(s_t\)를 간소화된 템플릿 \(s'_t\)(예: “Simplified HTML”)로 치환하되, 행동 이력 \(a_1, \ldots, a_t\)는 그대로 보존한다. 손실 마스크도 이 압축에 맞춰 매번 다시 계산해, 실제 행동 토큰에만 손실이 걸리도록 한다. 또한 그룹 하나를 만들려면 \(G\)개의 궤적을 반복 상호작용으로 수집해야 하는데, 이를 직렬로 하면 느리다. 그래서 각자 독립적인 브라우저 상태(쿠키 등)를 가진 \(G\)개의 병렬 브라우저 인스턴스 \(\{\mathcal{E}_1, \ldots, \mathcal{E}_G\}\)를 동시에 굴리는 <strong>비동기 궤적 롤아웃</strong>을 쓴다.</p> <p><strong>보상 설계.</strong> 별도의 reward model을 학습하지 않는다. 웹 환경(WebArena)이 내장한 규칙 기반 판정 — 위 표의 String/URL/Program Match — 을 그대로 써서 성공이면 1, 실패면 0을 준다. WebRL처럼 GPT-4로 새 데이터를 라벨링하는 outcome reward model이 필요 없다는 게 이 설계의 핵심 단순화다.</p> <h2 id="pae--태스크-자체를-자율적으로-만든다">PAE — 태스크 자체를 자율적으로 만든다</h2> <p>PAE(Zhou, Yang, Lin, Bai, Zhou, Wang, Levine, Li, Amazon/UIUC/UC Berkeley, arXiv 2024)는 다른 지점을 공략한다. WebAgent-R1이 “주어진 태스크를 어떻게 잘 풀 것인가”를 다뤘다면, PAE는 “애초에 연습시킬 태스크를 누가 정하는가”를 묻는다. 사람이 수작업으로 태스크 템플릿을 만드는 방식은 확장성이 없다 — 다양성이 annotator 숫자에 묶인다.</p> <p>PAE는 세 컴포넌트로 이 문제를 푼다.</p> <ul> <li><strong>Context-aware Task Proposer</strong> \(\hat{\mathcal{C}}(z_{\mathcal{M}})\): 환경에 대한 최소한의 맥락 정보 \(z_{\mathcal{M}}\)을 받아 태스크를 생성한다. Amazon처럼 잘 알려진 사이트는 <strong>사이트 이름 하나</strong>만으로 충분했고, WebArena처럼 덜 알려진 자체 호스팅 사이트는 사용자 데모 스크린샷을 추가로 줬다.</li> <li><strong>Chain-of-Thought Agent Policy</strong>: 실제 행동을 내기 전에 생각(thought)을 먼저 출력하도록 훈련한다.</li> <li><strong>Image-based Outcome Evaluator</strong>: 최종 스크린샷 3장과 에이전트의 최종 답을 보고 0/1만 판정한다.</li> </ul> <p><strong>왜 아웃컴 판정만 쓰는가.</strong> PAE는 스텝 단위 판정자와 함수(코드) 기반 판정자도 시도했지만 둘 다 아웃컴 판정보다 못했다. 스텝 판정자(각 스텝이 목표에 가까워졌는지 Claude 3 Sonnet에게 매번 묻는 방식)는 환각이 잦고 “관대”했다 — 실제로는 SFT 베이스라인보다 낮은 성능을 냈다. 함수 기반 판정자(검증 함수를 자동 생성하게 시키는 방식)는 존재하지 않는 URL을 정답으로 가정하는 등 검증 함수 자체를 환각해, 대부분의 태스크가 학습 불가능해졌다. 반면 최종 결과 하나만 보는 아웃컴 판정은 가장 쉬운 판단(성공했는가/아닌가)만 요구하기 때문에 가장 신뢰할 수 있는 신호가 됐다.</p> <p><strong>정책 학습은 Filtered BC.</strong> 0/1 보상과 대규모 분산 브라우저 인프라의 복잡도 때문에, PAE는 정교한 정책 그래디언트 대신 <strong>Filtered Behavior Cloning</strong>을 쓴다 — 성공한 궤적의 생각과 행동만 모아 negative log-likelihood로 모방한다. 실패 궤적에는 아무 그래디언트도 주지 않는다. GRPO처럼 그룹 내 상대 비교나 페널티 구조가 없다는 뜻이다. 이 단순함이 뒤의 hacking 논의에서 취약점으로 다시 나온다.</p> <p><strong>비대칭 능력 가설.</strong> PAE의 핵심 관찰은 “VLM은 과제를 제안하고 채점하는 데는 능하지만, 직접 수행하는 데는 서투르다”는 비대칭이다. 이를 검증하기 위해 제안자·판정자를 Claude 3 Sonnet 대신 훨씬 약한 Qwen2VL-7B(에이전트로서 성능 7.5%, WebArena Easy 기준)로 바꿔도, LLaVa-7B-SFT의 성능을 18.0%에서 23.1%까지 끌어올렸다. 즉 개선의 원천은 “강한 모델을 모방해서”가 아니라 제안·판정과 수행 사이의 비대칭 그 자체다.</p> <h2 id="digirl--비결정성을-정면으로-계산에-넣는다">DigiRL — 비결정성을 정면으로 계산에 넣는다</h2> <p>DigiRL(Bai, Zhou, Cemri, Pan, Suhr, Levine, Kumar, UC Berkeley/UIUC/Google DeepMind, NeurIPS 2024)은 앞의 두 논문보다 한 걸음 더 들어가, 환경 비결정성을 “노이즈로 감수할 것”이 아니라 “advantage 추정 수식에 명시적으로 반영할 대상”으로 다룬다. 실사용 Android 기기 제어(AitW 데이터셋)를 대상으로 하며, 오프라인 RL로 초기화한 뒤 오프라인-온라인 RL로 미세조정하는 2단계 구조를 쓴다.</p> <p><strong>백본은 Advantage-Weighted Regression(AWR)</strong>. 표준형은 다음을 최대화한다.</p> \[\arg\max_\pi \mathbb{E}_\nu\left[\log \pi(a \mid s, c) \cdot \exp(A(s, a, c)/\beta)\right]\] <p>DigiRL은 \(\beta\) 튜닝을 피하려고 exponential 가중 대신 advantage에 대한 하드 필터링을 쓴다.</p> \[\mathcal{L}(\pi) = -\mathbb{E}_{\text{filter}(\nu)}\left[\log \pi(a \mid s, c)\right]\] <p>문제는 이 advantage를 어떻게 추정하느냐다. 몬테카를로(MC) 롤아웃으로 추정하면 환경 확률성 때문에 분산이 크다. 그래서 DigiRL은 <strong>doubly-robust 스텝 단위 advantage 추정기</strong>를 쓴다.</p> \[A^{\text{step}}(s_h, a_h, c) := \lambda^{H-h} r(s_H, a_H, c) + \left(1 - \lambda^{H-h} r(s_H, a_H, c)\right)\left(V^{\text{step}}(s_{h+1}, c) + r(s_h, a_h, c) - V^{\text{step}}(s_h, c)\right)\] <p>기호를 하나씩 보면, \(h\)는 현재 스텝, \(H\)는 에피소드 최대 길이, \(r(s_H, a_H, c) \in \{0,1\}\)는 에피소드 끝에만 주어지는 이진 성공 신호(즉 순수 MC 리턴)다. 뒤쪽 괄호는 학습된 스텝 단위 가치함수로 만든 TD(부트스트랩) 항이다. 이 둘을 섞는 계수가 \(\lambda^{H-h}\)다.</p> <p>이 식의 재미있는 지점은 보상이 이진값이라는 데서 나온다. 성공 궤적(\(r(s_H,\cdot)=1\))에서는 \(A^{\text{step}} = \lambda^{H-h} + (1-\lambda^{H-h}) \cdot (\text{TD항})\)이 되어, 종료 시점에 가까울수록(\(H-h\)가 작을수록) MC 신호를 더 신뢰하고 초반 스텝일수록 TD 추정치에 더 의존한다 — 종료 지점에서 멀리 떨어진 스텝일수록 그 사이에 쌓인 환경 확률성의 영향을 많이 받으니 실제 결과 하나만 믿기보다 가치함수의 판단을 더 신뢰하는 쪽으로 설계한 것이다. 반대로 실패 궤적(\(r(s_H,\cdot)=0\))에서는 계수가 \(\lambda^{H-h} \cdot 0 = 0\)이 되어 앞항이 통째로 사라지고, \(A^{\text{step}}\)은 오로지 TD항만 남는다. 즉 “실패했다”는 사실 하나로는 어느 스텝이 잘못됐는지 전혀 알 수 없으므로, 실패 궤적의 스텝별 credit은 전적으로 학습된 가치함수의 차이에 위임한다. 이진 트래젝토리 보상 하나에서 스텝 단위 credit을 뽑아내는 실질적인 메커니즘이 바로 이것이다.</p> <p><strong>자동 커리큘럼.</strong> 스텝 단위 advantage만으로는 부족했다고 저자들은 밝힌다. 태스크 난이도가 제각각이라, 이미 잘하는 태스크에 계속 데이터를 쌓으면 샘플 효율이 나빠진다. 그래서 태스크(지시문) 단위 가치함수 \(V^{\text{instruct}}(c)\)를 따로 학습해, 다음 advantage로 어떤 롤아웃이 “학습에 유익한지” 판단한다.</p> \[A^{\text{instruct}}(s_h, a_h, c) := \sum_{t=h}^{H} r(s_t, a_t, c) - V^{\text{instruct}}(c) = r(s_H, a_H, c) - V^{\text{instruct}}(c)\] <p>\(V^{\text{instruct}}(c)\)가 낮게 예측한(=어려울 것으로 본) 태스크에서 실제로 성공했다면 \(A^{\text{instruct}}\)가 크게 나온다. 이런 궤적을 우선적으로 리플레이해, 이미 마스터한 쉬운 태스크에 학습 예산을 낭비하지 않는다. Prioritized experience replay의 태스크 단위 버전인 셈이다.</p> <p><strong>두 가치함수 모두 회귀(MSE) 대신 교차 엔트로피로 학습한다.</strong> 이진 성공/실패를 분류 문제로 다루는 편이 현대 딥러닝 아키텍처에 더 잘 맞는다는 관찰(Farebrother et al.)을 따른 것이다. 뒤의 표에서 보듯 이 선택 하나가 성능을 크게 좌우한다.</p> <p><strong>판정자 검증.</strong> DigiRL도 Gemini 1.5 Pro 기반의 자율 VLM 판정자를 쓴다. 사람 판정과 비교한 평균 오차율은 <strong>2.8%</strong>로, “판정이 어렵다”는 우려에도 불구하고 실무적으로 신뢰할 만한 수준임을 직접 검증했다.</p> <h1 id="experiments">Experiments</h1> <h2 id="세-논문의-핵심-수치">세 논문의 핵심 수치</h2> <p>WebAgent-R1의 WebArena-Lite 결과(Table 2, 165개 검증 태스크 평균 성공률)를 정리하면 다음과 같다.</p> <table> <thead> <tr> <th>방법</th> <th>Qwen2.5-3B</th> <th>Llama3.1-8B</th> </tr> </thead> <tbody> <tr> <td>프롬프팅만 (파인튜닝 전)</td> <td>6.1%</td> <td>8.5%</td> </tr> <tr> <td>Behavior Cloning</td> <td>20.0%</td> <td>20.6%</td> </tr> <tr> <td>Filtered BC</td> <td>—</td> <td>23.0%</td> </tr> <tr> <td>AWR</td> <td>—</td> <td>28.5%</td> </tr> <tr> <td>DigiRL (같은 백본에 적용)</td> <td>—</td> <td>30.3%</td> </tr> <tr> <td>WebRL</td> <td>—</td> <td>42.4%</td> </tr> <tr> <td><strong>WebAgent-R1 (BC + M-GRPO)</strong></td> <td><strong>33.9%</strong></td> <td><strong>44.8%</strong></td> </tr> </tbody> </table> <p>참고로 같은 벤치마크에서 프롬프팅만으로 OpenAI o3는 39.4%, o4-mini는 36.9%, GPT-4o는 13.9%, QwQ-32B는 22.4%였다. 즉 3B~8B 파라미터의 파인튜닝된 오픈모델이 프롬프팅만 쓴 프론티어 추론 모델을 넘어선다.</p> <p>PAE의 WebVoyager 결과(13개 실사용 웹사이트 평균, Table 1)는 이렇다.</p> <table> <thead> <tr> <th>모델</th> <th>성공률</th> </tr> </thead> <tbody> <tr> <td>Qwen2VL-72B (오픈소스 SOTA, 프롬프팅)</td> <td>22.6%</td> </tr> <tr> <td>LLaVa-7B SFT (시연 데이터 파인튜닝)</td> <td>14.9%</td> </tr> <tr> <td>LLaVa-7B PAE</td> <td>22.3%</td> </tr> <tr> <td>LLaVa-34B SFT</td> <td>22.2%</td> </tr> <tr> <td><strong>LLaVa-34B PAE</strong></td> <td><strong>33.0%</strong></td> </tr> </tbody> </table> <p>LLaVa-7B PAE(22.3%)는 5배 큰 LLaVa-34B SFT(22.2%)와 맞먹는 성능을 5분의 1의 테스트타임 연산으로 냈다. 미지의 웹사이트 85곳으로 일반화 테스트를 했을 때도 LLaVa-7B는 9.1%에서 16.3%로, LLaVa-34B는 16.1%에서 21.4%로 개선됐다 — 학습에 전혀 없던 사이트에도 스킬이 전이된다는 뜻이다. 자율 판정자와 사람 판정 사이의 불일치율은 시스템 단위 1.7%, 인스턴스 단위 8.6%로 보고됐다.</p> <p>DigiRL의 AitW(Android in the Wild) 결과는 이렇다.</p> <table> <thead> <tr> <th>방법</th> <th>General 서브셋</th> <th>Web Shopping 서브셋</th> </tr> </thead> <tbody> <tr> <td>GPT-4V + AppAgent</td> <td>17.7%</td> <td>8.3%</td> </tr> <tr> <td>CogAgent (17B, 지도학습)</td> <td>25.0%</td> <td>38.5%</td> </tr> <tr> <td>Filtered BC (오프라인→온라인)</td> <td>61.5%</td> <td>57.8%</td> </tr> <tr> <td><strong>DigiRL (오프라인→온라인)</strong></td> <td><strong>71.9%</strong></td> <td><strong>67.2%</strong></td> </tr> </tbody> </table> <p>프론티어 프롬프팅 대비 절대 49.5%p 개선이고, 오프라인 단독보다 오프라인-온라인이 확실히 낫다(General 기준 62.8%→75%대). 컴포넌트 어블레이션에서는 회귀 대신 교차 엔트로피로 가치함수를 학습하는 것이 성능을 약 12%p, 스텝 단위 advantage 도입이 효율을 약 12%p, 자동 커리큘럼이 학습 속도를 약 25% 끌어올렸다.</p> <h2 id="토이-계산--성공률이-낮으면-그룹은-얼마나-붕괴하는가">토이 계산 — 성공률이 낮으면 그룹은 얼마나 붕괴하는가</h2> <p><a href="/blog/2026/outcome-vs-process-agentic/">#47</a>에서 유도한 그룹 붕괴 확률을 그대로 가져온다. GRPO 그룹 크기 \(G\)개의 롤아웃이 모두 같은 이진 보상(전부 성공 또는 전부 실패)을 받으면, 그룹 내 표준편차가 0이 되어 advantage \(A_{i,j} = (r_i - \text{mean}(\boldsymbol{r}))/\text{std}(\boldsymbol{r})\)가 정의되지 않거나(구현상 0으로 처리) 그래디언트를 전혀 만들지 못한다. 태스크의 실제 성공 확률을 \(p\)라 하면, 그룹 하나가 붕괴할 확률은</p> \[P(\text{collapse}) = p^G + (1-p)^G\] <p>WebAgent-R1이 실제로 보고한 성공률로 이 값을 계산해보자. 그룹 크기는 토이 예제로 \(G=8\)을 쓴다.</p> <table> <thead> <tr> <th>시점</th> <th>모델</th> <th>성공률 \(p\)</th> <th>그룹 붕괴 확률</th> </tr> </thead> <tbody> <tr> <td>파인튜닝 전 (프롬프팅)</td> <td>Qwen2.5-3B</td> <td>6.1%</td> <td>60.44%</td> </tr> <tr> <td>파인튜닝 전 (프롬프팅)</td> <td>Llama3.1-8B</td> <td>8.5%</td> <td>49.13%</td> </tr> <tr> <td>BC 직후</td> <td>Qwen2.5-3B</td> <td>20.0%</td> <td>16.78%</td> </tr> <tr> <td>BC 직후</td> <td>Llama3.1-8B</td> <td>20.6%</td> <td>15.80%</td> </tr> <tr> <td>RL 이후 (최종)</td> <td>Qwen2.5-3B</td> <td>33.9%</td> <td>3.66%</td> </tr> <tr> <td>RL 이후 (최종)</td> <td>Llama3.1-8B</td> <td>44.8%</td> <td>1.02%</td> </tr> </tbody> </table> <p>BC 없이 RL을 바로 돌렸다면(WebAgent-R1-Zero, 시작 성공률 6.1%) 그룹의 <strong>60% 이상</strong>이 아무 학습 신호도 만들지 못한 채 버려진다. WebArena 한 스텝은 실제 브라우저와의 상호작용을 요구하므로, 이 60%는 단순히 “낭비”가 아니라 롤아웃 하나당 최대 30턴에 걸친 실제 계산 비용의 낭비다. 그리고 나머지 40%조차 대부분 “전부 실패”에 몰려 있어(성공 확률이 워낙 낮으니 “전부 성공” 그룹은 사실상 나오지 않는다), 어쩌다 붕괴를 피한 그룹도 신호가 극도로 희소하다. 논문이 보고한 어블레이션 결과 — “WebAgent-R1-Zero는 BC 없이 시작해 초기 성공률이 6.1%에 불과했고, RL 이후 오히려 성능이 소폭 떨어졌다”는 관찰, 그리고 그 원인을 “불완전하거나 형식이 어긋난 행동을 자주 생성해 RL 도중 긍정 보상을 거의 받지 못했다”고 설명한 것은 바로 이 그룹 붕괴 현상을 정성적으로 서술한 것이다.</p> <p>BC가 성공률을 20% 안팎으로 끌어올리는 순간 붕괴율은 60%대에서 16%대로 뚝 떨어진다. WebAgent-R1이 BC를 “이후 RL 최적화를 위한 핵심 토대”라고 부르는 이유가 여기서 숫자로 확인된다 — BC의 역할은 단순히 “기본기를 가르치는 것”을 넘어, RL이 애초에 유의미한 그래디언트를 받을 수 있는 영역으로 정책을 옮겨 놓는 것이다. 그룹 크기를 키우는 것도 대안이 될 수 있다. 같은 6.1%에서 \(G=16\)이면 붕괴율이 36.53%, \(G=32\)면 13.34%까지 떨어진다. 하지만 브라우저 롤아웃 하나가 비싸다는 점을 생각하면, WebAgent-R1이 비동기 병렬 브라우저로 \(G\)를 키우는 비용을 낮추는 동시에 BC로 \(p\) 자체를 끌어올리는 두 가지 레버를 함께 쓴 것은 합리적인 선택이다.</p> <h2 id="reward-hacking--완료-판정을-속이는-두-가지-방식">reward hacking — 완료 판정을 속이는 두 가지 방식</h2> <p>브리프에서 짚은 대로, 이 도메인의 hacking은 “판정 기준을 만족시키되 의도는 무시하는” 형태로 나타난다.</p> <p><strong>1. 최종 상태 지름길.</strong> URL Match는 최종 도달 URL만 본다. 사용자가 “설정 → 보안 → 2단계 인증을 켜라”는 여러 단계짜리 태스크를 냈는데, 판정 기준이 단지 “2단계 인증 설정 페이지의 URL에 도달했는가”라면, 에이전트는 주소창에 그 URL을 직접 타이핑해 도달하는 것만으로 보상을 받을 수 있다. 실제로 인증을 켰는지는 URL Match가 확인하지 못한다. 이는 WebAgent-R1이 채택한 세 판정 방식(String/URL/Program) 중 URL Match가 구조적으로 열어두는 취약점이다 — Program Execution처럼 실제 상태를 검증하는 판정과 결합하지 않으면 이 지름길은 항상 열려 있다.</p> <p><strong>2. 판정자 자체의 오판을 파고들기.</strong> DigiRL이 보고한 실패 유형 중 “잘못된 목표에 도달(Arriving at wrong goal)”이 이 문제의 실제 사례다 — 예를 들어 ebay.com에서 맥북을 찾으라는 지시에 costco.com에서 맥북을 찾고는 스스로 성공했다고 판단하는 식이다. 판정자가 “화면에 맥북이 보이는가” 정도의 느슨한 기준으로 판단한다면, 이런 궤적도 성공으로 채점될 수 있다. PAE의 어블레이션은 이 취약점을 더 직접적으로 보여준다 — 함수 기반 판정자에게 검증 함수를 스스로 만들라고 시켰더니 존재하지 않는 URL을 정답으로 가정하는 환각이 나왔고, 스텝 기반 판정자는 각 스텝을 “관대하게” 평가해 SFT 베이스라인보다도 낮은 성능을 냈다. 판정자의 오류가 그대로 학습 신호의 오류가 되는 것이다.</p> <p><strong>Filtered BC 계열이 이 문제에 특히 취약한 이유.</strong> PAE의 정책 학습은 성공 판정을 받은 궤적을 그대로 모방하는 Filtered BC다. GRPO처럼 그룹 내 다른 궤적과 상대 비교를 하거나 페널티를 주는 구조가 없다. 즉 판정자가 딱 한 번 잘못 판단해 “가짜 성공”에 라벨을 붙이면, 그 궤적의 얕은 요령(지름길, 우연히 맞은 답)이 다음 세대 정책에 그대로 모방되어 들어간다. 부정적 신호가 없으니 이 오류를 상쇄할 메커니즘도 없다.</p> <h2 id="방어">방어</h2> <p>세 논문이 실제로 채택한 방어 장치를 모으면 다음과 같다.</p> <ul> <li><strong>다중 판정 기준 결합</strong>: WebArena류 벤치마크는 태스크별로 String/URL/Program Match 중 하나를 지정하되, 상태 변경이 필요한 태스크는 반드시 Program Execution을 쓴다 — URL 지름길이 통하지 않도록 태스크 설계 단계에서 막는다.</li> <li><strong>판정자를 사람과 대조 검증</strong>: PAE(시스템 단위 불일치 1.7%)와 DigiRL(평균 오차 2.8%)은 자율 판정자를 배포하기 전에 반드시 사람 평가와 비교해 신뢰도를 수치로 확인했다. “판정이 쉬운 질문(최종 결과 성공/실패)만 판정자에게 맡긴다”는 설계 원칙(PAE의 아웃컴 전용 판정 채택) 자체가 방어다 — 판정 난이도를 낮춰 환각 여지를 줄인다.</li> <li><strong>doubly-robust advantage로 비결정성 흡수</strong>: DigiRL은 환경이 만드는 노이즈를 무시하지 않고, MC항과 TD항을 섞어 정책 탓이 아닌 우연에 의한 보상 변동을 완화한다.</li> <li><strong>BC 웜업 + 자동 커리큘럼으로 그룹 붕괴 회피</strong>: 위 토이 계산이 보여주듯, 애초에 성공률을 학습 가능한 영역으로 끌어올리는 것 자체가 hacking과 무관하게 학습을 가능하게 만드는 가장 기초적인 방어다.</li> </ul> <h1 id="12부-종합--신호-밀도-스펙트럼의-세-지점">12부 종합 — 신호 밀도 스펙트럼의 세 지점</h1> <p>12부에서 다룬 세 도메인을 하나의 표로 닫는다. 검색과 코드 도메인의 상세 논의는 각각 <a href="/blog/2026/search-agent-rl/">#55</a>, <a href="/blog/2026/swe-agent-rl/">#56</a>을 참고하고, 여기서는 이 글에서 확인한 웹·GUI 도메인의 사실들을 축으로 세 도메인을 나란히 놓는다.</p> <table> <thead> <tr> <th>축</th> <th>검색 에이전트 (<a href="/blog/2026/search-agent-rl/">#55</a>)</th> <th>코드 에이전트 (<a href="/blog/2026/swe-agent-rl/">#56</a>)</th> <th>웹·GUI 에이전트 (이 글)</th> </tr> </thead> <tbody> <tr> <td>신호 밀도</td> <td>중간 — 최종 답 매칭</td> <td>조밀 — 유닛 테스트 통과/실패</td> <td>척박 — 에피소드 끝 이진 신호 하나</td> </tr> <tr> <td>주된 조달처</td> <td>규칙 기반 정답 대조</td> <td>테스트 스위트 실행 결과</td> <td>규칙 기반 상태 검증(String/URL/Program) + VLM/LLM 아웃컴 판정</td> </tr> <tr> <td>credit 입도</td> <td>검색-답변 사이클(턴) 단위까지</td> <td>파일/함수 편집 단위까지</td> <td>사실상 에피소드 단위 — WebAgent-R1도 “스텝별 reward shaping은 향후 과제”로 남겨둠</td> </tr> <tr> <td>대표 hacking</td> <td>실제 검색 없이 정답을 바로 출력(도구 호출 형식만 흉내)</td> <td>테스트 코드 자체를 수정·삭제해 강제로 통과시키기</td> <td>URL 직접 입력 등 최종 상태 지름길, 판정자의 느슨한 기준·환각 악용</td> </tr> <tr> <td>방어</td> <td>도구 호출의 실제 수행 여부를 형식 검증에 포함</td> <td>테스트 파일 격리, held-out 테스트로 재검증</td> <td>다중 판정 기준 결합, 판정자-사람 정합성 검증, doubly-robust advantage, BC/커리큘럼으로 그룹 붕괴 회피</td> </tr> </tbody> </table> <p>이 표에서 가장 뚜렷한 대비는 credit 입도다. 코드 도메인은 테스트가 파일·함수 단위로 걸려 있어 <a href="/blog/2026/step-level-credit/">#49</a>이 다룬 스텝 단위 credit을 비교적 자연스럽게 얻는다. 반면 웹·GUI 도메인은 세 논문 모두 명시적인 턴/스텝 단위 shaping 없이, 트래젝토리 전체가 이진 보상 하나를 공유하는 구조를 그대로 쓴다. DigiRL의 doubly-robust 추정기가 예외적으로 스텝 단위 credit을 만들어내지만, 이는 별도의 보상 신호가 아니라 하나의 트래젝토리 보상을 사후에 가치함수로 분해한 결과다. 즉 웹·GUI 도메인의 credit assignment는 “보상을 더 촘촘하게 설계”하는 방향이 아니라 “희소한 보상 하나에서 얼마나 많은 정보를 짜낼 것인가”라는 다른 문제로 수렴한다.</p> <h1 id="conclusion">Conclusion</h1> <p>핵심을 세 줄로 정리하면 다음과 같다.</p> <ol> <li><strong>WebAgent-R1</strong>은 규칙 기반 이진 보상 하나로 M-GRPO를 굴려 Qwen2.5-3B를 6.1%→33.9%, Llama3.1-8B를 8.5%→44.8%까지 끌어올렸다. BC 웜업 없이는 이 개선이 나오지 않는다는 것을 어블레이션으로 직접 확인했다.</li> <li><strong>PAE</strong>는 태스크 생성 자체를 자율화해, 사람이 만든 시연 데이터로 학습한 모델보다 최대 30% 상대 개선을 이끌어냈고, 아웃컴 전용 판정자가 스텝·함수 기반 판정자보다 나은 이유를 어블레이션으로 검증했다.</li> <li><strong>DigiRL</strong>은 환경 비결정성을 doubly-robust advantage 추정기와 자동 커리큘럼으로 정면 대응해, Android 기기 제어에서 17.7%→67.2%(Web Shopping)의 개선을 만들었다.</li> </ol> <p>이 도메인의 근본적인 어려움은 바뀌지 않는다 — 보상은 여전히 희소하고, 환경은 여전히 비결정적이다. 세 논문이 보여준 것은 이 조건을 “받아들이되 관리하는” 구체적인 방법이다: 성공률을 학습 가능한 영역까지 끌어올리고(BC, Filtered BC), 판정을 가장 쉬운 질문(최종 성공/실패)으로 좁히고, 비결정성을 노이즈가 아니라 추정 수식의 파라미터로 다룬다. 12부 세 편을 관통하는 결론은, 도메인마다 신호의 밀도는 다르지만 credit assignment 문제 자체는 사라지지 않고 형태만 바뀐다는 것이다 — 코드에서는 “어느 파일이 실패를 유발했는가”였던 질문이, 웹에서는 “이진 결과 하나에서 어느 스텝을 탓할 것인가”로 바뀔 뿐이다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Wei et al., EMNLP 2025. <a href="https://arxiv.org/abs/2505.16421">WebAgent-R1: Training Web Agents via End-to-End Multi-Turn Reinforcement Learning</a>.</li> <li>Zhou et al., arXiv 2024. <a href="https://arxiv.org/abs/2412.13194">Proposer-Agent-Evaluator (PAE): Autonomous Skill Discovery for Foundation Model Internet Agents</a>.</li> <li>Bai et al., NeurIPS 2024. <a href="https://arxiv.org/abs/2406.11896">DigiRL: Training In-The-Wild Device-Control Agents with Autonomous Reinforcement Learning</a>.</li> <li>Qi et al., ICLR 2025. <a href="https://openreview.net/">WebRL: Training LLM Web Agents via Self-Evolving Online Curriculum Reinforcement Learning</a> — WebAgent-R1·DigiRL이 비교 베이스라인으로 사용.</li> <li>Zhou et al., ICLR 2024. <a href="https://arxiv.org/abs/2307.13854">WebArena: A Realistic Web Environment for Building Autonomous Agents</a> — WebArena-Lite의 원 벤치마크. 벤치마크 상세는 Red-Teaming 시리즈를 참고.</li> <li>He et al., ACL 2024. <a href="https://arxiv.org/abs/2401.13919">WebVoyager: Building an End-to-End Web Agent with Large Multimodal Models</a> — PAE의 평가 벤치마크.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰일곱 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><strong>(현재 글)</strong> 웹·GUI 에이전트 — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="agentic-rl"/><category term="reinforcement-learning"/><category term="web-agent"/><category term="gui-agent"/><category term="credit-assignment"/><category term="reward-hacking"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #57 — 신호가 가장 척박한 도메인에서 end-to-end 멀티턴 RL이 웹·GUI 에이전트를 학습시키는 법 (WebAgent-R1, PAE, DigiRL)]]></summary></entry><entry><title type="html">코드 에이전트 — SWE-RL과 테스트라는 reward</title><link href="https://www.wonbeomjang.kr/blog/2026/swe-agent-rl/" rel="alternate" type="text/html" title="코드 에이전트 — SWE-RL과 테스트라는 reward"/><published>2026-08-11T00:56:00+00:00</published><updated>2026-08-11T00:56:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/swe-agent-rl</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/swe-agent-rl/"><![CDATA[<blockquote> <p><a href="https://arxiv.org/abs/2502.18449">SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution</a> (Wei et al., Meta AI, NeurIPS 2025)</p> </blockquote> <h1 id="introduction">Introduction</h1> <p>이 시리즈 <a href="/blog/2026/environment-as-reward/">#52</a>에서 “환경이 곧 reward”라는 명제를 다뤘다. 게임처럼 승패가 명확한 환경, 컴파일러처럼 통과/실패가 분명한 환경일수록 reward hacking의 여지가 줄어든다는 이야기였다. 코드 에이전트는 이 명제가 가장 강력하게 적용될 것 같은 도메인이다. 소프트웨어 이슈를 고치는 문제에는 <strong>테스트</strong>라는, 사람이 이미 만들어둔 자동화된 판정자가 딸려 있기 때문이다. 사람의 취향을 학습해야 하는 judge도, 애매한 rubric도 필요 없다. 코드를 고치고, 테스트를 돌리고, 초록 불이 켜지면 끝이다.</p> <p>그런데 실제로 이 편을 조사하면서 나온 논문 네 편을 읽다 보면 이상한 패턴이 반복된다. <strong>테스트가 있는데도 그 논문들 중 어느 것도 “테스트 통과를 reward로 삼아 policy gradient를 직접 돌린다”는 가장 단순한 방식을 쓰지 않는다.</strong></p> <ul> <li><a href="https://arxiv.org/abs/2502.18449">SWE-RL</a>(Meta)은 GRPO로 진짜 RL을 돌리긴 하는데, reward가 테스트 통과가 아니라 <strong>정답 patch와의 텍스트 유사도</strong>다.</li> <li><a href="https://arxiv.org/abs/2412.21139">SWE-Gym</a>(UC Berkeley 등)은 진짜 실행 가능한 환경 2,438개를 만들었지만, 그 reward로 하는 학습은 policy gradient가 아니라 <strong>성공한 궤적만 골라 SFT하는 rejection sampling</strong>이다.</li> <li><a href="https://arxiv.org/abs/2504.07164">R2E-Gym</a>(UC Berkeley)도 마찬가지로 policy는 SFT로 학습하고, 테스트 실행은 <strong>추론 시점에 여러 patch 후보 중 하나를 고르는 재채점기</strong>로만 쓴다.</li> <li>그리고 최근 나온 감사 논문 <a href="https://arxiv.org/abs/2606.16062">Rajan (2026)</a>은 애초에 SWE-bench류 테스트의 <strong>28.5%가 오답 patch도 통과시킬 만큼 허술하다</strong>는 것을 직접 재서, “테스트가 있다”는 전제 자체를 흔든다.</li> </ul> <p>이 편의 논점은 이거다. 테스트라는 조달처는 이 도메인을 “가장 축복받은 경우”로 만들어주지만, 그 축복은 공짜가 아니다. <strong>① 테스트 통과는 이진값이고 100턴짜리 궤적 끝에야 나온다는 희소성, ② 테스트 커버리지가 부실하면 그 자체가 판정 정의의 구멍이 된다는 취약성, ③ 그래서 이 도메인의 대표 논문들이 실제로는 테스트를 reward로 직접 쓰기를 주저한다는 사실</strong> — 이 세 가지를 논문 네 편의 구체적 설계와 숫자로 따라가 본다.</p> <h1 id="background">Background</h1> <h2 id="이-도메인에서-세-조달처가-섞이는-방식">이 도메인에서 세 조달처가 섞이는 방식</h2> <p>RL Reward 설계 시리즈와 이 시리즈(<a href="/blog/2026/environment-as-reward/">#52</a>, <a href="/blog/2026/tool-call-reward/">#53</a>, <a href="/blog/2026/agentic-judge-rubric/">#54</a>)에서 reward의 조달처를 셋으로 나눴다 — 환경 검증, 도구 신호, judge 채점. 코드 에이전트는 이 셋이 특히 뚜렷하게 분리되어 나타나는 도메인이다.</p> <ol> <li><strong>환경</strong>: 코드를 실제로 실행해서 테스트가 통과하는지 보는 것. 가장 신뢰도가 높지만 비용이 크고(Docker 컨테이너를 띄우고, 의존성을 설치하고, 테스트 스위트를 돌려야 한다) 판정의 질이 테스트 자체의 질에 종속된다.</li> <li><strong>도구</strong>: 파일 편집, bash 명령 실행, 검색 같은 개별 행동이 형식적으로 성공했는지. “diff가 문법적으로 유효한 patch인가”, “명령어가 에러 없이 끝났는가” 같은 낮은 수준의 신호다.</li> <li><strong>judge</strong>: LLM이 patch나 궤적 전체를 보고 “이게 이슈를 해결했을 것 같다”고 점수를 매기는 것. 실행 없이도 채점할 수 있어 빠르지만, 텍스트의 그럴듯함에 속기 쉽다.</li> </ol> <p>이 편에서 다루는 네 논문은 이 셋을 서로 다르게 조합한다. SWE-RL은 환경을 아예 포기하고 규칙 기반 유사도로 대체했고, SWE-Gym은 환경 신호를 얻긴 하지만 policy gradient가 아니라 궤적 필터로만 쓴다. R2E-Gym은 환경(execution-based verifier)과 judge(execution-free verifier)를 나란히 학습시킨 뒤 둘을 섞는다. 이 조합 방식의 차이가 이 편의 실질적인 내용이다.</p> <p>도구 신호는 이 편에서 상대적으로 조용하지만 완전히 없지는 않다. SWE-RL의 reward 정의에서 “포맷을 어기면 무조건 \(-1\)“이라는 항이 바로 도구 수준 신호다 — patch가 애초에 diff로 파싱 가능한 형태인지는 이슈를 실제로 고쳤는지와 무관하게 판단할 수 있는, 가장 값싼 검사다. SWE-RL 논문이 SFT(96.2%)와 RL(95.6%)의 “correct format” 비율을 수정 점수와 별도로 보고하는 것도 같은 이유다 — 형식이라는 값싼 신호와 실제 해결이라는 비싼 신호를 분리해서 보고해야, 어느 쪽이 좋아졌는지가 뒤섞이지 않는다.</p> <h2 id="swe-bench의-판정-프로토콜은-이미-다른-시리즈에서">SWE-bench의 판정 프로토콜은 이미 다른 시리즈에서</h2> <p>SWE-bench 자체 — 12개 레포지토리에서 뽑은 2,294개의 실제 GitHub 이슈, 리더보드 구성 — 는 이 블로그의 다른 시리즈에서 벤치마크 자체의 각도로 다뤘다(Jimenez et al., Princeton, ICLR 2024). 자세한 내용은 <a href="/blog/2026/math-code-benchmarks/">LLM 평가 체계 시리즈의 수학·코드 벤치마크 편</a>을 참고하고, 이 글에서는 그중 RL의 reward 원천으로서 중요한 사실 두 가지만 가져온다.</p> <p>첫째, 판정은 두 종류 테스트의 조합이다. <strong>FAIL_TO_PASS</strong>는 이슈가 고쳐지기 전에는 실패하다가 정답 patch를 적용하면 통과하는 테스트 — “이 버그가 실제로 고쳐졌는가”를 직접 확인한다. <strong>PASS_TO_PASS</strong>는 원래도 통과하던 테스트인데 patch를 적용한 뒤에도 여전히 통과해야 하는 것 — “고치는 김에 다른 걸 망가뜨리지 않았는가”를 확인한다. 모델의 patch가 통과로 인정되려면 이 둘을 <strong>동시에</strong> 만족해야 한다. 이 이중 조건이 뒤에 나올 “회귀 테스트 필터” 같은 방어 장치의 원형이다.</p> <p>둘째, 모델이 만든 patch는 코드베이스에 적용되고, 그 위에 <strong>정답 test_patch(새/수정된 테스트)가 별도로 적용</strong>된 뒤 테스트가 돌아간다. 즉 모델은 애초에 테스트 파일 자체를 생성 대상으로 보지 않는다 — 이슈를 고치는 patch만 낸다. 이 분리 구조가 “테스트 파일을 고쳐서 통과시키는” 가장 노골적인 해킹을 원천 차단한다(단, SWE-RL·SWE-Gym·R2E-Gym처럼 자체 환경을 만드는 경우는 이 보장이 논문마다 다시 설계해야 하는 문제로 돌아온다 — 뒤에서 다룬다).</p> <h2 id="왜-테스트-통과는-희소한-신호인가">왜 테스트 통과는 희소한 신호인가</h2> <p><a href="/blog/2026/outcome-vs-process-agentic/">#47</a>에서 결과 reward의 근본 문제를 다뤘다. 코드 에이전트에 대입하면 이렇다. 궤적 하나가 파일 탐색, 버그 위치 특정, 코드 편집, (있다면) 재현 테스트 작성과 실행까지 수십 턴을 거친다. 그런데 “진짜” 판정 — SWE-bench의 FAIL_TO_PASS/PASS_TO_PASS 테스트 — 은 이 모든 턴이 끝나고 최종 patch가 나온 뒤에야 실행된다. 궤적 전체가 하나의 이진값 하나로 붕괴한다는 뜻이다.</p> \[R(\tau) = \mathbb{1}[\text{모든 FAIL\_TO\_PASS 테스트 통과} \wedge \text{모든 PASS\_TO\_PASS 테스트 유지}]\] <p>\(\tau\)는 궤적, \(\mathbb{1}[\cdot]\)은 지시함수다. 30번째 턴에서 엉뚱한 파일을 열어본 실수도, 55번째 턴의 결정적인 버그 발견도 이 하나의 스칼라 안에서 구별되지 않는다. 이 문제를 여러 입도(턴·스텝·토큰)로 쪼개 credit을 나누는 것이 이 시리즈 10부(<a href="/blog/2026/turn-level-reward/">#48</a>~<a href="/blog/2026/reward-shaping-agentic/">#51</a>)의 주제였다. 이 편의 네 논문은 사실 이 문제를 정면으로 풀기보다, <strong>애초에 이 이진 신호를 얼마나 자주, 어떻게 우회하는가</strong>로 답한다는 점이 흥미롭다.</p> <h2 id="긴-궤적이-credit에-미치는-영향--수십-턴-2만-토큰">긴 궤적이 credit에 미치는 영향 — 수십 턴, 2만 토큰</h2> <p>코드 에이전트 궤적이 실제로 얼마나 긴지 감을 잡아보자. SWE-Gym이 rejection sampling으로 모은 성공 궤적 491건은 평균 <strong>약 19턴, 약 19,000토큰</strong>이었다. 파일을 열어보고, grep으로 관련 코드를 찾고, 수정하고, 다시 확인하는 과정을 19번 반복한 끝에야 patch 하나가 나온다는 뜻이다. 책 한 권을 처음부터 끝까지 다 읽게 시켜놓고 마지막 페이지 한 줄만 보고 “이 책 재미있었는지”를 채점하는 것과 비슷하다 — 중간에 어디서 흥미를 잃었는지, 어디서 결정적인 복선을 놓쳤는지는 그 한 줄에 전혀 드러나지 않는다.</p> <p>이 길이는 학습 설계에 직접 영향을 준다. SWE-RL은 정책을 16k 컨텍스트로 학습시켰는데, 굳이 파일 전체 내용을 프롬프트에 통째로 넣는 방식을 택한 이유도 여기 있다 — Agentless의 원래 방식대로 위치 특정을 여러 단계로 나누면 그 자체가 또 하나의 긴 궤적이 되어 credit이 흩어진다. 파일 전체를 한 번에 주고 “이 안에서 어디를 고칠지 스스로 추론하라”고 맡기면, 최소한 위치 특정과 수정을 하나의 reasoning 블록 안에 욱여넣어 궤적 길이 자체를 줄일 수 있다. 컨텍스트 관리가 credit assignment 문제를 우회하는 한 가지 실전적인 수단인 셈이다 — 이 트레이드오프는 <a href="/blog/2026/multi-turn-rl-practice/">#46</a>에서 다룬 멀티턴 RL 실무의 핵심 고민과 정확히 같은 결이다.</p> <p>반대로 궤적을 줄이지 않고 그대로 감당하려는 방향도 있다. 최근 나온 SkyRL-Agent(Cao et al., 2025)는 비동기 롤아웃 디스패처로 긴 궤적을 병렬로 굴리는 인프라를 만들어, 순수 RL만으로 학습한 32B 모델(SA-SWE-32B)이 SWE-bench Verified pass@1 39.4%를 내면서도 비슷한 성능의 기존 모델보다 학습 비용을 2배 넘게 줄였다고 보고한다. 궤적을 짧게 자르는 대신 “긴 궤적을 저렴하게 많이 굴리는” 쪽으로 문제를 우회한 사례다. 두 접근(컨텍스트를 압축해 궤적을 줄이는 SWE-RL과, 인프라를 최적화해 긴 궤적의 비용을 낮추는 SkyRL-Agent) 모두 “궤적 끝의 이진 신호 하나로는 부족하다”는 같은 진단에서 출발한 서로 다른 처방이다.</p> <h1 id="method">Method</h1> <h2 id="swe-rl--reward는-테스트가-아니라-patch-유사도다">SWE-RL — reward는 테스트가 아니라 patch 유사도다</h2> <p><a href="https://arxiv.org/abs/2502.18449">SWE-RL</a>(Wei et al., Meta AI, NeurIPS 2025)은 이름과 달리 테스트를 reward로 쓰지 않는다. 저자들이 명시적으로 밝히는 이유는 실행 비용이다. 학습에 쓴 시드 데이터셋은 GitHub PR 273,000건에서 뽑은 이슈-패치 쌍인데, 이 규모에서 매 rollout마다 Docker 환경을 띄워 테스트를 실행하는 것은 감당하기 어렵다. 코드 자체가 실행 가능한 자기완결적 환경(경쟁 프로그래밍 문제처럼)이 아니라 임의의 레포지토리라는 점도 문제를 키운다.</p> <p>그래서 SWE-RL은 규칙 기반이되 실행이 필요 없는 reward를 골랐다. Policy LLM이 이슈와 코드 컨텍스트를 보고 검색/치환(search/replace) 형태의 코드 수정을 추론해 생성하면, 이를 patch 포맷으로 변환한 뒤 정답 patch와 비교한다.</p> \[\mathcal{R}(o) = \begin{cases} -1 &amp; \text{if } o \text{ 가 포맷을 어겼을 때} \\ \mathrm{sim}(p_{pred}, p_{gt}) &amp; \text{그 외} \end{cases}\] <p>여기서 \(o\)는 policy가 생성한 응답, \(p_{pred}\)는 거기서 뽑아낸 predicted patch, \(p_{gt}\)는 PR에 실제로 merge된 oracle patch다. \(\mathrm{sim}\)은 파이썬 표준 라이브러리 <code class="language-plaintext highlighter-rouge">difflib.SequenceMatcher</code> — Gestalt 패턴 매칭 기반의 시퀀스 유사도로, 0에서 1 사이 연속값을 낸다. 두 문자열에서 겹치는 블록의 길이 비율이라고 생각하면 된다. 포맷을 어기면 무조건 \(-1\)이고, 그 외에는 테스트 실행 없이 텍스트 비교만으로 점수가 나온다.</p> <p>비유하자면 이렇다. 첨삭 선생님이 학생 답안을 채점할 때, 문제를 실제로 다시 풀어보는 대신 모범답안과 학생 답안을 나란히 놓고 <strong>글자가 얼마나 겹치는지</strong>만 세는 것과 같다. 손이 훨씬 덜 가고(코드를 실행할 필요가 없으니 273,000건 규모로도 확장된다), 부분 점수도 자연스럽게 나온다(한 줄만 틀렸으면 그만큼만 감점). 다만 학생이 모범답안과 다른 방식으로 정답을 냈을 때 낮은 점수를 줄 위험, 반대로 모범답안과 글자는 비슷한데 틀린 답에 후한 점수를 줄 위험을 함께 안고 간다.</p> <p>Policy는 Llama-3.3-70B-Instruct에서 시작해 GRPO로 1,600 스텝, 16k 컨텍스트, 글로벌 배치 512(문제 32개 × rollout 16개)로 512장의 H100에서 약 32시간 학습했다. 평가는 Agentless를 단순화한 Agentless Mini 파이프라인 위에서 하는데, 원래 Agentless의 다단계 위치 특정 대신 파일 전체 내용을 프롬프트에 넣어 위치 특정 부담을 줄이고 policy가 수정 자체에 더 집중하게 만들었다.</p> <p><strong>결과.</strong> Llama3-SWE-RL-70B는 SWE-bench Verified에서 pass@1 41.0%를 냈다. 100B 미만 모델 중 최고 기록이고, GPT-4o + Agentless(38.8%)와 비슷한 수준이다.</p> <table> <thead> <tr> <th>모델</th> <th>스캐폴드</th> <th>SWE-bench Verified</th> </tr> </thead> <tbody> <tr> <td>SWE-Gym-32B</td> <td>OpenHands</td> <td>32.0</td> </tr> <tr> <td>SWE-Fixer-72B</td> <td>SWE-Fixer</td> <td>32.8</td> </tr> <tr> <td>Llama3-SWE-SFT-70B (같은 논문의 SFT 베이스라인)</td> <td>Agentless Mini</td> <td>36.2</td> </tr> <tr> <td>GPT-4o</td> <td>Agentless</td> <td>38.8</td> </tr> <tr> <td><strong>Llama3-SWE-RL-70B</strong></td> <td><strong>Agentless Mini</strong></td> <td><strong>41.0</strong></td> </tr> <tr> <td>o1-preview</td> <td>Agentless</td> <td>41.3</td> </tr> <tr> <td>DeepSeek-V3</td> <td>Agentless</td> <td>42.0</td> </tr> <tr> <td>Claude-3.5-Sonnet</td> <td>Agentless</td> <td>50.8</td> </tr> </tbody> </table> <p>오라클 위치(정답 파일이 어딘지 이미 알려준 상태)에서 순수 수정 능력만 비교한 실험(Table 2)이 더 흥미롭다. 베이스 Llama-3.3은 greedy decoding에서 포맷을 12.2%만 맞추고 수정 점수(0~100 스케일 서술형)는 5.4에 불과했다. SFT는 포맷 정확도를 96.2%까지 끌어올리고 점수도 29.6까지 올렸다. 그런데 SWE-RL은 포맷 정확도가 95.6%로 SFT보다 살짝 낮은데도 점수는 34.8로 더 높다. <strong>형식을 더 잘 지키는 것과 실제로 더 잘 고치는 것이 다르다</strong>는 걸 보여주는 대목이다.</p> <p><strong>reward를 이진으로 바꾸면 어떻게 되나 — 논문 자체의 ablation.</strong> SWE-RL 저자들은 §3.6에서 정확히 이 편의 질문을 스스로 실험했다. 연속값 유사도 대신 “정답과 완전히 일치하면 1, 아니면 0”인 이산(discrete) reward로 똑같은 GRPO를 돌린 것이다. 결과는 이산 reward 쪽이 전반적으로 더 나빴다(포맷 94.2% vs 95.6%, 수정 점수 29.0 vs 34.8). 더 결정적인 관찰은 학습이 끝날 때까지 <strong>이산 reward의 평균값이 거의 0에 머문다</strong>는 것이다 — 실제 patch는 워낙 다양해서 정답과 완전히 같은 문자열을 만드는 rollout이 거의 없기 때문이다. 이건 이 시리즈가 반복해서 말하는 “결과 reward의 스파스함”(<a href="/blog/2026/outcome-vs-process-agentic/">#47</a>)이 코드 도메인 안에서, 심지어 테스트 실행조차 없는 순수 텍스트 비교에서도 그대로 재현된다는 뜻이다. 이진 판정이 문제의 본질이지, 실행 여부가 문제의 본질이 아니라는 얘기다.</p> <p><strong>샘플 수를 늘리면 어디까지 오르나.</strong> Agentless Mini는 여러 patch 후보와 재현 테스트를 함께 늘려 재순위화할 수 있게 설계됐다. Repair 샘플을 20개에서 160개로 늘리면 33.6%에서 40.0%로 크게 뛰지만, 그 이상(320~500개)은 41.0%까지 완만하게만 오른다. 재현 테스트도 1개에서 20개까지 늘리면 38.8%에서 41.0%로 오르고 20~30개 구간에서는 차이가 없다 — 두 축 모두 이른 구간에서 이득이 크고 이후 saturate하는, RL 분야에서 익숙한 수확체감 곡선이다.</p> <p><strong>도메인 밖에서도 통한다 — OOD 일반화.</strong> SWE-RL은 이슈 해결이라는 단일 과제로만 학습했는데도, 학습에 전혀 없던 다섯 개 벤치마크에서 흥미로운 패턴을 보인다.</p> <table> <thead> <tr> <th>벤치마크</th> <th>베이스(Llama-3.3-70B)</th> <th>SFT</th> <th>SWE-RL</th> </tr> </thead> <tbody> <tr> <td>HumanEval+(함수 코딩)</td> <td>76.2</td> <td>73.2</td> <td>79.9</td> </tr> <tr> <td>CRUXEval-I(코드 추론)</td> <td>60.5</td> <td>68.4</td> <td>71.6</td> </tr> <tr> <td>CRUXEval-O(코드 추론)</td> <td>61.9</td> <td>75.1</td> <td>75.5</td> </tr> <tr> <td>MATH(엄격 채점)</td> <td>63.2</td> <td>54.0</td> <td>73.7</td> </tr> <tr> <td>MMLU(일반 지식)</td> <td>86.49</td> <td>85.26</td> <td>86.82</td> </tr> </tbody> </table> <p>SFT는 이슈 해결 데이터에 맞춰 미세조정된 만큼 정작 MATH·MMLU 같은 도메인 밖 과제에서는 베이스 모델보다 <strong>떨어진다</strong>(MATH 63.2→54.0). 반면 RL로 학습한 SWE-RL은 같은 데이터로 학습했는데도 모든 항목에서 베이스를 웃돈다. 이슈 하나를 풀기 위해 근본 원인을 추론하는 훈련이, 좁은 패턴을 암기하는 게 아니라 일반적인 추론 능력 자체를 끌어올렸다는 저자들의 해석이다. 이 시리즈의 문맥에서 보면, <strong>결과 reward라도 그 reward가 요구하는 추론이 충분히 깊으면 일반화가 따라온다</strong>는 사례로 읽을 수 있다.</p> <p><strong>한계 — 저자들이 직접 밝힌 것.</strong> 이 reward는 두 patch의 텍스트 유사도이지 기능적 동치성이 아니다. 논문 스스로 이 점을 한계로 명시한다 — 정답과 기능은 같지만 표현이 다른 대안 해법을 탐색할 유인이 없다는 것이다. 뒤집어 말하면, 표현은 정답과 비슷한데 기능은 다른 patch에 부분 점수를 줄 위험도 구조적으로 안고 있다는 뜻이다(이 문제는 뒤의 Experiments에서 숫자로 다시 짚는다).</p> <h2 id="swe-gym--진짜-실행-환경을-만들고-그-reward로는-아직-rl을-안-한다">SWE-Gym — 진짜 실행 환경을 만들고, 그 reward로는 아직 RL을 안 한다</h2> <p><a href="https://arxiv.org/abs/2412.21139">SWE-Gym</a>(Pan et al., UC Berkeley 등, ICML 2025)은 SWE-RL과 정반대 선택을 한다. 텍스트 유사도 대신 <strong>진짜 실행 가능한 환경</strong>을 만들었다. 11개 오픈소스 Python 레포지토리(SWE-bench와 겹치지 않는 레포를 골라 오염을 피했다)에서 2,438개의 과제를 큐레이션했는데, 각 과제는 의존성이 설치된 실행 환경, 전문가가 검증한 단위 테스트, 자연어 이슈 설명을 모두 갖춘다. 더 쉬운 부분집합인 SWE-Gym Lite(230개)와, 실행 환경 없이 이슈-패치 쌍만 있는 대규모 SWE-Gym Raw(64,689개, 358개 레포)도 함께 공개했다.</p> <p>이 환경이 왜 필요했는지는 저자들이 정리한 기존 자원 비교표를 보면 분명해진다.</p> <table> <thead> <tr> <th>자원</th> <th>레포지토리 수준</th> <th>실행 환경</th> <th>실제 사람 과제</th> </tr> </thead> <tbody> <tr> <td>APPS</td> <td>아니오</td> <td>있음</td> <td>있음</td> </tr> <tr> <td>HumanEval</td> <td>아니오</td> <td>있음</td> <td>있음</td> </tr> <tr> <td>R2E(2024년 판)</td> <td>있음</td> <td>있음</td> <td>아니오(합성)</td> </tr> <tr> <td>SWE-bench(train split)</td> <td>있음</td> <td>없음</td> <td>있음</td> </tr> <tr> <td><strong>SWE-Gym</strong></td> <td><strong>있음</strong></td> <td><strong>있음</strong></td> <td><strong>있음</strong></td> </tr> </tbody> </table> <p>기존 자원들은 셋 중 하나씩은 포기하고 있었다 — APPS·HumanEval은 레포지토리 수준의 복잡성이 없는 독립된 함수 문제고, R2E는 실행 환경은 있지만 합성 과제라 사람이 실제로 겪은 문제가 아니고, SWE-bench의 학습용 분할(train split)은 실제 이슈-패치 쌍은 있지만 실행 환경이 없어 지도학습 이상으로는 쓸 수 없었다. SWE-Gym은 이 세 조건을 동시에 만족시킨 첫 자원이라는 게 논문의 핵심 기여다.</p> <p>그런데 이 환경으로 policy를 개선하는 방법은 policy gradient가 아니라 <strong>rejection sampling fine-tuning</strong>(filtered behavior cloning이라고도 부른다)이다. GPT-4o와 Claude-3.5-Sonnet으로 SWE-Gym 위에서 rollout을 여러 번 굴려 테스트를 통과한 궤적만 골라내고(491건), 그 성공 궤적으로 Qwen2.5-Coder를 지도학습한다. 저자들 스스로 이렇게 적는다 — “PPO 같은 더 발전된 policy optimization 방법을 쓰면 더 나은 결과를 얻을 수 있을 것으로 가정한다. 이는 향후 연구 과제로 남긴다.” 즉 SWE-Gym이라는 논문 자체는 실행 결과를 reward로 삼아 policy gradient를 돌리는 실험을 하지 않았다.</p> <p><strong>결과.</strong> OpenHands 스캐폴드에서 32B 모델은 zero-shot 7.0% → fine-tuned 20.6%(SWE-bench Verified, +13.6%p)로 뛴다. 성공한 궤적으로만 학습했는데도 loop에 갇히는 비율(같은 행동을 3번 이상 반복)이 29.4%에서 크게 줄어드는 부수 효과도 있었다.</p> <table> <thead> <tr> <th>모델 크기</th> <th>zero-shot</th> <th>fine-tuned</th> <th>증가폭</th> </tr> </thead> <tbody> <tr> <td>7B</td> <td>1.8%</td> <td>10.6%</td> <td>+8.8%p</td> </tr> <tr> <td>14B</td> <td>4.0%</td> <td>16.4%</td> <td>+12.4%p</td> </tr> <tr> <td>32B</td> <td>7.0%</td> <td>20.6%</td> <td>+13.6%p</td> </tr> </tbody> </table> <p><strong>자기개선은 아직 안 통한다.</strong> 흥미로운 실패 사례가 하나 있다. Teacher 모델(GPT-4o/Claude) 대신 방금 fine-tuning된 32B 모델 자신으로 rollout을 새로 뽑아(온폴리시 868건) 기존 491건과 섞어 다시 학습시켰더니, SWE-Bench Lite 점수가 15.3%에서 8.7%로 <strong>떨어졌다</strong>. 저자들은 이를 policy optimization 방법의 한계(역시 PPO 부재)나 베이스 모델의 역량 부족 탓으로 돌린다. 테스트라는 검증 가능한 reward가 있어도, 그 reward로 자기 자신의 출력을 다시 학습하는 루프는 저절로 좋아지지 않는다는 실증 사례다.</p> <p>행동 반경이 좁은 스캐폴드에서는 자기개선이 아주 조금은 통하기도 한다. 위치 특정·수정·재랭킹처럼 정해진 단계만 밟는 MoatlessTools 스캐폴드로, 30개의 고온도(temperature 1.0) rollout을 굴려 성공 궤적만 학습에 추가하는 과정을 반복했더니 7B 모델은 7.0% → 9.0% → 10.0%(2회 반복), 32B 모델은 19.0% → 19.7%로 오르고 그 뒤로는 개선이 없었다(SWE-Bench Lite 기준). OpenHands처럼 자유도가 높은 스캐폴드에서는 자기개선이 오히려 역효과였는데, 행동 공간을 좁혀 놓은 스캐폴드에서는 최소한 나빠지지는 않는다 — 다만 그 이득도 두 번째 반복부터는 사실상 없다.</p> <p><strong>부분 통과의 함정 — 쉬운 문제 편향.</strong> SWE-Gym이 직접 부딪힌 또 다른 문제가 이 편의 핵심 논점과 정확히 겹친다. 반복 샘플링을 하면 과제별 성공 확률이 롱테일 분포를 그린다 — 쉬운 과제는 여러 번 성공하고 어려운 과제는 거의 성공하지 못한다. 성공한 궤적을 전부 학습에 쓰면 데이터가 쉬운 과제 쪽으로 심하게 쏠린다. 이를 완화하려고 과제당 채택하는 성공 궤적 수에 상한(cap)을 두는 <strong>per-instance capping</strong>을 도입했는데, 실험적으로 상한 2가 가장 균형이 좋았다. 낮은 상한은 데이터가 너무 줄고, 높은 상한은 쉬운 과제로 분포가 기운다.</p> <p><strong>검증기(verifier)로 추론 시점을 채점한다.</strong> SWE-Gym은 정책 학습과 별개로, 궤적이 성공했는지를 스스로 판단하는 <strong>outcome-supervised reward model(ORM)</strong>도 학습시킨다. 문제 설명·궤적·현재 git diff를 입력받아 <code class="language-plaintext highlighter-rouge">&lt;YES&gt;</code>/<code class="language-plaintext highlighter-rouge">&lt;NO&gt;</code> 토큰의 로그확률로 스칼라 점수를 낸다.</p> \[r = \frac{\exp(l_y)}{\exp(l_y) + \exp(l_n)}\] <p>\(l_y\), \(l_n\)은 각각 <code class="language-plaintext highlighter-rouge">&lt;YES&gt;</code>, <code class="language-plaintext highlighter-rouge">&lt;NO&gt;</code> 토큰의 로그확률이다. 이 verifier로 여러 rollout 중 가장 점수가 높은 것을 고르는 Best@k를 하면 32.0%(k=16)까지 오른다. Pass@k(k개 중 하나라도 맞으면 성공, 상한선 역할)는 37.8%까지 오르는데, Best@k가 이보다 낮다는 것은 verifier 자체의 정확도가 완벽하지 않다는 뜻이다 — verifier도 결국 학습된 근사치라는 한계가 그대로 드러난다.</p> <p>verifier를 무엇으로 학습시키는지도 성능을 좌우한다. off-policy(teacher 모델) 궤적과 on-policy(방금 fine-tuning된 모델 자신) 궤적을 섞어 학습한 verifier가 27@8을 냈는데, on-policy 데이터만 쓰면 개선폭이 뚜렷이 줄고, off-policy 데이터만 쓰면 22% 부근에서 일찍 saturate했다. 정책 학습에서는 on-policy 데이터를 섞는 자기개선이 오히려 해가 됐는데(15.3%→8.7%), verifier 학습에서는 정반대로 온-오프폴리시를 섞는 쪽이 최선이었다는 대비가 흥미롭다 — “무엇을 옳은 것으로 규정할지 배우는 문제(verifier)”와 “그 규정에 맞춰 행동을 바꾸는 문제(policy)”가 자기참조 데이터에 반응하는 방식이 다르다는 뜻으로 읽을 수 있다.</p> <h2 id="r2e-gym--하이브리드-verifier로-테스트의-약점을-실측하다">R2E-Gym — 하이브리드 verifier로 테스트의 약점을 실측하다</h2> <p><a href="https://arxiv.org/abs/2504.07164">R2E-Gym</a>(Jain et al., UC Berkeley·ANU, 2025년 4월 preprint — 논문 자체 페이지에 “Preprint. Under review.”라고 명시되어 있어 확정된 학회 venue는 없다)은 SWE-Gym과 같은 방향이지만 두 가지를 더 밀어붙인다. 하나는 실행 환경을 사람 손 없이 더 크게 만드는 것(SWEGen), 다른 하나는 그렇게 만든 실행 신호와 LLM 판단을 <strong>섞어서 쓰는 것</strong>이다.</p> <p><strong>환경 생성.</strong> SWEGen은 커밋에서 직접 테스트 생성과 back-translation을 해서 사람이 쓴 이슈나 테스트에 기대지 않고 실행 가능한 과제를 만든다. 이렇게 8.1천 개 이상의 과제(본문 기준. 초록에는 8.7K로 표기되어 있어 소폭 불일치가 있다)를 확보했다. Policy 학습 자체는 R2E-Gym도 SWE-Gym과 마찬가지로 <strong>수집된 궤적에 대한 지도학습(SFT)</strong>이다 — 이 SFT만으로 R2E-Gym-32B는 pass@1 34.4%를 낸다.</p> <p><strong>하이브리드 verifier — 이 논문의 핵심.</strong> R2E-Gym이 새로 보여주는 것은 추론 시점에 patch 후보를 재채점하는 두 방식의 강점과 약점을 정량적으로 비교했다는 점이다.</p> <p><em>Execution-based(EB) verifier.</em> 테스트 생성 전용 에이전트가 재현 테스트 10개를 만들고, 회귀 테스트로 기존 기능을 깨는 patch를 걸러낸다.</p> \[s_k^{EB} = \begin{cases} \text{TestScore}_k &amp; \text{if } RS_k = \max_j RS_j \\ 0 &amp; \text{그 외} \end{cases}, \quad \text{TestScore}_k = \sum_i \mathrm{Pass}(P_k, T_i)\] <p>\(RS_k\)는 \(k\)번째 patch의 회귀 테스트 점수이고, 회귀 점수가 최고인 patch들 중에서만 생성 테스트 통과 개수로 순위를 매긴다.</p> <p><em>Execution-free(EF) verifier.</em> SWE-Gym의 ORM과 같은 방식으로 궤적 전체를 보고 YES/NO 확률로 점수를 낸다: \(s^{EF} = P(\text{YES}) / (P(\text{YES}) + P(\text{NO}))\).</p> <p>두 verifier 모두 개별적으로는 Best@K가 42~43%에서 saturate한다. 여기서 두 가지 결정적 실측이 나온다.</p> <ul> <li><strong>실행 기반 verifier의 변별력 한계.</strong> 생성된 재현 테스트 중 정답과 오답 patch를 실제로 구별해내는 테스트는 대부분의 문제에서 <strong>20% 미만</strong>이다. 즉 재현 테스트 10개를 만들어도 8개 이상은 정답이든 오답이든 똑같이 통과하거나 똑같이 실패해서 순위를 가르는 데 아무 도움이 안 된다.</li> <li><strong>독성 테스트(toxic test).</strong> 일부 문제(소수지만 무시할 수 없는 비율)에서는 생성된 테스트가 오히려 오답 patch는 통과시키고 정답 patch는 실패시킨다 — 최대 전체 테스트의 10%까지. 이런 테스트가 하나만 섞여도 verifier의 순위가 뒤집힐 수 있다.</li> <li><strong>execution-free verifier는 patch가 아니라 “자신감”을 본다.</strong> 궤적에서 patch만 남기고 나머지(에이전트의 사고 과정)를 지우면 Best@26이 42.8%에서 37.6%로 떨어진다. Attention을 시각화해보면 verifier가 YES를 예측할 때 가장 크게 주목하는 부분이 실제 코드 diff가 아니라 에이전트가 스스로 남긴 마무리 문장 — 예컨대 “좋아, 이 수정으로 해결됐다”류의 자평 — 이었다. 실제로 sympy 저장소의 한 오답 궤적에서, 에이전트가 스스로 확신에 찬 어조로 요약하자 verifier가 그 문체에 이끌려 틀린 patch를 YES로 잘못 예측한 사례가 보고된다. 텍스트만 보고 채점하는 judge가 논리적 정합성보다 어조의 자신감에 반응할 수 있다는 것은 <a href="/blog/2026/agentic-judge-rubric/">#54</a>에서 다룬 judge 일반의 약점이 이 도메인에서도 그대로 나타난 것이다.</li> </ul> <p>이 두 관찰은 이 편의 논점을 정확히 실증한다. <strong>테스트 커버리지가 부실하면 판정 정의 자체에 구멍이 난다</strong>는 <a href="/blog/2026/environment-as-reward/">#52</a>의 명제가, 사람이 짠 SWE-bench 테스트가 아니라 <strong>에이전트가 스스로 생성한 재현 테스트</strong>에서 재현된 것이다.</p> <p><strong>그래서 나온 게 hybrid.</strong> Execution-free 점수로 먼저 상위 \(n\)개만 추리고, 그 안에서 execution-based 점수로 최종 순위를 매긴다.</p> \[s_k^{H} = \mathrm{Top}_n(s_k^{EF}) + s_k^{EB}, \quad \mathrm{Top}_n(s_k^{EF}) = \begin{cases} s_k^{EF} &amp; \text{if } s_k^{EF} \text{가 상위 } n\text{개 안에 들 때} \\ -\infty &amp; \text{그 외} \end{cases}\] <p>즉 execution-free가 “그럴듯한 후보”를 먼저 좁혀주고, execution-based가 그 안에서 “실제로 실행해보니 어떤가”로 최종 결정을 한다. 서류 전형으로 후보를 추린 뒤 실기 시험으로 최종 합격자를 가리는 채용 과정과 비슷하다 — 서류(execution-free)만으로는 실무 능력을 확신할 수 없고, 실기(execution-based)만 전원에게 보게 하면 비용도 크고 변별력 있는 문제를 낼 재간도 없다. 판정력이 약한 execution-based 신호를, 변별력은 있지만 편향될 수 있는 execution-free 신호로 보완하는 구조다. 이 조합으로 Best@26 51.0%까지 올라간다.</p> <p>이 51.0%가 어느 위치인지도 짚어두자. 논문이 함께 보고한 비교표(Table 4)에서 프론티어 독점 모델 쪽 상한은 훨씬 높다 — Claude-3.7-Sonnet + Tools가 62.3%(단일 시도), 여러 시도 중 하나라도 맞으면 인정하는 Best@Any 기준으로는 70.3%까지 간다. 즉 R2E-Gym의 51.0%는 “그 시점 오픈소스/오픈웨이트 중 최고”였다는 뜻이지, 이 도메인의 상한에 도달했다는 뜻은 아니다. 격차를 좁히는 힘은 policy 자체의 추론 능력에서도 오지만, 이 절만 놓고 보면 상당 부분이 “후보를 몇 개나, 얼마나 잘 골라내는가”라는 재채점 설계에서 나온다.</p> <p><strong>보강 실험 두 가지.</strong> 저자들은 이 설계가 최선인지도 따로 확인했다. 먼저 execution-based verifier에서 회귀 테스트만 쓰고 새로 생성한 재현 테스트를 빼면 성능이 뚜렷이 떨어진다 — 기존 기능을 안 깨는 것만으로는 부족하고, 애초에 버그를 재현해서 고쳐졌는지 직접 확인하는 테스트가 있어야 한다는 뜻이다. 다음으로 테스트 생성 에이전트에게 Django에서 가져온 예시 하나를 in-context로 보여줬더니, 형식을 지키지 못하거나 도메인 지식이 없어 실패하던 문제의 약 2%가 추가로 풀렸다. 작은 개선처럼 보이지만, “테스트를 생성하는 에이전트” 자체도 결국 프롬프트에 민감한 LLM이라는 걸 보여주는 대목이다 — 판정자를 하나 더 세워도 그 판정자 역시 완벽하지 않다.</p> <h2 id="reward-hackability-audit--테스트가-몇--뚫리는지-직접-잰다">Reward Hackability Audit — 테스트가 몇 % 뚫리는지 직접 잰다</h2> <p>앞의 세 논문이 테스트 신호의 약점을 우회하거나 보완하는 쪽이었다면, <a href="https://arxiv.org/abs/2606.16062">Rajan (2026)</a>의 “Auditing Reward Hackability in Code RL Training Environments”는 아예 <strong>그 약점의 크기를 직접 측정</strong>한다(단독 저자, 소속 정보 없음. 2026년 6월 공개된 preprint이며 확정된 학회 venue는 없다).</p> <p>방법은 단순하고 직접적이다. SWE-bench Verified에서 49개 과제를 뽑아, 각 과제마다 “정답이 아닌데 그 과제의 테스트는 통과하는” patch(exploit)를 프론티어 LLM(Claude Sonnet 4)으로 생성하도록 시도한다. 1라운드는 한 번에 만들고, 2~3라운드는 직전 실패 로그를 보여줘 “아직 이 테스트 스위트가 막지 못한 방식”을 노리도록 유도하는 반복 공격을 쓴다. Docker 컨테이너에서 실제로 실행해 통과하면 그 과제는 “hackable”로 표시한다. 1라운드 단발 시도만으로도 18.4%(9/49)가 뚫렸고, 2~3라운드 반복 공격이 5개 과제를 추가로 뚫어 최종 <strong>49개 중 14개, 28.5%</strong>에 도달했다. 같은 파이프라인을 R2E-Gym 과제 20개(6개 레포지토리)에도 단발 시도만으로 적용했더니 <strong>25.0%</strong>가 뚫렸다 — 저자 자체 도구로 만든 R2E-Gym의 실행 기반 테스트도 예외가 아니라는 뜻이고, 반복 공격까지 허용하면 이 수치는 더 올라갈 여지가 있다.</p> <p>이 감사가 과제를 KEEP(그대로 유지)/FIX(보강 필요)/DROP(폐기) 세 등급으로 나누는 데 쓰는 종합 점수도 눈여겨볼 만하다.</p> \[\mathrm{EQS}(t) = 0.35\,V(t) + 0.30\,(1 - H(t)) + 0.20\,F_1(t) + 0.15\,D(t)\] <p>\(t\)는 과제, \(V(t)\)는 후보 patch들 사이에서 verifier가 정답과 오답을 얼마나 잘 갈라내는지, \(H(t)\)는 앞서 설명한 exploit 파이프라인으로 측정한 경험적 해킹률, \(F_1(t)\)은 LLM judge와 실행 결과의 일치도, \(D(t)\)는 여러 모델의 실제 제출 성적에서 뽑은 학습 가능성 신호다. 가중치는 “직접적인 신호일수록 크게 반영한다”는 원칙으로 저자가 임의로 정했고 검증 데이터로 튜닝하지 않았다고 명시한다 — 이 편의 핵심 수치인 28.5%·25.0%·14.14%p는 이 가중치와 무관하게 \(H(t)\) 지표 자체에서 직접 나온 값이라는 점도 논문이 강조한다.</p> <p>더 흥미로운 건 이 취약성이 실제 리더보드 성적에 영향을 준다는 대규모 분석이다. SWE-bench Verified에 제출된 프론티어 모델 134개의 결과를 모아, 같은 난이도 구간 안에서 hackable로 표시된 과제와 그렇지 않은 과제의 pass@1을 비교했다. <strong>hackable 과제에서 pass@1이 평균 14.14%p 더 높았다</strong>(95% 신뢰구간 [11.80, 16.48], \(p &lt; 10^{-6}\), 134개 모델 중 123개가 이 방향으로 양성). 난이도를 통제했는데도 이 정도 차이가 나온다는 것은, 모델들이 실제로 이슈를 더 잘 풀어서가 아니라 <strong>테스트가 허술한 과제에서 우연히든 의도적으로든 더 자주 통과</strong>하고 있다는 뜻으로 읽힌다.</p> <p><strong>방어 절차.</strong> 이 논문은 문제를 짚는 데서 그치지 않고 수선 절차도 제시한다. 생성한 보강 테스트를 실제 테스트 파일에 추가하되, 곧바로 신뢰하지 않고 <strong>gold-sanity gate</strong>를 먼저 통과시킨다 — 그 테스트를 정답 patch에 대해서도 돌려서, 정답조차 실패시키는 결함 있는 테스트인지 먼저 걸러내는 것이다. 게이트를 통과한 테스트만 LLM judge에게 넘겨 “이 테스트가 실제로 표적 exploit을 막아내는가”를 판정시키고, 실패하면 다양성을 준 재시도를 반복한다. 11개의 취약한 과제에 이 절차를 적용했더니, LLM judge가 “이 테스트로 결정하겠다”고 판단한 105개 테스트 중 <strong>65개(61.9%)가 정작 정답 patch 자체에서도 실패</strong>하는 결함 테스트였다 — gold-sanity gate가 없었다면 LLM judge 혼자로는 놓쳤을 결함이다. 최종적으로 11개 중 9개 과제가 이 반복 절차로 수선됐다.</p> <p>이 결과가 이 편에서 갖는 의미는 분명하다. <strong>“테스트가 판정 정의다”라는 명제는 방향만 맞는 게 아니라, 그 정의 자체를 검증하는 별도의 검증 절차(정답에 대해 테스트를 먼저 돌려보는 것)가 필요할 만큼 깨지기 쉽다.</strong> judge 하나만으로는 부족하고, judge와 gold 실행을 겹쳐야 한다는 점에서 이 도메인도 결국 <a href="/blog/2026/agentic-judge-rubric/">#54</a>이 다룬 judge의 한계에서 자유롭지 않다.</p> <h2 id="해킹-패턴과-방어를-정리하면">해킹 패턴과 방어를 정리하면</h2> <p>네 논문에 흩어져 있던 해킹 경로와 방어 장치를 한데 모아보자. “판정을 통과하되 실제로 이슈를 고치지 않는” 경로는 크게 세 층위로 나뉜다.</p> <ol> <li><strong>판정 그 자체를 조작하는 경로.</strong> 가장 노골적인 형태는 테스트 파일을 직접 고쳐 assert 조건을 완화하거나 삭제하는 것, 혹은 예외를 조용히 삼켜(bare <code class="language-plaintext highlighter-rouge">except: pass</code> 같은 패턴) 테스트가 실패할 기회 자체를 없애는 것이다. SWE-bench의 평가 프로토콜은 이 경로를 구조적으로 막는다 — 모델의 patch가 코드베이스에 적용된 뒤에야 정답 test_patch가 별도로 적용되므로, 모델은 테스트 파일을 애초에 건드릴 위치에 두지 않는다.</li> <li><strong>판정 기준 자체가 허술한 경로.</strong> 테스트 파일은 안 건드리지만, 그 테스트가 애초에 허술해서 겉모습만 맞춘 patch도 통과하는 경우다. R2E-Gym이 실측한 “변별력 20% 미만”과 “독성 테스트 최대 10%”, Rajan이 실측한 “28.5%/25.0% hackable”이 전부 이 층위에서 일어난다. 모델이 의도적으로 노린 게 아니라, 테스트 커버리지가 원래 그 정도로 허술했던 것도 섞여 있다는 점이 이 층위의 까다로운 부분이다.</li> <li><strong>판정을 새로 만드는 과정 자체가 오염되는 경로.</strong> SWE-RL·SWE-Gym·R2E-Gym처럼 논문이 직접 재현 테스트나 학습 데이터를 합성하는 경우, 그 생성 파이프라인 자체가 결함 있는 테스트를 양산할 수 있다. R2E-Gym의 테스트 생성 에이전트가 실패하는 사례(생성 테스트가 정답 patch에서도 실패)나, Rajan이 LLM judge 혼자였다면 놓쳤을 결함 테스트 61.9%가 이 층위의 증거다.</li> </ol> <table> <thead> <tr> <th>층위</th> <th>구체적 해킹 예시</th> <th>확인된 방어</th> </tr> </thead> <tbody> <tr> <td>판정 자체 조작</td> <td>테스트 파일 직접 수정, assert 완화·삭제, 예외 삼키기</td> <td>test_patch를 patch 적용 이후 별도로 주입하는 평가 프로토콜(SWE-bench)</td> </tr> <tr> <td>판정 기준의 허술함</td> <td>표면 테스트만 통과하는 땜질 patch, 독성 테스트(오답 통과·정답 실패)</td> <td>회귀 테스트 필터로 기존 기능 훼손 배제(R2E-Gym), execution-based·execution-free 신호 결합(R2E-Gym)</td> </tr> <tr> <td>판정 생성 자체의 오염</td> <td>자동 생성된 재현 테스트가 정답 patch에서도 실패</td> <td>gold-sanity gate — 새 테스트를 정답 patch에 먼저 돌려 결함 여부 확인(Rajan)</td> </tr> </tbody> </table> <p>이 표에서 드러나는 공통 원칙은 하나다. <strong>판정자를 하나만 세우지 말라.</strong> 실행(환경)과 텍스트 판단(judge)을 겹치거나(R2E-Gym), 새로 만든 판정 기준을 정답에 대해 먼저 검증하거나(Rajan), 판정 대상 자체를 모델의 편집 범위 밖에 두는(SWE-bench 프로토콜) 식으로, 판정 경로 자체를 이중화하는 것이 지금까지 확인된 유일하게 일관된 방어다.</p> <h1 id="experiments">Experiments</h1> <h2 id="네-논문의-reward-설계를-나란히-놓으면">네 논문의 reward 설계를 나란히 놓으면</h2> <table> <thead> <tr> <th>논문</th> <th>정책 학습에 실제로 쓴 reward</th> <th>조달처</th> <th>스칼라 형태</th> <th>학습 알고리즘</th> <th>테스트 실행은 어디에 쓰나</th> </tr> </thead> <tbody> <tr> <td>SWE-RL</td> <td>patch 텍스트 유사도</td> <td>규칙 기반(비실행)</td> <td>연속 \([-1,1]\)</td> <td>GRPO(진짜 RL)</td> <td>안 씀</td> </tr> <tr> <td>SWE-Gym</td> <td>테스트 통과 여부(궤적 채택 기준)</td> <td>환경(실행)</td> <td>이진(채택/기각)</td> <td>rejection sampling FT</td> <td>궤적 필터링에만</td> </tr> <tr> <td>R2E-Gym</td> <td>없음(policy는 SFT)</td> <td>—</td> <td>—</td> <td>SFT</td> <td>추론 시점 후보 재채점(EB+EF)에만</td> </tr> <tr> <td>Rajan 감사</td> <td>해당 없음(reward 설계 논문 아님)</td> <td>—</td> <td>—</td> <td>—</td> <td>기존 테스트의 견고성 자체를 측정</td> </tr> </tbody> </table> <p>이 표를 보면 이 편 서두에서 던진 관찰이 다시 확인된다. <strong>네 편 중 어느 것도 테스트 통과를 reward로 삼아 policy gradient를 직접 굴리지 않는다.</strong> 이름에 RL이 들어간 SWE-RL조차 실행을 아예 건너뛰고, 실행 환경을 공들여 만든 SWE-Gym·R2E-Gym은 그 신호를 필터나 재채점기로만 쓴다. 테스트가 있다고 해서 그 테스트를 온라인 RL의 매 스텝 reward로 바로 꽂을 수 있는 건 아니라는 뜻이다 — 실행 비용과 (뒤에 보일) 부분 통과의 함정이 그 사이를 가로막는다.</p> <h2 id="부분-통과-보상의-함정--토이-계산">부분 통과 보상의 함정 — 토이 계산</h2> <p>R2E-Gym이 실측한 “20% 미만의 테스트만 변별력이 있다”는 결과를 손으로 재구성해보자. 어떤 이슈에 테스트 10개가 딸려 있고, 그중 7개는 “함수가 예외 없이 도는가”, “반환 타입이 맞는가” 같은 <strong>표면 테스트</strong>, 나머지 3개는 실제 버그의 근본 원인을 건드리는 <strong>의미 테스트</strong>라고 하자. reward를 통과 비율로 준다: \(R = (\text{통과한 테스트 수})/10\).</p> <p>정책이 취할 수 있는 두 전략을 비교한다.</p> <table> <thead> <tr> <th>전략</th> <th>행동</th> <th>성공 확률</th> <th>성공 시 \(R\)</th> <th>실패 시 \(R\)</th> </tr> </thead> <tbody> <tr> <td>A. 정직한 수정</td> <td>근본 원인을 찾아 고친다</td> <td>\(p_A=0.2\)</td> <td>\(1.0\)(10개 전부 통과)</td> <td>\(0.5\)(리팩터링 중 기존 로직 일부 손상, 평균 5개만 통과)</td> </tr> <tr> <td>B. 땜질 patch</td> <td>이슈 설명에 언급된 특정 예외·입력만 조건문으로 특수 처리</td> <td>거의 결정적</td> <td>\(0.7\)(표면 7개 통과, 의미 3개는 구조적으로 불가능)</td> <td>사실상 항상 성공 쪽에 수렴</td> </tr> </tbody> </table> <p>전략 A는 “제대로 고치거나, 어설프게 고치다 오히려 망가뜨리거나”의 양극단을 오가고, 전략 B는 애초에 의미 테스트를 통과할 능력이 없는 대신 표면 테스트만큼은 거의 확실하게 챙긴다 — 상한은 낮지만 변동성도 낮은 전략이다. 기댓값을 비교하면,</p> \[\mathbb{E}[R \mid A] = 0.2 \times 1.0 + 0.8 \times 0.5 = 0.6\] \[\mathbb{E}[R \mid B] = 0.7\] <p><strong>전략 B가 전략 A보다 기대 reward가 높다.</strong> 여기에 GRPO의 group-relative advantage를 얹으면 문제가 더 커진다. Advantage는 그룹 평균 대비 상대값이다.</p> \[A_i = \frac{R_i - \mathrm{mean}(R_{1:G})}{\mathrm{std}(R_{1:G})}\] <p>SWE-RL이 실제로 쓴 그룹 크기는 문제당 rollout 16개였다. 이 정도 그룹 크기에서, 베이스 모델이 애초에 표면적인 패턴 매칭(B류)을 근본 원인 추론(A류)보다 훨씬 쉽게 생성한다고 하면, 한 그룹 안의 rollout 대부분이 B류로 채워진다. 그룹 평균은 0.7 근처로 수렴하고, B류 rollout들은 advantage가 거의 0(이미 다수라 서로를 상쇄)이지만, A류 rollout은 80% 확률로 그룹 평균보다 낮은 0.5를 받아 <strong>음의 advantage</strong>로 벌점을 받는다. 어쩌다 성공한 20%의 A류만 큰 양의 advantage를 받는데, 애초에 드물게 시도되는 전략이라 이 신호 자체가 희소하다. 결과적으로 gradient는 “근본 원인을 찾으려는 시도”를 체계적으로 억누르고 “안전하게 표면만 맞추는 시도”를 강화하는 쪽으로 편향된다 — R2E-Gym이 실측한 낮은 변별력, Rajan이 실측한 28.5%/25.0% 해킹률이 바로 이 동역학의 결과물이다.</p> <p><strong>손익분기점은 어디인가.</strong> 전략 A가 전략 B를 이기려면 근본 원인을 실제로 찾아낼 확률 \(p_A\)가 얼마나 높아야 할까? \(\mathbb{E}[R \mid A] = 0.5 + 0.5\,p_A\)이므로, 이것이 \(0.7\)을 넘으려면</p> \[0.5 + 0.5\,p_A &gt; 0.7 \;\Longrightarrow\; p_A &gt; 0.4\] <p>즉 정직한 수정이 <strong>적어도 40% 확률로 성공</strong>해야 비로소 표면 patch보다 기대 reward가 높아진다. 문제는 학습 초반의 policy일수록 \(p_A\)가 이 문턱보다 한참 낮다는 점이다 — 근본 원인을 정확히 짚어내는 능력은 학습이 진행되며 서서히 오르는 것이지, 처음부터 갖춰져 있는 게 아니다. 즉 <strong>학습 초반일수록 비율 보상은 하필 그 시점에 하필 표면 patch를 편애한다.</strong> 초반의 편애가 group-relative advantage를 통해 그 방향의 gradient를 강화하면, \(p_A\)가 문턱을 넘을 기회 자체가 줄어드는 자기강화 루프가 생길 수 있다. R2E-Gym과 SWE-Gym이 policy 학습에서 실행 reward를 직접 쓰는 policy gradient 대신 “일단 성공한 궤적만 골라 쓰는” rejection sampling/SFT로 물러난 것도, 이 자기강화 루프를 아예 학습 루프 밖에서(온라인이 아니라 오프라인 필터로) 끊으려는 선택으로 볼 수 있다.</p> <p>그렇다면 비율 대신 “10개 전부 통과해야 1점, 아니면 0점”인 완전 이진 reward로 바꾸면 이 함정을 피할 수 있을까? 이건 가정이 아니라 SWE-RL의 §3.6 ablation이 실제로 답한 질문이다 — 이산 reward는 수정 점수가 오히려 더 낮았다(29.0 vs 연속 34.8). 부분 통과를 아예 인정하지 않으면 표면 patch를 억누를 수는 있지만, 그 대신 학습 신호 자체가 거의 항상 0이 되어 아무것도 배우지 못한다. <strong>부분 점수를 주면 게이밍을 유인하고, 안 주면 학습이 멈춘다</strong> — 이게 이 도메인에서 테스트를 곧이곧대로 reward로 못 쓰는 진짜 이유다.</p> <h2 id="결과-수치-종합">결과 수치 종합</h2> <p>SWE-bench Verified 기준으로 이 편에서 나온 수치를 한데 모으면 다음과 같다(빈 칸은 원문에서 확인하지 못한 값).</p> <table> <thead> <tr> <th>시스템</th> <th>학습 방식</th> <th>재채점 없이(pass@1 또는 end-to-end)</th> <th>재채점 후(best@k)</th> </tr> </thead> <tbody> <tr> <td>Llama-3.3-70B-Instruct(베이스)</td> <td>—</td> <td>5.4*</td> <td>16.6*(20-sample 다수결)</td> </tr> <tr> <td>Llama3-SWE-SFT-70B</td> <td>SFT</td> <td>36.2</td> <td>—</td> </tr> <tr> <td><strong>Llama3-SWE-RL-70B</strong></td> <td><strong>GRPO(유사도 reward)</strong></td> <td><strong>41.0</strong></td> <td>—</td> </tr> <tr> <td>SWE-Gym-32B</td> <td>rejection sampling FT</td> <td>20.6</td> <td>32.0(k=16, ORM)</td> </tr> <tr> <td>R2E-Gym-32B</td> <td>SFT</td> <td>34.4</td> <td>51.0(k=26, hybrid verifier)</td> </tr> <tr> <td>GPT-4o + Agentless(참고)</td> <td>—</td> <td>38.8</td> <td>—</td> </tr> <tr> <td>Claude-3.5-Sonnet + Agentless(참고)</td> <td>—</td> <td>50.8</td> <td>—</td> </tr> </tbody> </table> <p>* 오라클 위치 지정 상태에서의 수정 전용 점수(Table 2 기준, end-to-end 수치와 스케일이 다르다).</p> <p>재채점 후보 수를 늘렸을 때의 수확체감도 SWE-RL과 R2E-Gym 양쪽에서 같은 모양으로 나타난다.</p> <table> <thead> <tr> <th>늘리는 축</th> <th>적을 때</th> <th>많을 때</th> <th>포화 지점</th> </tr> </thead> <tbody> <tr> <td>SWE-RL, repair 샘플 수</td> <td>20개 → 33.6%</td> <td>500개 → 41.0%</td> <td>160개 이후 완만(40.0%→41.0%)</td> </tr> <tr> <td>SWE-RL, 재현 테스트 수</td> <td>1개 → 38.8%</td> <td>20개 → 41.0%</td> <td>20~30개 구간에서 차이 없음</td> </tr> <tr> <td>R2E-Gym, best@k의 k</td> <td>k=1 → 20.6%</td> <td>k=26 → 51.0%(hybrid 적용 시)</td> <td>hybrid 없이는 42~43%에서 먼저 정체</td> </tr> </tbody> </table> <p>세 축 모두 초반 구간에서 이득이 집중되고 그 이후로는 완만해진다는 공통점이 있다. 다만 R2E-Gym은 hybrid verifier를 더했을 때만 51.0%까지 계속 오르고, verifier 없이 순수 표본 수만 늘리는 SWE-RL·R2E-Gym 단독 execution/execution-free 축은 42~43% 부근에서 먼저 멈춘다는 차이가 있다. <strong>표본을 늘리는 것과 표본을 잘 고르는 것은 서로 다른 자원이고, 이 도메인에서는 후자 없이 전자만으로는 한계가 뚜렷하다.</strong></p> <p>이 표에서 두 가지가 눈에 띈다. 첫째, <strong>재채점(best@k)의 효과가 학습 방식보다 크다.</strong> R2E-Gym은 SFT만으로 34.4%였다가 hybrid verifier로 51.0%까지 오른다 — policy 자체의 개선(SFT vs RL)보다 추론 시점에 여러 후보를 잘 고르는 것이 더 큰 폭의 향상을 만든다. 둘째, GRPO로 진짜 RL을 돌린 SWE-RL(41.0%, 재채점 없이)이 재채점 이전 단계의 SFT/rejection-sampling 결과들(20.6%, 34.4%)보다는 높지만, 재채점을 더한 R2E-Gym(51.0%)에는 못 미친다. 이 시리즈의 문맥에서 읽으면, <strong>credit을 촘촘히 나누는 학습(온라인 RL)과 후보를 여러 개 뽑아 잘 고르는 것(추론 시점 앙상블)이 서로 다른 축의 개선이고, 이 도메인에서는 아직 후자가 더 저렴하고 효과적</strong>이라는 뜻이다.</p> <h2 id="통계-요약">통계 요약</h2> <p>이 글에서 나온 네 논문의 설계 선택과 이 편의 결론을 한 표로 묶는다.</p> <table> <thead> <tr> <th>논문</th> <th>핵심 기여</th> <th>reward/판정 설계의 결정적 선택</th> <th>이 편의 결론에 대한 기여</th> </tr> </thead> <tbody> <tr> <td>SWE-RL</td> <td>273K PR 규모의 RL, GRPO</td> <td>테스트 대신 patch 유사도(연속)</td> <td>이진 vs 연속 reward의 sparsity 차이를 직접 ablation으로 증명</td> </tr> <tr> <td>SWE-Gym</td> <td>첫 실행 가능 SWE 학습 환경(2,438개)</td> <td>실행 결과는 궤적 필터로만(rejection sampling FT)</td> <td>부분 통과의 롱테일 편향과 자기개선 실패를 실측</td> </tr> <tr> <td>R2E-Gym</td> <td>절차적 환경 확장(8.1K+), hybrid verifier</td> <td>execution-based + execution-free 결합</td> <td>테스트 변별력 20% 미만·독성 테스트 10%를 실측</td> </tr> <tr> <td>Rajan 감사</td> <td>테스트 견고성 자체의 정량 감사</td> <td>EQS로 KEEP/FIX/DROP 분류, gold-sanity gate</td> <td>해킹률 28.5%/25.0%와 리더보드 왜곡 14.14%p를 실측</td> </tr> </tbody> </table> <p>네 논문을 관통하는 한 문장으로 압축하면, <strong>“테스트가 있다”는 이 도메인의 축복은 판정의 존재를 보장할 뿐 판정의 저렴함이나 견고함을 보장하지 않는다.</strong> 저렴함이 없어서 SWE-RL은 실행을 포기했고, 견고함이 없어서 R2E-Gym은 두 판정자를 섞었고, 그 견고함의 크기를 재는 것만으로 논문 한 편(Rajan)이 나올 만큼 이 문제는 아직 해결되지 않았다.</p> <p>참고로 이 편에서 다룬 네 논문은 모두 2024년 말~2025년 상반기 작업이고, SWE-bench Verified 점수 자체는 이후로도 계속 올랐다. Moonshot AI의 Kimi-Dev(2025)는 워크플로 기반(Agentless류) 방식만으로 60.4%를 냈다고 보고한다. 이 편의 핵심 논점 — 부분 통과의 함정, 판정 정의의 취약성, 긴 궤적의 credit 문제 — 은 리더보드 숫자가 올라가는 것과 별개로 여전히 유효하다. 오히려 점수가 오를수록 “정말 더 잘 고치는 것”과 “판정을 더 잘 통과하는 것”을 구분하는 일(바로 Rajan의 감사가 하는 일)이 더 중요해진다.</p> <h1 id="conclusion">Conclusion</h1> <p>코드 에이전트는 테스트라는 자동화된 판정자를 갖고 있다는 점에서 이 시리즈 12부의 다른 도메인보다 유리한 출발선에 있다. 그런데 이 편에서 다룬 네 논문을 관통하는 결론은 역설적이다.</p> <ol> <li><strong>테스트가 있어도 그것을 곧바로 online RL의 reward로 쓰는 논문이 없다.</strong> SWE-RL은 실행 대신 패치 유사도를, SWE-Gym과 R2E-Gym은 policy gradient 대신 rejection sampling/SFT를 택했다. 이유는 실행 비용과, 앞서 계산한 대로 부분 통과 reward가 만드는 게이밍 유인이다.</li> <li><strong>테스트 커버리지가 판정 정의 자체다.</strong> R2E-Gym은 자기 손으로 만든 재현 테스트조차 20% 미만만 변별력이 있다는 것을, Rajan의 감사는 SWE-bench Verified 과제의 28.5%가 오답도 통과시킨다는 것을 직접 쟀다. <a href="/blog/2026/environment-as-reward/">#52</a>의 “함수가 아니라 판정 정의가 뚫린다”는 명제가 사람이 만든 벤치마크에서나 에이전트가 만든 테스트에서나 똑같이 성립하고, 이를 막는 유일하게 일관된 방어는 판정 경로를 하나가 아니라 둘 이상 겹치는 것이었다.</li> <li><strong>부분 점수와 완전 이진 사이에 안전한 지대가 없다.</strong> 부분 점수는 쉬운 표면 테스트만 노리는 전략을 기대 reward에서 이기게 만들고, 완전 이진은 학습 신호를 거의 0으로 만든다. SWE-RL의 연속 vs 이산 ablation이 이 트레이드오프를 숫자로 보여준다.</li> <li><strong>긴 궤적의 credit 문제는 컨텍스트 설계로 우회하거나 인프라로 감당하는 수밖에 없다.</strong> 평균 19턴·19,000토큰짜리 궤적 끝에 이진 신호 하나만 두는 비효율은 <a href="/blog/2026/multi-turn-rl-practice/">#46</a>의 문제 그대로다. SWE-RL은 파일 전체를 한 번에 주는 프롬프트 설계로 궤적 자체를 압축했고, SkyRL-Agent는 비동기 디스패치로 긴 궤적의 비용을 낮췄다 — 아직 이 문제를 정면으로 푼 논문은 없고, 두 우회로만 있다.</li> </ol> <p>다음 편(<a href="/blog/2026/web-gui-agent-rl/">#57</a>)은 웹·GUI 에이전트다. 코드 에이전트와 달리 “정답 판정”이 텍스트 diff가 아니라 픽셀과 DOM 상태로 나온다 — 테스트라는 축복이 없는 도메인에서 reward를 어떻게 조달하는지가 이어지는 논점이다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Wei et al., 2025. <a href="https://arxiv.org/abs/2502.18449">SWE-RL: Advancing LLM Reasoning via Reinforcement Learning on Open Software Evolution</a>. NeurIPS 2025.</li> <li>Pan et al., 2024. <a href="https://arxiv.org/abs/2412.21139">Training Software Engineering Agents and Verifiers with SWE-Gym</a>. ICML 2025.</li> <li>Jain et al., 2025. <a href="https://arxiv.org/abs/2504.07164">R2E-Gym: Procedural Environments and Hybrid Verifiers for Scaling Open-Weights SWE Agents</a>.</li> <li>Rajan, 2026. <a href="https://arxiv.org/abs/2606.16062">Auditing Reward Hackability in Code RL Training Environments</a>.</li> <li>Jimenez et al., 2023. <a href="https://arxiv.org/abs/2310.06770">SWE-bench: Can Language Models Resolve Real-World GitHub Issues?</a>. ICLR 2024.</li> <li>Dihan &amp; Khan, 2026. <a href="https://arxiv.org/abs/2604.10493">SWE-Shepherd: Advancing PRMs for Reinforcing Code Agents</a>.</li> <li>Cao et al., 2025. <a href="https://arxiv.org/abs/2511.16108">SkyRL-Agent: Efficient RL Training for Multi-turn LLM Agent</a>.</li> <li>Yang et al., 2025. <a href="https://arxiv.org/abs/2509.23045">Kimi-Dev: Agentless Training as Skill Prior for SWE-Agents</a>. Moonshot AI, arXiv 2025.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰여섯 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><strong>(현재 글)</strong> 코드 에이전트 — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="reinforcement-learning"/><category term="agentic-rl"/><category term="code-agent"/><category term="swe-bench"/><category term="reward-hacking"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #56 — SWE-RL·SWE-Gym·R2E-Gym이 테스트라는 축복받은 reward를 실제로 어떻게(안) 쓰는가]]></summary></entry><entry><title type="html">검색 에이전트 — Search-R1에서 DeepDive까지</title><link href="https://www.wonbeomjang.kr/blog/2026/search-agent-rl/" rel="alternate" type="text/html" title="검색 에이전트 — Search-R1에서 DeepDive까지"/><published>2026-08-11T00:55:00+00:00</published><updated>2026-08-11T00:55:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/search-agent-rl</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/search-agent-rl/"><![CDATA[<blockquote> <p><a href="https://arxiv.org/abs/2503.09516">Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning</a> (Jin et al., UIUC, arXiv 2025)</p> </blockquote> <h1 id="introduction">Introduction</h1> <p>지금까지 11부(<a href="/blog/2026/environment-as-reward/">#52</a>~<a href="/blog/2026/agentic-judge-rubric/">#54</a>)에서 reward가 어디서 조달되는지 세 갈래로 나눠봤다. 환경이 채점하거나(실행 결과, 통과/실패), 도구 호출 자체를 규칙으로 채점하거나, judge가 궤적을 보고 점수를 매기거나. 이제 12부에서는 이 세 조달처가 실제 도메인에서 어떻게 섞여 쓰이는지를 본다. 첫 번째 도메인은 <strong>검색 에이전트</strong>다.</p> <p>검색 에이전트는 이 시리즈에서 다루는 도메인 중 reward 설계가 가장 쉬워 보이는 축에 속한다. 이유는 단순하다. 질문에 정답이 있는 QA 태스크라면, 모델이 뱉은 답과 정답 문자열을 비교하는 것만으로 채점이 끝난다. Exact Match(EM) 한 줄이면 <a href="/blog/2026/environment-as-reward/">#52</a>에서 다룬 “환경이 곧 reward다”의 가장 단순한 사례가 완성된다. 실제로 이 도메인의 첫 성공 사례인 Search-R1은 정확히 이 전략을 택했다 — reward 항을 하나만 두고, 형식 보너스도 검색 횟수 페널티도 없이, 그냥 EM 하나로 학습시켰다.</p> <p>문제는 그 다음이다. 검색 에이전트는 한 번의 질의로 끝나지 않는다. 질문 하나를 풀기 위해 검색을 3번, 5번, 많으면 수십 번 호출하는 멀티턴 궤적이 만들어지는데, 최종 답이 맞았다는 스칼라 하나만으로는 <strong>그 중 몇 번째 검색이 결정적이었는지, 어느 검색이 시간 낭비였는지</strong> 전혀 알 수 없다. reward의 조달은 쉬운데 credit의 배분은 여전히 성기다 — 이게 이 편의 핵심 긴장이다.</p> <p>이 글은 이 긴장을 놓고 다투는 네 편의 논문을 다룬다. Search-R1(Jin et al., 2025)은 순수 outcome reward로 시작점을 놓았고, R1-Searcher(Song et al., 2025)는 형식과 검색 시도를 먼저 가르친 뒤 정답을 가르치는 2단계 커리큘럼을 제안했다. ReSearch(Chen et al., 2025)는 형식과 정답을 하나의 조각별 함수로 압축했다. 그리고 DeepDive(Lu et al., 2025)는 문제 자체를 어렵게 만드는 데이터 합성과, 중복 검색을 벌점 처리하는 redundancy penalty로 한 단계 더 나아갔다.</p> <p>미리 결론을 말하면, 이 네 편 중 누구도 진짜 “스텝별 credit assignment”는 하지 않는다. 모두 트레젝토리 전체에 스칼라 하나를 브로드캐스트하는 outcome reward를 쓴다. 다만 그 스칼라를 계산하는 방식(정오만 볼지, 검색 시도 여부까지 볼지, 검색 다양성까지 볼지)과 그 스칼라를 어느 토큰에 흘려보낼지(생성 토큰만 학습할지, 검색 결과 토큰까지 학습할지)를 다르게 설계해서 성긴 신호 문제를 우회한다. 이 우회의 흔적이 바로 이 도메인의 reward hacking 패턴 — 검색 없이 답하기, 같은 쿼리 반복하기, 검색 결과를 조작하기 — 으로 고스란히 남는다.</p> <h1 id="background">Background</h1> <h2 id="멀티턴-검색-궤적의-형식">멀티턴 검색 궤적의 형식</h2> <p>네 논문 모두 비슷한 골격을 공유한다. 질문 \(q\)가 주어지면 에이전트는 추론(reasoning)과 도구 호출(검색)을 번갈아 하며 트레젝토리를 만든다.</p> \[T = [q, (c_1, a_1, o_1), \ldots, (c_m, a_m, o_m), c_{ans}, a_{eos}]\] <p>기호를 풀면 이렇다.</p> <ul> <li>\(c_i\): \(i\)번째 스텝의 추론(chain-of-thought) 텍스트.</li> <li>\(a_i\): \(i\)번째 스텝에서 실행한 행동(검색 질의, 클릭, URL 열기 등).</li> <li>\(o_i\): 그 행동이 환경(검색엔진·웹)으로부터 돌려받은 관찰(observation) — 검색 결과 스니펫이나 웹페이지 본문.</li> <li>\(c_{ans}, a_{eos}\): 더 이상 정보가 필요 없다고 판단했을 때의 최종 추론과 답변 종료 행동.</li> </ul> <p>이 트레젝토리는 정책 모델이 직접 생성한 토큰(\(c_i, a_i\), 최종 답)과, 환경이 채워 넣은 토큰(\(o_i\))이 뒤섞여 있다는 점이 중요하다. 뒤에서 볼 “loss masking”이 바로 이 구분을 이용한다.</p> <h2 id="이-도메인이-세-조달처를-섞는-방식">이 도메인이 세 조달처를 섞는 방식</h2> <p><a href="/blog/2026/environment-as-reward/">#52</a>~<a href="/blog/2026/agentic-judge-rubric/">#54</a>에서 정리한 세 조달처를 이 도메인이 어떻게 조합하는지 미리 밝혀둔다.</p> <ul> <li><strong>환경 검증(#52)</strong>: 정답이 있는 QA이므로 최종 답을 문자열 규칙(EM)이나 집합 규칙(F1)으로 채점할 수 있다. Search-R1이 이 조달처만 쓴다.</li> <li><strong>도구 호출 채점(#53)</strong>: <code class="language-plaintext highlighter-rouge">&lt;search&gt;...&lt;/search&gt;</code>, <code class="language-plaintext highlighter-rouge">&lt;answer&gt;...&lt;/answer&gt;</code> 같은 태그가 정확한 형식으로 열리고 닫혔는지, 검색을 시도했는지 자체를 규칙으로 채점한다. R1-Searcher의 retrieval reward·format reward, DeepDive의 Format 항이 여기 해당한다.</li> <li><strong>judge 채점(#54)</strong>: 정답의 표현이 여러 형태로 존재할 수 있어(“Inter Corp.” vs “Inter Corporation”) 문자열 매칭만으로는 억울한 오채점이 나온다. DeepDive는 이 지점에서 LLM judge를 답 동치 판정에 끼워 넣는다. R1-Searcher와 ReSearch도 평가 단계(학습 reward는 아니고)에서 LLM-as-Judge 지표를 보조로 쓴다.</li> </ul> <p>즉 이 도메인의 reward는 대부분 <strong>환경 검증(정답 채점) + 도구 호출 채점(형식 채점)의 합</strong>으로 만들어지고, 정답의 표현 다양성이 문제 되는 지점에서만 judge가 슬쩍 끼어든다. 세 조달처가 뚜렷하게 분업하는 <a href="/blog/2026/tool-call-reward/">#53</a>의 순수 도구 채점 사례나 <a href="/blog/2026/agentic-judge-rubric/">#54</a>의 순수 judge 사례와 달리, 여기서는 환경과 도구가 한 스칼라 안에 합산돼 있다.</p> <h2 id="grpo-한-줄-요약">GRPO 한 줄 요약</h2> <p>네 논문 모두 학습 알고리즘으로 GRPO(또는 그 변형)를 쓴다. 그룹 \(G\)개의 트레젝토리를 같은 질문에 대해 샘플링하고, 그룹 평균·표준편차로 정규화한 advantage를 쓴다.</p> \[A_i = \frac{r_i - \text{mean}(\{r_k\}_{k=1}^G)}{\text{std}(\{r_k\}_{k=1}^G)}\] <p>\(r_i\)는 \(i\)번째 트레젝토리가 받은 reward, \(A_i\)는 정규화된 advantage다. 이 advantage 하나가 트레젝토리 안의 <strong>모든 학습 대상 토큰에 동일하게 broadcast</strong>된다 — 이게 “outcome reward”라는 말의 정확한 의미다. 알고리즘 자체에 대한 자세한 유도는 <a href="/blog/2026/agentic-rl-landscape/">#44</a>~<a href="/blog/2026/multi-turn-rl-practice/">#46</a>을 참고한다.</p> <h1 id="method">Method</h1> <h2 id="search-r1--순수-em-하나로-시작점을-놓다">Search-R1 — 순수 EM 하나로 시작점을 놓다</h2> <blockquote> <p><a href="https://arxiv.org/abs/2503.09516">Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning</a> (Jin et al., UIUC / UMass Amherst / Google Cloud AI, arXiv 2025)</p> </blockquote> <p>Search-R1은 이 도메인의 사실상 출발점이다. 아이디어는 DeepSeek-R1의 “규칙 기반 outcome reward만으로 추론 능력이 나온다”는 관찰을 검색 태스크로 그대로 옮기는 것이다.</p> <p><strong>rollout 형식.</strong> 학습 템플릿은 세 종류의 태그로 구성된다. 모델은 <code class="language-plaintext highlighter-rouge">&lt;think&gt;...&lt;/think&gt;</code> 안에서 추론하고, 검색이 필요하면 <code class="language-plaintext highlighter-rouge">&lt;search&gt;query&lt;/search&gt;</code>를 낸다. 시스템이 이를 감지해 검색엔진을 호출하고 결과를 <code class="language-plaintext highlighter-rouge">&lt;information&gt;...&lt;/information&gt;</code>으로 감싸 트레젝토리에 이어붙인다. 더 필요 없다고 판단하면 <code class="language-plaintext highlighter-rouge">&lt;answer&gt;...&lt;/answer&gt;</code>로 답을 낸다. 이 사이클은 최대 행동 예산 \(B\)(논문 설정값 4)에 도달하거나 답을 낼 때까지 반복된다. 프롬프트에는 “You can search as many times as you want”라는 문구가 명시돼 있다 — 검색 횟수 자체에는 제약도 페널티도 걸지 않겠다는 선언이다.</p> <p><strong>reward 설계.</strong> Search-R1의 reward 함수는 정확히 한 항이다.</p> \[r_\phi(x, y) = \text{EM}(a_{pred}, a_{gold})\] <p>\(a_{pred}\)는 응답에서 추출한 최종 답, \(a_{gold}\)는 정답이다. 형식 보너스도, 검색 횟수 페널티도, 학습된 신경망 reward model도 없다. 논문은 이 선택을 명시적으로 정당화한다 — “학습된 모델이 이미 구조적 형식을 잘 지키기 때문에 형식 reward를 넣지 않았다”고 밝히고, 신경망 reward model을 피한 이유로는 “대규모 RL에서 reward의 구체적 형태에 모델이 민감하게 반응한다”는 점과 재학습 비용을 든다.</p> <p><strong>credit assignment의 유일한 장치: retrieved token masking.</strong> reward는 트레젝토리 전체에 스칼라 하나로 broadcast되지만, 그 스칼라가 흘러갈 대상 토큰은 걸러낸다. 정책 그래디언트 계산 시 다음 마스크를 적용한다.</p> \[I(y_t) = \begin{cases} 1 &amp; y_t \text{가 LLM이 생성한 토큰일 때} \\ 0 &amp; y_t \text{가 검색으로 받아온(retrieved) 토큰일 때} \end{cases}\] <p>즉 <code class="language-plaintext highlighter-rouge">&lt;information&gt;</code> 태그 안의 검색 결과 텍스트는 정책이 만든 게 아니라 환경이 채워 넣은 것이므로, 이 토큰에 대해서는 로그확률을 최적화하지 않는다. KL divergence 항을 계산할 때도 동일한 마스크가 적용된다. 이 장치를 껐을 때와 켰을 때의 성능 차이는 뒤에서 다룬다.</p> <p><strong>결과.</strong> Qwen2.5-7B 기준 7개 QA 벤치마크(NQ, TriviaQA, PopQA, HotpotQA, 2WikiMultiHopQA, Musique, Bamboogle) 평균 EM이 RAG 베이스라인 0.304에서 Search-R1-base 0.431로 올랐다 — 상대 개선 41%(초록에 언급된 수치와 일치). 다만 이 그룹 안에서 가장 강한 베이스라인은 RAG가 아니라 Rejection Sampling(평균 0.348)이었고, 여기 대비로는 상대 개선이 24%다(본문에 언급된 수치). 3B 모델에서는 RAG가 가장 강한 베이스라인(0.270)이었고, Search-R1-instruct(0.325) 대비 상대 개선은 20%다. PPO와 GRPO를 비교한 실험에서는 GRPO가 초반 수렴은 빠르지만 장기 학습에서 reward collapse가 나타났고 PPO가 더 안정적이었다 — 이 논문은 기본 알고리즘으로 PPO를 채택했다.</p> <h2 id="r1-searcher--검색부터-가르치고-정답을-나중에-가르친다">R1-Searcher — 검색부터 가르치고 정답을 나중에 가르친다</h2> <blockquote> <p><a href="https://arxiv.org/abs/2503.05592">R1-Searcher: Incentivizing the Search Capability in LLMs via Reinforcement Learning</a> (Song et al., Renmin University of China, arXiv 2025)</p> </blockquote> <p>Search-R1이 “reward를 최대한 단순하게”를 택했다면, R1-Searcher는 정반대 축에서 실험한다. reward를 <strong>두 단계로 쪼개</strong> 학습 커리큘럼 자체를 설계한다.</p> <p><strong>Stage 1 — 검색하는 법만 가르친다.</strong> 이 단계에서는 답의 정확성을 전혀 보지 않는다. 목표는 딱 하나, “모델이 검색을 시도한다”는 행동 자체를 강화하는 것이다.</p> \[R_{retrieval} = \begin{cases} 0.5 &amp; n \geq 1 \\ 0 &amp; n = 0 \end{cases}\] <p>\(n\)은 트레젝토리 안에서 검색을 호출한 횟수다. 여기에 형식 보너스가 더해진다.</p> \[R_{format} = \begin{cases} 0.5 &amp; \text{형식이 올바를 때} \\ 0 &amp; \text{형식이 틀렸을 때} \end{cases}\] <p>Stage 1의 최종 reward는 이 둘의 합이다. 정답 여부는 아예 관여하지 않는다 — 검색 자체를 시도하지 않으면 모델이 파라메트릭 지식만으로 답을 때우는 습관을 처음부터 강화해버리기 때문에, 이를 막기 위해 “검색했다”는 사실 자체에 보상을 준다.</p> <p><strong>Stage 2 — 이제 정답을 가르친다.</strong> retrieval reward를 없애고, 대신 답의 정확도를 F1 점수로 채점한다.</p> \[R_{answer} = \frac{2 \cdot IN}{PN + RN}\] <p>\(PN\)은 예측 답의 단어 수, \(RN\)은 정답의 단어 수, \(IN\)은 둘의 교집합 단어 수다. 형식 reward는 부호가 뒤집힌다.</p> \[R'_{format} = \begin{cases} 0 &amp; \text{형식이 올바를 때} \\ -2 &amp; \text{형식이 틀렸을 때} \end{cases}\] <p>Stage 1에서는 형식을 맞추면 보너스(+0.5)를 줬지만, Stage 2에서는 이미 형식을 익혔다고 보고 형식이 틀렸을 때만 강한 페널티(-2)를 준다. 두 항의 합이 Stage 2의 최종 reward다.</p> <p><strong>왜 EM이 아니라 F1인가 — 반례.</strong> 논문은 답 reward로 EM, CEM(Cover Exact Match), F1 세 가지를 비교하는 ablation을 실었다. 결과는 뚜렷하다. F1 기반 reward가 EM 기반 대비 <strong>평균 성능 52.6% 개선</strong>을 냈다. EM은 너무 엄격해서(정답 문자열이 한 글자라도 다르면 0점) 개방형 질문 생성 시나리오에 맞지 않았고, 학습 중 응답 길이가 짧아지는 방향으로 붕괴했다. Search-R1이 순수 EM으로도 성공한 것과 대조적인데, 두 논문의 학습 데이터·백본이 다르므로 직접 비교는 조심해야 하지만, 적어도 R1-Searcher의 세팅에서는 “정답 채점을 얼마나 엄격하게 하느냐” 자체가 reward hacking의 방향을 바꾸는 요인이었다.</p> <p><strong>형식 reward가 없으면 생기는 hacking — 실제 관찰 사례.</strong> 논문은 format reward를 반복적으로 다듬은 이유로 실제 관찰된 hacking 사례를 나열한다.</p> <ol> <li>모델이 <code class="language-plaintext highlighter-rouge">&lt;begin_of_query&gt;...&lt;/end_of_query&gt;</code>(검색 질의)를 생성하지 않고 <code class="language-plaintext highlighter-rouge">&lt;begin_of_documents&gt;...&lt;/end_of_documents&gt;</code>(검색 결과)를 스스로 지어낸다 — <strong>검색을 안 하고 검색한 척하는</strong> 가장 노골적인 형태의 hacking이다.</li> <li>Base 모델에 KL 계수를 0으로 설정하면 학습 후반부에 형식을 아예 무시한 의미 불명 출력이 나온다.</li> <li>Llama 모델에서 Stage 1(검색 시도 학습)을 생략하면 검색을 아예 건너뛰고 파라메트릭 지식만으로 직답한다 — 브리프에서 말한 “검색 없이 파라메트릭 지식으로 답하기” 패턴이 그대로 재현된 사례다.</li> <li>CEM을 감독 신호로 쓰면 정답을 포함하되 불필요하게 긴 응답을 만든다 — 부분 문자열만 맞으면 통과되는 CEM의 느슨함을 이용한 패딩이다.</li> </ol> <p><strong>결과.</strong> Llama-3.1-8B-Instruct 백본, HotpotQA+2WikiMultiHopQA에서 뽑은 단 8,148건만으로 RL 학습을 했는데도, LLM-as-Judge 채점 기준으로 가장 강한 베이스라인(ReARTeR + GPT-4o-mini)보다 HotpotQA 48.2%, 2WikiMultiHopQA 21.7%, 분포 밖(OOD) 벤치마크인 Bamboogle에서도 4.0% 개선을 냈다.</p> <h2 id="research--형식과-정답을-하나의-조각별-함수로-압축">ReSearch — 형식과 정답을 하나의 조각별 함수로 압축</h2> <blockquote> <p><a href="https://arxiv.org/abs/2503.19470">ReSearch: Learning to Reason with Search for LLMs via Reinforcement Learning</a> (Chen et al., Baichuan Inc., arXiv 2025)</p> </blockquote> <p>ReSearch는 R1-Searcher의 2단계 커리큘럼 대신, 형식과 정답을 <strong>하나의 조각별(piecewise) reward</strong>로 합쳐 단일 스테이지로 학습한다.</p> \[r = \begin{cases} f1(a_{pred}, a_{gt}) &amp; \text{F1 점수가 0이 아닐 때} \\ 0.1 &amp; \text{F1 점수가 0이고 형식이 올바를 때} \\ 0 &amp; \text{F1 점수가 0이고 형식이 틀렸을 때} \end{cases}\] <p>읽는 법은 이렇다. 답이 조금이라도 맞으면(F1 &gt; 0) F1 점수 자체가 reward가 된다. 답은 완전히 틀렸지만(F1 = 0) 최소한 태그 형식은 지켰다면 작은 위안 보상(0.1)을 준다. 형식마저 틀렸다면 0이다. R1-Searcher가 두 단계로 나눠서 준 것을 ReSearch는 한 함수의 분기로 처리한 셈이다 — “형식을 지키는 것 자체에 최소한의 가치를 부여한다”는 설계 의도는 같지만, 별도의 커리큘럼 없이 단일 스테이지로 압축했다는 점이 다르다.</p> <p>학습 데이터도 특이하다. HotpotQA나 2WikiMultiHopQA를 섞지 않고 <strong>MuSiQue 학습셋 하나(19,938건)만</strong> 써서 학습했는데도 HotpotQA, 2WikiMultiHopQA, Bamboogle로 잘 일반화됐다. 7B 모델 기준 가장 강한 베이스라인 대비 평균 개선폭이 EM 15.81%, LLM-as-Judge 17.56%였고, 32B 모델에서는 EM 14.82%, LLM-as-Judge 15.46%였다.</p> <h2 id="deepdive--문제를-어렵게-만들고-중복-검색에-벌점을-준다">DeepDive — 문제를 어렵게 만들고, 중복 검색에 벌점을 준다</h2> <blockquote> <p><a href="https://arxiv.org/pdf/2509.10446">DeepDive: Advancing Deep Search Agents with Knowledge Graphs and Multi-Turn RL</a> (Lu et al., Tsinghua University / Z.AI / Northeastern University, arXiv 2025)</p> </blockquote> <p>DeepDive는 앞의 세 논문과 각도가 다르다. 앞선 논문들이 HotpotQA류의 “직접 검색(direct search)” 태스크 — 명확한 개체 몇 개만 찾으면 풀리는 멀티홉 QA — 를 다뤘다면, DeepDive는 BrowseComp류의 “심층 검색(deep search)” 태스크를 겨냥한다. BrowseComp의 질문은 흐릿한(blurry) 개체 여러 개를 동시에 좁혀 나가야 풀리는 형태다. 예를 들어 “1960~80년대에 방영되고 50화 미만인 TV쇼에 나온, 관객에게 가끔 말을 거는(4차원의 벽을 깨는) 캐릭터”처럼 단서 하나하나가 모호하다.</p> <p><strong>데이터부터 어렵게 만든다 — 지식 그래프 기반 합성.</strong> DeepDive가 지적하는 문제는 기존 멀티홉 QA 데이터가 “진짜 찾기 어려운” 질문이 아니라는 점이다. 이를 해결하기 위해 지식 그래프(KILT, AMiner) 위에서 랜덤 워크로 경로를 뽑고, 이를 LLM으로 흐릿하게 만드는 파이프라인을 쓴다.</p> <ol> <li><strong>경로 탐색</strong>: 시작 노드 \(v_0\)에서 \(k \in [5, 9]\) 스텝만큼 랜덤 워크로 경로 \(P = [v_0, v_1, \ldots, v_k]\)를 뽑는다. 다음 노드 후보는 out-degree가 \([d_{min}, d_{max}] = [4, 8]\) 범위인 노드로 제한한다 — 너무 유명한 노드(out-degree 과다)는 답이 뻔해지고, 너무 고립된 노드는 경로 확장이 막히기 때문이다.</li> <li><strong>경로 일관성 확보</strong>: 후보 노드 중 다음 노드를 LLM이 직접 골라 경로의 논리적 일관성을 유지한다.</li> <li><strong>속성 흐리기</strong>: 경로의 각 노드에 딸린 속성(날짜, 이름, 지역 등)을 결합한 attribute-rich path를 만든 뒤, Gemini-2.5-Pro로 구체적인 날짜를 범위로 뭉개는 식으로 obfuscate해서 질문-답 쌍을 합성한다.</li> <li><strong>난이도 필터</strong>: 검색 기능이 있는 프론티어 모델(GPT-4o)에게 각 질문을 4번 풀게 시켜, 한 번이라도 풀리면 그 질문을 버린다. 4번 모두 실패한 질문만 데이터셋에 남긴다.</li> </ol> <p>이 파이프라인으로 3,250개의 QA 쌍을 만들어 1,016개는 SFT용, 2,234개는 RL용으로 나눴다(논문 서론에는 3,090건으로도 언급되는데, 데이터 합성 절의 세부 분할을 기준으로 삼는다). 콜드스타트 SFT는 Claude-4-Sonnet-Thinking으로 여러 번 시도·reject sampling해 858개의 고품질 트레이스를 확보했다.</p> <p><strong>reward 설계 — strict binary reward에 redundancy penalty를 뺀다.</strong> DeepDive는 GRPO를 쓰되 reward를 두 부분으로 나눈다.</p> <p>첫째, 정오·형식을 AND로 묶은 엄격한 binary reward다.</p> \[r(T) = \begin{cases} 1 &amp; (\forall i, \text{Format}(c_i, a_i)) \wedge \text{Judge}(a_{eos}, a^*) \\ 0 &amp; \text{그 외} \end{cases}\] <p>모든 스텝의 추론·행동이 형식을 지켰고(도구 호출 채점, <a href="/blog/2026/tool-call-reward/">#53</a>), 최종 답이 LLM judge가 보기에 정답과 같다고 판정될 때만(judge 채점, <a href="/blog/2026/agentic-judge-rubric/">#54</a>) 1점이다. 하나라도 어긋나면 0점. 정답 표현이 다양할 수 있어(“Inter Corp.” vs “Inter Corporation”) 문자열 매칭 대신 LLM judge를 답 동치 판정에 쓴다.</p> <p>둘째, 검색 다양성을 유도하는 redundancy penalty다. 트레젝토리 \(T\) 안의 검색 질의들 \(Q = [q_1, q_2, \ldots, q_T]\)에 대해, 질의를 키워드 집합으로 보고 두 질의의 자카드 유사도를 구한다.</p> \[\text{sim}(q_i, q_j) = \frac{\lvert q_i \cap q_j \rvert}{\lvert q_i \cup q_j \rvert}\] <p>트레젝토리 전체의 유사도는 모든 질의 쌍의 평균이다.</p> \[S(T) = \frac{1}{T(T-1)} \sum_{i \neq j} \text{sim}(q_i, q_j), \quad S(T) \in [0, 1]\] <p>\(S(T) = 1\)이면 모든 질의가 동일하다는 뜻이고, \(0\)이면 완전히 서로 다른 질의라는 뜻이다. 최종 reward는 이 두 항을 합친다.</p> \[r'(T) = r(T) - \lambda \cdot S(T)\] <p>\(\lambda = 0.1\)로, 정답을 맞히는 것이 여전히 지배적인 목표지만 같은 질의를 반복할수록 소폭 감점된다. 이 페널티는 <a href="/blog/2026/reward-shaping-agentic/">#51</a>에서 다룬 shaping의 전형적인 형태다 — outcome reward(전부 아니면 전무인 binary)만으로는 학습이 안 뜨는 문제를, 트레젝토리 통계에서 뽑은 보조 항으로 부드럽게 만든다.</p> <p><strong>loss masking도 그대로 쓴다.</strong> 논문의 그림에서 확인되는 바로는, reasoning·tool call·answer 토큰에는 loss가 걸리고 web content(관찰) 토큰에는 loss가 걸리지 않는다 — Search-R1의 retrieved token masking과 같은 원리다.</p> <p><strong>결과.</strong> DeepDive-32B는 SFT만 했을 때 BrowseComp 9.5%에서, 멀티턴 RL을 거친 뒤 15.3%로 올랐다(같은 조건 QwQ-32B는 1.3~1.7% 수준, 오픈소스 WebSailor-32B는 10.5%). 같은 비교로 BrowseComp-ZH는 23.0% → 29.7%, Xbench-DeepSearch는 48.5% → 51.8%, SEAL-0은 23.9% → 25.5%로 올랐다. 9B 모델에서는 이 RL 이득이 훨씬 작았는데(BrowseComp 5.6% → 6.3%), 논문은 이를 작은 모델의 제한된 추론 용량이나 합성 데이터에 대한 과적합 경향으로 추정한다. 참고로 OpenAI의 Deep Research는 같은 BrowseComp에서 51.5%를 기록했다(DeepDive 논문의 베이스라인 표에 인용된 수치) — 다만 Deep Research의 구체적인 reward 설계나 학습 방식은 공개된 자료로 확인되지 않는다.</p> <h1 id="experiments">Experiments</h1> <h2 id="reward-구성-비교">reward 구성 비교</h2> <table> <thead> <tr> <th>논문</th> <th>정오 항</th> <th>형식 항</th> <th>페널티/보너스 항</th> <th>학습 스테이지</th> </tr> </thead> <tbody> <tr> <td>Search-R1</td> <td>\(\text{EM}(a_{pred}, a_{gold})\)</td> <td>없음</td> <td>없음</td> <td>단일 스테이지</td> </tr> <tr> <td>R1-Searcher (Stage 1)</td> <td>없음(정답 무관)</td> <td>형식 올바르면 \(+0.5\)</td> <td>검색 시도 \(n \geq 1\)이면 \(+0.5\)</td> <td>2단계 중 1단계</td> </tr> <tr> <td>R1-Searcher (Stage 2)</td> <td>F1 score</td> <td>형식 틀리면 \(-2\)</td> <td>없음(retrieval reward 제거)</td> <td>2단계 중 2단계</td> </tr> <tr> <td>ReSearch</td> <td>F1 (0이 아닐 때 그대로)</td> <td>F1=0인데 형식만 맞으면 \(0.1\)</td> <td>없음</td> <td>단일 스테이지</td> </tr> <tr> <td>DeepDive</td> <td>LLM Judge 답 동치 판정 (AND)</td> <td>모든 스텝 Format 만족 (AND)</td> <td>자카드 유사도 \(\lambda \cdot S(T)\), \(\lambda=0.1\)</td> <td>단일 스테이지, 콜드스타트 SFT 선행</td> </tr> </tbody> </table> <p>이 표에서 눈에 띄는 흐름이 있다. Search-R1은 형식 항이 아예 없고, R1-Searcher는 형식 항의 부호와 크기를 스테이지마다 바꾸고, DeepDive는 형식 항을 정오 항과 AND로 묶어 “형식이 조금이라도 틀리면 정답이어도 0점”이라는 훨씬 가혹한 조건을 건다. 형식 위반에 대한 관용도가 논문마다 다른데, 이 관용도가 실제로 학습 안정성에 영향을 준다는 게 R1-Searcher의 ablation(뒤에서 다룸)이 보여주는 지점이다.</p> <h2 id="벤치마크별-개선폭">벤치마크별 개선폭</h2> <table> <thead> <tr> <th>논문</th> <th>벤치마크</th> <th>비교 기준</th> <th>결과</th> </tr> </thead> <tbody> <tr> <td>Search-R1 (Qwen2.5-7B)</td> <td>7개 QA 평균 EM</td> <td>RAG(0.304)</td> <td>Search-R1-base 0.431 (상대 +41%)</td> </tr> <tr> <td>Search-R1 (Qwen2.5-7B)</td> <td>7개 QA 평균 EM</td> <td>최강 베이스라인 Rejection Sampling(0.348)</td> <td>Search-R1-base 0.431 (상대 +24%)</td> </tr> <tr> <td>Search-R1 (Qwen2.5-3B)</td> <td>7개 QA 평균 EM</td> <td>최강 베이스라인 RAG(0.270)</td> <td>Search-R1-instruct 0.325 (상대 +20%)</td> </tr> <tr> <td>R1-Searcher (Llama-3.1-8B)</td> <td>HotpotQA (LLM judge)</td> <td>ReARTeR+GPT-4o-mini</td> <td>상대 +48.2%</td> </tr> <tr> <td>R1-Searcher</td> <td>2WikiMultiHopQA (LLM judge)</td> <td>ReARTeR+GPT-4o-mini</td> <td>상대 +21.7%</td> </tr> <tr> <td>R1-Searcher</td> <td>Bamboogle, OOD (LLM judge)</td> <td>ReARTeR+GPT-4o-mini</td> <td>상대 +4.0%</td> </tr> <tr> <td>ReSearch (Qwen2.5-7B)</td> <td>4개 멀티홉 QA 평균</td> <td>최강 베이스라인</td> <td>EM 상대 +15.81%, judge 상대 +17.56%</td> </tr> <tr> <td>ReSearch (Qwen2.5-32B)</td> <td>4개 멀티홉 QA 평균</td> <td>최강 베이스라인</td> <td>EM 상대 +14.82%, judge 상대 +15.46%</td> </tr> <tr> <td>DeepDive-32B</td> <td>BrowseComp</td> <td>SFT-only(9.5%)</td> <td>RL 15.3%</td> </tr> <tr> <td>DeepDive-32B</td> <td>BrowseComp-ZH</td> <td>SFT-only(23.0%)</td> <td>RL 29.7%</td> </tr> <tr> <td>DeepDive-32B</td> <td>Xbench-DeepSearch</td> <td>SFT-only(48.5%)</td> <td>RL 51.8%</td> </tr> <tr> <td>DeepDive-32B</td> <td>SEAL-0</td> <td>SFT-only(23.9%)</td> <td>RL 25.5%</td> </tr> </tbody> </table> <p>공통적으로 확인되는 패턴 하나는, 모든 논문에서 “RL이 SFT-only보다 낫다”는 비교가 등장한다는 점이다. DeepDive는 이를 가장 직접적으로 보여준다 — 같은 콜드스타트 SFT 체크포인트에서 시작해 RL만 추가했을 때 네 벤치마크 모두에서 안정적으로 개선됐다.</p> <h2 id="반례--redundancy-penalty를-넣고-뺐을-때">반례 — redundancy penalty를 넣고 뺐을 때</h2> <p>DeepDive는 reward 설계에 대한 ablation을 논문에 직접 실었다. redundancy penalty를 껐을 때와 켰을 때의 차이는 이렇다.</p> <ul> <li><strong>끄면(w/o redundancy penalty)</strong>: 학습이 진행돼도 트레젝토리당 검색 질의 개수가 계속 늘어난다. 정답 하나를 맞히기 위해 거의 동일한 질의를 여러 번 반복하는 경향이 관찰된다 — binary reward만으로는 “검색을 많이 하는 것”과 “다양하게 검색하는 것”을 구분하지 못하기 때문에, 모델 입장에서는 같은 질의를 살짝 바꿔 반복 제출하는 게 손해 볼 게 없는 전략이 된다.</li> <li><strong>켜면(w/ redundancy penalty)</strong>: 학습 후반부 정확도가 약 20% 높아지고, 동일 조건에서 도구 호출 횟수는 약 14% 줄어든다. 즉 페널티가 정답률을 깎지 않으면서 탐색을 효율화한다.</li> </ul> <p>메커니즘은 앞서 본 수식 \(r'(T) = r(T) - \lambda \cdot S(T)\) 그대로다. \(S(T)\)는 트레젝토리 안 모든 질의 쌍의 평균 자카드 유사도이므로, “검색 5번 중 3번이 사실상 같은 질의”인 궤적은 \(S(T)\)가 커져 감점을 받는다. \(\lambda = 0.1\)이라는 작은 가중치가 핵심이다 — 페널티가 너무 크면 모델이 아예 검색을 줄여버릴 위험이 있는데(\(S(T)\)를 낮추는 가장 쉬운 방법은 질의 자체를 적게 내는 것이다), 논문은 정답률 손실 없이 탐색만 효율화된 결과를 보고한다.</p> <p>같은 논문의 format reward ablation도 짚어둘 만하다. format reward를 빼면 정확도 곡선이 학습 내내 약 8.0 근처에 거의 평평하게 머물지만, 넣으면 꾸준히 상승하며 항상 약 2%p 더 높은 수준을 유지한다. 즉 이 도메인에서 형식 항은 단순한 “패널티 방지용 안전장치”가 아니라, 학습 자체를 이륙시키는 데 관여한다.</p> <h2 id="r1-searcher가-보여준-두-번째-반례--em에서-f1로">R1-Searcher가 보여준 두 번째 반례 — EM에서 F1로</h2> <p>R1-Searcher의 ablation도 같은 종류의 교훈을 다른 각도에서 보여준다. 답 reward를 EM으로 두면 학습 중 응답 길이가 짧아지는 방향으로 붕괴하고 최종 성능도 F1 대비 크게 뒤처졌다(F1 대비 52.6% 격차). EM은 “정답 문자열과 완전히 일치해야 1점”이라는 극단적으로 엄격한 채점 기준이라, 개방형 질문 응답에서는 정답의 의미가 맞아도 표현이 달라 0점 처리되는 경우가 잦다. 이 경우 모델 입장에서는 애매한 표현을 아예 짧게 잘라 확률을 낮추는 방향으로 신호가 왜곡된다. Search-R1이 같은 EM으로도 성공했다는 사실과 대조하면, “EM이 절대적으로 나쁘다”는 결론이 아니라 <strong>채점 기준의 엄격도와 학습 데이터·태스크 난이도가 맞물려야 한다</strong>는 결론에 가깝다.</p> <h1 id="통계-요약">통계 요약</h1> <table> <thead> <tr> <th>항목</th> <th>Search-R1</th> <th>R1-Searcher</th> <th>ReSearch</th> <th>DeepDive</th> </tr> </thead> <tbody> <tr> <td>정오 채점</td> <td>EM</td> <td>F1 (Stage 2)</td> <td>F1</td> <td>LLM Judge</td> </tr> <tr> <td>형식 채점</td> <td>없음</td> <td>있음 (스테이지별 부호 다름)</td> <td>있음 (F1=0일 때만 개입)</td> <td>있음 (정오와 AND)</td> </tr> <tr> <td>검색 다양성 페널티</td> <td>없음</td> <td>없음</td> <td>없음</td> <td>자카드 유사도 기반, \(\lambda=0.1\)</td> </tr> <tr> <td>학습 커리큘럼</td> <td>단일 스테이지</td> <td>2단계(검색 시도 → 정답)</td> <td>단일 스테이지</td> <td>콜드스타트 SFT + 단일 RL 스테이지</td> </tr> <tr> <td>loss masking</td> <td>검색 결과 토큰 마스킹</td> <td>검색 결과 토큰 마스킹</td> <td>명시적 언급 없음</td> <td>관찰 토큰 마스킹(그림상 확인)</td> </tr> <tr> <td>대표 hacking 관찰</td> <td>(논문에 명시 없음, 형식은 안정적이었다고 보고)</td> <td>가짜 검색 결과 생성, 검색 생략, CEM 패딩</td> <td>(논문에 명시 없음)</td> <td>중복 질의 반복</td> </tr> <tr> <td>대표 방어</td> <td>순수 EM + 토큰 마스킹</td> <td>2단계 커리큘럼 + 형식 페널티</td> <td>조각별 reward</td> <td>redundancy penalty + strict AND 채점</td> </tr> </tbody> </table> <h1 id="conclusion">Conclusion</h1> <p>네 논문을 관통하는 메시지는 이렇다. <strong>검색 에이전트는 reward의 조달 자체는 쉽다. 정답이 있는 QA라 EM이나 F1 같은 규칙, 또는 표현 다양성이 문제될 때는 LLM judge 하나만 있으면 채점이 끝난다. 하지만 그 쉬운 스칼라 하나가 트레젝토리 전체에 브로드캐스트되는 순간, “어느 검색이 결정적이었는가”라는 질문에는 아무도 답하지 못한다.</strong> 이 시리즈의 언어로 말하면, 이 도메인은 <a href="/blog/2026/environment-as-reward/">#52</a>의 환경 검증과 <a href="/blog/2026/tool-call-reward/">#53</a>의 도구 호출 채점을 한 스칼라 안에 합쳐 쓰지만, 그 스칼라를 <a href="/blog/2026/turn-level-reward/">#48</a>~<a href="/blog/2026/token-segment-credit/">#50</a>에서 다룬 턴·스텝·토큰 단위로 쪼개는 시도는 거의 하지 않는다.</p> <p>네 논문이 이 성긴 신호를 다루는 전략은 저마다 달랐다.</p> <ol> <li><strong>Search-R1</strong>: reward를 최대한 단순하게 유지하는 대신, retrieved token masking으로 “누구를 학습시킬지”만 정교하게 걸렀다.</li> <li><strong>R1-Searcher</strong>: reward 자체는 단순하게 두되, 학습 커리큘럼을 2단계로 쪼개 “검색하는 법”과 “정답 맞히는 법”을 순차적으로 가르쳤다.</li> <li><strong>ReSearch</strong>: 형식과 정답을 조각별 함수 하나로 압축해 커리큘럼 없이도 비슷한 효과를 노렸다.</li> <li><strong>DeepDive</strong>: 트레젝토리 통계(질의 간 자카드 유사도)를 shaping 항으로 추가해, outcome reward만으로 잡히지 않는 “검색 다양성”이라는 축을 보완했다.</li> </ol> <p>hacking 패턴도 이 전략의 이면이었다. 형식 항이 없거나 약하면 검색을 생략하거나(R1-Searcher의 Stage 1 생략 실험) 가짜 검색 결과를 지어내는(<code class="language-plaintext highlighter-rouge">&lt;begin_of_documents&gt;</code> 없이 문서를 만드는) hacking이 나타났고, 다양성 페널티가 없으면 같은 질의를 반복하는 hacking이 나타났다(DeepDive ablation). 반대로 채점 기준을 너무 엄격하게 잡으면(EM) 응답이 위축되는 방향의 붕괴가 나타났다(R1-Searcher ablation). 즉 이 도메인의 reward hacking은 “몰래 속이는” 형태보다는, <strong>채점 기준의 엄격도와 형식 강제의 강도가 학습 안정성과 직결되는 형태</strong>로 나타난다.</p> <p>한계도 분명하다. 네 논문 모두 “어느 검색 스텝이 결정적이었는가”를 직접 묻는 process-level 신호는 설계하지 않았다. DeepDive의 redundancy penalty가 가장 근접한 시도지만, 이것도 트레젝토리 전체의 통계량이지 스텝 단위 credit은 아니다. 이 공백은 다음 도메인들에서도 계속 마주치게 될 질문이다 — <a href="/blog/2026/swe-agent-rl/">#56</a> 코드 에이전트는 테스트 실행이라는 훨씬 비싸지만 훨씬 세밀한 검증 수단을 갖고 있고, <a href="/blog/2026/web-gui-agent-rl/">#57</a> 웹·GUI 에이전트는 반대로 정답 자체가 모호해 judge에 더 크게 의존한다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Jin et al., 2025. <a href="https://arxiv.org/abs/2503.09516">Search-R1: Training LLMs to Reason and Leverage Search Engines with Reinforcement Learning</a>. arXiv:2503.09516.</li> <li>Song et al., 2025. <a href="https://arxiv.org/abs/2503.05592">R1-Searcher: Incentivizing the Search Capability in LLMs via Reinforcement Learning</a>. arXiv:2503.05592.</li> <li>Chen et al., 2025. <a href="https://arxiv.org/abs/2503.19470">ReSearch: Learning to Reason with Search for LLMs via Reinforcement Learning</a>. arXiv:2503.19470.</li> <li>Lu et al., 2025. <a href="https://arxiv.org/pdf/2509.10446">DeepDive: Advancing Deep Search Agents with Knowledge Graphs and Multi-Turn RL</a>. arXiv:2509.10446.</li> <li>Wei et al., 2025. <a href="https://arxiv.org/abs/2504.12516">BrowseComp: A Simple Yet Challenging Benchmark for Browsing Agents</a>. arXiv:2504.12516.</li> <li><a href="https://github.com/PeterGriffinJin/Search-R1">GitHub: PeterGriffinJin/Search-R1</a></li> <li><a href="https://github.com/THUDM/DeepDive">GitHub: THUDM/DeepDive</a></li> <li><a href="https://github.com/Agent-RL/ReSearch">GitHub: Agent-RL/ReSearch</a></li> <li>Shao et al., 2024. <a href="https://arxiv.org/abs/2402.03300">DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models</a>. (GRPO 원 논문)</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰다섯 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><strong>(현재 글)</strong> 검색 에이전트 — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="reinforcement-learning"/><category term="agentic-rl"/><category term="search-agent"/><category term="credit-assignment"/><category term="reward-design"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #55 — 검색 에이전트의 reward는 EM/F1로 손쉽게 나오는데, 왜 중간 신호는 여전히 성긴가]]></summary></entry><entry><title type="html">궤적을 judge가 채점한다 — rubric 생성형 reward의 확장</title><link href="https://www.wonbeomjang.kr/blog/2026/agentic-judge-rubric/" rel="alternate" type="text/html" title="궤적을 judge가 채점한다 — rubric 생성형 reward의 확장"/><published>2026-08-11T00:54:00+00:00</published><updated>2026-08-11T00:54:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/agentic-judge-rubric</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/agentic-judge-rubric/"><![CDATA[<blockquote> <p><a href="https://arxiv.org/abs/2504.08942">AgentRewardBench: Evaluating Automatic Evaluations of Web Agent Trajectories</a> (Lù et al., arXiv 2025)</p> </blockquote> <h1 id="introduction">Introduction</h1> <p><a href="/blog/2026/environment-as-reward/">#52</a>는 환경의 최종 상태(파일이 생겼는가, DB row가 바뀌었는가, API가 200을 반환했는가)로 궤적을 채점했다. <a href="/blog/2026/tool-call-reward/">#53</a>은 그 안의 개별 도구 호출 — 스키마가 맞는가, 인자가 유효한가 — 을 채점했다. 둘 다 공통점이 있다. <strong>프로그램이 “예/아니오”로 답할 수 있는 것만 본다.</strong></p> <p>그런데 프로그램이 답할 수 없는 질문이 남는다. “이 궤적이 좋은 접근이었나?” 결과가 맞아도 과정이 나빴을 수 있다 — 남의 주문을 잘못 취소했다가 되돌리고, 같은 API를 열 번 재시도하고, 결국 운 좋게 정답에 도착한 궤적도 최종 상태 검증기 앞에서는 완벽한 1점이다. 반대로 결과가 아깝게 틀렸어도 과정은 훌륭했을 수 있다 — 정확한 전략으로 접근했는데 마지막 API가 rate limit에 걸려 실패한 경우다. 이런 “과정의 질”은 규칙으로 짤 수 없고, 사람이 매번 채점하기엔 궤적 수가 너무 많다. 남는 선택지는 judge다.</p> <p>이 시리즈가 1~8부에서 정리한 reward <a href="/blog/2026/reward-model-design/">4분류</a> — 규칙 기반, 스칼라 리워드 모델, reference 기반 judge, generative reward model(GRM) — 중 ③④가 이번 편의 무대다. 지금까지는 이 둘이 응답 하나(prompt-response 쌍)를 판정했다. 이 글은 판정 대상이 <strong>응답이 아니라 궤적</strong>으로 바뀔 때 무엇이 달라지는지를 다룬다.</p> <p>결론을 먼저 적는다. 궤적으로 확장한 judge는 두 얼굴을 가진다.</p> <ol> <li><strong>강력해진다.</strong> rubric을 궤적에 맞춰 그때그때 생성하고(Kimi K3의 Agentic GRM), 그 rubric을 트랜지션 단위로 쪼개 적용할 수 있다(TRCA). 환경검증과 도구채점이 놓치는 “부작용”과 “불필요한 반복” 같은 축을 하나의 자연어 판정에 담을 수 있다.</li> <li><strong>더 비싸지고, 더 쉽게 뚫린다.</strong> 판정 1건이 10만 토큰짜리 궤적을 읽어야 할 수도 있고, 그 비용을 감당 못 한 판정자는 궤적의 결말에 의존하게 된다. 정책은 이걸 학습으로 발견한다 — “그럴듯하게 끝맺으면 이긴다”는 사실을. <a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool</a>이 응답 judge 하나가 토큰 하나로 뒤집히는 걸 보였다면, 궤적 judge는 구조적으로 더 크게 뚫린다. 이 취약점이 <a href="/blog/2026/agentic-reward-hacking/">#58</a>에서 본격적인 공격 표면이 된다.</li> </ol> <h1 id="background">Background</h1> <h2 id="4분류가-궤적에서-다시-배치되는-자리">4분류가 궤적에서 다시 배치되는 자리</h2> <p>본격적으로 들어가기 전에, 1~8부의 reward <a href="/blog/2026/reward-model-design/">4분류</a>가 이 시리즈 3부에서 어디에 각각 배치됐는지 정리하고 가자. 응답 단위였던 분류가 궤적 단위로 넘어오면서 항목마다 무게가 다르게 실린다.</p> <table> <thead> <tr> <th>RLHF 4분류</th> <th>응답 단위(1~8부)</th> <th>궤적 단위(이 시리즈 3부)</th> </tr> </thead> <tbody> <tr> <td>① 규칙 기반</td> <td>정답 문자열 매칭, 형식 검사</td> <td><a href="/blog/2026/environment-as-reward/">#52</a> 환경검증 — 최종 상태를 규칙으로 확인</td> </tr> <tr> <td>② 스칼라 리워드 모델</td> <td>학습된 RM이 응답 하나에 점수 하나</td> <td>궤적 전체에 스칼라 하나는 신호가 지나치게 성겨서 이 시리즈에서는 거의 쓰이지 않는다</td> </tr> <tr> <td>③ reference 기반 judge</td> <td>정답과 후보를 대조</td> <td><a href="/blog/2026/tool-call-reward/">#53</a> 도구채점의 일부(스키마·기대 인자와의 대조)</td> </tr> <tr> <td>④ GRM(생성형 리워드 모델)</td> <td>rubric·자유 서술 판정</td> <td>이 글의 Kimi K3 Agentic GRM, TRCA</td> </tr> </tbody> </table> <p>이 표가 보여주는 것은 단순하다. 궤적 단위로 넘어오면 ②는 거의 자취를 감추고, ①은 환경검증으로, ③은 도구채점의 일부로 흡수된다. 남는 건 ④뿐인데, ④가 감당해야 할 몫이 응답 하나였을 때보다 훨씬 커졌다 — “이 텍스트가 좋은가”가 아니라 “이 실행 과정 전체가 좋은가”를 판정해야 하기 때문이다. 이 확장이 정확히 무엇을 어렵게 만드는지가 다음 절의 주제다.</p> <h2 id="응답-judge와-궤적-judge-판정-대상이-다르다">응답 judge와 궤적 judge, 판정 대상이 다르다</h2> <p>응답 judge가 받는 입력은 (prompt, response) 한 쌍이다. 길이는 대개 수백에서 수천 토큰이다. 궤적 judge가 받는 입력은 (사고, 행동, 관측)의 시퀀스다. 여기서 관측(tool output, 웹페이지 텍스트, 코드 diff, DB 쿼리 결과)이 특히 크다. 검색 에이전트가 페이지 10개를 열람하면 관측만으로 수만 토큰이 쌓인다.</p> <p>이 차이가 세 가지를 동시에 어렵게 만든다.</p> <p><strong>1. 컨텍스트 한계.</strong> 궤적 전체가 judge 자신의 context window 안에 들어가야 정확한 판정이 가능하다. 안 들어가면 요약·샘플링·잘라내기 중 하나를 선택해야 하는데, 그 선택 자체가 이미 판정을 왜곡하는 결정이다. 무엇을 잘라낼지 정하는 순간 그 판정은 “궤적 전체”가 아니라 “judge가 고른 부분”에 대한 판정이 된다. 비유하자면 이렇다 — 응답 judge를 채점하는 건 답안지 한 장을 읽고 점수를 매기는 일이지만, 궤적 judge를 채점하는 건 학생이 한 학기 동안 쓴 연습장 전부를 읽고 학점을 매기는 일에 가깝다. 시간이 없으면 결국 마지막 장(결론)이나 학생이 직접 쓴 자체 요약만 보고 학점을 매기게 되는데, 그 순간 “연습장 전체를 봤다”는 전제가 깨진다.</p> <p><strong>2. 어디를 보고 판정할지.</strong> 응답 judge는 “이 텍스트가 좋은가” 하나만 보면 된다. 궤적 judge는 “이 시퀀스의 어느 지점이 결정적이었는가”를 봐야 한다. 최종 상태 하나로는 안 보이는 축들이 있다 — 부작용을 일으켰는가, 불필요하게 반복했는가, 효율적으로 도달했는가.</p> <p><strong>3. 부분 성공의 표현.</strong> 환경검증(#52)은 이진(0/1) 판정이 많다. 파일이 있거나 없거나다. 하지만 궤적은 “80% 왔는데 마지막에 삐끗”처럼 연속적인 실패가 흔하다. 이걸 스칼라 하나로 뭉개면 어디서 궤적이 틀어졌는지에 대한 신호가 사라진다.</p> <p>이 어려움이 추상적 주장이 아니라는 걸 실측한 벤치마크가 있다. <strong>AgentRewardBench</strong> (Lù et al., arXiv 2025)는 웹 에이전트 궤적 1,302개(5개 벤치마크 × 4개 대상 모델)를 전문가가 직접 리뷰하며 세 가지 질문에 답하게 했다 — <strong>성공(success)했는가, 부작용(side effect)을 일으켰는가, 불필요하게 반복(repetitiveness)했는가.</strong> 이 세 축에 대해 12개 LLM judge를 평가한 결과, 모든 벤치마크에서 고르게 우수한 judge는 하나도 없었다. 더 눈에 띄는 발견은 따로 있다 — 기존에 표준으로 쓰이던 <strong>룰 기반 평가(=#52식 환경검증)가 실제 성공률을 체계적으로 과소 보고(underreport)</strong>한다는 것이다. 즉 환경검증이 “성공을 성공으로 인정하지 못하는” 방향으로 이미 틀리고 있다는 걸 사람 리뷰와의 비교로 보여준 셈이다. 이게 이번 편이 필요한 이유의 실증적 근거다.</p> <p>같은 결론이 다른 도메인에서도 되풀이된다. <strong>MobileJudgeBench</strong> (arXiv 2026, 2608.11434)는 모바일 에이전트 궤적 931개(6개 벤치마크, 4개 에이전트 모델, 68개 앱)를 사람이 주석한 뒤 6개 judge 방법론을 비교했다. 두 가지가 눈에 띈다 — 하나는 스크린샷을 몇 장 샘플링하는 단순한 baseline judge가 정교하게 설계된 전용 판정 파이프라인과 견줄 만하거나 오히려 능가했다는 점(즉 파이프라인을 복잡하게 짜는 것보다 judge의 backbone 모델 자체가 품질을 좌우한다), 다른 하나는 벤치마크 품질 지표가 실제 활용도와 상관돼 있다는 점이다 — judge를 on-policy RL의 reward 신호로 썼을 때의 다운스트림 성능까지 예측할 수 있었다. 웹 도메인(AgentRewardBench)과 모바일 도메인(MobileJudgeBench)에서 독립적으로 같은 그림이 나온다는 건, “궤적 judge는 균일하게 잘하지 못한다”는 문제가 특정 도메인의 우연이 아니라는 뜻이다.</p> <h2 id="rubric-기반-채점이-궤적으로-확장될-때-무엇이-달라지는가">rubric 기반 채점이 궤적으로 확장될 때 무엇이 달라지는가</h2> <p>8부의 <a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards</a>와 <a href="/blog/2026/prometheus-2/">Prometheus 2</a>는 응답 하나에 rubric을 적용하는 방법을 다뤘다(재서술은 링크로 대신한다). 여기서는 그게 <strong>궤적으로 확장될 때 새로 생기는 설계 축</strong>만 짚는다.</p> <p>응답 하나에 rubric을 적용하는 건 “결과물 채점”이다. 궤적에 적용하면 최소 세 가지 축이 새로 열린다.</p> <ol> <li><strong>언제 채점하나</strong> — 끝에서 한 번(outcome-level) 대 매 턴·트랜지션마다(process-level).</li> <li><strong>rubric을 누가 만드나</strong> — 사람이 태스크별로 미리 써두는 고정 rubric 대 judge가 궤적을 보고 그 자리에서 생성하는 생성형 rubric.</li> <li><strong>부분 진행을 어떻게 반영하나</strong> — 최종 점수 하나 대 트랜지션마다 누적되는 보상.</li> </ol> <p>이 세 축의 조합 하나를 구체적으로 보여주는 최근 논문이 <strong>TRCA</strong>(Transition-wise Rubric Credit Assignment, arXiv 2026, 2608.16156)다. 이 논문은 매 트랜지션 — 행동 하나가 만든 환경 상태 변화 — 마다 세 개의 rubric으로 채점한다.</p> <ul> <li><strong>Evidence</strong>: 이 트랜지션이 문제 해결에 쓸 새 정보를 얻었는가.</li> <li><strong>Execution</strong>: 유효한 실행이었는가.</li> <li><strong>Invalidity</strong>: 무효하거나 퇴행적인 행동인가.</li> </ul> <p>이 판정에서 두 종류의 보상을 만든다. <strong>Foundational Rubric Reward</strong>는 그 트랜지션 자체의 지역적 품질이고, <strong>Breakthrough Rubric Reward</strong>는 “이전 트랜지션들에서 아직 충족되지 않았던 Evidence·Execution 조건을 새로 충족했는가”를 추적한다. 후자가 핵심이다 — 이미 충족한 조건을 반복해서 채워봐야 추가 보상이 없으므로, 같은 행동을 반복하는 궤적에는 자연스럽게 페널티가 걸린다. 학습된 평가자나 “성공한 궤적을 앵커로 삼는” 기존 방식 없이, 트랜지션 자체의 rubric 판정만으로 credit을 만든다는 게 요지다. ALFWorld, WebShop, 검색 기반 QA 7종에서 검증했고, Qwen2.5-7B-Instruct 기준 WebShop 점수가 6.0~12.6%p, Qwen2.5-3B-Instruct 기준 검색 QA 평균 점수가 1.9~18.3%p 개선됐다. 저자들은 특히 초기 RL 구간 — 성공 궤적이 희귀해 앵커 기반 방법이 힘을 못 쓰는 구간 — 에서 이 방식이 유효하다는 점을 강조한다.</p> <p>구체적인 숫자로 두 보상의 차이를 따라가 보자. 다음은 TRCA의 아이디어를 설명하기 위해 이 글이 구성한 예시이며, 원문의 실제 산식이나 스케일이 아니다. 궤적이 5개의 트랜지션으로 이뤄져 있고, 이 태스크에서 필요한 Evidence 조건이 A·B·C 세 가지라고 하자.</p> <table> <thead> <tr> <th>트랜지션</th> <th>실제로 벌어진 일</th> <th>Foundational Reward</th> <th>Breakthrough Reward</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>조건 A를 처음 충족</td> <td>+1 (유효한 실행)</td> <td>+1 (A 최초 충족)</td> </tr> <tr> <td>2</td> <td>무효한 행동(존재하지 않는 API 호출)</td> <td>−1 (Invalidity)</td> <td>0</td> </tr> <tr> <td>3</td> <td>조건 A를 다시 확인만 함</td> <td>+1 (유효한 실행)</td> <td>0 (A는 이미 충족됨)</td> </tr> <tr> <td>4</td> <td>조건 B를 처음 충족</td> <td>+1 (유효한 실행)</td> <td>+1 (B 최초 충족)</td> </tr> <tr> <td>5</td> <td>조건 A·B·C를 한 번에 정리, 그중 C가 신규</td> <td>+1 (유효한 실행)</td> <td>+1 (C만 신규)</td> </tr> </tbody> </table> <p>트랜지션 3이 핵심이다. Foundational Reward는 여전히 양수다 — 유효한 실행이었으니까. 하지만 Breakthrough Reward는 0이다 — 이미 아는 걸 다시 확인했을 뿐 태스크를 진전시키지 않았기 때문이다. 이게 앞서 말한 “반복 행동에 자연스러운 페널티가 걸린다”는 설명의 구체적인 형태다. 트랜지션 하나만 보면 “유효한 실행”이라 나쁘지 않아 보이지만, 궤적 전체에서 보면 “이미 아는 걸 다시 확인하느라 스텝 하나를 낭비했다”는 게 Breakthrough Reward의 0이라는 값에 담긴다 — outcome-level 채점 하나로는 절대 볼 수 없는 정보다.</p> <p>이게 왜 중요한지는 비교하면 분명해진다. outcome-level rubric은 #52의 환경검증과 크게 다르지 않다 — 끝에 한 번 채점하는 건 매한가지고, 채점 함수가 규칙 대신 judge라는 차이만 있다. 궤적 judge가 진짜 다른 도구가 되는 지점은 <strong>판정을 트랜지션 단위로 쪼갤 수 있다는 것</strong>이다. 그리고 그 대가는 뒤에서 계산하는 비용이다 — 판정 횟수가 트랜지션 수만큼 늘어난다.</p> <h1 id="method">Method</h1> <h2 id="kimi-k3의-agentic-grm--judge가-스스로-rubric을-만든다">Kimi K3의 Agentic GRM — judge가 스스로 rubric을 만든다</h2> <p>Kimi K3 tech report(Kimi Team, arXiv 2607.24653, “K3 tech report”)는 2.8T 파라미터 MoE(활성 파라미터 104B), 1M 토큰 컨텍스트, Kimi Delta Attention 기반 모델이다. Post-training RL을 세 도메인으로 나눈다 — general tasks, general agents(장기 지평 assistant 작업, deep research, 문단 단위 글쓰기), coding agents. 이 중 <strong>general agents 도메인</strong>이 이번 글의 표적이다. 검증 가능한 정답이 없는 영역이기 때문이다.</p> <p>원문의 해당 문단을 옮기면 이렇다.</p> <blockquote> <p>“검증 불가능한(non-verifiable) 일반 태스크에 대해 우리는 Agentic Generative Reward Model(GRM)을 채택한다. 이는 Kimi K2/K2.5에서와 같이 tournament 방식의 binary comparison 그룹 보상을 유지한다. 향상된 판단을 위한 일반적 agentic 능력을 넘어, 이 agentic judge는 다음의 의무 프로토콜을 따라야 한다: (1) 결과물·산출물·텍스트 출력을 읽는다 (2) rubric을 생성한다 (3) 각 후보를 그 rubric에 대해 채점한다 (4) rubric이 매긴 점수를 scorepad에 기록한다.”</p> </blockquote> <p>이 프로토콜을 순서대로 풀면 다음과 같다.</p> <ol> <li><strong>읽는다</strong> — 판정 대상(결과물·산출물·텍스트 출력)을 입력받는다.</li> <li><strong>rubric을 생성한다</strong> — 판정 대상에 맞춰 채점 기준을 그 자리에서 만든다. 사람이 미리 써둔 고정 rubric이 아니다.</li> <li><strong>채점한다</strong> — 생성한 rubric에 각 후보를 대조해 점수를 매긴다.</li> <li><strong>scorepad에 기록한다</strong> — rubric과 점수를 하나의 기록으로 남긴다.</li> </ol> <p>세 가지가 눈에 띈다.</p> <p><strong>첫째, binary tournament.</strong> 절대 점수를 매기지 않고 후보끼리 짝을 지어 이긴 쪽만 표시한다. GRPO 그룹 내 후보들의 상대 서열만 있으면 되므로, judge마다 “5점”과 “8점”의 기준이 다른 절대 스케일 문제를 피해간다. 심사위원 한 명이 참가자 8명 각각에게 절대 점수를 매기는 대회보다, 8명을 토너먼트 대진표에 넣어 옆 사람과 번갈아 겨루게 하는 쪽이 “누가 더 잘했나”를 훨씬 안정적으로 가려낸다는 것과 같은 이치다. 대신 대진표를 짜려면 대회 규모(그룹 크기)가 커질수록 경기 수가 조합적으로 늘어난다 — 뒤에서 이 비용을 정확히 계산한다.</p> <p><strong>둘째, rubric을 미리 정해두지 않는다.</strong> judge가 “이 결과물을 무슨 기준으로 평가해야 하는가”를 스스로 정하고 그다음 채점한다. Rubrics as Rewards 같은 고정 rubric 방식과 달리 태스크 다양성에 매번 대응할 수 있다. 대신 “judge가 스스로 만든 기준으로 스스로 채점”하는 순환 구조가 생긴다 — 기준 자체가 느슨해지거나 장황해지는 쪽으로 흐를 위험이 있다.</p> <p><strong>셋째, “the outcome, product, or text output”이라는 표현.</strong> 이 judge가 정확히 무엇을 입력으로 받는지가 원문에 세 단어로만 나와 있다 — 결과물(outcome), 산출물(product), 텍스트 출력(text output). 이건 (사고, 행동, 관측)의 원시 로그 전체라기보다 <strong>최종 산출물</strong>에 가깝게 읽힌다. general agents 도메인의 산출물(deep research 보고서, 장문 assistant 응답, 문단 단위 글쓰기 결과)이 대개 “텍스트 결과물” 형태이므로 이 표현 자체는 자연스럽다. 다만 이건 원문이 명시적으로 주장하는 바가 아니라 이 글의 해석인데 — 뒤에서 다룰 “판정자가 결말만 보고 판단하면 정책은 결말만 그럴듯하게 쓰는 법을 배운다”는 취약점과 정확히 같은 모양이라는 점은 짚어둘 만하다.</p> <p>원문에는 한 가지 표현이 더 있다 — “향상된 판단을 위한 일반적 agentic 능력을 넘어(beyond generic agentic capabilities for enhanced judgment)”라는 구절이다. 이건 이 judge가 판정 도중 도구를 쓴다는 뜻으로 읽히지는 않는다(원문이 그렇게 명시하지 않는다). 오히려 <strong>judge 자체가 agentic RL로 학습된 모델</strong>이라는 전제를 깔고 있는 것에 가깝다 — 즉 정책과 judge가 같은 계보의 모델이고, 그 judge가 이미 장기 지평 태스크를 스스로 수행해본 경험이 있다는 뜻이다. 이게 왜 궤적 판정에 유리할 수 있는지는 직관적이다 — 궤적을 판정하려면 “이 스텝에서 이 선택이 왜 합리적이었는지”를 이해해야 하는데, 그 이해는 판정자 자신이 비슷한 도구·환경에서 행동해본 경험과 무관하지 않다. 다만 이 인과관계를 K3 원문이 직접 검증하지는 않는다는 점은 분명히 해둔다 — 여기서는 해석일 뿐이다.</p> <p>간접적인 정황 증거는 있다. K3의 평가 스위트에는 딥리서치 산출물을 rubric으로 채점하는 <strong>ResearchRubrics</strong> 벤치마크가 포함돼 있는데, K3는 여기서 76.2점을 받아 비교 대상 모델 중 가장 높았다(원문 Table, arXiv 2607.24653). 이 벤치마크 자체가 Agentic GRM 학습의 산물이라고 확언할 수는 없지만 — 학습에 쓰인 judge와 평가에 쓰인 judge가 같다는 보장도 없다 — 적어도 “rubric 기반 채점을 훈련 신호로 쓴 모델이 rubric 기반 평가에서도 강하다”는 방향의 일관성은 확인된다.</p> <p>이 rubric 순환 구조가 만드는 위험(장황함을 보상하는 방향으로 흐르는 것)에 대해 K3는 명시적 방어 장치를 둔다. <strong>verbosity budget control</strong>이다 — reasoning-effort RL에 쓰는 것과 같은 방식으로, cold-start 모델에서 추정한 초기 verbosity \(\ell_0\)과 배수 \(\sigma\)를 두고, 출력 길이가 \(\sigma \cdot \ell_0\)를 넘는 후보는 자동으로 tournament에서 패배 처리한다. reward hacking을 사후에 벌하는 대신, 애초에 그 경로로는 이길 수 없게 만드는 방식이다.</p> <p>14부의 <a href="/blog/2026/frontier-reward-design/">프론티어 편</a>이 이 GRM을 “reward 설계 계보”(스칼라 RM을 GRM이 대체해가는 흐름) 관점에서 다뤘다면, 여기서는 <strong>판정 대상이 원시 궤적이 아니라 산출물에 수렴한다</strong>는, 궤적 판정 특유의 트레이드오프로 본다는 점이 다르다.</p> <h2 id="두-rubric-확장-방식의-대차대조">두 rubric 확장 방식의 대차대조</h2> <p>Kimi K3(생성형, outcome-level)와 TRCA(고정 카테고리, transition-level)는 같은 “rubric을 궤적에 적용한다”는 목표를 정반대 축에서 풀었다.</p> <table> <thead> <tr> <th>항목</th> <th>고정 rubric (예: Rubrics as Rewards)</th> <th>생성형 rubric (Kimi K3 Agentic GRM)</th> <th>트랜지션 rubric (TRCA)</th> </tr> </thead> <tbody> <tr> <td>채점 시점</td> <td>끝에서 한 번</td> <td>끝에서 한 번(산출물 단위)</td> <td>매 트랜지션마다</td> </tr> <tr> <td>rubric 출처</td> <td>사람이 태스크별로 사전 정의</td> <td>judge가 판정 대상을 보고 즉석 생성</td> <td>3개 고정 카테고리(Evidence/Execution/Invalidity)</td> </tr> <tr> <td>판정 빈도</td> <td>궤적당 1회</td> <td>궤적당 1회(후보 간 pairwise)</td> <td>궤적당 트랜지션 수만큼</td> </tr> <tr> <td>강점</td> <td>재현 가능, judge 편향에 덜 민감</td> <td>태스크 다양성에 자동 대응</td> <td>초기 RL(성공 궤적 희귀 구간)에서도 dense 신호</td> </tr> <tr> <td>위험</td> <td>새 태스크마다 rubric 재작성 필요</td> <td>기준 자체가 판정마다 달라질 수 있음</td> <td>카테고리가 못 잡는 실패 유형은 여전히 놓침</td> </tr> </tbody> </table> <p>세 방식 모두 “판정 1건의 비용”이 다르다는 점을 기억해두자. 다음 절에서 정확히 계산한다.</p> <h1 id="experiments">Experiments</h1> <h2 id="판정-비용-계산">판정 비용 계산</h2> <p>다음 계산은 확인된 벤치마크 수치가 아니라 예시 가정에 기반한 어림값이다. 목적은 정확한 비용 예측이 아니라 “궤적이 길어질수록 판정 비용이 정책 학습 비용을 구조적으로 앞지른다”는 방향성을 보이는 것이다.</p> <p><strong>가정</strong></p> <ul> <li>궤적 평균 스텝 수 \(T = 30\), 스텝당 평균 토큰(사고+행동+관측) \(\approx 800\) → 궤적 길이 \(L_{traj} \approx 24{,}000\) 토큰 (시나리오 A, “보통 궤적”)</li> <li>딥리서치·장문 코딩 등 극단적으로 긴 궤적: \(L_{traj} = 100{,}000\) 토큰 (시나리오 B)</li> <li>judge 오버헤드: rubric 생성 \(L_{rubric} \approx 300\), 후보별 점수·근거 \(L_{score} \approx 500\) → 판정 1건당 오버헤드 800 토큰</li> <li>RL 배치: 스텝당 프롬프트 수 \(N=64\), 그룹 크기 \(K=8\)</li> <li>정책이 실제로 생성하는 토큰(사고+행동만, 관측은 환경이 주므로 제외): 시나리오 A는 궤적당 \(9{,}000\) 토큰(스텝당 300), 시나리오 B는 같은 관측:생성 비율을 유지한다고 가정해 궤적당 \(37{,}500\) 토큰</li> </ul> <p>판정 1건의 비용(pointwise, 후보 하나를 그대로 채점)은 다음과 같다.</p> \[C_{point} = N \times K \times (L_{traj} + L_{rubric} + L_{score})\] <p>여기서 각 기호는 앞서 정의한 대로다. 이 식을 \(L_{traj}\)로 미분하면 \(\partial C_{point} / \partial L_{traj} = NK &gt; 0\) — 판정 비용은 궤적 길이에 (이 단순화된 토큰 카운트 모델에서) 선형으로 비례한다. 다만 이는 하한에 가깝다. 실제 prefill 연산량은 attention 때문에 시퀀스 길이에 대해 초선형(superlinear)으로 늘어날 수 있어, 토큰 수만 세는 이 모델은 실제 비용을 과소평가할 가능성이 높다.</p> <p>Kimi K3처럼 <strong>binary tournament</strong>를 쓰면 후보 하나씩 채점하는 대신 그룹 내 모든 쌍을 비교해야 한다. 그룹 크기 \(K\)일 때 쌍의 수는 \(\binom{K}{2} = K(K-1)/2\)이므로,</p> \[C_{tour} = N \times \binom{K}{2} \times (L_{traj} + L_{rubric} + L_{score}) = \frac{K-1}{2} \times C_{point}\] <p>\(K=8\)이면 \((K-1)/2 = 3.5\)다. 즉 tournament 방식은 pointwise보다 3.5배 더 많은 토큰을 판정에 쓴다 — 그룹 크기를 키워 advantage 추정의 분산을 줄이려 할수록(GRPO 계열의 표준적인 선택) tournament 판정 비용은 제곱으로 커진다는 뜻이다.</p> <p>이 값들을 시나리오 A·B에 대입하면 다음 표가 나온다.</p> <table> <thead> <tr> <th>시나리오</th> <th>\(L_{traj}\)</th> <th>판정 1건 토큰</th> <th>Pointwise judge/step</th> <th>Tournament judge/step(\(K{=}8\))</th> <th>정책 생성/step</th> <th>Pointwise 비율</th> <th>Tournament 비율</th> </tr> </thead> <tbody> <tr> <td>A (보통 궤적)</td> <td>24,000</td> <td>24,800</td> <td>약 12.7M</td> <td>약 44.4M</td> <td>약 4.6M</td> <td>약 2.76배</td> <td>약 9.65배</td> </tr> <tr> <td>B (긴 궤적, 10만 토큰)</td> <td>100,000</td> <td>100,800</td> <td>약 51.6M</td> <td>약 180.6M</td> <td>약 19.2M</td> <td>약 2.69배</td> <td>약 9.41배</td> </tr> </tbody> </table> <p>두 시나리오에서 비율이 거의 같게 나오는 이유는 구조적이다. judge는 관측을 포함한 궤적 전체를 읽어야 하지만, 정책 학습(그래디언트)의 대상은 정책이 직접 생성한 토큰(사고+행동)뿐이다. 관측이 궤적의 대부분을 차지하는 한, <strong>판정 비용은 궤적 길이와 무관하게 정책 학습 비용을 일정 배수만큼 앞지른다.</strong> 여기 가정에서는 그 배수가 pointwise로 약 2.7배, tournament로는 약 9.4~9.6배다. 1,000 스텝을 학습한다고 하면 시나리오 B·tournament 조합만으로 판정에 쓰이는 토큰 누적량이 약 1,800억 토큰에 이른다 — 정책이 실제로 생성해 학습 대상이 되는 토큰(약 192억)의 9배가 넘는 양을, reward 계산 하나에 쓰는 셈이다.</p> <h2 id="토이-예제-같은-결과-다른-궤적">토이 예제: 같은 결과, 다른 궤적</h2> <p>태스크: “고객 A의 최근 주문을 취소하라.”</p> <p><strong>(a) 짧고 정확한 궤적</strong> — 3스텝으로 끝난다.</p> <table> <thead> <tr> <th>스텝</th> <th>행동</th> <th>관측</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>고객 A의 최근 주문 ID를 조회</td> <td>주문 ID <code class="language-plaintext highlighter-rouge">#1042</code> 확인</td> </tr> <tr> <td>2</td> <td><code class="language-plaintext highlighter-rouge">#1042</code>에 취소 API 호출</td> <td>200 OK, 상태 <code class="language-plaintext highlighter-rouge">cancelled</code></td> </tr> <tr> <td>3</td> <td>주문 상태를 재조회해 확인</td> <td><code class="language-plaintext highlighter-rouge">cancelled</code> 확인, 종료</td> </tr> </tbody> </table> <p><strong>(b) 길게 헤매다 우연히 성공한 궤적</strong> — 14스텝을 거친다. 네 국면으로 나눠보면 흐름이 뚜렷하다.</p> <table> <thead> <tr> <th>국면</th> <th>스텝</th> <th>행동</th> <th>관측</th> </tr> </thead> <tbody> <tr> <td>엔드포인트 탐색 실패</td> <td>1~4</td> <td>존재하지 않거나 잘못된 취소 엔드포인트를 순서대로 시도</td> <td>404, 405 등 반복</td> </tr> <tr> <td><strong>부작용 발생</strong></td> <td>5~7</td> <td>파라미터를 잘못 넣어 <strong>고객 B의 주문을 오취소</strong>, 뒤늦게 알아채고 되돌림</td> <td>200 OK(오취소) → 되돌리기 성공</td> </tr> <tr> <td>재시도·오타</td> <td>8~11</td> <td>올바른 엔드포인트를 찾았지만 파라미터 이름을 계속 틀림</td> <td>400 Bad Request 반복</td> </tr> <tr> <td>최종 성공</td> <td>12~14</td> <td>파라미터를 바로잡아 <code class="language-plaintext highlighter-rouge">#1042</code>에 취소 호출, 재조회로 확인</td> <td>200 OK, <code class="language-plaintext highlighter-rouge">cancelled</code> 확인, 종료</td> </tr> </tbody> </table> <p>최종 상태는 (a)와 동일하게 “고객 A의 주문이 취소됨”이다. 하지만 5~7 국면에서 벌어진 일 — 무관한 고객 B의 주문을 건드린 것 — 은 최종 상태만 봐서는 전혀 드러나지 않는다.</p> <p>세 채점 방식이 이 둘을 어떻게 다루는지 비교한다.</p> <table> <thead> <tr> <th>채점 방식</th> <th>(a) 짧고 정확</th> <th>(b) 길게 헤매다 성공</th> <th>구분 가능한가</th> </tr> </thead> <tbody> <tr> <td>환경검증(#52, 최종 상태만)</td> <td>1점</td> <td>1점</td> <td>불가능 — 최종 DB 상태가 같다</td> </tr> <tr> <td>도구채점(#53, 마지막 호출만 검사)</td> <td>통과</td> <td>통과</td> <td>대개 불가능 — 마지막 호출의 스키마·인자만 보면 중간 과정이 안 보인다</td> </tr> <tr> <td>rubric judge(궤적 전체를 읽음)</td> <td>고득점</td> <td>저득점</td> <td>가능</td> </tr> </tbody> </table> <p>rubric judge가 궤적 (a), (b)를 보고 스스로 생성할 법한 rubric의 예:</p> <ol> <li>첫 시도에서 올바른 엔드포인트를 선택했는가.</li> <li>되돌릴 수 없는 부작용(타 고객 주문 오취소 같은)을 일으켰는가.</li> <li>불필요한 재시도가 몇 차례였는가.</li> <li>최종 결과가 사용자 의도와 일치하는가.</li> </ol> <p>(a)는 1~4 모두 만점에 가깝다. (b)는 4번은 만점이지만 2번에서 크게 감점된다 — 되돌렸다 해도 실제로 다른 고객의 주문이 취소됐다 되돌아온 사건 자체는 사라지지 않는다. 3번(재시도 횟수)에서도 감점된다.</p> <p>이 결과가 임의로 지어낸 게 아니라는 점이 중요하다. 위에서 인용한 <strong>AgentRewardBench</strong>가 실측한 세 축 — success, side effects, repetitiveness — 이 이 토이 예제의 rubric 1~4와 정확히 대응한다. 환경검증과 얕은 도구채점은 success 축만 본다(혹은 검사 범위를 크게 늘려야 나머지를 본다). rubric judge는 세 축을 하나의 자연어 판정 안에 자연스럽게 담을 수 있다 — 그 대신 비용은 위 표에서 계산한 대로 궤적 전체를 읽는 만큼 든다.</p> <h2 id="판정자도-뚫린다">판정자도 뚫린다</h2> <p><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool</a>은 응답 judge가 “물론이죠” 같은 상투적 토큰 하나만으로 점수가 뒤집힐 수 있음을 보였다. 텍스트 하나짜리 판정도 이 정도로 취약하다면, 궤적 judge는 구조적으로 더 취약하다. 이유는 단순하다 — 판정자가 컨텍스트 한계나 비용 한계 때문에 궤적 전체를 다 읽지 못하면, 결국 <strong>요약이나 궤적의 결말</strong>에 의존하게 된다. 위에서 짚은 Kimi K3의 “read the outcome, product, or text output”이라는 표현 자체가 이미 이 구조를 내포한다.</p> <p><strong>Confident Closing to Silent Failure</strong> (Advani, FAGEN Workshop @ ICML 2026, arXiv 2606.09863)가 정확히 이 실패 모드를 측정했다. 에이전트가 환경 상태와 무관하게 “작업 완료”를 자신 있게 선언하는 것을 <strong>false success</strong>라 부른다. tau2-bench(9,876개 궤적, 8개 모델군)의 단일 제어(single-control) 도메인에서는 실패의 45~48%가 false success였다. 반면 제어권이 사람과 나뉘는 이중 제어(dual-control) 통신 도메인에서는 이 비율이 3%로 줄었다 — 제어권을 공유하면 거짓 완료 선언이 통하기 어려워진다는 뜻이다. AppWorld(1,879개 궤적, 4개 모델군)에서 명시적으로 상태를 주장하는 코딩 에이전트 궤적 중에서는 <strong>75.8%가 false success</strong>였다. 그리고 judge는 이걸 잘 잡지 못한다 — 5개 judge × 5개 프롬프트 전략(전체 태스크 명세 포함)을 다 시도해도 tau2-bench에서 AUROC 0.65를 넘지 못했고, AppWorld에서는 0.54에 그쳤다. 거의 동전 던지기 수준이다. 원인은 명확하다. judge가 <strong>“확신에 찬 종결 언어(confident closing language)”</strong>(tau2-bench)와 <strong>“대강의 행동-시퀀스 분량”</strong>(AppWorld)이라는 표면적 완료 신호에 의존하기 때문이다. 대조적으로 가벼운 TF-IDF 탐지기는 같은 조건에서 task-disjoint AUROC 0.83(tau2-bench)/0.95(AppWorld)를 내며, 같은 플래그율에서 judge보다 4~8배 많은 false success를 잡아내고 지연시간은 3,300배 낮았다.</p> <p>이게 브리프가 걱정한 그림 그대로다 — <strong>판정자가 결말에 의존하면, 정책은 결말을 그럴듯하게 쓰는 법을 학습한다.</strong> 정책이 이걸 명시적으로 배우지 않아도, RL의 그래디언트는 “reward가 결말의 자신감과 조금이라도 상관돼 있다”는 사실을 스스로 찾아낸다.</p> <p><strong>Gaming the Judge</strong> (Khalifa et al., arXiv 2026, 2601.14691)는 한 걸음 더 나아가 능동적 조작을 보인다. 행동과 관측은 그대로 두고 <strong>CoT(추론 흔적)만 다시 쓰는 방식</strong>으로, 800개의 다양한 웹 태스크 궤적에 대해 최신 VLM judge들의 오탐률(false positive rate)을 최대 90%까지 끌어올렸다. 문체만 바꾸는 조작(더 자신감 있게 쓰기)보다 <strong>내용 자체를 조작하는 방식(진행 신호를 날조)</strong>이 일관되게 더 효과적이었다 — judge가 “그럴듯한 진행 서술”과 실제 진행을 구분하지 못한다는 뜻이다. 프롬프트를 정교화하거나 judge-time compute를 늘려도 취약성은 줄어들 뿐 사라지지 않았다.</p> <p>두 논문을 겹쳐보면 궤적 judge의 취약성이 응답 judge의 취약성과 종류가 다르다는 게 분명해진다. 응답 judge는 “이 텍스트가 매력적으로 보이는가”에서 뚫린다. 궤적 judge는 “이 긴 실행 과정이 성공적으로 보이는가”에서 뚫리는데, 이건 판정자가 실제로 전체를 검증할 시간과 예산이 없다는 <strong>구조적 제약</strong>과 직결돼 있어서 더 근본적이다. 판정 비용이 궤적 길이에 비례해 커진다는 앞 절의 계산과 이 취약성은 같은 원인의 양면이다 — 예산이 없어서 결말에 의존하고, 결말에 의존하니까 뚫린다.</p> <p>이 취약점을 완전히 없앨 수는 없지만, 비용과 취약성 각각을 줄이려는 시도는 있다. <strong>Share the Judge, Learn the Deferral</strong> (arXiv 2026, 2607.27984)은 값싼 judge로 먼저 거르고 확신이 낮은 사례만 비싼 judge에 넘기는 deferral cascade를 제안한다. RewardBench 2에서 이 방식은 전체 계산량의 41.5%만 쓰고도 정확도 89.40%를 냈다 — 8B judge 단독(84.75%)보다 높다. <strong>E-valuator</strong> (arXiv 2025, 2512.03109)는 판정을 순차 가설 검정(sequential hypothesis testing)으로 바꿔, 궤적을 끝까지 읽지 않고도 통계적으로 유효하게 조기 종료할 수 있음을 보였다 — 문제적 궤적을 일찍 끊어 토큰을 아끼는 방향이다. 비슷한 결을 가진 <strong>AgentForesight</strong> (arXiv 2026, 2605.08715)는 궤적이 끝나길 기다리지 않고, 진행 중인 접두(prefix)만 보고 “지금 결정적 오류가 났는가”를 온라인으로 판단하는 auditor를 학습시켜, 외부 벤치마크(Who&amp;When)에서 기존 방법 대비 최대 +19.9%p 성능 향상과 3배 낮은 스텝 국소화 오차를 보였다. 궤적 전체를 다 읽어야 한다는 전제 자체를 깨는 방향이라는 점에서 위 두 방법과 궤를 같이한다. 다만 이 셋 모두 응답 단위 벤치마크나 일반적 검증기 설정, 혹은 별도로 큐레이션된 실패 탐지 코퍼스에서 나온 결과이며, Kimi K3류 궤적 judge에 그대로 적용된다고 확인된 건 아니다. 그리고 두 방법 모두 <strong>비용</strong> 문제에 대한 답이지, <strong>판정이 뚫린다</strong>는 문제에 대한 답은 아니라는 점을 구분해야 한다 — 판정을 더 싸게, 더 일찍 끝내는 것과 판정이 조작에 강해지는 것은 다른 문제다.</p> <h2 id="언제-무엇을-쓰나--실무-체크리스트">언제 무엇을 쓰나 — 실무 체크리스트</h2> <p>지금까지 다룬 방법들을 상황별로 정리하면 다음과 같다. 어느 하나가 정답이 아니라, 궤적 길이·태스크 다양성·예산·RL 단계에 따라 조합이 달라진다.</p> <table> <thead> <tr> <th>상황</th> <th>권장 조합</th> <th>근거</th> </tr> </thead> <tbody> <tr> <td>궤적이 짧고(예: 20스텝 미만) 태스크가 균일</td> <td>outcome-level 고정 rubric + 도구채점(#53) 병행</td> <td>판정 비용이 크지 않고, 고정 rubric이 재현성을 준다</td> </tr> <tr> <td>궤적이 매우 길거나(50스텝 이상) 태스크가 다양</td> <td>생성형 rubric(Kimi K3 방식)</td> <td>태스크마다 rubric을 새로 쓸 필요가 없다. 대신 verbosity 통제가 필수다</td> </tr> <tr> <td>성공 궤적이 희귀한 초기 RL 구간</td> <td>트랜지션 rubric(TRCA류)</td> <td>앵커(성공 궤적) 없이도 dense한 신호를 만든다</td> </tr> <tr> <td>judge 예산이 빠듯함</td> <td>pointwise 채점 + deferral cascade, 조기 종료(E-valuator·AgentForesight류)</td> <td>그룹 크기를 키울수록 tournament 비용이 제곱으로 늘어난다는 걸 앞서 계산했다</td> </tr> <tr> <td>에이전트가 자기 완료를 선언하는 게 흔한 도메인(고객지원·업무 자동화 등)</td> <td>judge와 별도로 confident-closing 탐지기(TF-IDF 등 경량 분류기) 병행</td> <td>Confident Closing to Silent Failure가 보인 것처럼 judge 단독으로는 AUROC 0.5~0.65 수준에 머문다</td> </tr> </tbody> </table> <p>마지막 행이 특히 중요하다. 이 시리즈가 지금까지 강조한 원칙 — “reward는 한 조달처에만 의존하지 않는다” — 이 judge 안에서도 반복된다. judge 하나에 전부를 맡기는 대신, 값싸고 판정이 좁은 신호(TF-IDF 탐지기, 규칙 기반 조기 종료)를 judge와 나란히 두면 서로의 약점을 메운다.</p> <h1 id="통계-요약--11부를-닫는-종합표">통계 요약 — 11부를 닫는 종합표</h1> <p>지금까지 세 편에 걸쳐 본 것은 결국 “reward를 어디서 조달하는가”에 대한 세 가지 답이다.</p> <table> <thead> <tr> <th>조달처</th> <th>무엇을 검증하나</th> <th>신호 형태</th> <th>무엇을 못 잡나</th> <th>비용 특성</th> <th>대표 취약점</th> </tr> </thead> <tbody> <tr> <td>환경(<a href="/blog/2026/environment-as-reward/">#52</a>)</td> <td>최종 상태(파일·DB·API 응답)</td> <td>이진 0/1, 스텝별로 확장 가능</td> <td>과정 품질, 부작용, 효율</td> <td>낮음(시뮬레이터 재실행 수준)</td> <td>검증기 자체가 느슨하면 통과</td> </tr> <tr> <td>도구(<a href="/blog/2026/tool-call-reward/">#53</a>)</td> <td>개별 호출의 스키마·인자·부작용</td> <td>스텝 단위, 세밀</td> <td>전체 궤적이 왜 이 경로를 택했는가</td> <td>낮음(정적 검사 수준)</td> <td>스키마만 맞추고 의미 없는 호출 반복</td> </tr> <tr> <td>judge/rubric(#54)</td> <td>산출물·궤적의 품질, 부작용, 반복</td> <td>연속 점수 또는 tournament 서열, rubric을 judge가 정의</td> <td>판정자가 못 읽은 부분(컨텍스트 밖)</td> <td>매우 높음(궤적 길이에 비례, 위 계산)</td> <td>confident closing·CoT 조작에 취약</td> </tr> </tbody> </table> <p>세 조달처는 서로 배타적이지 않다. 오히려 실전에서는 섞어 쓴다. 이어지는 12부(<a href="/blog/2026/search-agent-rl/">#55</a>~<a href="/blog/2026/web-gui-agent-rl/">#57</a>)에서 도메인마다 이 배합이 어떻게 달라지는지를 본다 — 검색 에이전트는 근거 인용의 품질을 판정에 맡기는 비중이 크고, 코드 에이전트는 테스트 스위트(환경검증의 강력한 형태)에 크게 의존하되 설계·스타일 판단만 judge에 맡기고, 웹·GUI 에이전트는 이번 편의 토이 예제와 같은 부작용·비효율 문제가 특히 두드러진다. 각 편에서 그 구체적인 배합을 다룬다.</p> <h1 id="conclusion">Conclusion</h1> <p>궤적 judge는 응답 judge보다 강력하다 — 산출물과 과정, 부작용까지 하나의 자연어 판정에 담을 수 있다. Kimi K3의 Agentic GRM은 rubric조차 고정하지 않고 판정 대상에 맞춰 그때그때 생성하며, TRCA는 그 판정을 트랜지션 단위로 쪼개 초기 RL 구간에서도 dense한 신호를 만든다.</p> <p>하지만 대가가 있다. 판정 비용은 궤적 길이에 비례해 커지고(이 글의 어림값으로는 정책 학습 비용의 약 2.7~9.6배), tournament 방식을 쓰면 그룹 크기의 제곱에 비례해 더 커진다. 그리고 판정자가 이 비용을 감당하지 못해 궤적의 결말에 의존하는 순간, 정책은 그 결말을 조작하는 법을 배운다 — Confident Closing to Silent Failure가 보인 도메인별 45~48%(tau2-bench 단일 제어)에서 75.8%(AppWorld)에 이르는 false success 비율과, Gaming the Judge가 보인 최대 90%의 오탐률 상승이 이걸 실측으로 증명한다.</p> <p>이 글의 비용 계산은 확인된 벤치마크 수치가 아니라 예시 가정 기반의 어림값이라는 한계가 있다. 또한 confident closing·CoT 조작 연구는 대부분 웹·앱 도메인에서 이뤄졌다 — 코드나 검색처럼 다른 도메인에도 같은 정도로 일반화되는지는 이어지는 편에서 다시 봐야 할 질문이다.</p> <p>11부(<a href="/blog/2026/environment-as-reward/">#52</a>~#54)를 한 줄로 요약하면: reward는 환경에서, 도구에서, 그리고 judge에서 온다. 각각 무엇을 검증하고 무엇을 놓치는지가 다르며, 그 놓치는 지점이 곧 다음 취약점이다. <a href="/blog/2026/agentic-reward-hacking/">#58</a>는 이 세 조달처 각각의 놓치는 지점을 정책이 어떻게 찾아내는지를 정리한다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Lù et al., 2025. <a href="https://arxiv.org/abs/2504.08942">AgentRewardBench: Evaluating Automatic Evaluations of Web Agent Trajectories</a>.</li> <li>Wang et al., 2026. <a href="https://arxiv.org/abs/2608.11434">Benchmarking LLM Judges for Mobile Agent Evaluation</a>.</li> <li>Kimi Team, 2026. <a href="https://arxiv.org/abs/2607.24653">Kimi K3: Open Frontier Intelligence</a> (K3 tech report). GitHub: <a href="https://github.com/MoonshotAI/Kimi-K3">MoonshotAI/Kimi-K3</a>.</li> <li>Huan Zhang et al., 2026. <a href="https://arxiv.org/abs/2608.16156">TRCA: Transition-wise Rubric Credit Assignment for Long-horizon LLM Agents</a>.</li> <li>Advani, 2026. <a href="https://arxiv.org/abs/2606.09863">From Confident Closing to Silent Failure: Characterizing False Success in LLM Agents</a>. (FAGEN Workshop @ ICML 2026)</li> <li>Khalifa et al., 2026. <a href="https://arxiv.org/abs/2601.14691">Gaming the Judge: Unfaithful Chain-of-Thought Can Undermine Agent Evaluation</a>.</li> <li>Chen and Zhang, 2026. <a href="https://arxiv.org/abs/2607.27984">Share the Judge, Learn the Deferral: Where Specialization Helps LLM Evaluation</a>.</li> <li>Sadhuka et al., 2025. <a href="https://arxiv.org/abs/2512.03109">E-valuator: Reliable Agent Verifiers with Sequential Hypothesis Testing</a>.</li> <li>Boxuan Zhang et al., 2026. <a href="https://arxiv.org/abs/2605.08715">AgentForesight: Online Auditing for Early Failure Prediction in Multi-Agent Systems</a>.</li> <li>RL Reward 설계 시리즈. <a href="/blog/2026/reward-model-design/">reward 4분류</a>, <a href="/blog/2026/frontier-reward-design/">프론티어 편</a>, <a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards</a>, <a href="/blog/2026/prometheus-2/">Prometheus 2</a>, <a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool</a>.</li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰네 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><a href="/blog/2026/tool-call-reward/">도구 호출을 어떻게 채점하나</a> — ToolRL·ToolRM</li> <li><strong>(현재 글)</strong> 궤적을 judge가 채점한다 — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="agentic-rl"/><category term="reward-design"/><category term="llm-judge"/><category term="rubric"/><category term="reward-hacking"/><category term="credit-assignment"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #54 — 환경도 도구도 못 채점하는 궤적을 judge가 rubric으로 판정할 때 무엇이 달라지고, 어떻게 뚫리는가]]></summary></entry><entry><title type="html">도구 호출을 어떻게 채점하나 — ToolRL·ToolRM</title><link href="https://www.wonbeomjang.kr/blog/2026/tool-call-reward/" rel="alternate" type="text/html" title="도구 호출을 어떻게 채점하나 — ToolRL·ToolRM"/><published>2026-08-11T00:53:00+00:00</published><updated>2026-08-11T00:53:00+00:00</updated><id>https://www.wonbeomjang.kr/blog/2026/tool-call-reward</id><content type="html" xml:base="https://www.wonbeomjang.kr/blog/2026/tool-call-reward/"><![CDATA[<blockquote> <p><a href="https://arxiv.org/abs/2504.13958">ToolRL: Reward is All Tool Learning Needs</a> (Qian et al., University of Illinois Urbana-Champaign, arXiv 2025)</p> <p><a href="https://arxiv.org/abs/2509.11963">ToolRM: Outcome Reward Models for Tool-Calling Large Language Models</a> (Agarwal et al., IBM Research, arXiv 2025)</p> </blockquote> <h1 id="introduction">Introduction</h1> <p><a href="/blog/2026/environment-as-reward/">#52</a>에서는 “환경에게 묻는다”를 다뤘다. 코드를 실행하면 테스트가 통과하는지, 검색 결과가 정답을 담고 있는지 — 환경이 실제로 답을 알고 있을 때, reward는 그 답과 대조해서 나온다. 그런데 도구 호출은 실행되기 <em>전에도</em> 채점할 거리가 있다. <code class="language-plaintext highlighter-rouge">search(query="")</code> 처럼 파라미터가 비어 있는 호출, 계산기가 필요한데 검색을 부르는 호출, 형식 자체가 깨져서 파서가 못 읽는 호출 — 이런 건 환경이 답을 주기도 전에 이미 “잘못된 호출”이다.</p> <p>이 편은 그 지점을 다룬다. <strong>도구 호출 그 자체를 어떻게 채점하는가.</strong> 결론부터 정리하면 두 논문이 서로 다른 절반을 채운다.</p> <ul> <li><strong>ToolRL</strong>(Qian et al., 2025)은 도구 호출의 reward를 <strong>형식(format)</strong>과 <strong>정확성(correctness)</strong>으로 분해하고, 정확성을 다시 도구 이름·파라미터 이름·파라미터 값 세 항으로 더 잘게 쪼갠다. 이 분해 자체가 논문의 기여이며, 어떤 조합이 학습을 살리고 어떤 조합이 죽이는지를 방대한 ablation으로 보여준다. GRPO에 얹어 base 모델 대비 17%, SFT 모델 대비 15% 개선을 낸다.</li> <li><strong>ToolRM</strong>(Agarwal et al., 2025)은 그 규칙 기반 채점이 안 통하는 지점 — 정답 도구 호출이 없을 때, 혹은 “이 호출이 그럴듯한가”를 판단해야 할 때 — 을 메우는 <strong>학습된 scalar reward model</strong>이다. FC-RewardBench라는 전용 벤치마크로 “일반 RM은 도구 호출을 못 채점한다”는 것부터 증명하고, 정답 없이도 GRPO 보상으로 쓸 수 있는 ToolRM을 학습시킨다.</li> </ul> <p>한쪽은 “규칙으로 얼마나 잘게 쪼갤 수 있는가”, 다른 쪽은 “규칙이 안 통할 때 무엇으로 대체하는가”다. 두 논문을 나란히 보면 도구 호출 채점의 전체 지형이 보인다.</p> <h1 id="background--도구-호출의-채점-축">Background — 도구 호출의 채점 축</h1> <p>도구 호출 하나 — 예를 들어 <code class="language-plaintext highlighter-rouge">{"name": "search_restaurant", "parameters": {"location": "여의도", "price_max": 30000}}</code> — 를 채점할 때 실제로 물을 수 있는 질문은 다섯 가지다.</p> <table> <thead> <tr> <th>축</th> <th>무엇을 보나</th> <th>어떻게 채점하나</th> <th>실패 예</th> </tr> </thead> <tbody> <tr> <td>형식</td> <td>JSON 스키마·문법을 지켰나</td> <td>규칙(파서)</td> <td><code class="language-plaintext highlighter-rouge">&lt;tool_call&gt;</code> 태그가 안 닫히거나 JSON이 깨져 파싱 실패</td> </tr> <tr> <td>도구 선택</td> <td>옳은 도구를 골랐나</td> <td>규칙(정답 도구와 대조) 또는 judge</td> <td>검색이 필요한 질문에 계산기를 호출</td> </tr> <tr> <td>파라미터</td> <td>인자가 맞나</td> <td>규칙 또는 judge</td> <td>필수 필드 누락, <code class="language-plaintext highlighter-rouge">price_max</code>에 문자열을 넣는 타입 오류</td> </tr> <tr> <td>필요성</td> <td>애초에 호출이 필요했나</td> <td>judge</td> <td>이미 답을 아는 질문에도 검색을 호출하는 <strong>불필요한 호출 남발</strong></td> </tr> <tr> <td>결과 활용</td> <td>받은 결과를 제대로 썼나</td> <td>judge</td> <td>예약 가능 시간을 조회해놓고 결과를 무시한 채 답을 지어냄</td> </tr> </tbody> </table> <p>표의 위 세 줄과 아래 두 줄 사이에 선을 하나 그을 수 있다. <strong>형식·도구 선택·파라미터는 정답(ground truth)이 있으면 규칙만으로 채점된다</strong> — 문자열이 일치하는지, 딕셔너리 키가 겹치는지 세면 끝난다. 반면 <strong>필요성과 결과 활용은 정답 하나로 환원되지 않는다.</strong> “이 호출이 꼭 필요했나”는 대화 맥락 전체를 봐야 판단할 수 있고, “결과를 제대로 썼나”는 최종 응답의 의미를 읽어야 한다. 둘 다 판정(judgment)이 필요하다.</p> <p>이건 이 블로그의 RL Reward 설계 시리즈에서 다룬 <a href="/blog/2026/reward-model-design/">reward 4분류</a> — ①규칙 ②스칼라 RM ③reference judge ④생성형 RM(GRM) — 이 하나의 도구 호출 채점 안에서 그대로 재현되는 지점이다. 형식·선택·파라미터는 ①로 끝나지만, 필요성·결과 활용은 ③이나 ④로 넘어가야 한다. 이 글에서 볼 ToolRL은 ①에 해당하는 세 축(정확히는 형식+정확성)만 정교하게 다듬은 사례고, ToolRM은 정답이 없는 상황에서 ①을 대신할 ②(도메인 특화 scalar RM)를 학습시킨 사례다. 다섯 축을 다 커버하는 judge형 채점은 다음 편(<a href="/blog/2026/agentic-judge-rubric/">#54</a>)에서 다룬다.</p> <h1 id="method">Method</h1> <h2 id="toolrl--도구-호출-reward를-체계적으로-분해한다">ToolRL — 도구 호출 reward를 체계적으로 분해한다</h2> <p>ToolRL은 Tool-Integrated Reasoning(TIR) — LLM이 여러 스텝에 걸쳐 도구를 호출하며 문제를 푸는 과정 — 을 위한 reward 설계를 <strong>처음으로 체계적으로 연구한</strong> 논문이다. 논문 제목 그대로 저자들의 결론은 “reward is all tool learning needs”다. SFT로 도구 호출을 가르치면 특정 패턴에 과적합되어 낯선 도구 조합에 약한데, 잘 설계된 reward로 GRPO를 돌리면 이 문제가 상당 부분 풀린다는 것이다.</p> <h3 id="reward를-두-층으로-나눈다">reward를 두 층으로 나눈다</h3> <p>ToolRL의 최종 reward는 형식 reward와 정확성 reward의 합이다.</p> \[\mathcal{R}_{\text{final}} = \mathcal{R}_{\text{format}} + \mathcal{R}_{\text{correct}}\] <p><strong>형식 reward</strong>는 이진값이다. 모델 출력이 <code class="language-plaintext highlighter-rouge">&lt;think&gt;</code>, <code class="language-plaintext highlighter-rouge">&lt;tool_call&gt;</code>, <code class="language-plaintext highlighter-rouge">&lt;response&gt;</code> 같은 필수 태그를 정답이 요구하는 순서대로 전부 포함하면 1, 아니면 0이다.</p> \[\mathcal{R}_{\text{format}} = \begin{cases} 1, &amp; \text{필수 필드가 모두 있고 순서도 맞으면} \\ 0, &amp; \text{그 외} \end{cases}\] <p><strong>정확성 reward</strong>가 이 논문의 핵심이다. 예측된 도구 호출 집합 \(P = \{P_1, \ldots, P_m\}\)을 정답 집합 \(G = \{G_1, \ldots, G_n\}\)과 비교하는데, 이걸 하나의 이진 판정으로 뭉개지 않고 세 항으로 쪼갠다.</p> <ul> <li><strong>도구 이름 일치도</strong> — 정답 도구 이름 집합 \(N_G\)와 예측 도구 이름 집합 \(N_P\)의 자카드 유사도다.</li> </ul> \[r_{\text{name}} = \frac{|N_G \cap N_P|}{|N_G \cup N_P|} \in [0, 1]\] <ul> <li><strong>파라미터 이름 일치도</strong> — 각 정답 호출 \(G_j\)에 대해, 예측이 같은 키(파라미터 이름) 집합을 얼마나 맞췄는지를 자카드 유사도로 합산한다.</li> </ul> \[r_{\text{param}} = \sum_{G_j \in G} \frac{|\text{keys}(P_G) \cap \text{keys}(P_P)|}{|\text{keys}(P_G) \cup \text{keys}(P_P)|} \in [0, |G|]\] <ul> <li><strong>파라미터 값 일치도</strong> — 정답의 각 파라미터 키마다 예측 값이 완전히 같은지를 세어 합산한다.</li> </ul> \[r_{\text{value}} = \sum_{G_j \in G} \sum_{k \in \text{keys}(G_j)} \mathbb{1}[P_G[k] = P_P[k]] \in \left[0, \sum_{G_j \in G} |\text{keys}(G_j)|\right]\] <p>세 항을 더한 매치 점수 \(r_{\text{match}} = r_{\text{name}} + r_{\text{param}} + r_{\text{value}}\)를 예측-정답 사이 최적 매칭에 대해 최대화한 값이 \(R_{\max}\)이고, 이론적 최댓값은 \(S_{\max} = 1 + \lvert G \rvert + \sum_{G_j \in G} \lvert \text{keys}(G_j) \rvert\)다. 최종 정확성 reward는 이를 \([-3, 3]\)으로 정규화한다.</p> \[\mathcal{R}_{\text{correct}} = 6 \cdot \frac{R_{\max}}{S_{\max}} - 3 \in [-3, 3]\] <p>기호를 풀면: \(R_{\max} = S_{\max}\)(완벽히 맞음)일 때 \(6 - 3 = 3\), \(R_{\max} = 0\)(완전히 틀림)일 때 \(-3\)이다. 부분 점수를 \([0,1]\)이 아니라 \([-3,3]\)으로 늘려 잡은 이유는 형식 reward(최대 1)보다 정확성이 학습 신호에서 훨씬 크게 작용하게 만들기 위해서다 — “형식만 맞추고 안주하지 말라”는 압력을 reward 크기 자체에 심어둔 것이다. 최종 reward의 범위는 \(\mathcal{R}_{\text{final}} \in [-3, 4]\)가 된다.</p> <p>왜 도구 이름 하나, 파라미터 하나까지 쪼갰을까. 수학 문제처럼 “정답 하나 맞았다/틀렸다”로 채점하면, 도구 이름은 맞았는데 파라미터 하나만 틀린 호출과 모든 걸 틀린 호출이 똑같이 0점을 받는다. 이러면 모델 입장에서 “거의 다 맞는 방향”과 “완전히 엉뚱한 방향”을 구분할 신호가 없다. 세 항으로 쪼개면 “이름은 맞았으니 그 방향은 유지하고 파라미터만 고치면 된다”는 부분 정보가 gradient에 실린다.</p> <p>이 reward는 GRPO로 학습에 쓰인다. 쿼리 하나당 4개 응답을 샘플링해 그룹을 만들고, 그룹 내 평균·표준편차로 advantage를 정규화하는 GRPO 알고리즘 자체는 RL Reward 설계 시리즈 <a href="/blog/2026/grpo-deepseekmath/">GRPO 글</a>에서 이미 다뤘으니 여기서는 reward 쪽만 본다. ToolRL은 KL 정규화를 빼고 온도 1.0으로 탐색 폭을 넓힌 cold-start 학습(SFT 없이 바로 GRPO)이 SFT로 초기화한 GRPO보다 일반화가 낫다는 것도 보인다 — SFT 초기화는 학습 reward는 더 빨리 오르지만 벤치마크 성능은 더 낮다. 훈련 reward가 높다고 일반화가 되는 게 아니라는 뜻이다.</p> <h3 id="학습-데이터와-본-결과--sft보다-낫고-ppo보다-안정적이다">학습 데이터와 본 결과 — SFT보다 낫고, PPO보다 안정적이다</h3> <p>학습 데이터는 ToolACE(2K, 언제 도구를 부를지 판단하는 일반 도구 사용), Hammer의 masked 서브셋(1K, 도구·파라미터 이름을 무작위 문자열로 가려 설명만 보고 추론하게 만듦), xLAM(1K, 한 턴에 여러 도구를 동시에 부르는 조합적 상황)을 섞은 4K짜리 데이터셋이다. 멀티스텝 궤적은 스텝 단위로 쪼개 이전 대화 이력을 프롬프트에 주입하는 방식으로 단일 스텝 인스턴스로 변환한다.</p> <p>BFCL v3, API-Bank, 그리고 도구 사용 QA 벤치마크인 Bamboogle에서 raw instruct 모델·SFT·PPO와 비교한 결과, cold-start GRPO가 대체로 가장 좋았다.</p> <table> <thead> <tr> <th>모델(Qwen2.5-7B-Instruct)</th> <th>Raw</th> <th>SFT(400개)</th> <th>SFT(4K개)</th> <th>PPO cold start</th> <th><strong>GRPO cold start(ToolRL)</strong></th> </tr> </thead> <tbody> <tr> <td>BFCL v3 Overall Acc</td> <td>41.97%</td> <td>34.08%</td> <td>36.53%</td> <td>46.68%</td> <td><strong>58.38%</strong></td> </tr> <tr> <td>Bamboogle Acc</td> <td>69.6%</td> <td>28.8%</td> <td>30.4%</td> <td>48.0%</td> <td><strong>72.0%</strong></td> </tr> <tr> <td>Bamboogle 평균 호출 수</td> <td>1.42</td> <td>3.71</td> <td>1.06</td> <td>1.25</td> <td>1.63</td> </tr> </tbody> </table> <p>abstract가 말하는 “base 대비 17%, SFT 대비 15% 개선”이 이 표에 그대로 드러난다. 눈에 띄는 건 Bamboogle 행이다 — SFT(400개)는 평균 3.71회나 도구를 호출하고도 정답률이 28.8%까지 떨어진다. 반면 GRPO cold start는 1.63회만 호출하고도 72.0%를 맞힌다. 같은 reward 설계를 PPO에도 적용해봤는데, PPO는 cold start일 때 GRPO보다 불안정했고 SFT로 초기화했을 때 오히려 나아지는 경향을 보였다 — GRPO는 cold start에서, PPO는 SFT 초기화에서 각각 더 잘 맞는 조합이라는 뜻이다. 이 reward 설계 자체는 알고리즘에 무관하게 어느 정도 통하지만, GRPO와 결합했을 때 가장 견고했다.</p> <h3 id="일반화--학습에-없던-상황에서도-안-부르는-법을-배운다">일반화 — 학습에 없던 상황에서도 “안 부르는 법”을 배운다</h3> <p>이 reward로 학습한 모델은 학습 데이터에 없던 프로그래밍 언어의 도구나, 학습에 없던 형태의 “무관한 도구 감지” 과제에서도 baseline보다 나은 성능을 보였다. 정성적으로도 흥미로운 사례가 나온다 — 영화 티켓을 예매해달라는 요청에 필요한 정보(영화 제목·날짜)가 빠져 있으면 도구를 바로 호출하지 않고 먼저 되묻고, 도구 목록에 지금 질문과 무관한 함수만 있으면 도구를 부르지 않고 직접 답한다. 두 경우 모두 학습 시 명시적으로 가르친 행동이 아니라, reward가 정확성에 집중되어 있다 보니 “불필요하거나 근거 없는 호출은 감점”이라는 신호가 간접적으로 학습된 결과로 보인다. 이 글 Background 표의 “필요성” 축을 rule로 직접 채점하지 않았는데도, 정확성 reward만으로 어느 정도 유사한 행동이 유도된 셈이다 — 다만 이건 명시적 judge 채점만큼 신뢰할 수 있는 보장은 아니다.</p> <h2 id="toolrm--정답이-없을-때를-위한-scalar-reward-model">ToolRM — 정답이 없을 때를 위한 scalar reward model</h2> <p>ToolRL의 정확성 reward는 <strong>정답 도구 호출이 있어야</strong> 계산된다. 그런데 실제 배포 상황에서는 “정답”이 애매하거나 아예 없는 경우가 많다 — 같은 목표를 달성하는 도구 호출 경로가 여러 개일 수 있고, RL 롤아웃 중에는 정답 라벨이 없는 궤적도 많다. ToolRM은 이 공백을 메우는 <strong>outcome reward model(ORM)</strong>이다.</p> <h3 id="출발점--일반-rm은-도구-호출을-못-읽는다">출발점 — 일반 RM은 도구 호출을 못 읽는다</h3> <p>저자들은 먼저 기존 reward model들이 도구 호출을 제대로 채점하는지부터 검증한다. 이를 위해 <strong>FC-RewardBench</strong>를 만들었다 — BFCL-v3의 싱글턴 스플릿에서 사용자 질의·도구 카탈로그·정답 호출을 가져오고, 0.5B부터 685B까지 25개 모델 풀로 오답 호출을 생성해 짝지은 1,500개 (정답, 오답) 쌍이다. 오답의 오류 유형 분포를 보면 이 벤치마크가 왜 어려운지 드러난다.</p> <table> <thead> <tr> <th>오류 유형</th> <th>개수</th> </tr> </thead> <tbody> <tr> <td>파라미터 값 오류</td> <td>650</td> </tr> <tr> <td>함수 이름 오류</td> <td>403</td> </tr> <tr> <td>함수 개수 오류</td> <td>245</td> </tr> <tr> <td>선택적 파라미터 누락</td> <td>78</td> </tr> <tr> <td>필수 파라미터 누락</td> <td>45</td> </tr> <tr> <td>파라미터 타입 오류</td> <td>43</td> </tr> <tr> <td>예상치 못한 파라미터</td> <td>21</td> </tr> <tr> <td>출력 형식 오류</td> <td>15</td> </tr> </tbody> </table> <p>650건이 “파라미터 값 오류”다. 함수 이름을 통째로 틀리는 것보다 값 하나가 미묘하게 틀린 경우가 압도적으로 많다는 뜻이고, 이건 자연어 채점에 익숙한 RM에게는 잡아내기 까다로운 종류의 오류다. 실제로 도구 전용 RM인 Themis조차 FC-RewardBench에서 45% 정확도밖에 못 낸다(무작위가 50%이니 사실상 못 푸는 수준). 반면 LLM-as-judge 방식(70B~685B급 LLM에게 두 후보 중 정답을 고르게 함)은 80%를 넘긴다 — 다만 그 크기의 모델을 매 롤아웃마다 돌리는 건 비현실적이다.</p> <h3 id="학습--bradley-terry-pairwise--reward-centering">학습 — Bradley-Terry pairwise + reward centering</h3> <p>ToolRM은 표준적인 Bradley-Terry 방식으로 학습된 scalar RM이다. 입력 \(x\)(도구 카탈로그 + 대화 이력)에 대해 선호되는 응답 \(y_+\)가 비선호 응답 \(y_-\)보다 높은 점수를 받을 확률은</p> \[p(y_+ \succ y_- \mid x) = \sigma\big(r_\theta(x, y_+) - r_\theta(x, y_-)\big)\] <p>이고, 학습 목적함수는 이 확률의 로그를 최대화하는 것이다.</p> \[J(r) = \max_{r_\theta} \; \mathbb{E}_{(x,y_+,y_-)\sim D}\big[\log \sigma\big(r_\theta(x,y_+) - r_\theta(x,y_-)\big)\big]\] <p>여기에 reward centering 정규화 항을 더해 점수가 0 근처에 모이도록 만든다.</p> \[J_{\text{reg}}(r) = J(r) + \eta \, \mathbb{E}_{(x,y_+,y_-)\sim D}\big[(r_\theta(x,y_+) + r_\theta(x,y_-))^2\big]\] <p>\(\eta\)는 이 정규화 세기를 조절하는 작은 양수다. 이 항이 왜 필요한가 — 정규화가 없으면 두 응답의 점수를 통째로 큰 양수 방향(혹은 음수 방향)으로 밀어도 loss가 똑같이 줄어드는 자유도가 남는다(pairwise loss는 차이만 보므로). reward centering은 \(r_\theta(x,y_+) + r_\theta(x,y_-)\)가 0에 가깝도록 눌러서 점수의 절대적 스케일을 고정시키고, 이후 이 scalar를 GRPO의 reward로 그대로 쓸 수 있게 해준다.</p> <p>베이스 아키텍처는 Qwen2.5-Instruct(1.5B/7B/14B)이고, 언어모델 헤드를 scalar 출력 선형 레이어로 교체한다. 학습 데이터는 APIGen, Schema-Guided Dialogue(멀티턴), xlam-irrelevance(호출이 필요 없는 케이스)를 섞고, 함수·파라미터 이름을 무작위 문자열로 바꿔 모델이 이름을 외워서 맞히지 못하게 한 뒤(Lin et al. 2024 방식을 따름), 11개의 오픈소스 도구 호출 모델(0.5B~32B)에게 호출을 생성시켜 정답과 다른 것만 오답으로 남긴다. 이렇게 모은 180K 샘플(싱글턴 85K, 멀티턴 85K, 호출 불필요 10K)로 학습한다. 오답을 사람이 설계하지 않고 실제 모델이 만들어내는 자연스러운 실패 패턴을 모으는 방식이라, “이론적으로 있을 법한 오류”가 아니라 “실제로 모델이 저지르는 오류”를 학습 신호로 쓴다는 점이 특징이다.</p> <h3 id="쓰임새--채점만-하지-않고-추론-시점-선택에도-쓴다">쓰임새 — 채점만 하지 않고 추론 시점 선택에도 쓴다</h3> <p>ToolRM은 학습된 채점기로 끝나지 않는다. 후보 \(n=32\)개를 온도 \(T=0.6\)으로 생성한 뒤 ToolRM-14B 점수가 가장 높은 것을 고르는 Best-of-\(n\) 선택에 쓰면, 특히 작은 생성 모델에서 이득이 크다.</p> <table> <thead> <tr> <th>생성 모델</th> <th>Greedy</th> <th>ToolRM-14B Best-of-32</th> </tr> </thead> <tbody> <tr> <td>Qwen3-0.6B</td> <td>39.5%</td> <td>64.4% (+24.9pt, greedy 기준 Qwen3-32B의 63.8%·xLAM-2-70B의 63.6%를 역전)</td> </tr> <tr> <td>Qwen3-8B</td> <td>~65%</td> <td>70.5% (모든 greedy baseline 대비 +5.6pt)</td> </tr> <tr> <td>Llama-xLAM-2-32B급 이상</td> <td>—</td> <td>개선 폭 2~3pt로 수렴 (이미 강한 모델은 얻을 게 적다)</td> </tr> </tbody> </table> <p>작은 모델일수록 이득이 크다는 건 자연스럽다 — 생성 분포의 편차가 클수록 “여러 개 뽑아서 가장 나은 것을 고르는” 전략의 여지가 크기 때문이다. 이미 정확도가 높은 큰 모델은 애초에 후보들이 비슷비슷해서 골라봐야 차이가 작다.</p> <p>노이즈에 대한 강건성도 확인했다. RoTBench는 도구·파라미터 이름에 문자 삽입·삭제·이름 뒤섞기 같은 잡음을 섞은 벤치마크인데, 잡음이 없는 Clean 스플릿보다 잡음이 심한 Union 스플릿에서 Best-of-32의 이득이 더 컸다. 예를 들어 Qwen-8B의 도구 선택 정확도는 Clean에서 52.4% → 72.4%로 20pt 개선되는데, 잡음이 낀 Union에서는 45.7% → 66.7%로 21pt가 개선된다 — 어려운 조건일수록 “여러 번 시도해서 그나마 맞는 걸 고르는” 전략의 가치가 더 커진다는 뜻이다.</p> <h1 id="experiments">Experiments</h1> <h2 id="toolrl의-reward-ablation--무엇이-성능을-살리고-죽이는가">ToolRL의 reward ablation — 무엇이 성능을 살리고 죽이는가</h2> <p>ToolRL의 값은 본문 결과표보다 <strong>reward 설계를 하나씩 바꿔가며 무엇이 통하고 무엇이 안 통하는지 보여준 ablation</strong>에 있다. 세 가지 축(길이, 스케일, 세분화)을 원문 수치 그대로 재구성한다.</p> <h3 id="1-길이-reward--길게-생각하면-보상을-준다">(1) 길이 reward — 길게 생각하면 보상을 준다</h3> <p>R1 계열 모델이 긴 추론에서 이득을 본다는 관찰을 따라, <code class="language-plaintext highlighter-rouge">&lt;think&gt;</code> 필드 길이에 비례한 reward \(\mathcal{R}_{\text{length}} = \min(L_{\text{think}}/L_{\text{target}}, 1)\) (\(L_{\text{target}}=512\))를 추가했다. 결과는 정반대였다.</p> <table> <thead> <tr> <th>모델</th> <th>원래 설계</th> <th>길이 reward 추가</th> <th>동적 길이 reward</th> </tr> </thead> <tbody> <tr> <td>Qwen2.5-1.5B-Instruct</td> <td>46.20%</td> <td>33.23%</td> <td>28.51%</td> </tr> <tr> <td>Qwen2.5-3B-Instruct</td> <td>52.98%</td> <td>48.89%</td> <td>48.24%</td> </tr> <tr> <td>Llama-3.2-3B-Instruct</td> <td>44.10%</td> <td>44.98%</td> <td>43.15%</td> </tr> </tbody> </table> <p>(BFCL V3 Overall Accuracy 기준)</p> <p>작은 모델일수록 타격이 컸다 — Qwen2.5-1.5B는 46.20%에서 33.23%로 13%p 가까이 떨어졌다. 학습 도중 응답 길이와 길이 reward 자체는 꾸준히 올라갔으니 “모델이 더 길게 생각하도록 유도하는 데는 성공”했지만, 그 긴 생각이 과제 성능으로 이어지지 않았다. 학습 진행에 따라 목표 길이를 점차 늘리는 동적 버전으로 완화해봐도 마찬가지였다. 결론: <strong>긴 추론 흔적이 저절로 좋은 게 아니다.</strong> 도구 호출처럼 답이 비교적 명확한 과제에서는 장황한 사고가 오히려 과잉 사고(overthinking)로 이어져 정답에서 멀어질 수 있다.</p> <h3 id="2-reward-스케일--형식과-정확성-사이-가중치">(2) reward 스케일 — 형식과 정확성 사이 가중치</h3> <p>정확성 reward의 최댓값을 형식 reward와 같은 크기로 맞추면(원래 \([-3,3] \to\) 동일 최대치인 \([-1,1]\)) 어떻게 될까.</p> <table> <thead> <tr> <th>모델</th> <th>원래 설계</th> <th>최댓값 동일(Equal Max)</th> <th>2단계(Coarse)</th> <th>연속 동적(Dynamic)</th> </tr> </thead> <tbody> <tr> <td>Qwen2.5-1.5B-Instruct</td> <td>46.20%</td> <td>39.47%</td> <td>38.85%</td> <td>45.71%</td> </tr> <tr> <td>Qwen2.5-3B-Instruct</td> <td>52.98%</td> <td>51.76%</td> <td>50.66%</td> <td>53.81%</td> </tr> <tr> <td>Llama-3.2-3B-Instruct</td> <td>44.10%</td> <td>42.47%</td> <td>41.33%</td> <td>46.85%</td> </tr> </tbody> </table> <p>정확성 reward의 상대적 가중치를 낮추자 세 모델 모두 성능이 떨어졌다. 형식은 맞추기 쉬운 목표이고 정확성은 어려운 목표인데, 둘을 동등하게 취급하면 모델이 쉬운 목표에 안주할 여지가 생긴다는 뜻이다. 반대로 학습 초반엔 형식에, 후반엔 정확성에 무게를 싣도록 <strong>점진적으로</strong> 전환하는 동적 스케일링(학습 진행도 \(p \in [0,1]\)에 대해 형식 범위는 \([-2+p, 2-p]\)로 좁아지고 정확성 범위는 \([-2-p, 2+p]\)로 넓어짐)은 세 모델 중 두 곳에서 원래 설계를 앞질렀다. 반면 30스텝을 기점으로 뚝 전환하는 <strong>급격한</strong> 2단계 방식은 오히려 더 나빴다. 요점은 “정확성에 더 큰 가중치를 줘야 한다”는 방향은 맞지만, <strong>전환은 매끄러워야 한다</strong>는 것이다.</p> <h3 id="3-reward-세분화--얼마나-잘게-쪼개야-하나">(3) reward 세분화 — 얼마나 잘게 쪼개야 하나</h3> <p>정확성 reward를 원래의 세 항(이름·파라미터 이름·파라미터 값, 부분 점수 허용)에서 점점 뭉뚱그려봤다.</p> <table> <thead> <tr> <th>모델</th> <th>원래(Finegrained)</th> <th>이름·파라미터 이름만 exact match</th> <th>파라미터 이름+값 통째로 exact match</th> <th>도구 집합 전체 exact match</th> </tr> </thead> <tbody> <tr> <td>Qwen2.5-1.5B-Instruct</td> <td>46.20%</td> <td>40.71%</td> <td>37.65%</td> <td>36.72%</td> </tr> <tr> <td>Qwen2.5-3B-Instruct</td> <td>52.98%</td> <td>52.06%</td> <td>51.36%</td> <td>51.40%</td> </tr> <tr> <td>Llama-3.2-3B-Instruct</td> <td>44.10%</td> <td>39.82%</td> <td>38.62%</td> <td>35.95%</td> </tr> </tbody> </table> <p>(표의 열 이름은 원문의 Finegrained / Intermediate / Coarse 세 등급을 그대로 옮겼다. Finegrained는 이름 일치를 정확히는 요구하되 부분 점수 대신 이진 판정으로 바꾼 것이고, Coarse는 도구 호출 집합 전체가 정답과 완전히 같을 때만 1점을 주는 방식이다.)</p> <p>뭉뚱그릴수록 대체로 성능이 떨어졌다(Qwen2.5-1.5B는 46.20% → 36.72%로 거의 10%p 하락). 학습 도중 reward 곡선을 보면 세분화가 거칠수록 모델이 높은 reward를 받기가 더 어려워졌다 — 부분 점수가 없으니 “거의 맞았지만 완전히 맞지는 않은” 시도가 전부 0점으로 뭉개지고, 이게 성근(sparse) 학습 신호가 되어 credit assignment를 방해한다는 뜻이다. <strong>세밀한 분해가 안정적이고 효과적인 학습으로 이어진다</strong>는 게 저자들의 결론이다.</p> <h2 id="toolrm이-grpo-reward로-쓰였을-때">ToolRM이 GRPO reward로 쓰였을 때</h2> <p>ToolRM 논문은 자신들의 scalar RM을 ToolRL과 같은 GRPO 파이프라인에 넣어 비교한다. 세 가지 정확성 reward 변형을 붙였다 — 스키마 검증만 하는 \(R_{\text{schema}} \in \{-1,1\}\)(정답 없이 스키마 위반만 확인), ToolRL 방식 그대로인 \(R_{\text{ToolRL}} \in [-3,3]\)(정답 도구 호출 필요), 그리고 ToolRM-14B가 매기는 \(R_{\text{ToolRM}} \in [-3,3]\)(역시 정답 불필요).</p> <table> <thead> <tr> <th>모델</th> <th>reward 종류</th> <th>Non-Live AST Acc</th> <th>Live AST Acc</th> </tr> </thead> <tbody> <tr> <td>Llama-3.2-3B-Instruct</td> <td>base</td> <td>15.35%</td> <td>43.82%</td> </tr> <tr> <td> </td> <td>\(R_{\text{schema}}\)</td> <td>51.71%</td> <td>62.25%</td> </tr> <tr> <td> </td> <td>\(R_{\text{ToolRL}}\) (정답 필요)</td> <td>75.27%</td> <td>64.25%</td> </tr> <tr> <td> </td> <td>\(R_{\text{ToolRM}}\) (정답 불필요)</td> <td>78.40%</td> <td>64.32%</td> </tr> <tr> <td>Qwen2.5-3B-Instruct</td> <td>base</td> <td>43.06%</td> <td>55.66%</td> </tr> <tr> <td> </td> <td>\(R_{\text{schema}}\)</td> <td>63.17%</td> <td>66.54%</td> </tr> <tr> <td> </td> <td>\(R_{\text{ToolRL}}\) (정답 필요)</td> <td>80.42%</td> <td>67.21%</td> </tr> <tr> <td> </td> <td>\(R_{\text{ToolRM}}\) (정답 불필요)</td> <td>79.58%</td> <td>67.51%</td> </tr> </tbody> </table> <p>핵심은 등수가 아니라 <strong>\(R_{\text{ToolRM}}\)이 정답 없이도 정답이 있어야 하는 \(R_{\text{ToolRL}}\)과 대등하거나 더 나은 결과를 낸다</strong>는 것이다. Llama-3.2-3B에서는 ToolRM이 두 지표 모두 앞섰고, Qwen2.5-3B에서는 Non-Live에서만 근소하게 뒤처졌다. 스키마 검증만 하는 가장 단순한 규칙조차 base 대비 20%p 안팎의 개선을 냈다는 점도 흥미롭다 — “완전한 정확성 판정”이 없어도 “적어도 스키마는 지켰다”는 최소 신호만으로 상당한 학습이 된다는 뜻이다.</p> <p>데이터 필터링 실험도 비슷한 그림이다. Llama-3.1-8B-Instruct를 16K 샘플로 파인튜닝하면 정확도가 54.0% → 61.0%로 오르는데, 이 중 무작위로 8K만 뽑으면 58.4%로 <strong>오히려 떨어진다</strong>(저품질 샘플이 섞여 들어가서). 반면 ToolRM-14B가 매긴 점수 상위 8K만 골라 학습하면 62.5%로, 데이터의 절반만 쓰고도 전체 데이터보다 나은 결과를 낸다. 이 관찰은 이 시리즈에서 되풀이해온 주제와 같다 — <strong>양이 아니라 채점의 질이 학습을 좌우한다.</strong></p> <h2 id="토이-예제--3턴-궤적을-다섯-축으로-채점하기">토이 예제 — 3턴 궤적을 다섯 축으로 채점하기</h2> <p>논문 두 편의 수치를 확인했으니, 이제 <a href="/blog/2026/reward-shaping-agentic/">#51</a>에서 예고한 “도구 호출 성공에 +점을 주면 남발한다”는 문제를 직접 계산으로 확인해보자.</p> <p><strong>과제</strong>: 사용자가 “여의도 근처 3만원 이하 파스타 맛집 추천하고, 예약 가능한 시간도 알려줘”라고 묻는다. 사용 가능한 도구는 <code class="language-plaintext highlighter-rouge">search_restaurant(location, cuisine, price_max)</code>와 <code class="language-plaintext highlighter-rouge">get_reservation_slots(restaurant_id, date)</code>, 그리고 이 과제와 무관한 <code class="language-plaintext highlighter-rouge">calculator(expression)</code>이다.</p> <p>세 개의 3턴 궤적을 만든다.</p> <p><strong>궤적 A (모범)</strong></p> <ol> <li><code class="language-plaintext highlighter-rouge">search_restaurant(location="여의도", cuisine="파스타", price_max=30000)</code> 호출 — 형식·선택·파라미터 모두 정확</li> <li><code class="language-plaintext highlighter-rouge">get_reservation_slots(restaurant_id=&lt;1번 결과&gt;, date=오늘)</code> 호출 — 역시 모두 정확</li> <li>두 결과를 반영해 “A식당 파스타, 오늘 저녁 7시 예약 가능” 같은 응답 생성</li> </ol> <p><strong>궤적 B (형식은 완벽하지만 남발)</strong></p> <ol> <li><code class="language-plaintext highlighter-rouge">search_restaurant(...)</code> 호출 — A와 동일하게 정확</li> <li><code class="language-plaintext highlighter-rouge">calculator(expression="30000*0.9")</code> 호출 — JSON은 완벽하지만 이 과제에 불필요한 도구 선택</li> <li><code class="language-plaintext highlighter-rouge">get_reservation_slots(...)</code> 호출은 하지만, 결과를 무시하고 “아무 때나 예약 가능합니다”라고 지어내 응답</li> </ol> <p><strong>궤적 C (게으름)</strong></p> <ol> <li>도구를 전혀 부르지 않고 곧바로 “여의도에 파스타집 많아요”라고 응답</li> </ol> <p>다섯 축을 궤적 단위로 점수화한다(형식·선택·파라미터는 호출마다 0~1로 매겨 호출별로 부여, 필요성·활용은 궤적 전체에 대해 judge가 0~1로 매긴다고 가정).</p> <table> <thead> <tr> <th>궤적</th> <th>호출 수</th> <th>호출별 (형식+선택+파라미터) 합</th> <th>필요성 (불필요 호출 비율로 계산)</th> <th>결과 활용</th> </tr> </thead> <tbody> <tr> <td>A</td> <td>2</td> <td>\(3+3=6\)</td> <td>\(1 - 0/2 = 1.0\)</td> <td>1.0</td> </tr> <tr> <td>B</td> <td>3</td> <td>\(3+1+3=7\)</td> <td>\(1 - 1/3 \approx 0.67\)</td> <td>0.0</td> </tr> <tr> <td>C</td> <td>0</td> <td>\(0\)</td> <td>\(1.0\) (호출이 0건이니 불필요한 호출도 0건 — 정의상 만점)</td> <td>0.0</td> </tr> </tbody> </table> <p>(B의 2번째 호출은 형식은 맞지만 도구 선택이 틀렸으므로 그 호출의 형식+선택+파라미터 합은 \(1+0+1=1\)이 아니라 \(1+0+0=1\)로 계산했다 — 애초에 필요 없는 호출이라 파라미터의 “정확성”이 무의미하므로 0으로 잡았다. 나머지 두 호출은 형식 1, 선택 1, 파라미터 1로 만점씩 3점이다.)</p> <p>이제 세 가지 가중치 프로파일로 총점을 계산해본다.</p> <p><strong>프로파일 1 — 호출별 점수를 그냥 합산(정규화 없음)</strong>: 총점 \(=\) 호출별 합. <strong>A=6, B=7, C=0.</strong> B가 A를 이긴다. 호출을 하나 더 만든 것 자체가 원시 합산 점수를 올렸기 때문이다 — 결과를 무시하고 지어낸 응답인데도 형식과 파라미터가 맞은 호출을 하나 더 쌓았다는 이유만으로 더 높은 점수를 받는다. <strong>이게 정확히 “형식·선택·파라미터에만 보상을 주면 호출을 남발한다”는 현상이다.</strong></p> <p><strong>프로파일 2 — 호출 횟수에 페널티만 부과</strong>: 총점 \(= -(\text{호출 수})\). <strong>A=-2, B=-3, C=0.</strong> 이번엔 C가 이긴다. 아무 도구도 안 부른 궤적이 가장 좋은 점수를 받는다 — <strong>필요한 호출까지 억제된다.</strong></p> <p><strong>프로파일 3 — 호출당 평균 점수(정규화)와 필요성·활용을 함께 반영</strong>: 호출별 평균을 만점 3으로 정규화하고, 형식·선택·파라미터 : 필요성 : 활용 가중치를 \(0.4 : 0.3 : 0.3\)으로 섞는다.</p> \[\text{score} = 0.4 \cdot \frac{\text{호출별 합}/\text{호출수}}{3} + 0.3 \cdot \text{필요성} + 0.3 \cdot \text{활용}\] <ul> <li>A: \(0.4 \cdot \frac{6/2}{3} + 0.3 \cdot 1.0 + 0.3 \cdot 1.0 = 0.4 + 0.3 + 0.3 = 1.0\)</li> <li>B: \(0.4 \cdot \frac{7/3}{3} + 0.3 \cdot 0.67 + 0.3 \cdot 0 = 0.4 \cdot 0.778 + 0.201 + 0 \approx 0.51\)</li> <li>C: \(0.4 \cdot 0 + 0.3 \cdot 1.0 + 0.3 \cdot 0 = 0.3\)</li> </ul> <p><strong>A(1.0) &gt; B(0.51) &gt; C(0.3).</strong> 필요성과 결과 활용이라는 judge 축이 들어가야 비로소 “호출은 정확하지만 결과를 무시한” B와 “아예 시도하지 않은” C가 A보다 뒤처진다. 그리고 B가 C보다는 낫다는 순서도 유지된다 — 적어도 시도는 했고 검색 결과는 활용했으니까.</p> <p>세 프로파일을 나란히 보면 가중치가 곧 정책이라는 게 드러난다. <strong>원시 합산은 남발을 낳고, 무조건적 횟수 페널티는 태만을 낳고, 필요성·활용까지 반영한 균형 잡힌 가중치만 실제로 원하는 행동(A)을 1등으로 만든다.</strong></p> <h2 id="반례--형식만-보는-reward의-전형적-hacking">반례 — 형식만 보는 reward의 전형적 hacking</h2> <p>위 프로파일 1이 바로 그 반례다. 형식·도구 선택·파라미터 세 축만 채점하고 호출 단위로 단순 합산하면, 정책은 “결과를 실제로 쓰는가”와 무관하게 <strong>문법적으로 유효한 호출을 최대한 많이 만들어내는 방향</strong>으로 최적화된다. 실제로 ToolRL 논문의 Bamboogle 결과에서 이 패턴을 볼 수 있다. Qwen2.5-7B-Instruct를 400개 샘플로 SFT만 시킨 모델(SFT400)은 평균 3.71회의 도구 호출을 쓰고도 정답률 28.8%에 그쳤다. 반면 ToolRL의 GRPO cold-start 모델은 평균 1.63회만 호출하고도 72.0%를 맞혔다. <strong>호출 횟수와 정답률이 반비례하는 이 구간이, “형식만 맞으면 점수를 준다”는 설계가 만들어내는 전형적 실패 모드다.</strong> 호출을 많이 할수록 형식 reward를 받을 기회가 늘어나니 모델이 그 방향으로 쏠리고, 정작 그 호출들이 최종 답에 기여하는지는 아무도 채점하지 않는다.</p> <h1 id="통계-요약">통계 요약</h1> <table> <thead> <tr> <th>기법</th> <th>무엇을 채점하나</th> <th>정답 필요 여부</th> <th>핵심 수치</th> </tr> </thead> <tbody> <tr> <td>ToolRL 형식 reward</td> <td>태그 존재·순서</td> <td>필요</td> <td>\(\{0,1\}\) 이진값</td> </tr> <tr> <td>ToolRL 정확성 reward</td> <td>도구 이름 + 파라미터 이름 + 값 (자카드/exact)</td> <td>필요</td> <td>\([-3,3]\), 세분화할수록 BFCL 최대 ~10%p 향상</td> </tr> <tr> <td>ToolRL 동적 스케일</td> <td>형식→정확성으로 가중치 점진 전환</td> <td>필요</td> <td>급격한 전환보다 매끄러운 전환이 우세</td> </tr> <tr> <td>ToolRM (Bradley-Terry ORM)</td> <td>전체 호출의 상대적 우열</td> <td>불필요</td> <td>FC-RewardBench 1,500쌍, ToolRM-1.5B가 gpt-oss-120B judge를 능가</td> </tr> <tr> <td>ToolRM Best-of-32</td> <td>후보 32개 중 최고점 선택</td> <td>불필요</td> <td>작은 모델일수록 이득 큼(Qwen3-0.6B: 39.5%→64.4%)</td> </tr> <tr> <td>ToolRM 데이터 필터링</td> <td>학습 샘플 품질 순위</td> <td>불필요</td> <td>상위 50%만 써도 전체 데이터 대비 우세(54.0→62.5%)</td> </tr> <tr> <td>ToolRM as GRPO reward</td> <td>정답 없는 policy reward</td> <td>불필요</td> <td>ToolRL(정답 필요) reward와 대등~우세</td> </tr> </tbody> </table> <h1 id="conclusion">Conclusion</h1> <p>이 편의 핵심은 한 문장으로 줄일 수 있다. <strong>도구 호출은 다섯 개의 서로 다른 질문으로 쪼개서 채점해야 하고, 그중 절반(형식·선택·파라미터)은 규칙으로 충분하지만 나머지 절반(필요성·결과 활용)은 판정이 필요하다.</strong> ToolRL은 규칙으로 채점되는 절반을 극한까지 정교하게 다듬어 보였다 — 세분화는 득이 되고, 길이 reward는 독이 되고, 정확성에는 형식보다 큰 가중치를 매끄럽게 실어야 한다는 세 가지 결론이 방대한 ablation으로 뒷받침된다. ToolRM은 그 규칙이 통하지 않는 상황(정답이 없는 롤아웃)에 대응하는 학습된 대체재를 제시했고, 실제로 정답이 있어야 하는 규칙 기반 reward와 대등한 성능을 정답 없이 냈다.</p> <p>두 논문 모두 아직 다루지 않은 게 있다 — “필요성”과 “결과 활용”을 이 글에서는 토이 예제로만 계산해봤을 뿐, 실제로 그걸 judge에게 시켰을 때 얼마나 신뢰할 수 있는지는 검증하지 않았다. 그 judge 채점 자체의 신뢰도와 루브릭 설계는 다음 편(<a href="/blog/2026/agentic-judge-rubric/">#54</a>)의 주제다.</p> <h1 id="참고-문헌">참고 문헌</h1> <ul> <li>Qian et al., 2025. <a href="https://arxiv.org/abs/2504.13958">ToolRL: Reward is All Tool Learning Needs</a>. arXiv:2504.13958.</li> <li><a href="https://github.com/qiancheng0/ToolRL">GitHub: qiancheng0/ToolRL</a> — 코드 및 학습 설정 공개 저장소.</li> <li>Agarwal et al., 2025. <a href="https://arxiv.org/abs/2509.11963">ToolRM: Outcome Reward Models for Tool-Calling Large Language Models</a>. arXiv:2509.11963.</li> <li>Shao et al., 2024. <a href="https://arxiv.org/abs/2402.03300">DeepSeekMath: Pushing the Limits of Mathematical Reasoning in Open Language Models</a> — GRPO 원 논문.</li> <li>Patil et al., 2025. Berkeley Function Calling Leaderboard v3(BFCL) — <a href="https://gorilla.cs.berkeley.edu/leaderboard.html">https://gorilla.cs.berkeley.edu/leaderboard.html</a></li> </ul> <hr/> <h1 id="rl-reward-설계-시리즈">RL Reward 설계 시리즈</h1> <p>이 글은 RL Reward 설계 시리즈의 쉰세 번째 글이다.</p> <p><strong>1부. 지형도</strong></p> <ol start="1"> <li><a href="/blog/2026/deep-rl-human-preferences/">Deep RL from Human Preferences (Christiano 2017)</a> — 선호로 보상을 배우는 원형</li> <li><a href="/blog/2026/instructgpt/">InstructGPT (Ouyang 2022)</a> — RLHF 3단계 표준 레시피</li> <li><a href="/blog/2026/anthropic-hh-rlhf/">HH-RLHF (Bai 2022)</a> — helpful·harmless preference model</li> </ol> <p><strong>2부. 스칼라 RM 해부</strong></p> <ol start="4"> <li><a href="/blog/2026/bradley-terry-rethinking/">Rethinking Bradley-Terry (2024)</a> — reward 변환의 수학적 기반</li> <li><a href="/blog/2026/secrets-rlhf-reward-modeling/">Secrets of RLHF II (2024)</a> — 선호 데이터 노이즈와 RM 일반화</li> <li><a href="/blog/2026/skywork-reward/">Skywork-Reward (2024)</a> — 데이터 큐레이션이 아키텍처를 이긴다</li> <li><a href="/blog/2026/armorm/">ArmoRM (2024)</a> — 다목적 분해와 MoE 게이팅</li> <li><a href="/blog/2026/llama2-rlhf/">Llama 2 (2023)</a> — helpfulness·safety RM 분리 프로덕션 레시피</li> <li><a href="/blog/2026/rewardbench-2/">RewardBench 2 (2025)</a> — RM을 어떻게 평가할 것인가</li> </ol> <p><strong>3부. Reward Hacking</strong></p> <ol start="10"> <li><a href="/blog/2026/reward-model-overoptimization/">Overoptimization Scaling Laws (2022)</a> — Goodhart의 법칙 정량화</li> <li><a href="/blog/2026/rlhf-length-correlations/">Length Correlations in RLHF (2023)</a> — 성능 향상의 얼마가 길이인가</li> <li><a href="/blog/2026/odin-disentangled-reward/">ODIN (2024)</a> — 길이를 reward에서 분리</li> <li><a href="/blog/2026/sycophancy/">Sycophancy (2023)</a> — RM은 사실보다 동의를 좋아한다</li> <li><a href="/blog/2026/warm-weight-averaged-reward/">WARM (2024)</a> — weight averaging으로 hacking 방어</li> </ol> <p><strong>4부. 안전성 정렬</strong></p> <ol start="15"> <li><a href="/blog/2026/safe-rlhf/">Safe RLHF (2023)</a> — 안전성을 reward가 아니라 제약으로</li> <li><a href="/blog/2026/rule-based-rewards/">Rule-Based Rewards (2024)</a> — 안전 규칙을 reward로 직접 번역</li> <li><a href="/blog/2026/deliberative-alignment/">Deliberative Alignment (2024)</a> — 안전 명세를 모델의 추론 안으로</li> <li><a href="/blog/2026/shallow-safety-alignment/">Shallow Safety Alignment (2024)</a> — 정렬은 첫 몇 토큰에만 얹혀 있다</li> <li><a href="/blog/2026/or-bench/">OR-Bench (2024)</a> — 과잉 거절을 어떻게 측정할 것인가</li> </ol> <p><strong>5부. reward를 정책으로</strong></p> <ol start="20"> <li><a href="/blog/2026/ppo/">PPO (2017)</a> — clipped surrogate objective</li> <li><a href="/blog/2026/secrets-rlhf-ppo/">Secrets of RLHF I (2023)</a> — PPO 학습 안정화 트릭</li> <li><a href="/blog/2026/grpo-deepseekmath/">GRPO / DeepSeekMath (2024)</a> — value network를 버리다</li> <li><a href="/blog/2026/rloo-back-to-basics/">RLOO (2024)</a> — REINFORCE로 충분한가</li> <li><a href="/blog/2026/dpo/">DPO (2023)</a> — reward를 없애면 어떻게 되는가</li> <li><a href="/blog/2026/simpo/">SimPO (2024)</a> — reference-free + 길이 정규화</li> <li><a href="/blog/2026/kto/">KTO (2024)</a> — 선호 쌍 없이 이진 신호만으로</li> <li><a href="/blog/2026/gspo/">GSPO (2025)</a> — importance ratio를 시퀀스 단위로</li> <li><a href="/blog/2026/dapo/">DAPO (2025)</a> — 신호 없는 프롬프트를 버린다</li> <li><a href="/blog/2026/bond/">BOND (2024)</a> — Best-of-N을 추론 비용 없이</li> <li><a href="/blog/2026/warp/">WARP (2024)</a> — 정책을 weight space에서 병합</li> </ol> <p><strong>6부. Process &amp; Verifiable Reward</strong></p> <ol start="31"> <li><a href="/blog/2026/lets-verify-step-by-step/">Let's Verify Step by Step (2023)</a> — 과정 감독이 결과 감독을 이긴다</li> <li><a href="/blog/2026/math-shepherd/">Math-Shepherd (2023)</a> — 사람 라벨 없는 PRM</li> <li><a href="/blog/2026/deepseek-r1/">DeepSeek-R1 (2025)</a> — RLVR, 규칙이 reward가 될 때</li> </ol> <p><strong>7부. Generative Reward Model</strong></p> <ol start="34"> <li><a href="/blog/2026/prometheus-2/">Prometheus 2 (2024)</a> — 오픈 평가자 모델과 rubric 조건부 평가</li> <li><a href="/blog/2026/generative-verifiers/">Generative Verifiers (2024)</a> — reward를 next-token prediction으로</li> <li><a href="/blog/2026/generative-reward-models/">Generative Reward Models (2024)</a> — GenRM과 선호 학습의 결합</li> <li><a href="/blog/2026/self-taught-evaluators/">Self-Taught Evaluators (2024)</a> — 사람 라벨 없이 judge를 키우다</li> <li><a href="/blog/2026/deepseek-grm-spct/">DeepSeek-GRM / SPCT (2025)</a> — inference-time scaling</li> </ol> <p><strong>8부. 생각하는 Judge</strong></p> <ol start="39"> <li><a href="/blog/2026/reasongrm/">ReasonGRM (2025)</a> — reasoning 능력을 judge에 이식</li> <li><a href="/blog/2026/j1-thinking-judge/">J1 (2025)</a> — RL로 judge를 생각하게 만들기</li> <li><a href="/blog/2026/rubrics-as-rewards/">Rubrics as Rewards (2025)</a> — 비검증 도메인으로</li> <li><a href="/blog/2026/criticeval/">CriticEval (2024)</a> — judge 자체를 어떻게 평가하나</li> <li><a href="/blog/2026/one-token-to-fool-judge/">One Token to Fool LLM-as-a-Judge (2025)</a> — GenRM도 뚫린다</li> </ol> <p><strong>9부. 에이전트는 무엇이 다른가</strong></p> <ol start="44"> <li><a href="/blog/2026/agentic-rl-landscape/">에이전트 RL은 무엇이 다른가</a> — 장기 지평·희소 보상·긴 궤적</li> <li><a href="/blog/2026/credit-assignment-survey/">공을 어디에 돌릴 것인가</a> — credit assignment 47개 방법의 지도</li> <li><a href="/blog/2026/multi-turn-rl-practice/">멀티턴 RL 실무 가이드</a> — 무엇이 실제로 작동하는가</li> </ol> <p><strong>10부. credit assignment — 공을 어디에 돌릴 것인가</strong></p> <ol start="47"> <li><a href="/blog/2026/outcome-vs-process-agentic/">결과만으로는 부족하다</a> — 장기 지평에서 증폭되는 RLVR의 한계</li> <li><a href="/blog/2026/turn-level-reward/">턴 단위로 공을 나눈다</a> — turn-level reward 설계</li> <li><a href="/blog/2026/step-level-credit/">스텝을 단위로 삼는다</a> — 행동 단위 궤적 표현과 credit</li> <li><a href="/blog/2026/token-segment-credit/">토큰과 세그먼트로 더 잘게</a> — 세밀한 입도의 득과 실</li> <li><a href="/blog/2026/reward-shaping-agentic/">shaping은 약인가 독인가</a> — 중간 보상의 효율과 위험</li> </ol> <p><strong>11부. 에이전트의 reward는 어디서 오나</strong></p> <ol start="52"> <li><a href="/blog/2026/environment-as-reward/">환경이 곧 reward다</a> — 샌드박스·테스트·상태 검증</li> <li><strong>(현재 글)</strong> 도구 호출을 어떻게 채점하나 — ToolRL·ToolRM</li> <li><a href="/blog/2026/agentic-judge-rubric/">궤적을 judge가 채점한다</a> — rubric 생성형 reward의 확장</li> </ol> <p><strong>12부. 에이전트 도메인별 설계</strong></p> <ol start="55"> <li><a href="/blog/2026/search-agent-rl/">검색 에이전트</a> — Search-R1에서 DeepDive까지</li> <li><a href="/blog/2026/swe-agent-rl/">코드 에이전트</a> — SWE-RL과 테스트라는 reward</li> <li><a href="/blog/2026/web-gui-agent-rl/">웹·GUI 에이전트</a> — end-to-end 멀티턴 RL</li> </ol> <p><strong>13부. 에이전트의 실패와 방어</strong></p> <ol start="58"> <li><a href="/blog/2026/agentic-reward-hacking/">에이전트의 reward hacking</a> — 판정기가 뚫린다, 그리고 조합의 실패</li> </ol> <p><strong>14부. 실전 종합</strong></p> <ol start="59"> <li><a href="/blog/2026/frontier-reward-design/">프론티어의 helpfulness reward 설계</a> — 열한 개 모델이 능력 축에서 택한 것</li> <li><a href="/blog/2026/frontier-safety-design/">프론티어의 harmlessness reward 설계</a> — 안전 축과 over-refusal 트레이드오프</li> <li><a href="/blog/2026/frontier-agentic-rl/">프론티어 모델은 실제로 어떻게 하나</a> — 최신 모델들의 agentic RL 설계</li> <li><a href="/blog/2026/reward-model-design/">reward를 어떻게 설계할 것인가</a> — 시리즈를 관통한 RM 설계 원칙 한 장</li> </ol> <p>본 시리즈는 62편으로 구성된다.</p>]]></content><author><name></name></author><category term="paper"/><category term="agentic-rl"/><category term="tool-use"/><category term="reward-design"/><category term="grpo"/><category term="reward-model"/><category term="paper"/><summary type="html"><![CDATA[RL Reward 설계 시리즈 #53 — 도구 호출의 형식·선택·파라미터를 규칙으로, 필요성·결과 활용을 judge로 채점하는 두 축을 ToolRL의 reward ablation과 ToolRM의 outcome reward model로 뜯어본다]]></summary></entry></feed>