시그널의 해상도: 스칼라 하나에서 토큰별 방향으로
스텝마다 보상을 매겨도 그 보상은 "좋았다/나빴다"의 숫자 하나다. 그런데 에이전트가 행동할 때마다 돌아오는 사용자의 답장이나 터미널 에러에는 그보다 훨씬 많은 정보가 들어 있다. 답장과 에러에 담긴 정보를 버리지 않고 학습에 쓸 수 있을까?
쓰면서 배운다: OpenClaw-RL
OpenClaw-RL(Wang et al., “OpenClaw-RL: Train Any Agent Simply by Talking”, arXiv:2603.10165, 2026년 3월)은 답장과 에러를 학습에 쓰는 물음을 가장 정면으로 다룬다. 출발점은 관찰 하나다: 에이전트가 행동할 때마다 다음 상태가 생긴다. 사용자의 답장, 도구 출력, 터미널 에러, GUI 화면 변화는 모두 방금 행동에 대한 암묵적 평가인데, 기존 시스템은 이것을 다음 행동의 컨텍스트로만 쓰고 버렸다. OpenClaw-RL은 여기서 두 가지 시그널을 뽑는다.
- 평가 시그널 → 스칼라 보상. "사용자가 다시 물었다"면 이전 답이 불만족스러웠다는 뜻이다. PRM(과정 보상 모델, 스텝마다 점수를 매기는 모델) 심사 모델이 스텝마다 보상을 매겨 밀집 보상(스텝마다 받는 보상)을 만든다. 결과 보상에 과정 보상을 더하면 결과 보상만 쓸 때보다 좋았다.
- 방향 시그널 → 토큰 단위 교정. "파일을 먼저 확인했어야지"는 "나빴다"보다 많은 정보, 곧 무엇이 달라져야 했는지를 담는다. 이 피드백에서 힌트를 뽑아 원래 프롬프트에 붙인 "사후 강화 컨텍스트"를 만들고, 같은 모델이 힌트를 보고 낸 토큰 분포(교사)와 힌트 없이 낸 분포(학생)의 로그확률 차이를 토큰별 어드밴티지로 쓴다(Hindsight-Guided On-Policy Distillation, OPD). 정답을 본 자기 자신을 교사로 쓰는 방법을, 정답 대신 사용자의 한마디로 한 것이다.
시스템은 정책 서빙(사용자 요청에 답하도록 모델을 띄워 두기), 환경, PRM 심사, 학습의 네 루프로 분리되어 서로 기다리지 않고 따로 돈다. 서빙을 멈추지 않고 파라미터를 업데이트하므로, 온라인 학습의 어려움 중 하나인 "정책을 계속 업데이트해야 한다"를 인프라로 푼 것이다. 드리프트(정책이 조금씩 어긋나는 것)는 KL 페널티와, 위쪽 클립만 넓힌 비대칭 클리핑(Clip-Higher)으로 묶는다. 첫 판(2026년 3월)은 퍼스널 에이전트 실험에서 심사 모델이 매긴 개인화 점수가 0.17에서, 평가 시그널과 방향 시그널을 함께 쓴 업데이트 16번 뒤 0.81로 올랐다고 보고했다.
숫자로 보는 토큰별 방향
에이전트가 「파일을 바로 고친다」라고 쓰고 설정 파일을 덮어쓰자, 사용자가 「파일을 먼저 확인했어야지」라고 답했다. 이 답장에서 힌트를 뽑아 프롬프트 뒤에 붙이고, 같은 모델에게 방금 쓴 세 토큰의 확률을 다시 묻는다. 토큰마다의 어드밴티지는 힌트를 본 확률과 안 본 확률의 로그 차이다.
| 토큰 | 힌트 없이 (학생) | 힌트를 보고 (교사) | |
|---|---|---|---|
| 「파일을」 | 0.55 | 0.60 | +0.087 |
| 「바로」 | 0.50 | 0.05 | −2.303 |
| 「고친다」 | 0.70 | 0.40 | −0.560 |
확률은 설명을 위해 정한 예시인데, 스칼라 보상이었다면 세 토큰이 같은 크기의 벌을 받았을 것이다. 토큰별 어드밴티지는 벌의 대부분을 「바로」에 몰고, 「파일을」은 오히려 조금 밀어 준다. 「먼저 확인했어야지」라는 말이 가리키던 곳이 정확히 「바로」였다.
해상도 스펙트럼
이 흐름을 시그널의 해상도로 보면 여러 알고리즘이 한 줄로 이어진다. DPO는 쌍 전체에 마진 하나(시퀀스 수준 스칼라), GRPO는 그룹 안의 상대 점수 하나(에피소드 수준 스칼라), PRM은 스텝마다 보상 하나, OPD는 토큰마다 방향이다. OPD는 "스칼라 보상 하나로는 무엇이 달라져야 하는지에 대한 정보를 버린다"는 문제에 대한 가장 직접적인 대답이다(아래 그림).
graph LR
subgraph resolution["시그널 해상도 스펙트럼"]
direction LR
DPO["<b>DPO</b><br/>시퀀스 수준<br/>스칼라 1개"] --> GRPO["<b>GRPO</b><br/>에피소드 수준<br/>그룹 상대"] --> PRM["<b>PRM</b><br/>스텝 수준<br/>매 행동 보상"] --> OPD["<b>OPD</b><br/>토큰 수준<br/>방향 시그널"]
end
class DPO m-red
class GRPO m-orange
class PRM m-green
class OPD m-blue
class OPD m-strong
해상도를 토큰까지 내리면, 궤적 수준의 점수 하나를 토큰들에게 어떻게 나눠 주는지도 따져야 한다. 궤적 길이가 제각각인 에이전트에서는 이 나눗셈 하나가 습관을 바꾸는데, 원래 GRPO는 궤적마다 손실을 그 궤적의 토큰 수로 나눠 평균낸다. 2025년 3월 리우(Zichen Liu)와 동료들은 GRPO가 나누는 두 곳, 곧 길이로 나누기와 그룹 표준편차로 나누기가 학습에 의도하지 않은 편향을 넣는다고 짚고, 이 두 나눗셈을 고친 변형을 Dr. GRPO라 불렀다. 길이로 나누기가 에이전트에게 무엇을 가르치는지는 아래 문제에서 계산한다.
문제 9: (킬러) 길게 틀리면 덜 혼난다
원래 GRPO는 응답마다 손실을 토큰 수

















정리 (가) 짧은 성공 +0.01, 긴 성공 +0.001, 짧은 실패 −0.01, 긴 실패 −0.001. (나) 긴 실패의 토큰이 가장 약하게 벌을 받는다(짧은 실패의 1/10). 궤적 총합은 모두
로 같지만 토큰 하나가 받는 가중치가 달라서, 결과적으로 “틀릴 때는 길게” 쓰는 습관이 강화된다. (다) 상수 1000으로 나누면 토큰 하나는 네 궤적 모두 ±0.001, 궤적 총합은 짧은 궤적 ±0.1, 긴 궤적 ±1이다. 토큰마다 가중치가 같으니 길게 써서 벌을 피할 수 없고 (나)의 습관이 사라진다. 에이전트 궤적은 길이 편차가 훨씬 커서 길이로 나눌 때의 편향이 증폭된다.