일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 비지도학습
- 데이터 프로젝트
- 정밀도
- five lines challenge
- 재현율
- 웹서비스 기획
- NULLIF
- 백엔드
- 데이터 분석
- 빠르게 실패하기
- 평가 지표
- SQL
- 데이터 전처리
- Normalization
- NVL
- DecisionTree
- CASE WHEN
- Batch Normalization
- ifnull
- 오차 행렬
- 지도학습
- 감정은 습관이다
- beautifulsoup
- 강화학습
- 결정트리
- LAG
- sorted
- nvl2
- layer normalization
- recall
- Today
- Total
Day to_day
[논문 리뷰] Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks 본문
[논문 리뷰] Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks
m_inglet 2025. 1. 19. 22:25
하루에 수없이도 많은 AI관련 논문들 중에 RAG의 한계를 극복한 새롭게 제안하는 CAG라는 기법이 나왔다고 하길래 빠르고 가볍게 리뷰를 진행해볼까 한다.
논문에서 해결하고자 하는 문제 정의
RAG는 외부 데이터를 동적으로 검색하고, 할루시네이션을 감소시킬 수 있는 방법으로 개방형 질문 응답(Open-Domain Question Answering)과 같은 지식 집약적 작업에서 좋은 성능을 발휘하였다. 하지만 RAG는 실시간 검색으로 인한 검색 지연, 문서 선택에서의 부정확하거나 관련 없는 문서를 선택하면서 오는 품질 저하, 시스템 복잡성 증가 등과 같은 문제가 있다.
제안 방법
이 논문에서 제안하는 방법은 1) LLM의 확장된 컨텍스트 윈도우를 활용하여 외부 데이터를 사전에 로드하고, 2) 키-값(Key-Value, KV) 캐시를 생성하여 기존에 RAG에서 핵심으로 사용되었던 검색 단계를 과감하게 없앤다. 3) 이를 통해 시스템의 지연을 줄이고, 검색 오류를 방지하여 구조적으로 단순성을 확보한다.
특히 이 방법은 최신 LLM은 수십만 개의 토큰을 처리할 수 있게 되면서 CAG 방법의 실현 가능성을 더욱 높일 수 있게 되었다. 검색의 과정 없이 긴 문서에 대해서 캐싱을 하는 방법을 통해 속도와 정확성을 확보했기 때문에 CAG가 기존의 RAG보다 동일하거나 더 나은 성능을 제공할 수 있음을 실험적으로 입증했다.
CAG(Cache-Augmented Generation)의 핵심 기여
- 검색 없는 Long Context 패러다임: 사전에 로드된 문서를 가지고 KV 캐시를 사전에 계산하여 실시간 검색을 완전히 제거했다.
- 성능 비교: RAG와 CAG의 성능을 특히 관리 가능한 지식 기반 데이터셋에서 비교하여 CAG의 효율성과 정확성에 우수함을 입증했다.
- 실용적 통찰 제공: CAG의 효율적 활용 방안을 제시하며, 특정 응용 분야에서 검색 없는 방식이 가지는 이점을 강조했다.
RAG와 CAG의 비교
전통적인 RAG 기법
이미지의 상단에 있는 워크플로우로 아래의 특징을 갖는다.
- 실시간 검색이 필요
- 검색에서 지연 발생
- 시스템 복잡도 높음
- 검색 품질에 따라 성능이 달라짐
CAG(Cache-Augmented Generation)
이미지의 하단에 있는 워크플로우는 미리 문서를 로드해 놓고, cache 해 놓는다.
그리고 유저의 query가 들어오면 그에 맞는 답변을 제공해 준다.
- 사전에 로드된 지식을 사용
- 검색에서 지연 발생 없음
- 시스템 복잡도 낮음
- 사전 준비된 컨텍스트로 성능이 일정함
CAG의 동작 방법
CAG는 RAG와 달리, 실시간 검색 없이 모델의 확장된 컨텍스트 윈도우를 활용하여 사전에 로드된 정보를 기반으로 응답을 생성한다.
핵심 구성 요소는 확장된 컨텍스트 윈도우(Long Context Window), 사전 로딩된 데이터(Preloaded Data), 키-값 캐시(Key-Value Cache)이다.
1. 지식 사전 로딩(Preloading External Knowledge)
데이터 수집 및 전처리: 작업에 필요한 문서(D = {𝑑₁, 𝑑₂, …})를 수집하고, 문서의 크기를 모델의 컨텍스트 윈도우에 맞게 조정한다. 이 과정에서 전처리 과정으로 중복 제거, 불필요한 정보 삭제, 문서 압축 등을 수행한다.
모델 입력 구성: 사전 로딩된 문서와 사용자 질의(Q)를 통합하여 모델의 입력으로 사용된다. 입력 형식은 문서와 질의를 결합한 형태로, 다음과 같이 표현한다. $P = Concat(D, Q)$
효율적인 데이터 관리: 데이터 크기를 줄이기 위해 특정 작업에 필요한 도메인 지식만 로드하여 메모리 사용량을 최적화한다. 이 의미는 어떻게 보면 동적으로 데이터를 관리하지 않아도 되는 도메인에서 유리하게 사용될 것 같다.
2. KV 캐시(Key-Value Cache) 생성
사전에 로드한 문서로 캐시 생성한다. 캐시를 생성하고 저장하는 방법은
1) 문서(D)를 모델에 입력하여 사전 계산된 키-값 쌍($C_{KV}$)을 생성한다. KV-Encode는 모델의 내부 상태를 저장하는 함수로 캐시 메모리에서 외부 지식 소스를 인코딩하는 과정을 다음과 같이 표현할 수 있다. $C_{KV}$= KV-Encode(D)
2) 이렇게 생성된 KV 캐시는 디스크나 메모리에 저장되어 이후 추론 단계에서 바로 로드되어 사용된다.
이 KV 캐시는 LLM의 추론 상태를 캡슐화하며, 이후 사용을 위해 디스크나 메모리에 저장된다. 그러면 D를 처리하는 데 드는 계산 비용은 최초 1회만 발생하며, 이후 쿼리 횟수에 관계없이 재사용 가능하다는 이점이 있다.
3. CAG의 추론(Inference) 과정
CAG의 추론 단계는 사전 계산된 KV 캐시와 사용자의 질의를 결합하여 응답을 생성한다.
먼저, 사용자 질의(D)와 KV 캐시($C_{KV}$)를 결합하여 모델에 입력하면 모델이 생성한 응답 R은 다음과 같이 표현할 수 있다 R = M(D | $C_{KV}$)
이때 KV 캐시가 포함된 입력은 모델의 컨텍스트 윈도우에 로드되어 모델은 사전 로딩된 문서와 사용자 질의를 통합적으로 이해하여 높은 품질의 응답을 생성 가능하다. 또한, 별도의 검색 단계를 거치지 않아 RAG 대비 더욱 빠른 답변 생성이 가능하다.
하지만 이것은 여러 번의 추론이 진행됨에 따라 캐시는 점점 커지므로, 이를 효율적으로 관리하기 위해 캐시 초기화 단계가 필요하다.
4. 캐시 리셋(Cache Reset)
KV 캐시는 새 토큰 $t1,t2,…,tk$가 순차적으로 추가되며 확장되는데, 초기화는 이 새 토큰을 제거하는 방식으로, 전체 캐시를 디스크에서 다시 로드하지 않고도 빠른 재초기화를 가능하게 하여 지속적인 속도와 응답성을 제공한다.
$C_{KV}^{reset}=Truncate(C_{KV},t1,t2,…,tk)$
CAG 실험 및 성능 평가
평가 실험에는 단일 문맥 내에서 질문에 대한 명확한 답변을 생성하는 SQuAD 데이터셋과 여러 문서를 통합하여 복합적인 질문에 답변하는 HotPotQA 데이터셋을 사용했다. 데이터 셋은 D = {𝑑1, 𝑑2, ... }와 질문 QS = {𝑞1, 𝑞2, ... }, 그리고 정답 R = {𝑟1, 𝑟2, ... }로 구성되어있다.
참조 텍스트 길이의 수준이 검색 난이도에 미치는 영향을 조사하기 위해, 각 데이터셋에 대해 세 가지 테스트 세트를 생성하여 참조 텍스트 크기를 다양화했다. 예를 들어, HotPotQA-small 구성에서는 HotPotQA 문서 집합에서 16개의 문서 D𝑠 ⊂ D를 샘플링하여 긴 참조 텍스트를 구성하고 D𝑠와 연결된 QA 쌍을 테스트 사례로 선택하였다.
실험 세팅
실험 평가는 정확도와 속도 2가지 기준으로 측정되었으며 BM25 기반의 Sparse RAG과 임베딩 기반의 Dense RAG와 성능을 비교하였다.
CAG 정확도 비교 실험 결과
테스트 세트의 전체 문맥을 사전 로드함으로써, 검색 오류를 제거하고 모든 관련 정보를 총체적으로 사용하여 추론할 수 있도록 보장했다고 한다.
dense retrieval 방식(OpenAI Indexes)이 BM25와 같은 sparse retrieval 방식보다 더 나은 성능을 보이긴 하지만, 두 방식 모두 검색 정확도와 순위화 휴리스틱에 의존하기 때문에 본질적인 한계가 존재한다. 그러나 CAG는 Llama 3.1 모델의 긴 문맥 처리 능력을 활용해 이러한 문제를 우회하며 우수한 성능을 달성했다고 한다.
CAG 속도 비교 실험 결과
CAG 접근법과 참조 텍스트를 추론 중 동적으로 제공하여 실시간 KV 캐시 계산이 필요한 in-context learning을 비교한다. 결과는 KV 캐시를 사전 로드함으로써 참조 텍스트 길이가 증가함에 따라 CAG가 생성 시간을 획기적으로 단축하였다.
그러나 이 CAG방법이 모든 task에 대해서 해결책은 아닌 것 같다. 계속해서 DB 내용이 변해야하고, 실시간 검색이 중요할 때 여전히 CAG는 한계점을 갖는다. 이 논문의 Abstract에서도 이렇게 말한다.
“우리의 방법은 검색을 위한 문서나 지식이 한정적이고 관리 가능한 크기일 때, 관련 자원을 사전에 전부 불러와서 LLM의 확장된 맥락에 캐시하며 런타임 매개변수를 저장하는 것입니다.”
활용하려는 데이터가 정적 데이터이고 그리 민감하지 않다면 CAG를 통해서 효율적으로 구축할 수 있을 것 같다.
CAG 논문
Don't Do RAG: When Cache-Augmented Generation is All You Need for Knowledge Tasks
Retrieval-augmented generation (RAG) has gained traction as a powerful approach for enhancing language models by integrating external knowledge sources. However, RAG introduces challenges such as retrieval latency, potential errors in document selection, a
arxiv.org
CAG 깃헙
GitHub - hhhuang/CAG: Cache-Augmented Generation: A Simple, Efficient Alternative to RAG
Cache-Augmented Generation: A Simple, Efficient Alternative to RAG - hhhuang/CAG
github.com
Reference
https://discuss.pytorch.kr/t/cag-cache-augmented-generation-llm-long-context-rag/5792
'논문 리뷰' 카테고리의 다른 글
[논문 리뷰] LLM Self-Correction (0) | 2025.02.02 |
---|---|
[논문 리뷰] Prompt Cache: Modular Attention Reuse For Low-Latency Inference (0) | 2025.01.05 |
[논문 리뷰] Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena (1) | 2024.11.15 |
LoRA(Low-Rank Adaptation)를 파악해보자아앗!! (0) | 2024.08.09 |
[논문 리뷰] A ConvNet for the 2020s (1) | 2024.03.24 |