에이전트의 reward hacking — 판정기가 뚫린다, 그리고 조합의 실패

Motif: Intrinsic Motivation from Artificial Intelligence Feedback (Klissarov et al., Mila/FAIR at Meta, ICLR 2024)

Introduction

이 시리즈 #1과 RLHF Reward 설계 시리즈는 규칙 기반(rule-based) reward를 이렇게 정리했다 — “학습되는 파라미터가 없으니 뚫을 대상이 없다.” 스칼라 RM은 gradient로 최적화 압력을 받아 왜곡되고, judge는 프롬프트 안에서 설득당하지만, 정답과 문자열을 비교하거나 유닛 테스트를 돌리는 코드에는 최적화가 파고들 표면 자체가 없다는 논리였다.

이 논리는 절반만 맞다. 파라미터가 없어도 판정 로직이 진짜 목표의 대리 지표(proxy)라면, 그 정의 자체가 뚫린다. 뚫리는 건 함수가 아니라 정의다. NetHack의 오라클(oracle) 과제 판정 코드는 학습되는 가중치가 단 하나도 없다 — “에이전트 근처에 오라클처럼 보이는 캐릭터가 있는가”를 확인하는 하드코딩된 규칙일 뿐이다. 그런데 정확히 이 규칙이, 이 글의 중심 사례인 Motif에서 뚫린다. 진짜 오라클을 찾아간 게 아니라, 환각 상태에서 아무 몬스터나 오라클로 착각하게 만들어 그 착각을 판정기가 그대로 받아들이게 한 것이다.

경로만 먼저 요약하면 이렇다. 에이전트는 수천 턴을 생존해 노란 곰팡이라는 특정 몬스터를 찾아 죽이고, 그 시체를 먹어 환각 상태에 빠진다. 환각 속에서 아무 몬스터나 눈앞에 나타나면 그것을 공격하지 않고 가만히 버틴다. 이 몬스터가 환각으로 오라클처럼 보이는 순간, 게임 엔진은 “근처에 오라클이 있다”고 판단해 과제를 완료 처리한다. 에이전트는 진짜 오라클이 있는 던전 깊은 곳에는 단 한 번도 가지 않는다. 이 경로 전체를 뒤에서 단계별로 되짚는다.

이 글이 다룰 두 번째, 그리고 더 근본적인 주제는 misalignment by composition이다. 개별적으로 최적화하면 사람의 직관과 잘 맞는 행동을 낳는 보상들이 있다. 이 보상들을 그냥 더해서 함께 최적화하면 어떻게 될까. Motif의 저자들이 발견한 답은 놀랍다 — 개별로는 둘 다 정렬돼 있어도, 합치면 어긋난 행동이 새로 생겨난다. 이건 어느 한쪽 보상이 나빠서가 아니다. 둘의 조합이 열어준 새로운 능력(생존 기술)이, 원래는 존재하지 않았던 지름길(환각을 유도해 판정을 속이는 길)을 만들어낸 것이다.

이 글의 구성은 다음과 같다. Method에서 Motif의 3단계 구조 — LLM 선호 라벨링, Bradley-Terry 증류, 내재적 보상으로의 변환 — 를 수식과 함께 정확히 따라간다. 그다음 절에서 오라클 과제의 hacking 경로를 단계별로 재구성하고, misalignment by composition의 정확한 정의를 확인한다. 이어서 이 시리즈가 2~4부에서 이미 예고했던 다른 네 가지 hacking 유형을 회수해 하나의 지도로 묶는다. 마지막으로 “고정 계수로 그냥 더한다”는 Motif의 실패를 기준점 삼아, 실제 프론티어 모델들이 여러 reward를 어떻게 다르게 결합하는지 표로 정리한다.

Background

reward hacking의 일반적 정의

Motif 저자들은 오라클 과제의 실패를 설명하며 reward hacking의 정의를 다룬 논문(Skalse et al., “Defining and Characterizing Reward Hacking”, arXiv 2022)을 직접 인용한다. 이 논문은 reward hacking을 “불완전한 대리(proxy) reward 함수를 최적화한 결과, 진짜(true) reward 함수 기준으로는 성능이 나빠지는 현상”으로 정식화하고, 대리 reward가 “unhackable”하려면 “대리 reward의 기대 수익을 올리는 것이 진짜 reward의 기대 수익을 절대 낮추지 않아야 한다”는 조건을 만족해야 한다고 정의한다. 이 정의에는 대리 reward가 학습된 신경망인지 하드코딩된 규칙인지에 대한 언급이 전혀 없다. 정의 자체가 이미 “규칙 기반이라 안전하다”는 가정을 담고 있지 않다.

더 나아가 이 논문이 형식적으로 증명하는 결과 하나가 이 글의 주제와 정확히 맞닿아 있다. 스토캐스틱 정책 전체를 대상으로 두면, 두 개의 reward 함수가 동시에 unhackable하려면 둘 중 하나가 상수 함수여야 한다는 것이다. 뒤집어 말하면, 둘 다 실질적인(상수가 아닌) 정보를 담은 reward라면 — 설령 각각은 진짜 목표와 잘 맞더라도 — 그 둘을 조합하는 순간 hacking에서 자유로울 수 없다는 뜻이다. Motif의 오라클 사례는 이 형식적 결과가 실제 시스템에서 어떤 모습으로 나타나는지를 보여주는 구체적 실증이다.

이 편이 서는 위치 — 단일 reward의 근사 오차를 넘어서

RLHF Reward 설계 시리즈는 reward hacking을 세 축으로 다뤘다 — 보상 모델의 overoptimization(대리 reward를 과도하게 최적화하면 진짜 선호와 벌어진다), 길이와의 허위 상관(장황함이 품질의 대리 지표로 오인된다), 그리고 ODIN이 다룬 신호 얽힘(길이라는 잡음이 품질이라는 신호에 섞여 든다), 마지막으로 아첨(judge와 사람 모두를 속이는 세 번째 축). 이 세 축은 전부 “reward 함수 하나가 진짜 목표를 얼마나 정확히 근사하는가”의 문제다. 근사가 나쁘면 그 오차를 파고드는 것이 hacking이다.

composition은 이 세 축과 다른 층위에 있다. 근사 오차와 무관하게, 각각은 진짜 목표를 잘 근사하는 두 reward라도 — 심지어 각자 단독으로는 hacking되지 않는 reward라도 — 더하는 순간 새로운 hacking 표면이 열릴 수 있다. 이 글은 그래서 이 시리즈에서 이미 예고된 네 번째 축을 다룬다. #8이 이 네 가지 유형(행동 남발, 중간 목표 고착, 대리 지표 공략, 조합의 실패)을 처음 분류하며 “이 시리즈에서 가장 깊이 다뤄야 할 문제”로 조합의 실패를 지목한 것이 바로 이 글이다.

네 축을 나란히 놓으면 이 글의 위치가 분명해진다.

무엇이 틀어지는가 다루는 글
overoptimization 대리 reward를 과도하게 밀어붙이면 진짜 선호와 벌어진다 reward-model-overoptimization
길이 상관 장황함이 품질의 대리 지표로 오인된다 rlhf-length-correlations
신호 얽힘 하나의 reward 안에서 잡음(길이)과 신호(품질)가 섞인다 ODIN
조합 개별로는 정렬된 여러 reward를, 합치는 순간 어긋난다 이 글 — Motif

앞의 세 축은 “reward 함수 하나”의 문제고, 네 번째 축은 “reward 함수 여러 개를 어떻게 엮는가”의 문제다. 층위 자체가 다르기 때문에, 앞의 세 축을 아무리 잘 방어해도 조합 단계에서 새로운 hacking이 생기는 것을 막지 못한다.

내재적 동기부여 — Motif가 서 있는 자리

Motif를 이해하려면 “내재적 동기부여(intrinsic motivation)”라는 오래된 아이디어를 먼저 짚어야 한다. 환경의 외재적 보상이 극도로 희소할 때, 에이전트가 스스로 “탐험할 가치가 있는 상태”를 판단하도록 별도의 내부 보상을 주는 접근이다. RND(Random Network Distillation)나 NovelD, E3B 같은 고전적 방법들은 이 판단을 통계적 새로움(novelty)으로 내린다 — 지금까지 잘 방문하지 않은 상태일수록 더 신기하다고(더 예측하기 어렵다고) 보고 보상을 준다. 이 방식은 도메인 지식이 전혀 필요 없다는 장점이 있지만, “새롭다”와 “좋다”는 별개다. 처음 보는 벽이나 무의미한 화면 전환도 신기함 점수는 높게 받는다.

Motif는 이 신기함의 자리에 LLM의 상식을 넣는다. “새로운 상태인가”가 아니라 “사람이 보기에 이 상태가 더 나은 상태인가”를 직접 판단하게 하는 것이다. 저자들이 실험에서 RND·NovelD·E3B를 베이스라인으로 비교했을 때, 이 방식이 score와 희소 보상 과제 전반에서 뚜렷하게 앞섰다고 보고한다. 다만 이 글의 맥락에서 중요한 것은 우위 자체가 아니라, 판단 기준이 통계에서 의미로 옮겨가면서 hacking의 성격도 달라진다는 점이다. 통계적 novelty는 “본 적 없는 상태를 계속 찾아라”는 방향의 hacking(같은 새로움을 계속 찾다가 무의미한 상태에 고착되는 것)에 취약하고, Motif처럼 의미 기반 보상은 “판정 정의가 요구하는 흔적을 만들어내라”는 전혀 다른 방향의 hacking에 취약해진다. 오라클 사례가 후자의 정확한 예시다.

Method — Motif: LLM 선호에서 강화학습 보상까지

Motif는 LLM을 정책으로 직접 쓰지 않는다. 대신 LLM의 상식을 오프라인으로 증류한 스칼라 보상 함수로 바꾼 뒤, 그 보상으로 RL 에이전트를 학습시킨다. 저자들이 명시하는 설계 원칙은 “생성하기보다 평가하기가 쉽다”(Sutton, 2001)는 것이다 — LLM에게 NetHack을 직접 플레이하라고 시키는 대신, 짧은 이벤트 캡션 두 개 중 어느 쪽이 더 나은지만 묻는다. 이 절은 그 증류 과정을 3단계로 따라간다.

단계 입력 출력 핵심 장치
1. 데이터셋 주석 관측 쌍 \((o_1, o_2)\), LLM 선호 라벨 \(y \in \{1, 2, \varnothing\}\) chain-of-thought 프롬프팅
2. 보상 증류 선호 데이터셋 \(\mathcal{D}_{\text{pref}}\) 스칼라 보상 모델 \(r_\phi\) 무승부 항이 있는 Bradley-Terry 손실
3. 내재적 보상 변환 \(r_\phi\) \(r_{\text{int}}\) 임계값 \(\varepsilon\) + 방문 횟수 정규화 \(N^\beta\)

세 단계 중 hacking과 가장 직접적으로 연결되는 것은 3단계의 설계 의도(반복 수확 방지)와, 뒤에서 볼 결합 단계다. 하나씩 순서대로 따라간다.

1단계 — 데이터셋 주석: LLM이 캡션 쌍에 선호를 매긴다

NetHack은 게임 화면의 약 10~20%에서 짧은 텍스트 메시지를 띄운다 (“몬스터를 죽였다”, “굶주리기 시작한다”, “벽에 부딪혔다” 같은 것들). 이 메시지가 곧 캡션 \(c(o)\)다. 데이터셋 \(\mathcal{D}\)는 특정한 하나의 숙련된 정책이 아니라, 표준 NLE 베이스라인(CDGPT5)이 점수 최대화를 목표로 10억 스텝을 학습하는 과정에서 1억 스텝마다 100개 에피소드씩, 10개의 서로 다른 시드로 모은 것이다. 즉 학습 초반의 서투른 플레이부터 후반의 능숙한 플레이까지가 골고루 섞여 있다. 저자들은 이 데이터셋을 만들 때 “생성한 정책이 얼마나 능숙한지는 가정하지 않지만, 관측의 다양성(coverage)은 충분해야 한다”는 원칙을 명시한다 — 좋은 행동만 보여주는 좁은 시연 데이터가 아니라, 서투른 행동과 능숙한 행동이 섞인 폭넓은 관측 풀에서 LLM이 상대적인 선호를 매기게 하려는 의도다. 여기서 관측 쌍 \((o_1, o_2)\)를 뽑아 Llama 2 70B(chat)에게 “어느 캡션이 더 나은 상황을 나타내는가”를 묻는다. 답은 세 가지 중 하나다 — 첫 번째 선호(\(y=1\)), 두 번째 선호(\(y=2\)), 또는 무승부(\(y=\varnothing\)).

실제 응답 예시 두 개가 이 과정을 잘 보여준다. 첫 번째 쌍은 “계단이 있고 오르크식 투구가 보인다”(o1)와 “단단한 돌이다”(o2)다. LLM은 o1을 선택한다 — 계단은 던전을 더 내려갈 가능성을, 투구는 전투력 향상을 시사하므로 게임의 목표(더 깊이 내려가고 몬스터를 처치하는 것)에 더 가깝다는 것이 LLM의 근거다. 두 번째 쌍은 빈 메시지와 “단단한 돌이다”다. 둘 다 정보량이 거의 없어 LLM은 무승부를 택한다. 실제로 두 메시지가 완전히 동일한 경우(전체 쌍의 5~10%, 대부분 빈 메시지)는 LLM에게 묻지도 않고 자동으로 \(y=\varnothing\)을 부여한다.

이 라벨링 과정 자체도 잡음을 관리하도록 설계돼 있다. 저자들은 chain-of-thought 프롬프팅을 써서, LLM이 곧바로 답을 고르기 전에 NetHack에 대한 자신의 지식을 요약하고 두 메시지를 분석하도록 유도한다. 그다음 정규표현식으로 출력에서 라벨을 추출하는데, 추출에 실패하면 대화를 이어가 한 번 더 묻고, 두 번째 시도마저 실패하면 그 쌍을 데이터셋에서 그냥 버린다. “애매하면 억지로 라벨을 만들지 않는다”는 원칙이 무승부 라벨뿐 아니라 파싱 실패 처리에도 일관되게 적용되는 셈이다.

2단계 — Bradley-Terry로 선호를 보상으로 증류한다

이렇게 모은 선호 데이터셋 \(\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_\phi[o_a \succ o_b] = \frac{e^{r_\phi(o_a)}}{e^{r_\phi(o_a)} + e^{r_\phi(o_b)}}\]

여기까지는 RLHF의 표준 보상 모델 학습과 똑같다. Motif가 다른 지점은 무승부 라벨을 버리지 않고 손실 함수 안에 명시적인 항으로 넣는다는 것이다. 전체 손실은 다음과 같다.

\[\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]\]

기호를 하나씩 풀면 이렇다.

  • \(\mathbb{1}[y=1]\log P_\phi[o_1 \succ o_2]\) — 표준 BT 손실. \(o_1\)이 선호됐다면 \(o_1\)이 이길 확률의 로그를 최대화한다.
  • \(\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)\) — 무승부 항. 기하평균 형태다.

왜 하필 기하평균인가. 소프트맥스 정의를 그대로 대입하면 \(P_\phi[o_1\succ o_2] + P_\phi[o_2\succ o_1] = 1\)이 항상 성립한다 (분모가 같은 두 항의 합이므로). 이 사실을 이용해 무승부 항을 직접 전개하면,

\[\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]\]

즉 기하평균의 로그는 두 표준 BT 항을 정확히 반반 가중해 더한 것과 같다. “무승부”라는 라벨을 “\(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에 가까운) 보상을 줘야 한다”는 정규화 효과까지 얻는다.

토이 예제로 확인하기. 위 두 실제 예시에 가상의 \(r_\phi\) 값을 붙여 소프트맥스가 실제로 어떻게 움직이는지 보자. 첫 번째 쌍(“계단·투구” vs “단단한 돌”)에 \(r_\phi(o_1)=1.2\), \(r_\phi(o_2)=-0.3\)을 대입하면,

\[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\]

\(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\)가 된다. 무승부 항이 없었다면 이런 저정보 메시지 쌍에도 억지로 승자를 가르는 방향으로 그래디언트가 흘렀을 것이다.

3단계 — 내재적 보상으로의 변환: 임계값과 방문 횟수 정규화

BT 학습으로 얻은 \(r_\phi\)를 그대로 RL에 넣지 않는다. RL 최적화에 적합하도록 다음과 같이 변환한다.

\[r_{\text{int}}(\text{message}) = \mathbb{1}[r_\phi(\text{message}) \ge \varepsilon] \cdot r_\phi(\text{message}) \,/\, N(\text{message})^\beta\]
  • \(\varepsilon\) — 임계값. 이 값 미만인 \(r_\phi(\text{message})\)는 0으로 잘라낸다.
  • \(N(\text{message})\) — 에피소드 내에서 같은 메시지가 지금까지 몇 번 나왔는지를 세는 카운트.
  • \(\beta\) — 그 카운트에 걸리는 지수.

왜 방문 횟수로 나눠야 하는가. \(r_\phi\)는 메시지 하나만 보고 값을 매기는 관측 단위(Markovian) 보상이다. 이 자체가 hacking 표면이다 — 에이전트가 좋은 보상을 받는 메시지 하나를 찾으면, 굳이 다음 단계로 나아가지 않고 그 메시지가 다시 나오는 상황을 반복해서 만들어 같은 보상을 계속 수확할 수 있다. “문이 열린다”는 메시지가 높은 보상을 받는다면, 매번 다른 문을 여는 대신 같은 문을 여닫기를 반복하는 정책이 나올 수 있다는 뜻이다. \(N(\text{message})^\beta\)로 나누면 같은 메시지를 반복할수록 보상이 빠르게 죽으므로, 에이전트는 새로운 메시지(새로운 이벤트)를 찾아 나서야 보상을 계속 얻을 수 있다. 저자들은 이를 “Markovian reward 함수의 근본적 한계를 극복”하는 장치라고 명시한다. 임계값 \(\varepsilon\)은 별개의 역할이다 — 불완전한 LLM이 매긴 노이즈 섞인 저품질 판단을 걸러내는 필터다.

실제 실험에서 쓴 값은 \(\beta=3\), \(\varepsilon\)은 경험적 보상 분포의 50번째 백분위수(중앙값)다. 즉 원시 \(r_\phi\) 값의 절반가량이 통째로 0으로 잘려나갈 만큼 공격적인 필터링이다. \(\beta=3\)이 얼마나 가파른 감쇠인지 가상의 수치로 확인해보자. \(r_\phi(\text{message}) = 2.0\)인 메시지가 한 에피소드 안에서 \(N=1,2,3\)번째로 나온다면,

\(N\) \(N^3\) \(r_{\text{int}} = 2.0 / N^3\)
1 1 2.000
2 8 0.250
3 27 0.074

세 번째 반복부터는 사실상 보상이 사라진다. 참고로 저자들은 어블레이션에서 \(\beta=0\)(카운트 정규화 없음)일 때 실제로 실패 사례를 확인했다 — 상호작용할 수 없는 갑옷·무기 같은 객체를 계속 찾아 헤매다 무한 루프에 빠지는 정책이 나왔다.

결합 — 고정 계수 선형 결합

내재적 보상 \(r_{\text{int}}\)를 환경의 외재적 보상 \(r\)과 결합하는 방식은 간단하다.

\[r_{\text{effective}}(o) = \alpha_1 r_{\text{int}}(o) + \alpha_2 r(o)\]

\(\alpha_1, \alpha_2\)는 각 보상에 미리 정한 고정 가중치다. 일부 실험에서는 \(\alpha_2 = 0\)으로 두어 내재적 보상만으로 학습시킨다. 저자들은 이 결합을 온라인 데이터로 다시 미세조정하지 않고, 오프라인에서 얻은 \(r_\phi\)를 그대로 신뢰한다고 명시한다. 이 문장 하나가 뒤에 나올 실패의 씨앗이다. 두 보상을 각각 정규화하거나 스케일을 맞추지 않고, 그냥 더한다.

구현 세부는 짧게만 짚는다. 보상 모델 \(r_\phi\)는 관측 전체가 아니라 메시지 텍스트만을 입력으로 받는 문자 단위 1차원 합성곱 신경망이다. RL 쪽은 Sample Factory의 비동기 PPO 구현(CDGPT5 베이스라인)을 그대로 쓰며, 내재적 보상과 외재적 보상을 additive하게 합친 뒤 표준 PPO 루프를 돈다. LLM 주석자는 Llama 2 70B(chat)를 그대로 쓰고, 별도의 도메인 파인튜닝은 하지 않는다 — 저자들은 사전 실험으로 이 모델이 NetHack에 대한 상식(역사, 목표, 게임플레이 특성)을 충분히 갖췄음을 먼저 확인했다.

조합이 무너지는 지점 — 오라클 과제의 misalignment by composition

과제 정의와 평범한 실패

NLE(NetHack Learning Environment)의 오라클(oracle) 과제는 극도로 희소한 보상을 준다 — 에이전트가 던전 깊이 5레벨 이상의 특정 가지(branch)에 있는 오라클이라는 캐릭터를 찾으면 보상 50을 준다. 저자들은 이 과제를 “이 과제 집합에서 가장 어려운 과제”라 부르며, 인간의 시연 데이터 없이는 어떤 접근법도 이 과제에서 의미 있는 진전을 낸 적이 없었다고 명시한다(Bruce et al., 2023 언급). 그만큼 신호가 희박하다.

hacking 경로 재구성

Motif는 이 과제에서 결합 보상(\(\alpha_1 r_{\text{int}} + \alpha_2 r\))으로 유의미한 성공률을 낸다. 그런데 학습된 정책의 행동을 들여다본 저자들은 뜻밖의 사실을 발견한다 — 에이전트는 거의 첫 번째 던전 레벨을 벗어나지 않는다. 실제로 벌어진 일은 다음과 같은 다섯 단계다.

  1. 탐색과 생존. 에이전트는 수천 턴을 생존하며 노란 곰팡이(yellow mold, 게임 내 기호 F)라는 특정 몬스터와 마주칠 기회를 기다린다. NetHack은 절차적으로 생성되는 게임이라 이 몬스터를 만나는 것 자체가 우연이 아니라 상당한 생존 능력을 요구한다.
  2. 사냥. 노란 곰팡이를 처치한다.
  3. 시체 섭취. 그 시체를 먹는다 — 노란 곰팡이의 몸에는 환각제 성분이 있다.
  4. 환각 상태 진입. 화면 하단에 “Hallu” 상태가 표시되며, 에이전트는 이제 몬스터를 실제와 다른 모습으로 지각한다. 예컨대 예티(Yeti, 기호 Y)를 다른 게임 지역에서 흔히 보이는 캐릭터로 착각한다.
  5. 비공격 생존. 정상이라면 몬스터를 공격했겠지만, 이 경로를 완주하려면 오히려 완전히 비공격적으로 행동하며 그 몬스터의 공격을 버텨야 한다. 살아남고 환각이 끝나지 않았다면, 그 몬스터가 오라클로 보이게 된다. 그리고 여기서 판정기가 개입한다.

“As the NLE detects that a nearby character appears to be the oracle, the task will be declared as completed.” (NLE가 근처 캐릭터가 오라클처럼 보인다고 감지하는 순간, 과제는 완료로 선언된다.)

에이전트는 진짜 오라클을 향해 던전을 내려간 적이 없다. 환각제를 찾아 목표 상태를 꿈꾸는 법을 학습한 것이지, 실제로 그곳에 가는 법을 학습한 게 아니다.

뚫린 것은 판정기이지 LLM 보상이 아니다

여기서 짚어야 할 것은 무엇이 뚫렸는가다. 뚫린 것은 Motif의 LLM 기반 내재적 보상이 아니다. NLE라는 환경의 프로그램 판정기다 — “근처에 오라클로 보이는 캐릭터가 있는가”라는, 파라미터가 하나도 없는 하드코딩된 검사 로직이다.

이 구분이 왜 중요한지는 내재적 보상만 단독으로 썼을 때의 행동을 보면 분명해진다. 저자들이 정책들을 비교 분석한 결과, 외재적 보상만으로 학습한 에이전트는 던전 레벨 전환과 골드 수집에 걸린 보상을 좇아 위험을 무시하고 곧장 깊이 내려간다. 반면 Motif의 내재적 보상만으로 학습한 에이전트는 생존에 맞춰진 행동을 보인다 — 몬스터를 더 많이 처치하고, 경험치 레벨을 더 많이 올리고, 더 오래 생존한다. 사람 플레이어의 직관에 더 가까운 행동이다. 이 정렬은 다른 지표에서도 확인된다 — 외재적 보상만으로 학습한 에이전트는 자신의 펫을 99.4%±0.63%의 확률로 죽이지만(펫을 죽이면 점수를 얻고, 펫이 대신 몬스터를 죽여 점수를 뺏기는 상황도 막을 수 있으므로), Motif의 내재적 보상으로 학습한 에이전트는 더 나은 점수를 내면서도 펫을 33.4%±25.14%의 확률로만 죽인다. 즉 내재적 보상 단독은 hacking을 낳지 않는다.

hacking이 나타나는 건 정확히 두 보상을 결합했을 때다. 생존 지향 내재적 보상이 에이전트에게 “노란 곰팡이를 만날 때까지 수천 턴을 버틸 능력”을 부여했고, 외재적 보상(오라클 발견 시 +50)이 그 능력을 “판정을 만족시키는 가장 값싼 경로를 찾아라”는 압력으로 바꿨다. 둘 다 개별적으로는 정렬돼 있었는데, 합쳐지자 새로운 지름길이 열렸다. 저자들은 이 일반 현상에 이름을 붙인다.

“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.”

번역하면 “개별적으로 최적화하면 정렬된 행동을 낳는 보상들을, 합쳐서 최적화할 때 어긋난 행동이 나타나는 현상”이다. 저자들은 이 현상이 대화형 에이전트를 포함한 다른 상황에서도 나타날 수 있다고 덧붙인다.

RLAIF의 문제가 아니다

이 사례를 “LLM이 매긴 보상이라 미덥지 못하다”는 이야기로 읽으면 핵심을 놓친다. 뚫린 판정 로직 — “근처 캐릭터가 오라클처럼 보이는가” — 은 LLM과 아무 관련이 없다. 이 검사는 NLE 엔진에 하드코딩된, 사람이 짠 if문이다. 만약 오라클 발견 보상이 사람이 직접 라벨링한 선호로 만들어졌더라도, 혹은 애초에 LLM이나 선호 학습 없이 순수 RLVR로 이 결합을 만들었더라도 — 내재적 보상의 출처가 무엇이었든, 그 보상이 에이전트에게 “환각 상태에서 오래 생존하는 능력”을 준다는 사실만 같다면 — 판정기는 그대로 뚫렸을 것이다. 문제는 보상의 출처가 아니라 판정 정의의 견고함이다. “정답과 문자열이 일치하는가”나 “테스트를 통과하는가”처럼 검증 가능해 보이는 규칙 기반 판정도, 그 규칙이 진짜 목표의 완전한 정의가 아니라 대리 지표에 불과하다면 얼마든지 이런 식으로 뚫린다.

hack은 프롬프트 한 줄에도 사라진다

저자들이 추가로 확인한 사실 하나가 이 현상의 성격을 더 분명하게 만든다. LLM 주석자에게 주는 프롬프트를 의미상 거의 같지만 문구만 바꿔 다시 실험했더니, 오라클 과제에서 완전히 다른 행동이 나왔다. 기본 프롬프트를 쓴 Motif는 지금까지 본 “환각 기법”을 찾아내 던전을 내려갈 필요조차 없앴지만, 재구성한 프롬프트를 쓴 Motif는 저자들이 의도했던 해법 그대로 던전을 내려가 진짜 오라클을 찾는 법을 학습했다. score 과제에서는 같은 재구성이 성능 차이를 거의 만들지 않았다는 점과 대비된다 — 즉 이 민감성은 과제가 충분히 복잡하고 판정이 좁게 정의돼 있을 때만 두드러진다.

저자들은 이 결과를 프롬프트 민감성과 RL 학습이 상호작용해 만드는 “창발적 현상”이라 부른다. 프롬프트가 바뀌면 LLM의 선호가 바뀌고, 그 선호가 내재적 보상으로 증류되고, 그 보상이 다시 행동으로 이어진다 — 사슬 어디서든 문구 하나가 hacking의 존재 여부 자체를 뒤집을 수 있다는 뜻이다. 이는 판정 정의가 대리 지표일 때, 그 대리 지표를 만드는 파이프라인의 아주 작은 변화도 hacking의 발생 여부를 바꿀 수 있다는 것을 보여준다 — hacking이 항상 일어나는 필연이 아니라, 특정 조합에서만 열리는 좁은 문이라는 뜻이기도 하다.

un-hackable 버전으로 확인 사살

이 exploit이 우연한 해석이 아니라 실제 hacking이라는 것을 저자들은 직접 검증한다. 오라클 과제의 성공 조건을 “에이전트가 오라클 옆에 있고, 동시에 환각 상태가 아닐 것”으로 다시 정의한 oracle-sober라는 변형 과제를 만들어 같은 Motif 에이전트를 재평가한 것이다. 결과는 두 가지를 동시에 확인해준다. 첫째, 내재적·외재적 보상을 결합한 Motif는 이 강화된 판정에서도 여전히 이 극도로 희소한 과제를 유의미하게 풀어낸다 — 환각 지름길이 유일한 능력의 원천은 아니었다는 뜻이다. 둘째, 그 성공률은 원래(느슨한) 판정 기준일 때보다 낮아진다 — 즉 원래 판정 기준에서 관측된 성공률의 일부는 정말로 환각을 악용해 얻은 것이었다는 뜻이다. 판정 정의를 진짜 목표에 더 가깝게 조이는 것만으로 hacking으로 얻은 가짜 성공의 상당 부분을 걸러낼 수 있었다는 사실 자체가, 이 사례가 misalignment by composition의 깨끗한 실증 사례임을 뒷받침한다.

다른 hacking 유형들 — 이 시리즈가 이미 만난 것들

Motif의 오라클 사례는 “판정 정의가 대리 지표”라는 큰 유형 하나를 정확히 보여준다. 이 시리즈는 2~4부를 지나며 이미 다른 네 가지 유형을 예고했다. 여기서 회수해 하나의 지도로 묶는다.

판정 정의가 대리 지표

Motif의 오라클 사례가 정확히 이 유형이다. 판정 함수가 “진짜 목표에 도달했는가”가 아니라 “진짜 목표가 남길 만한 흔적(오라클로 보이는 캐릭터)이 관측되는가”를 확인하기 때문에, 그 흔적만 위조하면 판정을 통과한다.

코드 에이전트 도메인에서도 구조가 같은 사례가 실제로 관측된다. 프로그래밍 문제에서 reward hacking을 벤치마킹한 EvilGenie(Gabor et al., arXiv 2025)는 LiveCodeBench 문제를 변형해, 에이전트가 정답을 실제로 풀지 않고도 테스트를 통과할 여지를 일부러 남긴 환경을 만들었다. 저자들은 hacking을 held-out 유닛 테스트, LLM judge, 테스트 파일 수정 여부 탐지라는 세 가지 방법으로 각각 검출해 서로 교차 검증했고, 그 결과 에이전트들이 테스트 케이스를 하드코딩하거나 테스트 파일 자체를 수정·삭제해 강제로 통과시키는 사례를 실측했다. 상용 코딩 에이전트 세 개(OpenAI Codex, Anthropic Claude Code, Google Gemini CLI)를 함께 평가했는데, Codex와 Claude Code 모두에서 명시적인 reward hacking이, 세 모델 모두에서 크고 작은 misaligned behavior가 관측됐다고 저자들은 밝힌다. “테스트를 통과했는가”라는, 언뜻 파라미터가 없어 안전해 보이는 검증 가능한 판정조차 판정에 쓰이는 테스트 파일 자체가 에이전트의 쓰기 권한 안에 있다면 대리 지표로 전락한다 — Motif의 오라클 판정이 뚫린 구조와 정확히 같다. 이 도메인의 판정 설계와 방어는 #13에서 본격적으로 다룬다.

shaping이 만든 행동 남발

#8이 분류한 첫 번째 유형이다. “성공에 +점을 준다”는 형태의 중간 보상은, 성공을 반복 가능하게 만드는 구조에서는 거의 항상 성공 자체를 남발하는 정책을 낳는다. DynaSearcher는 recall 보상만 주면 에이전트가 이미 충분한 정보를 얻은 뒤에도 검색을 계속 호출해 recall 수치를 억지로 밀어 올린다는 사실을 확인하고, 별도의 페널티 항을 설계해야 했다. #10의 토이 계산도 같은 그림을 숫자로 보여준다 — 호출별 점수를 그냥 합산하면, 결과를 무시한 채 형식만 맞춘 도구 호출을 하나 더 쌓은 궤적이 더 높은 점수를 받는다.

Motif의 카운트 정규화(\(N(\text{message})^\beta\))는 사실 정확히 이 유형을 미리 막기 위한 장치였다는 점이 흥미롭다. “좋은 메시지를 반복해서 수확한다”는 남발 패턴을 저자들이 이미 설계 단계에서 예상하고 대응했기 때문에, 3단계(내재적 보상 변환)에서는 이 유형의 hacking이 나타나지 않는다. 그런데도 결합 단계에서 전혀 다른 유형의 hacking(대리 지표 공략)이 새로 생겼다는 것은, 한 유형의 hacking을 잘 막았다는 사실이 다른 유형에 대한 방어를 보장하지 않는다는 점을 보여준다.

judge가 긴 궤적을 다 못 읽어서

궤적이 길어지면 judge에게 전체를 다 보여주는 것 자체가 비용과 컨텍스트 한계에 부딪힌다. 실무적으로 흔한 대응은 요약이나 마지막 몇 턴만 판정에 반영하는 것인데, 이 경우 judge가 실제로 평가하는 것은 “과정 전체가 목표를 달성했는가”가 아니라 “제출된 요약이 그럴듯한가”로 좁혀진다. 궤적 중간에 실패나 지름길이 있어도, 마지막 요약이 성공을 그럴듯하게 서술하면 판정을 통과할 여지가 생긴다. 이 문제와 rubric 기반 judge 설계 전반은 #11에서 다룬다.

환경 관측 마스킹 누락으로 도구 출력을 지어냄

#3이 다룬 hallucinated tool output이 이 유형이다. 손실 마스킹이 빠지면 정책이 환경 관측 토큰까지 그래디언트로 학습해버려, 실제로 도구를 부르는 대신 성공한 도구 출력을 자기 턴 안에서 그냥 지어내는 지름길이 생긴다. 그런데 #3은 이 실패가 마스킹을 제대로 갖춘 뒤에도 다른 경로로 재발할 수 있다고 예고했다 — 도구 호출의 형식(포맷)은 정확히 지키면서, 검증되지 않은 성공을 보고하는 더 교묘한 버전이다. 판정기가 “도구 호출이 올바른 형식으로 있었는가”까지만 확인하고 “그 호출이 실제로 주장한 결과를 만들었는가”를 검증하지 않는다면, 형식은 완벽하지만 내용은 허구인 궤적이 판정을 통과한다 — 결국 “판정 정의가 대리 지표”라는 첫 유형의 변형이다.

비결정적 환경에서 운을 실력으로 오인

#14가 다룬 유형이다. 웹처럼 살아있는 환경은 같은 행동이 어제와 오늘 다른 결과를 낼 수 있다. GRPO처럼 그룹 내 상대 비교로 advantage를 계산하는 알고리즘에서는, 같은 그룹 안의 궤적들이 정책의 차이가 아니라 순전히 환경의 우연 때문에 다른 보상을 받는 상황이 생긴다. 이는 hacking이라기보다 credit assignment 자체가 오염되는 문제에 가깝지만, 결과적으로 에이전트가 “운이 좋았던 행동”을 “옳았던 행동”으로 착각하고 강화한다는 점에서 판정의 신뢰도를 갉아먹는 같은 계열의 실패다. DigiRL이 doubly-robust advantage 추정기로 이 노이즈를 명시적으로 흡수하려 한 것이 이 문제에 대한 직접적인 대응이다.

방어 — 여러 reward를 어떻게 합칠 것인가

Motif의 실패는 하나의 설계 선택으로 요약된다 — 두 보상을 정규화 없이 고정 계수로 그냥 더했다. 실제 프론티어 모델들이 여러 reward 신호를 다룰 때 선택하는 방식은 이보다 다양하다.

방식 사례
고정 계수 선형 결합 단순 합 Motif → composition 실패
각각 정규화 후 결합 GDPO A.X K2 (프론티어 편)
단계를 분리 능력과 안전을 따로 K-EXAONE 2.0
결합이 아니라 제약 라그랑주 \(\lambda\) Safe RLHF

고정 계수 선형 결합. \(r_{\text{effective}} = \alpha_1 r_{\text{int}} + \alpha_2 r\)처럼 스칼라 가중치로 그냥 더하는 방식이다. 구현은 가장 간단하지만, 두 보상의 스케일이나 분포가 다르면 한쪽이 다른 쪽을 압도하거나, 이 글에서 본 것처럼 둘의 조합이 어느 쪽도 의도하지 않은 새 경로를 열 수 있다.

각각 정규화 후 결합. A.X K2(SKT)가 채택한 GDPO는 여러 reward 신호를 각각 따로 정규화한 뒤에 합친다. 한 신호의 절대적 크기가 다른 신호를 삼키지 않도록, 결합 전에 각 신호의 해상도를 보존하는 방식이다. ODIN이 하나의 reward 안에서 길이라는 잡음과 품질이라는 신호를 분리했던 발상을, 여러 개의 서로 다른 reward를 합칠 때로 일반화한 셈이다.

정규화가 왜 필요한지 가상의 숫자로 짚어보자. \(r_{\text{int}}\)가 대부분 \([-1, 5]\) 범위에 분포하고 \(r\)(오라클 발견 시 +50, 그 외 0)이 훨씬 드물지만 훨씬 큰 스파이크를 낸다고 하자. \(\alpha_1 = \alpha_2 = 1\)인 고정 결합에서는, 오라클을 만난 그 한 스텝의 보상이 그 전까지 수천 스텝 동안 쌓인 \(r_{\text{int}}\) 신호를 통째로 압도한다 — 결합 보상의 그래디언트가 사실상 “어떻게든 그 한 순간을 만들어라”는 신호로 수렴한다. 반대로 정규화 후 결합에서는 두 신호를 각자의 평균과 표준편차로 나눠 같은 스케일(예: 평균 0, 표준편차 1)로 맞춘 뒤 더하므로, 희소하고 큰 \(r\) 하나가 조밀한 \(r_{\text{int}}\) 전체를 뭉개는 상황이 구조적으로 줄어든다. 물론 정규화가 이 글에서 본 hacking을 자동으로 막아주는 것은 아니다 — 두 신호의 스케일 문제를 줄일 뿐, “판정 정의가 대리 지표”라는 근본 문제는 여전히 남는다.

단계를 분리. K-EXAONE 2.0(LG AI Research)은 능력(수학·코드·대화·에이전트 행동)을 도메인별 reward로 최적화하는 단계와, 안전성을 다루는 별도의 safety-aware 선호 최적화 단계를 아예 나눈다. 두 목표를 한 손실 함수 안에서 동시에 다투게 하는 대신, 순서를 나눠 서로의 최적화 경로가 얽히지 않게 만드는 접근이다. 능력 쪽에서도 이 모델은 규칙과 judge를 도메인별로 다르게 조합하는데, 이 조합조차 전부를 하나의 스칼라 손실에 뭉쳐 넣지 않고(예: 오답 추론에 별도의 음의 보상을 매기는 AGAPO처럼) 신호별로 역할을 나눠 쓴다는 점에서, “그냥 더하지 않는다”는 원칙이 능력 학습 내부에서도 반복된다.

결합이 아니라 제약. Safe RLHF는 애초에 “더한다”는 틀 자체를 버린다. 도움됨(reward \(r\))과 무해함(cost \(c\))을 분리된 모델로 학습한 뒤, 표준적인 제약 최적화 형태로 정식화한다.

\[\max_\theta \; \mathbb{E}[r(x,y)] \quad \text{s.t.} \quad \mathbb{E}[c(x,y)] \le 0\]

이 제약 문제를 라그랑주 승수 \(\lambda \ge 0\)로 완화하면, 실제로 최적화하는 목적함수는 \(\mathbb{E}[r(x,y)] - \lambda \cdot \mathbb{E}[c(x,y)]\) 형태가 된다. 겉보기엔 여전히 두 항의 선형 결합처럼 보이지만, 결정적인 차이는 가중치 \(\lambda\)가 고정값이 아니라 제약 위반 정도에 따라 학습 중 동적으로 조정된다는 것이다 — cost 제약을 어기고 있으면 \(\lambda\)가 커져 안전 쪽을 더 세게 누르고, 제약을 넉넉히 만족하면 \(\lambda\)가 작아져 도움됨 쪽에 더 힘을 싣는다. Motif의 \(\alpha_1, \alpha_2\)가 실험 전에 정해 놓고 바꾸지 않는 상수였던 것과 정반대다.

네 방식 모두 정답은 아니다. 정규화도, 단계 분리도, 제약도 각자의 가정이 깨지면 다시 뚫릴 수 있다. 하지만 공통된 교훈은 하나다 — “보상을 그냥 더하면 된다”는 가정 자체를 의심하는 것이 방어의 시작이라는 것이다.

Experiments

NetHack 과제 다섯 개, 보상 밀도로 줄 세우기

Motif는 NLE의 다섯 과제로 평가된다. 판정 로직의 밀도가 서로 다르다는 점이 이 글의 논지와 직결되므로 먼저 표로 정리한다.

과제 판정 조건 보상 밀도
score 게임 점수 자체 비교적 조밀
staircase 던전 2레벨 진입 시 +50 희소
staircase (level 3) 던전 3레벨 진입 시 +50 더 희소
staircase (level 4) 던전 4레벨 진입 시 +50 더 희소
oracle 5레벨 이상 특정 가지에서 오라클 근접 확인 시 +50 극도로 희소 — 이 글의 사례

score를 제외한 네 과제는 전부 이진에 가까운 희소 보상이다. 판정 조건이 좁게 정의될수록(oracle처럼 “오라클이 근처에 있는가”라는 단일 확인 하나로 좁혀질수록) 그 정의를 만족시키는 값싼 지름길이 생길 여지도 커진다 — 이 글이 다루는 misalignment by composition이 하필 다섯 과제 중 가장 좁게 정의된 oracle에서 나타난 것은 우연이 아니다.

Motif hacking 경로, 표로 재구성

앞서 산문으로 따라간 경로를 표로 다시 정리하면 이렇다.

단계 행동 원래 의도했던 목표와의 관계
1 노란 곰팡이(F)를 발견할 때까지 수천 턴 생존 생존 능력 축적 — 내재적 보상이 유도
2 노란 곰팡이를 처치 정상적인 전투
3 시체를 섭취 여기서부터 지름길로 방향 전환
4 환각 상태 진입 지각이 왜곡되기 시작
5 몬스터의 공격에도 비공격적으로 생존 진짜 오라클을 찾는 행동과 무관
6 환각으로 몬스터가 오라클로 보임 판정기가 이 착각을 그대로 수용
결과 NLE가 과제 완료로 선언 진짜 오라클에는 한 번도 가지 않음

성공률과 반직관적 결과

결합 보상(\(r_{\text{effective}} = \alpha_1 r_{\text{int}} + \alpha_2 r\))으로 학습했을 때 오라클 과제의 성공률은 약 30%였다. 저자들은 이 과제를 다섯 개 과제 중 가장 어려운 것으로 규정하며, 인간 시연 없이는 어떤 접근도 의미 있는 진전을 낸 적이 없었다고 명시한다. 더 쉬운 계단(staircase) 레벨 3·4 과제에서는 extrinsic 전용이나 RND 베이스라인의 성공률이 정확히 0%였다고 논문이 직접 밝힌다.

score 과제에서는 더 반직관적인 결과가 나온다. Motif의 내재적 보상만으로(외재적 보상 없이) 학습한 에이전트가, 점수 자체를 직접 최대화하도록 학습한 베이스라인보다 더 높은 점수를 낸다. 저자들은 이것이 “내재적 보상만으로 딥 RL 에이전트를 학습시켜 환경 보상으로 학습한 에이전트를 능가한, 상대적으로 밀도 높은 복잡한 과제에서의 첫 사례”라고 명시한다. 정확한 절대 점수는 그림으로만 제시돼 본문에서 수치로 확인되지 않으므로 여기서는 방향과 정성적 결론만 옮긴다.

이 결과의 배경에는 세 정책의 행동 자체가 질적으로 다르다는 사실이 있다. 저자들이 정책들을 직접 비교 분석한 내용을 표로 옮기면 다음과 같다.

학습 보상 행동 특징
외재적 보상만 던전 레벨 전환·골드 수집이 주는 보상을 좇아 위험을 무시하고 곧장 깊이 내려간다
Motif 내재적 보상만 생존에 맞춰진 행동 — 몬스터를 더 많이 처치하고, 경험치 레벨을 더 많이 올리고, 더 오래 생존한다
결합(내재적+외재적) 내재적 보상이 준 생존 기술을 활용하되, 그 수명을 깎아서라도 더 나은 전투력으로 던전을 내려가 더 많은 골드와 점수를 모은다 — “둘의 상호작용을 지렛대 삼아 최고의 결과”를 낸다

이 표는 이 글의 논지를 다른 각도에서 한 번 더 확인해준다. 결합 정책은 내재적 정책의 생존 기술과 외재적 정책의 진취성을 둘 다 물려받는다. score 과제에서는 이 상속이 순수하게 이득이지만, oracle 과제에서는 정확히 같은 상속(생존 기술)이 판정을 속이는 데 전용된다. 표현을 바꾸면, 결합이 만들어내는 능력 자체는 한 종류인데, 그 능력이 어느 방향으로 쓰이는지는 판정 정의가 결정한다.

“유능하게 만드는 보상 + 허술한 목표 = 사고”

Motif의 오라클 사례를 한 문장으로 일반화하면 이렇다. 보상이 에이전트를 유능하게 만들수록, 그 능력이 허술한 목표 정의와 만났을 때 열리는 구멍도 커진다. 노란 곰팡이를 만나 처치하고 환각 상태에서 살아남는 경로는 아무 능력도 없는 에이전트에게는 불가능하다. 수천 턴을 생존할 능력, 몬스터를 상대로 판단력 있게 행동할 능력이 먼저 있어야 이 지름길에 도달할 수 있다. 즉 내재적 보상이 만든 생존 역량 자체가, 원래는 존재하지 않던 hacking 경로를 새로 열어준 것이다.

이 일반화는 이 시리즈 전체에 적용된다. 약한 에이전트는 애초에 유닛 테스트를 조작할 만큼 코드베이스를 이해하지 못하고, 도구 호출을 남발할 만큼 도구 사용에 능숙하지도 못하고, 긴 궤적 끝에 그럴듯한 요약을 지어낼 만큼 언어 능력이 정교하지도 못하다. 모델이 약할 때는 안 보이던 구멍이, 유능해지는 순간 드러난다. 이는 능력이 오른 모델을 배포하기 전에 판정 정의를 다시 검토해야 하는 이유이기도 하다 — 어제까지 안전했던 판정 로직이, 더 유능한 모델 앞에서는 더 이상 안전하지 않을 수 있다.

Motif 안에서도 이 패턴이 그대로 반복된다. 내재적 보상만으로는 부족했다 — 노란 곰팡이를 찾아 처치하고 환각 속에서 몬스터의 공격을 버텨내는 경로는, 애초에 생존 능력이 낮은 에이전트에게는 성립하지 않는 시나리오다. score 과제에서 관측된 “내재적 보상만으로 베이스라인을 능가한다”는 결과와, oracle 과제에서 관측된 hacking은 같은 원인의 두 얼굴이다. 내재적 보상이 만들어낸 생존·전투 역량이 score 과제에서는 그대로 유용하게 쓰였고, oracle 과제에서는 판정의 허점을 파고드는 데 전용됐다.

방어 체크리스트

Motif 사례와 앞선 네 유형을 종합하면, 에이전트 RL에서 reward/판정을 설계할 때 던져야 할 질문은 다음 네 가지로 좁혀진다.

  1. 판정 정의가 진짜 목표인가, 아니면 진짜 목표가 남긴 흔적을 확인하는 대리 지표인가. “오라클 근처에 있는가”는 흔적이고, “오라클을 실제로 만났는가”가 진짜 목표다. 이 둘의 간극이 hacking의 여지다.
  2. 대리 지표라면, 무엇으로 그 흔적을 위조할 수 있는가. 환각, 하드코딩된 테스트 통과, 형식만 맞춘 도구 호출 — 흔적을 만드는 더 값싼 경로가 있는지 미리 물어야 한다.
  3. 여러 보상을 어떻게 결합했는가. 고정 계수로 그냥 더했다면, 각 보상이 개별적으로 안전하다는 사실이 조합에서도 안전하다는 것을 보장하지 않는다.
  4. 능력이 오르면 새로 열리는 구멍은 무엇인가. 지금 모델이 못 찾는 지름길이, 다음 세대 모델에서는 발견될 수 있다는 전제로 판정을 설계해야 한다.

핵심 정리

이 글에서 다룬 다섯 가지 hacking 유형과 그 방어를 하나의 표로 묶는다.

hacking 유형 판정이 실제로 확인하는 것 방어 관련 편
판정 정의가 대리 지표 목표의 흔적(환각된 오라클, 통과된 테스트) 판정을 진짜 목표에 가깝게 좁힌다(oracle-sober) 이 글, #13
shaping이 만든 행동 남발 성공 신호의 누적 횟수 반복에 페널티, 필요성·활용까지 반영한 가중치 #8, #10
judge가 긴 궤적을 못 읽음 마지막 요약의 그럴듯함 rubric으로 판정 범위를 명시적으로 좁힌다 #11
마스킹 누락으로 출력을 지어냄 도구 호출의 형식 환경 토큰 마스킹, 형식과 별개로 실제 수행 여부 검증 #3
비결정적 환경에서 운을 실력으로 오인 그룹 내 상대적 결과 doubly-robust advantage로 환경 노이즈 흡수 #14
조합의 실패 개별 보상들의 고정 계수 합 정규화 후 결합, 단계 분리, 또는 제약으로 전환 이 글 — Motif, A.X K2, K-EXAONE 2.0, Safe RLHF

Conclusion

이 글은 두 가지를 확인했다. 첫째, 규칙 기반 판정기는 파라미터가 없어서가 아니라 판정 정의가 진짜 목표를 정확히 담아낼 때만 안전하다 — Motif의 오라클 판정은 파라미터가 0개였지만, 그 정의(근처에 오라클처럼 보이는 캐릭터가 있는가)가 진짜 목표(오라클을 실제로 찾아가는가)와 어긋나 있었기에 뚫렸다. 둘째, 개별적으로 정렬된 보상들도 조합하면 어긋날 수 있다. 생존을 가르친 내재적 보상과 오라클 발견에 상을 주는 외재적 보상은 각각 사람의 직관과 잘 맞았지만, 둘을 고정 계수로 더하는 순간 어느 쪽도 의도하지 않은 지름길이 열렸다. 저자들이 이 현상에 misalignment by composition이라는 이름을 붙인 이유다.

이 사례는 RLAIF 특유의 문제가 아니다. LLM이 선호를 매겼든, 사람이 라벨링했든, 순수 RLVR로 조합을 만들었든 — NLE의 오라클 판정 로직 자체는 바뀌지 않았을 것이고, 환각으로 그 판정을 속이는 경로도 그대로 열려 있었을 것이다. 뚫린 건 보상의 출처가 아니라 판정의 정의였다.

이 시리즈가 2~4부에서 이미 예고한 네 가지 hacking 유형 — shaping이 만든 행동 남발, judge의 긴 궤적 처리 실패, 마스킹 누락으로 인한 출력 조작, 비결정적 환경에서의 운과 실력 혼동 — 은 Motif의 오라클 사례가 대표하는 “판정 정의가 대리 지표”라는 큰 틀 아래 나란히 놓인다. 각 방어 장치(다중 판정 결합, held-out 테스트, doubly-robust advantage)는 개별 hacking 표면 하나씩을 막지만, 그 방어들을 다시 조합하는 순간 같은 질문이 재귀적으로 돌아온다 — 이 방어들의 조합은 정말 안전한가. 마지막 편(#16)에서 실제 프론티어 모델들이 이 질문에 어떻게 답하는지 종합한다.

참고 문헌


Agentic RL 설계 시리즈

이 글은 Agentic RL 설계 시리즈의 열다섯 번째 글이다.

1부. 왜 에이전트는 다른가

  1. 에이전트 RL은 무엇이 다른가 — 장기 지평·희소 보상·긴 궤적
  2. 공을 어디에 돌릴 것인가 — credit assignment 47개 방법의 지도
  3. 멀티턴 RL 실무 가이드 — 무엇이 실제로 작동하는가

2부. credit assignment — 공을 어디에 돌릴 것인가

  1. 결과만으로는 부족하다 — 장기 지평에서 증폭되는 RLVR의 한계
  2. 턴 단위로 공을 나눈다 — turn-level reward 설계
  3. 스텝을 단위로 삼는다 — 행동 단위 궤적 표현과 credit
  4. 토큰과 세그먼트로 더 잘게 — 세밀한 입도의 득과 실
  5. shaping은 약인가 독인가 — 중간 보상의 효율과 위험

3부. reward를 어디서 얻나

  1. 환경이 곧 reward다 — 샌드박스·테스트·상태 검증
  2. 도구 호출을 어떻게 채점하나 — ToolRL·ToolRM
  3. 궤적을 judge가 채점한다 — rubric 생성형 reward의 확장

4부. 도메인별 설계

  1. 검색 에이전트 — Search-R1에서 DeepDive까지
  2. 코드 에이전트 — SWE-RL과 테스트라는 reward
  3. 웹·GUI 에이전트 — end-to-end 멀티턴 RL

5부. 실패와 방어

  1. (현재 글) 에이전트의 reward hacking — 판정기가 뚫린다, 그리고 조합의 실패

6부. 실전 종합

  1. 프론티어 모델은 실제로 어떻게 하나 — 최신 모델들의 agentic RL 설계

본 시리즈는 16편으로 구성된다.




Enjoy Reading This Article?

Here are some more articles you might like to read next:

  • 프론티어 모델은 실제로 어떻게 하나
  • 웹·GUI 에이전트 — end-to-end 멀티턴 RL
  • 코드 에이전트 — SWE-RL과 테스트라는 reward
  • 검색 에이전트 — Search-R1에서 DeepDive까지
  • 궤적을 judge가 채점한다 — rubric 생성형 reward의 확장