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 모델은 과거 전체를 고정 크기 상태에 넣어야 한다
  • 사용자를 기억해야 하는 어시스턴트는 세션을 넘어서 뭔가를 들고 가야 한다

부족한 게 계산이 아니라 읽은 것의 메모리가 됐고, 들어갈 자리보다 많을 때 뭘 할지가 문제가 됐다.

여기에 네 개의 연구 커뮤니티가 서로 거의 교류 없이 각자 답을 만들어왔다고 한다.

  1. KV 캐시 압축 : 추론 중에 작동. 값이 낮은 토큰을 버리거나, 몇 비트로 저장하거나, 인수분해하거나, 병합
  2. 프롬프트·컨텍스트 압축 : 모델이 입력을 읽기 전에 작동. 토큰을 지우거나 고쳐 쓰거나 학습된 “gist” 벡터 몇 개로 바꿈
  3. 아키텍처 상태 압축 : 구조를 바꿔서 상태 크기를 묶음
  4. 에이전트 메모리 통합 : 궤적을 요약

논문은 이 넷이 사실 같은 문제라고 한다.

어떤 정보를 어느 충실도로, 어떤 예산 안에서, 다운스트림 태스크 성능을 지키면서 남기고 버릴 거냐. 이걸 하나의 rate–distortion 결정으로 본다.

-> KV 캐시 축출이랑 에이전트 대화 요약을 같은 문제로 본다는 게 처음엔 좀 억지 같았는데, 뒤에 실험을 보니 이해가 됐다.

2. 세 가지 성질과 공통 실패 모드

형식화에서 성질 세 개를 뽑는다.

  • P-rev (되돌릴 수 있는가) : 버린 내용을 나중 질의가 필요로 할 때 다시 꺼낼 수 있는가. 검색·아카이브 방식은 되고, 축출과 요약은 안 된다
  • P-q (질의를 보는가) : 뭘 남길지 정할 때 질의(또는 질의 분포)를 보는가. 오프라인 gisting은 못 보고, LongLLMLingua와 Quest는 본다
  • P-fid (충실도) : 무손실, 준무손실, 균일 손실, 아니면 다중 충실도(작은 정확 계층 + 큰 손실 계층)

그리고 서베이 전체에서 보이는 패턴 두 개를 말한다.

  1. 모든 층에서 뭘 남길지 정하는 신호가 똑같다. 어텐션 크기 아니면 최신성이다. 그리고 똑같이 실패한다고 한다. 질의를 알기 전에, 되돌릴 방법 없이, 나중에 필요한 정보를 버린다. P-rev와 P-q를 같이 어기면 모든 층에서 같은 실패가 나온다는 게 형식화에서 나오는 예측이다.
  2. 에이전트가 실제로 하는 반복 압축은 거의 측정되지 않는다. 압축은 보통 단일 턴 긴 컨텍스트에서 재는데, 에이전트는 반복 압축을 한다. 하나의 예산 축으로 네 층을 같이 재는 벤치마크가 없다고 한다.

3. 일곱 축 분류

약 70개 방법을 같은 좌표에 놓는다. 축끼리는 가능한 한 겹치지 않게 골랐고, 방법 하나가 축들의 곱 위의 한 점이 된다.

  1. 압축 단위 : 비트 폭(양자화), 은닉 차원·랭크(저랭크 분해), 토큰/KV 항목, 페이지·블록, 레이어·헤드, 자연어 스팬, 밀집 소프트 토큰, 순환 상태, 의미 항목(사실·노트·그래프 노드), 비주얼 토큰, 에이전트 간 메시지
  2. 생애주기 단계 : 아키텍처·사전학습 / 프롬프트·prefill / prefill→decode KV 형성 / decode 시점 동적 선택 / 서빙 런타임 / 태스크 내 작업 컨텍스트 관리 / 태스크 간 통합 / 오프라인 코퍼스 색인
  3. 손실성과 충실도 : 무손실 재사용, 준무손실 근사, 균일 손실, 다중 충실도. 그리고 가역 vs 비가역
  4. 질의·태스크 적응성 : 질의 무관·오프라인 캐시 가능 / 질의 조건부·온라인 / 학습된 보상으로 태스크 인지. 중요도 신호(어텐션 점수, perplexity, 상호정보, 출력오차 한계, LLM 판정)는 서로 경쟁하는 왜곡 대리지표로 본다
  5. 학습 가능성 : 학습 없는 휴리스틱, 사후학습 어댑터, 처음부터 학습한 아키텍처, RL 정책, 가중치 변경 없는 LLM-as-controller
  6. 메커니즘 : 버리기·축출 / 선택·검색(전부 보관) / 병합·군집 / 양자화·인코딩 / 인수분해 / 요약·재작성 / 잠재로 인코딩
  7. 저장 위치 : 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회다.

예산-정확도 프런티어 (논문 Figure 5)

공통 축으로 BPT(bytes-per-token-of-history)를 쓴다. 남긴 메모리 바이트를 원본 맥락 토큰 수로 나눈 값이다.

이걸로 서로 다른 방법을 다 같은 축에 놓을 수 있다.

  • 토큰 비율 f를 남기는 축출 : f
  • b비트 양자화 : b/16
  • n토큰을 m으로 줄이는 요약 : m/n

결과는 이렇다고 한다.

전체 캐시는 정확도 1.00으로 다 맞힌다. 예산이 줄면 방법들이 0으로 떨어지고, 전체 예산의 대략 1/4 아래에서는 모든 방법이 0 근처다.

needle 태스크는 필요한 정보가 토큰 몇 개에 몰려 있어서, 예산이 그 아래로 내려가면 어떤 방법도 답을 복구할 수 없다.

무작위 축출 대조군은 예산이 높을 땐 운으로 needle을 지켜서 괜찮다가, 예산이 좁아지면 제일 빨리 무너진다. 진짜 방법이랑 무작위 사이 간격이 그 방법이 벌어오는 몫이다.

다만 이 규모에서는 그 간격이 크지 않고, 방법들 순위는 요점이 아니라고 한다. BPT 축으로 비교할 수 있게 된다는 게 요점이라고 한다.

4.2 Experiment 2

이쪽은 단일 턴 벤치마크로는 못 돌리는 실험이다.

에이전트가 긴 문서를 덩어리로 읽으면서 곳곳에 흩어진 key-value 사실 열두 개를 모으고, 주기적으로 작업 메모리를 압축한다. 압축 횟수를 늘려가면서 두 가지를 비교한다.

  • 비가역 : 작업 메모리를 LLM이 만든 요약으로 덮어쓴다
  • 가역 : 덩어리를 전부 아카이브에 두고 질의할 때 관련 덩어리를 꺼낸다 (Quest와 MemGPT 아카이브 방식)

마지막에 열두 사실을 전부 물어서 recall을 잰다.

압축 횟수에 따른 사실 회상 (논문 Figure 6)

가역은 모든 압축 빈도에서 recall 0.95 근처를 유지한다. 검색으로 버려진 사실을 다시 꺼낼 수 있어서다.

비가역은 0.33~0.56 사이로 한참 아래고, 압축을 자주 할수록 더 낮다. 요약할 때마다 다음 요약이 못 보는 사실이 빠지고 그게 계속 쌓인다고 한다.

평균 예산이 같은데도 메모리를 재사용하는 구간에서 recall이 0.5가량 차이 난다. 그런데 단일 턴 needle 테스트로는 이 둘을 구분할 수 없다.

-> 요약을 반복하면 정보가 빠진다는 건 감으로는 알았는데, 숫자로 보니까 차이가 꽤 크다.

5. 층 간 이전

같은 틀로 보면 한 층의 기법을 다른 층으로 옮길 수 있다고 한다. 예시가 세 개다.

  1. 망각 곡선을 KV prior로 : 에이전트 메모리의 시간 기반 망각을 KV 축출의 사전 분포로 쓴다
  2. 축출 없는 검색을 에이전트 메모리 설계로 : Quest의 “버리지 않고 찾는다”를 장기 메모리에 쓴다
  3. 출력 오차 한계를 요약의 정지 규칙으로 : 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 압축이나 요약이랑 같은 그래프에 올려볼 수는 있겠다.

그래도 걸리는 점이 있다.

  1. 실험 규모가 작다. Qwen2.5-1.5B에 1,395회 생성, 사실 열두 개다. 논문도 절대값보다 곡선 모양을 보라고 한다. 가역이 이긴다는 방향은 믿을 만한데, 0.5라는 크기는 다른 데이터에서 다시 재봐야 알 것 같다.
  2. 가역은 저장 비용이 든다. 아카이브를 유지해야 하고, 개인정보 삭제 요청이 오면 되돌릴 수 있다는 게 오히려 부담이 된다.

7. Conclusion

conclusion 부분을 보면 네 층을 하나의 틀로 보면 세 가지를 얻는다고 한다.

  1. 공통 화폐 : KV 축출기랑 에이전트 요약기를 같은 예산 축 위에서 비교할 수 있다
  2. 하나의 실패 모드 : 질의를 모른 채 비가역으로 나중에 필요한 정보를 잃는 것. 모든 층에서 반복된다
  3. 이전 가능성 : 망각 곡선이 KV prior가 되고, 축출 없는 검색이 에이전트 메모리 설계가 되고, 출력 오차 한계가 요약의 정지 규칙이 된다

그리고 결과 두 개가 남는다.

  1. 같은 예산이면 가역이 비가역을 이긴다. 같은 바이트를 남겨도 버린 걸 복구할 수 있는 쪽이 이기고, 메모리를 재사용할수록 차이가 벌어진다고 한다.
  2. 네 층을 하나의 예산 축으로 묶어서 반복 압축을 재는 벤치마크가 아직 없다. 지금 평가는 단일 턴 긴 컨텍스트에서 압축률만 본다고 한다.

그래서 그 빈자리를 채울 벤치마크(COMPACT-Bench)를 제안하면서 끝난다. 공통 축이 생기기 전까지 이 통합은 검증된 과학이 아니라 틀 짜기에 머문다고 스스로 말한다.

여태까지 KV 압축, 프롬프트 압축, 에이전트 요약이 따로 연구됐다면, 이 논문은 그걸 하나의 예산 축 위에 올려놓고 되돌릴 수 있느냐로 비교한다.

다음은 ReFind다. 원본 대화 로그를 그대로 두고 BM25 검색만 에이전트가 잘 돌리게 했더니 구조화 메모리 시스템들보다 잘 나왔다는 논문이다.

Leave a comment