검색 에이전트를 RL로 훈련시키면 생기는 문제가 하나 있습니다. 에이전트가 검색을 하긴 하는데, 검색 결과를 안 읽고 자기 사전 지식으로 먼저 결론을 내린 다음 검색은 확인용으로만 쓰는 겁니다. 이걸 “prior-driven reasoning”이라고 부릅니다. CIPO는 이 문제를 풀기 위해, 검색 결과를 실제로 참고했는지 측정해서 보상을 주는 RL 프레임워크입니다.
핵심 문제: 검색은 하는데 안 읽는다
Search-R1, R1-Searcher 같은 방법들은 에이전트에게 “언제 검색할지, 뭘 검색할지”를 RL로 학습시킵니다. 보상은 최종 정답 맞추기(sparse outcome reward)가 기본이고, 중간 단계 보상을 추가하는 연구(GiGPO, IGPO)도 있습니다.
근데 이 보상들에는 빈 구멍이 있습니다. 에이전트가 내부 지식으로 정답을 이미 알고 있으면, 검색 결과가 컨텍스트에 있어도 실제로는 안 읽고 정답을 맞춥니다. 보상은 그대로 줍니다. 이게 쌓이면 확인 편향(confirmation bias)이 생깁니다 — 검색은 확인용이고, 증거가 추론을 바꾸는 일은 없습니다.
논문에서 이 상황을 보여주는 예시가 있습니다 (Figure 1). 같은 질문에 대해:
- Prior-driven: 모델이 자기 지식으로 답을 만들고, 검색 결과가 그 답을 “지지”만 함
- Evidence-driven: 검색 결과를 읽고, 그 증거가 다음 추론 단계를 바꿈
CIPO의 방법: EALR (Evidence-Access Log-Likelihood Ratio)
핵심 아이디어는 단순합니다. 검색 결과가 보일 때와 가렸을 때, 다음 추론 액션의 생성 확률을 비교하는 겁니다.
Figure 2: CIPO 전체 아키텍처. 검색 후 추론 단계를 evidence-visible과 evidence-masked 조건에서 각각 평가해서 EALR 보상을 계산한다.
구체적으로, 각 턴 t에서:
- 에이전트가
<think>블록과<search>블록을 생성 - 환경이
<information>블록(검색 결과)을 반환 - 다음 턴의
<think>+<search>액션을 두 조건에서 평가- Evidence-visible: 검색 결과를 그대로 보여줌
- Evidence-masked: 어텐션 마스크로 검색 결과 토큰에 대한 어텐션만 차단 (토큰 삭제나 교체 아님)
EALR은 이 두 log-likelihood의 차이를 토큰 수로 나눈 값입니다:
s_ealr = (1/m) * [ℓ_vis(a) - ℓ_mask(a)]
- 양수: 검색 결과가 다음 액션의 확률을 높였음 → 증거를 참고함
- 0에 가까움: 검색 결과 유무가 액션에 영향을 안 줌 → 안 읽음
- 음수: 검색 결과를 가리는 게 오히려 액션 확률을 높임
이 값을 턴별 보상으로 쓰고, 최종 정답 보상(outcome reward)과 결합해서 GRPO로 정책을 최적화합니다. 외부 보상 모델도, 사람 라벨도 필요 없습니다.
어텐션 마스킹 방식의 장점은 토큰 시퀀스 길이, 위치 인덱스, 이전 컨텍스트를 전부 그대로 유지한다는 점입니다. 검색 결과 토큰에 대한 어텐션만 끊습니다.
턴별 크레딧 할당
CIPO는 두 종류의 보상을 따로 정규화해서 씁니다:
- EALR 보상: 각 검색 후 추론 턴에 대해, 그룹 내에서 정규화
- Outcome 보상: 최종 정답 턴에 대해, 그룹 내에서 정규화
이걸 할인 누적回报(discounted return)으로 합칩니다:
Â_{i,t} = Σ_{j=t}^{T} γ^{j-t} * r̃_{i,j}
γ=1.0을 썼습니다. EALR은 훈련 중에만 계산하고, 추론 때는 추가 비용이 없습니다.
실험 결과
기본 성능
Qwen2.5-3B-Instruct와 Qwen2.5-7B-Instruct로 실험했습니다. 4개 사전학습 도메인(NQ, TriviaQA, HotpotQA, 2WikiMultiHopQA) + 3개 외부 도메인(MuSiQue, Bamboogle, PopQA)에서 평가했습니다.
| 모델 | 방법 | 도메인 평균 F1 |
|---|---|---|
| 7B | GRPO | 0.405 |
| 7B | GiGPO | 0.409 |
| 7B | IGPO | 0.457 |
| 7B | CIPO | 0.504 |
| 3B | GiGPO | 0.409 |
| 3B | CIPO | 0.456 |
CIPO가 두 모델 크기 모두에서 일관되게 가장 높은 F1을 기록했습니다. IGPO 대비 +4.7 F1 포인트입니다.
확인 편향 감소
Figure 4: 훈련 중 prior-driven rate. IGPO는 증가하는데 CIPO는 감소한다.
IGPO는 훈련이 진행될수록 prior-driven rate이 올라갑니다. 정답을 맞추는 샘플에서도 마찬가지입니다. CIPO는 반대로 꾸준히 감소합니다.
전체 증거 기반 추론(evidence-driven) 비율은 IGPO 29.9% → CIPO 41.9%로 올라갑니다. 정답을 맞춘 궤적에서는 59.4% → 70.2%입니다.
보상 설계 분석 (Table 2)
| 구성 | 3B 평균 F1 | 7B 평균 F1 | 관련 증거 사용률 | 무관 증거 사용률 |
|---|---|---|---|---|
| Outcome only | 0.336 | 0.372 | 18.6% / 21.9% | - |
| EALR only | 0.393 | 0.430 | 43.8% / 48.5% | 31.7% / 28.9% |
| Outcome + EALR | 0.456 | 0.504 | 55.2% / 60.7% | 10.6% / 9.1% |
EALR만 쓰면 증거 반응성은 올라가지만 무관 증거 사용률도 같이 올라갑니다. Outcome 보상과 결합하면 관련 증거 사용률은 더 올라가면서 무관 증거 사용률은 낮아집니다. 두 보상이 상호 보완적이라는 걸 보여줍니다.
훈련 비용
EALR 계산 때문에 턴별로 evidence-masked scoring 패스가 한 번 더 필요합니다.
| 모델 | GRPO step 시간 | CIPO step 시간 | 오버헤드 | F1 개선 | G/C 비율 |
|---|---|---|---|---|---|
| 3B | 223.6s | 244.1s | 9.17% | 12.00% | 1.31 |
| 7B | 417.2s | 436.5s | 4.63% | 17.48% | 3.78 |
7B에서 오버헤드는 4.63%인데 F1 개선은 17.48%입니다. 추론 시에는 추가 비용이 없습니다.
나눈 생각
CIPO의 기여는 “검색 결과를 읽었는가”를 직접 측정한 거예요. 기존 방법들은 정답 맞추기나 중간 단계 진척도로 간접 평가했거든요. 어텐션 마스킹으로 인과적 효과를 측정하는 건 깔끔한 접근입니다.
한계도 있습니다. 어텐션 마스킹 패스가 훈련 비용을 추가하고, γ=1.0이라 긴 궤적에서 크레딧이 흐려질 수 있고, 단일 검색 도구만 테스트했습니다. 논문도 앞으로 다중 도구·더 긴 작업으로 확장할 계획이라고 언급합니다.
그래도 RAG 에이전트 훈련에서 “검색 결과를 실제로 쓰는지”를 보상 신호로 만들었다는 건 실용적입니다. RAG 시스템 만드는 분이라면 한 번 읽어볼 만합니다.
코드는 https://github.com/gxingyu/cipo 에 공개되어 있습니다.
더 실습해보고 싶은 분들께
에이전트 루프와 도구 사용을 더 깊이 다루고 싶다면: