What to Keep What to Forget Paper review
What to Keep, What to Forget: A Rate–Distortion View of Memory Compaction in LLMs and Agents
https://arxiv.org/abs/2607.08032
What to Keep, What to Forget은 UC Irvine에서 쓴 메모리 압축 서베이 논문이다.
2026년 7월 9일에 나왔고, 저자 2명에 24쪽이다. 학회 발표 없이 arXiv에만 올라와 있다.
무엇을 버릴지를 다루는 논문이다. 앞 서베이에서는 Forgetting을 Dynamics의 한 항목으로 올려두기만 했는데, 여기서는 그걸 정보이론으로 정식화한다.
좀 더 자세히 알아보자.
1. Introduction
introduction 부분을 보면 출발점이 구체적이다.
트랜스포머로 10만 토큰을 읽히면 이미 읽은 것의 KV 캐시가 모델 가중치보다 가속기를 더 많이 차지한다고 한다.
같은 문제가 여러 형태로 나타난다.
- 에이전트가 쌓는 도구 호출 기록이 컨텍스트 창을 금방 넘는다
- state-space나 linear-attention 모델은 과거 전체를 고정 크기 상태에 넣어야 한다
- 사용자를 기억해야 하는 어시스턴트는 세션을 넘어서 뭔가를 들고 가야 한다
부족한 게 계산이 아니라 읽은 것의 메모리가 됐고, 들어갈 자리보다 많을 때 뭘 할지가 문제가 됐다.
여기에 네 개의 연구 커뮤니티가 서로 거의 교류 없이 각자 답을 만들어왔다고 한다.
- KV 캐시 압축 : 추론 중에 작동. 값이 낮은 토큰을 버리거나, 몇 비트로 저장하거나, 인수분해하거나, 병합
- 프롬프트·컨텍스트 압축 : 모델이 입력을 읽기 전에 작동. 토큰을 지우거나 고쳐 쓰거나 학습된 “gist” 벡터 몇 개로 바꿈
- 아키텍처 상태 압축 : 구조를 바꿔서 상태 크기를 묶음
- 에이전트 메모리 통합 : 궤적을 요약
논문은 이 넷이 사실 같은 문제라고 한다.
어떤 정보를 어느 충실도로, 어떤 예산 안에서, 다운스트림 태스크 성능을 지키면서 남기고 버릴 거냐. 이걸 하나의 rate–distortion 결정으로 본다.
-> KV 캐시 축출이랑 에이전트 대화 요약을 같은 문제로 본다는 게 처음엔 좀 억지 같았는데, 뒤에 실험을 보니 이해가 됐다.
2. 세 가지 성질과 공통 실패 모드
형식화에서 성질 세 개를 뽑는다.
- P-rev (되돌릴 수 있는가) : 버린 내용을 나중 질의가 필요로 할 때 다시 꺼낼 수 있는가. 검색·아카이브 방식은 되고, 축출과 요약은 안 된다
- P-q (질의를 보는가) : 뭘 남길지 정할 때 질의(또는 질의 분포)를 보는가. 오프라인 gisting은 못 보고, LongLLMLingua와 Quest는 본다
- P-fid (충실도) : 무손실, 준무손실, 균일 손실, 아니면 다중 충실도(작은 정확 계층 + 큰 손실 계층)
그리고 서베이 전체에서 보이는 패턴 두 개를 말한다.
- 모든 층에서 뭘 남길지 정하는 신호가 똑같다. 어텐션 크기 아니면 최신성이다. 그리고 똑같이 실패한다고 한다. 질의를 알기 전에, 되돌릴 방법 없이, 나중에 필요한 정보를 버린다. P-rev와 P-q를 같이 어기면 모든 층에서 같은 실패가 나온다는 게 형식화에서 나오는 예측이다.
- 에이전트가 실제로 하는 반복 압축은 거의 측정되지 않는다. 압축은 보통 단일 턴 긴 컨텍스트에서 재는데, 에이전트는 반복 압축을 한다. 하나의 예산 축으로 네 층을 같이 재는 벤치마크가 없다고 한다.
3. 일곱 축 분류
약 70개 방법을 같은 좌표에 놓는다. 축끼리는 가능한 한 겹치지 않게 골랐고, 방법 하나가 축들의 곱 위의 한 점이 된다.
- 압축 단위 : 비트 폭(양자화), 은닉 차원·랭크(저랭크 분해), 토큰/KV 항목, 페이지·블록, 레이어·헤드, 자연어 스팬, 밀집 소프트 토큰, 순환 상태, 의미 항목(사실·노트·그래프 노드), 비주얼 토큰, 에이전트 간 메시지
- 생애주기 단계 : 아키텍처·사전학습 / 프롬프트·prefill / prefill→decode KV 형성 / decode 시점 동적 선택 / 서빙 런타임 / 태스크 내 작업 컨텍스트 관리 / 태스크 간 통합 / 오프라인 코퍼스 색인
- 손실성과 충실도 : 무손실 재사용, 준무손실 근사, 균일 손실, 다중 충실도. 그리고 가역 vs 비가역
- 질의·태스크 적응성 : 질의 무관·오프라인 캐시 가능 / 질의 조건부·온라인 / 학습된 보상으로 태스크 인지. 중요도 신호(어텐션 점수, perplexity, 상호정보, 출력오차 한계, LLM 판정)는 서로 경쟁하는 왜곡 대리지표로 본다
- 학습 가능성 : 학습 없는 휴리스틱, 사후학습 어댑터, 처음부터 학습한 아키텍처, RL 정책, 가중치 변경 없는 LLM-as-controller
- 메커니즘 : 버리기·축출 / 선택·검색(전부 보관) / 병합·군집 / 양자화·인코딩 / 인수분해 / 요약·재작성 / 잠재로 인코딩
- 저장 위치 : GPU KV, 호스트·SSD·원격 계층, 모델 파라미터, 외부 텍스트·벡터 저장소, 지식그래프, 컨텍스트 내 밀집 벡터, 하이브리드
층을 가르는 건 이 중 세 축뿐이라고 한다. 단위, 생애주기, 적응성. 나머지 넷은 층끼리 차이가 훨씬 작다.
그래서 KV 축출이랑 에이전트 요약이 생각보다 가깝다는 것이다.
4. 참조 실험
주장을 뒷받침하려고 작은 실험 두 개를 돌린다. 규모가 작다는 건 논문도 인정하고, 절대값보다 곡선 모양을 보라고 한다.
4.1 Experiment 1
needle-in-a-haystack 검색이다.
Wikitext에서 뽑은 채움 텍스트에 key-value needle을 10~90% 깊이에 심고, 2k~8k 토큰 맥락에서 값을 묻는다.
Qwen2.5-1.5B로 KV 압축 방법 여섯 개를 비교한다. SnapKV, StreamingLLM, TOVA, Knorm, expected-attention, 그리고 무작위 축출 대조군. 생성은 총 1,395회다.

공통 축으로 BPT(bytes-per-token-of-history)를 쓴다. 남긴 메모리 바이트를 원본 맥락 토큰 수로 나눈 값이다.
이걸로 서로 다른 방법을 다 같은 축에 놓을 수 있다.
- 토큰 비율
f를 남기는 축출 :f b비트 양자화 :b/16n토큰을m으로 줄이는 요약 :m/n
결과는 이렇다고 한다.
전체 캐시는 정확도 1.00으로 다 맞힌다. 예산이 줄면 방법들이 0으로 떨어지고, 전체 예산의 대략 1/4 아래에서는 모든 방법이 0 근처다.
needle 태스크는 필요한 정보가 토큰 몇 개에 몰려 있어서, 예산이 그 아래로 내려가면 어떤 방법도 답을 복구할 수 없다.
무작위 축출 대조군은 예산이 높을 땐 운으로 needle을 지켜서 괜찮다가, 예산이 좁아지면 제일 빨리 무너진다. 진짜 방법이랑 무작위 사이 간격이 그 방법이 벌어오는 몫이다.
다만 이 규모에서는 그 간격이 크지 않고, 방법들 순위는 요점이 아니라고 한다. BPT 축으로 비교할 수 있게 된다는 게 요점이라고 한다.
4.2 Experiment 2
이쪽은 단일 턴 벤치마크로는 못 돌리는 실험이다.
에이전트가 긴 문서를 덩어리로 읽으면서 곳곳에 흩어진 key-value 사실 열두 개를 모으고, 주기적으로 작업 메모리를 압축한다. 압축 횟수를 늘려가면서 두 가지를 비교한다.
- 비가역 : 작업 메모리를 LLM이 만든 요약으로 덮어쓴다
- 가역 : 덩어리를 전부 아카이브에 두고 질의할 때 관련 덩어리를 꺼낸다 (Quest와 MemGPT 아카이브 방식)
마지막에 열두 사실을 전부 물어서 recall을 잰다.

가역은 모든 압축 빈도에서 recall 0.95 근처를 유지한다. 검색으로 버려진 사실을 다시 꺼낼 수 있어서다.
비가역은 0.33~0.56 사이로 한참 아래고, 압축을 자주 할수록 더 낮다. 요약할 때마다 다음 요약이 못 보는 사실이 빠지고 그게 계속 쌓인다고 한다.
평균 예산이 같은데도 메모리를 재사용하는 구간에서 recall이 0.5가량 차이 난다. 그런데 단일 턴 needle 테스트로는 이 둘을 구분할 수 없다.
-> 요약을 반복하면 정보가 빠진다는 건 감으로는 알았는데, 숫자로 보니까 차이가 꽤 크다.
5. 층 간 이전
같은 틀로 보면 한 층의 기법을 다른 층으로 옮길 수 있다고 한다. 예시가 세 개다.
- 망각 곡선을 KV prior로 : 에이전트 메모리의 시간 기반 망각을 KV 축출의 사전 분포로 쓴다
- 축출 없는 검색을 에이전트 메모리 설계로 : Quest의 “버리지 않고 찾는다”를 장기 메모리에 쓴다
- 출력 오차 한계를 요약의 정지 규칙으로 : KV 쪽 오차 상한을 “언제까지 요약할지” 기준으로 쓴다
6. 지금 관점: 무엇을 버릴지 정할 때
이 논문에서 가져갈 건 되돌릴 수 있게 만들라는 것 같다.
이 시리즈 다른 리뷰들이랑 이어 보면 이렇다.
- Survey (5.2.3) : Forgetting을 따로 항목으로 올렸고, 기준은 time/frequency/importance 셋
- 이 논문 : 그 셋이 다 비가역이라는 게 문제. 가역이면 예산이 같아도 이긴다
- ReFind (다음 리뷰) : 원본을 안 건드리고 검색만 함. 완전 가역이라서 이긴다
- LongMemEval : 사실 단위로 압축하면 정보가 빠져서 전체 성능이 떨어짐
바로 다음에 볼 ReFind에서는 구조화 메모리가 지는데, 여기서 보면 구조가 나빠서라기보다 질의를 알기 전에 비가역으로 버렸기 때문인 것 같다. P-rev + P-q를 같이 어긴 경우다.
-> 요약으로 덮어쓰지 말고 원본을 남겨두면 되는 건가? 저장 비용은 올라가지만 이 실험 기준으로는 recall 0.5 차이다. 세션 히스토리를 N턴으로 자르고 있다면 자른 걸 버리지 말고 아카이브로 옮기는 정도는 해볼 만한 것 같다.
-> P-fid에서 말하는 다중 충실도도 비슷한 얘기다. 최근 건 원문, 오래된 건 요약, 그리고 요약 뒤에 원문 포인터를 남기는 식.
-> 지금은 “히스토리 3턴”처럼 개수로 자르는데, BPT처럼 바이트로 재면 KV 압축이나 요약이랑 같은 그래프에 올려볼 수는 있겠다.
그래도 걸리는 점이 있다.
- 실험 규모가 작다. Qwen2.5-1.5B에 1,395회 생성, 사실 열두 개다. 논문도 절대값보다 곡선 모양을 보라고 한다. 가역이 이긴다는 방향은 믿을 만한데, 0.5라는 크기는 다른 데이터에서 다시 재봐야 알 것 같다.
- 가역은 저장 비용이 든다. 아카이브를 유지해야 하고, 개인정보 삭제 요청이 오면 되돌릴 수 있다는 게 오히려 부담이 된다.
7. Conclusion
conclusion 부분을 보면 네 층을 하나의 틀로 보면 세 가지를 얻는다고 한다.
- 공통 화폐 : KV 축출기랑 에이전트 요약기를 같은 예산 축 위에서 비교할 수 있다
- 하나의 실패 모드 : 질의를 모른 채 비가역으로 나중에 필요한 정보를 잃는 것. 모든 층에서 반복된다
- 이전 가능성 : 망각 곡선이 KV prior가 되고, 축출 없는 검색이 에이전트 메모리 설계가 되고, 출력 오차 한계가 요약의 정지 규칙이 된다
그리고 결과 두 개가 남는다.
- 같은 예산이면 가역이 비가역을 이긴다. 같은 바이트를 남겨도 버린 걸 복구할 수 있는 쪽이 이기고, 메모리를 재사용할수록 차이가 벌어진다고 한다.
- 네 층을 하나의 예산 축으로 묶어서 반복 압축을 재는 벤치마크가 아직 없다. 지금 평가는 단일 턴 긴 컨텍스트에서 압축률만 본다고 한다.
그래서 그 빈자리를 채울 벤치마크(COMPACT-Bench)를 제안하면서 끝난다. 공통 축이 생기기 전까지 이 통합은 검증된 과학이 아니라 틀 짜기에 머문다고 스스로 말한다.
여태까지 KV 압축, 프롬프트 압축, 에이전트 요약이 따로 연구됐다면, 이 논문은 그걸 하나의 예산 축 위에 올려놓고 되돌릴 수 있느냐로 비교한다.
다음은 ReFind다. 원본 대화 로그를 그대로 두고 BM25 검색만 에이전트가 잘 돌리게 했더니 구조화 메모리 시스템들보다 잘 나왔다는 논문이다.
Leave a comment