긴 문맥 검색 실패는 길이가 아니라 증거를 두고 벌이는 어텐션 경쟁 탓이다

Length Is Cheap, Competition Is Not: Attention Predicts Context Rot in Retrieval

HF Daily2611.04169

Yinuo Liu2026-11-03

무엇인가

이 논문이 다루는 문제는 긴 입력에서 언어 모델이 왜 실패하는가다. 흔한 답은 길이다. 저자는 검색 과제에서는 그 답이 틀렸다고 주장한다. 길이는 공짜이고, 경쟁이 비싸다는 것이다. 32,000토큰 구간에서 검색 정확도가 무너지는 현상은 이미 '컨텍스트 로트(context rot)'라는 이름으로 정리돼 있는데, 기존 연구는 길이와 내용을 동시에 바꿔왔기 때문에 둘 중 무엇이 원인인지 분리하지 못했다. 저자는 길이와 증거의 위치를 고정하고 주변만 바꾸는 '가시적 통제(visible-control) 프로토콜'로 이 둘을 분리한다.

어떻게 동작하나

과제는 합성 키-값 검색이다. 문맥 어딘가에 "The secret code of the river is 4821." 같은 증거 문장 하나를 숨기고, 끝에 질문을 붙인 뒤 정답 값의 로그 확률을 티처 포싱으로 채점한다. 각 시행마다 증거·질문·총 길이 L은 같게 두고 주변만 네 가지로 바꾼다. 아무것도 없는 short, 난수·반복 문장 같은 neutral, 증거와 같은 템플릿에 51개 명사에서 뽑은 키를 채운 competing, 그리고 필러 토큰을 어텐션에서 가리되 위치 인덱스는 유지하는 masked다. 손실은 Δ = log(p_short/p_c)로 나츠 단위로 정의한다. neutral은 길이만 분리하고, competing과 neutral의 차이는 길이를 고정한 채 내용만 분리한다. competing 필러 중 질의된 키에 다른 값을 부여한 문장을 '충돌'로 따로 세는데, 그 수는 512토큰에서 평균 0.8, 2,048에서 3.2, 32,768에서 50.5로 길이에 따라 늘어난다. 모델 내부에서는 짧은 문맥에서 증거 토큰에 어텐션을 가장 많이 준 8개의 (레이어, 헤드) 쌍을 골라, 마지막 질의 토큰이 증거로 보내는 어텐션 질량 a*를 측정한다.

무엇과 다른가

실험은 Qwen2.5-0.5B/1.5B-Instruct, SmolLM2-1.7B-Instruct, OLMo-2-0425-1B-Instruct, Llama-3.2-3B까지 다섯 모델, 네 계열에서 512~2,048토큰, 일부는 32,768토큰까지 돌렸다. 결과의 핵심 비교는 Qwen2.5-1.5B 32K 구간이다. 길이와 증거 위치가 같은 조건에서 중립 숫자 텍스트의 중앙값 손실은 0.004 나츠, 마스킹은 1.20 나츠, 경쟁 문장은 4.76 나츠였다. 중립 필러에서는 8K~32K 전 구간에서 손실이 0.006 나츠 이하, 정확도 0.96~1.00을 유지했다. 반면 경쟁 문장으로 채우면 8K/16K/24K/32K에서 손실이 2.82, 3.94, 4.03, 4.76 나츠로 뛰고 정확도는 0.11~0.21로 떨어졌다. 손실은 충돌에 집중된다. 질의된 키를 공유하는 문장이 하나도 없는 문맥은 0.02~0.34 나츠만 잃었고, 하나라도 있으면 1.38~3.24 나츠를 잃었다. 형식만 같은 명시적 디스트랙터의 개수는 손실 분산의 0.3% 이하(R² ≤ 0.003)만 설명했다.

어떻게 쓰나

예측력 비교가 이 논문의 승부처다. 126,473회 시행에서 log(1/a*)는 다섯 모델 모두에서 손실을 예측했고 R²는 0.35~0.58이었다. log 길이의 R²는 0.02~0.08에 그쳤고, 두 값의 차이에 대한 부트스트랩 신뢰구간은 모든 모델에서 0을 배제했다. 8K~32K 구간에서도 Qwen2.5-1.5B가 0.32 대 0.02, Llama-3.2-3B가 0.33 대 0.03이었고, SmolLM2-1.7B는 8K 윈도까지 0.45 대 0.18이었다. 경쟁 필러가 들어오면 증거에 대한 어텐션은 짧은 문맥의 0.51~0.77에서 0.17~0.31로 붕괴한다. 흥미로운 건 임계점이다. Qwen2.5-1.5B에서 a*가 0.35 근처로 떨어질 때까지는 손실이 거의 0에 머물다가 그 아래에서 급격히 상승한다. 기울기는 모든 모델에서 1을 넘고 모델마다 달라, 저자들은 보편 법칙을 주장하지 않는다.

전제와 한계

마지막으로 저자는 '길이만으로도 손해가 난다'는 근거로 쓰여온 마스킹 프로토콜 자체를 문제 삼는다. MMLU 1,000문항에 Llama-3.2-3B와 Qwen2.5-7B로 3,750~30,000개의 마스킹 토큰을 끼워 넣으면 정확도가 11~18포인트 떨어지고 이는 기존 연구를 재현한다. 그런데 같은 마스킹을 검색 과제에 적용하면 32K에서 정확도가 46포인트 날아가는데, 똑같은 필러를 그대로 보이게 두면 손실이 0이다. 마스킹된 토큰은 위치 인덱스는 남기되 어텐션에서 지운 것이라, 모델이 사전학습에서 본 적 없는 긴 위치 공백을 만든다. 그래서 그 비용을 길이의 비용으로 읽으면 안 된다는 것이 저자의 결론이다. 다만 MMLU에서 가시적 공백 패딩은 4,096토큰에서 정확도를 36.0%까지 떨어뜨렸고(필러 없음 59.1%, 가시적 중립 필러 57.5%, 마스킹 53.9%), 추론 과제에서는 길이 효과가 여전히 존재할 수 있다고 인정한다.

개발자 관점의 메시지는 명확하다. RAG나 에이전트 메모리, 롱도큐먼트 파이프라인에서 문맥 예산은 토큰 수가 아니라 질의를 두고 경쟁하는 문장의 수로 봐야 한다. 잘라내기보다 중복 제거와 상충 해소를 먼저 하라는 것이다. 또 a*는 포워드 패스 한 번이면 측정되므로, 정확도만 보지 말고 증거에 남은 어텐션 질량을 진단 지표로 삼을 수 있다. 다만 저자가 명시한 한계도 그대로 받아들여야 한다. a*는 손실과 같은 포워드 패스에서 측정됐고 개입 실험을 하지 않았으므로 인과가 아니라 예측의 근거다. 예측 분석은 다섯 모델에서 512~2,048토큰, 두 모델에서 8K~32K에 한정되며, 4,096토큰 이상 문맥은 전부 충돌을 하나 이상 포함해 2K 위에서 형식만 같은 경쟁자의 효과는 측정되지 않았다. 충돌 분석은 사전등록되지 않았고, a*는 단일 질의 토큰에서 8개 헤드만 읽으며 어텐션 싱크를 제거하지 않았다. 값 토큰화가 모델마다 달라 손실은 모델 내 비교만 가능하고, 결과는 3B 이하 모델과 단일 합성 과제에서 나온 것이다.