긴 reasoning을 돌리면 KV cache가 먼저 부풀어 오른다. 이미 본 토큰의 Key/Value를 쌓아 두는 메모리다. 길이가 늘수록 바이트와 대역폭이 같이 늘고, 서빙 비용도 따라 오른다. 그래서 나온 우회가 eviction이다. 캐시 budget을 넘기면 일부를 버리고 나머지만 남긴다. 무엇을 버릴지가 방법의 전부다.

한동안은 이런 가정이 기본이었다. 토큰마다 중요도 점수를 매기고, 높은 것만 남긴다. Random Attention (1)은 그 가정에 가깝게 반례를 낸다. 프롬프트는 항상 두고, reasoning 구간은 헤드마다 똑같이 랜덤으로 버려도, 점수로 고른 최강 방식과 품질이 비슷하다는 것이다.

점수 vs 랜덤 비교

그림을 왼쪽→오른쪽으로 읽는다. 왼쪽이 “점수로 고른다”, 오른쪽이 “프롬프트만 잠그고 reasoning은 랜덤”이다.

ELI5 — 점수 방식과 Random Attention이 무엇을 남기는가

왼쪽은 토큰마다 점수를 매겨 top-k만 남기는 흐름이고, 오른쪽은 프롬프트를 항상 둔 뒤 헤드별로 균일 랜덤으로 버리는 흐름이다. 하단 한 줄이 이 글의 주장이다.

Random Attention ELI5 — 점수 vs 랜덤

왼쪽: KV 토큰 T1–T7에 점수를 붙인 뒤 top-k(예: k=4)만 남긴다. 높은 점수(T1·T3·T5·T7)는 남고, 낮은 점수(T2·T4·T6)는 회색으로 빠진다. 오른쪽: 초록 자물쇠가 프롬프트를 항상 유지하고, reasoning 토큰(R1…)은 Head 1–4마다 주사위처럼 균일 랜덤으로 버린다. 패널 하단 클레임: scored 방식과 품질이 거의 같다. 맨 아래 배너: 프롬프트만 지키면 점수는 거의 안 먹힌다.

여기서 보면 된다. 갈리는 점은 “무엇을 버리느냐의 기준”이지, “프롬프트를 버리는지”가 아니다. 프롬프트가 잠긴 뒤에야 랜덤≈점수가 성립한다(논문 클레임). 아래 표는 같은 축을 이웃 방법과 나란히 둔다.

구분점수 방식 (H2O·SnapKV 등)고정 규칙 (StreamingLLM 등)Random Attention
무엇을 남기나점수 높은 토큰 (+ 최근)최근 윈도 + 맨 앞 sink프롬프트 전부 + reasoning은 랜덤
버리는 기준중요도 점수 / observation window위치 규칙점수 없음 (헤드별 균일 랜덤)
이 노트의 위치“똑똑한 선택”의 기본값규칙으로 버티기그 기본값에 대한 반례

앞에서 온 이야기

긴 CoT가 제품 기본값이 되면서 KV 비용이 먼저 터졌다. 사람들은 대략 두 가지로 대응했다.

하나는 점수로 고르는 방식이다. H2O(arXiv 2306.14048, NeurIPS’23)는 누적 attention이 큰 Heavy Hitter와 최근 토큰을 함께 남긴다. SnapKV(arXiv 2404.14469, NeurIPS’24)도 점수를 쓰지만, 프롬프트 끝 observation window에서 헤드별 중요 위치를 골라 압축하는 편에 가깝다.

다른 하나는 규칙을 고정하는 방식이다. Sliding Window로 최근만 보고, 맨 앞 sink는 항상 남긴다. StreamingLLM(arXiv 2309.17453, ICLR’24)이 대표다. SnapKV를 여기 넣으면 안 된다. observation으로 점수를 매기는 쪽이다.

Random Attention은 그 흐름에서 반례다. 점수를 더 정교하게 만들지 않고, 프롬프트 보호와 헤드별 균일 랜덤만으로 점수 방식과 맞선다. “점수에 집착하지 말라”가 1차 결론이다. 다만 이를 “구조를 절대 남기지 말라”로 읽으면 안 된다. 긴 CoT에는 초반 계획·문제문을 멀리서 다시 보는 순간이 남고, 그건 다음 글 BeaconKV가 다룬다.

같은 레인 허브는 긴 컨텍스트 단가다. Gated DeltaNet은 다른 길이다. KV를 골라 버리는 eviction이 아니라, 컨텍스트를 고정 크기 state로 접는 recurrent compression이다.

실제로 무엇이 일어나나

기존 방식은 캐시 토큰마다 점수를 매긴 뒤 top-k를 유지한다. Random Attention은 점수 계산을 뺀다. 프롬프트는 항상 두고, reasoning만 헤드별로 균일 랜덤으로 버린다. 추가 학습은 없다. 추론 때 eviction 규칙만 바꾼다.

왜 되나. 깨지기 쉬운 쪽은 프롬프트다. 방법끼리 성능 차이가 나는 이유의 대부분이 “문제문이 살아 있는가”로 설명된다. 점수 함수가 정교한가보다 그게 먼저다.

Reasoning은 스스로 버틴다. 필요한 내용을 텍스트로 다시 쓰고, 헤드 사이에는 복사가 있어 한 헤드에서 버려도 다른 헤드에 남을 여지가 있다. 프롬프트만 안전하면, 랜덤으로 버려도 필요한 복사본이 통계적으로 남는다.

그래서 점수를 매기는 루프는 정확도 대비 이득이 거의 없다. 같은 budget에서 최강 점수 방식과 동급이면, 서빙에서는 그 루프를 빼는 쪽이 이득이다. 논문은 vLLM throughput 상승을 클레임한다.

BeaconKV로 이어질 때

이 글은 “점수부터?”에 대한 1차 반례다. 남기는 것은 프롬프트 전체이고, reasoning에는 eviction 신호가 없다.

BeaconKV는 그다음 질문이다. 점수가 거의 안 먹혀도, Thought Revisiting이 다시 찾을 쿼리의 모양은 남길 가치가 있는가. 그쪽은 beacon과 최근 윈도를 남기고, observation set 위에서 attention을 모은다.

SWA+고정 sink와도 결이 다르다. 그쪽은 위치 규칙이다. Random Attention은 프롬프트를 지킨 뒤 reasoning에 점수 없는 랜덤을 쓴다. sink가 디코드 중 갱신되는지는 BeaconKV에서 다시 나온다.

논문 클레임 숫자

재료에 적힌 것만. 독립 재현 전에는 잠정이다.

  • 모델 4 · 추론 태스크 6에서 최강 scored evictor와 성능 동급.
  • vLLM에서 그 대비 throughput +32–43%.

벤치명·절대 점수는 이 노트에 없다. throughput 배수가 점수 루프 제거 외에 구현·커널에 얼마나 의존하는지도 열려 있다. 배수만 믿고 옮기기엔 이르다.

남는 한 줄

  1. 프롬프트 보호가 점수보다 먼저다. 방법 간 격차는 프롬프트 생존에 가깝다.
  2. Reasoning은 다시 쓰기와 헤드 간 복사로 버틴다. 그래서 헤드별 랜덤이 점수 방식과 동급일 수 있다.
  3. 그래도 “구조를 절대 남기지 말라”가 아니다. Thought Revisiting 모양은 BeaconKV로 이어진다.

아직 안 닫힌 것

  • Prompt-keep을 끄거나 약화하면 점수 방식이 랜덤을 명확히 이기는가. 이긴다면 “점수≈무용”은 프롬프트 보호가 있을 때의 이야기다.
  • Reasoning 중복이 약한 태스크(짧은 CoT, 한 번만 쓰는 사실)에서도 랜덤≈점수인가.
  • 헤드 수·GQA/MQA가 바뀌면 헤드 간 복사 가정이 얼마나 버티나.
  • 랜덤 위에 beacon만 얹으면, 점수 없는 eviction과 far-revisit 보존이 같이 가나.
  • +32–43%가 점수 루프 제거 외에 어디에 의존하는가.