https://arxiv.org/abs/2310.11511
Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection
Despite their remarkable capabilities, large language models (LLMs) often produce responses containing factual inaccuracies due to their sole reliance on the parametric knowledge they encapsulate. Retrieval-Augmented Generation (RAG), an ad hoc approach th
arxiv.org
📚 외부 지식 자원을 미리 로드하여 LLM의 확장된 컨텍스트에 캐시함
📚 추론 과정에서 추가적인 검색 없이 캐시된 매개변수를 사용하여 빠르고 정확한 응답을 생성
📚 기존 RAG 시스템보다 신속하고 효율적인 대안으로 제공
요약:
이 논문은 'Cache-Augmented Generation(CAG)'이라는 새로운 접근 방식을 제안하며, 이는 'Retrieval-Augmented Generation(RAG)'의 단점을 극복하기 위한 방법이다. RAG는 외부 지식 소스를 통합하여 언어모델(LM)의 성능을 향상시키는데 효과적이지만, 실시간 검색의 필요성으로 인한 지연, 문서 선택 오류, 그리고 시스템 복잡성 증가라는 문제들을 안고 있다. → 긴 문맥 창을 가진 대형 언어 모델(LLM)의 발전을 활용하여 CAG를 제안
1. 배경 및 개요
배경:
검색 증강 생성(RAG)은 외부 지식 소스를 통합하여 언어 모델의 성능을 향상시키는 강력한 접근 방식으로 자리 잡았지만, 검색 지연, 문서 선택 오류, 시스템 복잡성 증가 등의 문제점을 가지고 있다.
개요:
본 논문에서는 긴 문맥을 처리할 수 있는 대규모 언어 모델 (LLM)의 발전을 바탕으로 실시간 검색을 우회하는 대안적 패러다임인 캐시 증강 생성(CAG)를 제안한다. 특히, 검색 대상 문서 또는 지식이 제한적이고 관리 가능한 크기의 경우, 모든 관련 리소스를 LLM의 확장된 문맥에 미리 로드하고 런타임 파라미터를 캐싱하는 방식을 활용한다. 추론 과정에서 모델은 미리 로드된 파라미터를 사용하여 추가 검색 단계 없이 질문에 응답한다.
RAG의 문제점:
- 실시간 검색으로 인한 지연 시간 발생
- 문서 선택 오류 가능성
- 검색 및 생성 요소 통합으로 인한 시스템 복잡성 증가
- 세심산 튜닝 및 유지 보수 오버 헤드 증가
2. 연구 방법론 및 결론
CAG 프레임 워크:
외부 지식 사전로딩: 대상 애플리케이션과 관련된 문서를 전처리하여 모델의 확장된 문맥 창내에 맞게 포맷한다. 이후, LLM은 해당 문서를 KV캐시로 변환한다.
추론: 사전 계산된 KV캐시와 함께 사용자 쿼리를 입력받아 LLM이 응답을 생성한다. 외부 지식을 미리 로딩하여 검색 지연 및 오류를 제거하고, 외부 지식과 쿼리에 대한 통합적인 이해를 가능하게 한다.
캐시 재설정: 메모리에 저장된 KV 캐시를 효율적으로 재설정하여 지속적인 시스템 성능을 유지한다. 캐시를 재설정하는 것은 append-only 방식으로 추가되는 토큰을 잘라내는 것
CAG의 장점:
- 추론시간 감소: 실시간 검색 필요성을 없애 추론 과정이 더 빠르고 효율적
- 통합된 문맥: LLM 내부에 전체 지식 컬렉션을 사전 로드하여 개선된 응답 품질 및 일관성을 제공
- 단순화된 아키텍처: 검색기와 생성기 통합 필요성이 줄어들어 시스템이 간소화 되고, 유지보수 및 개발 오드헤드가 감소함
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)를 모델에 입력하여 사전 계산된 키-값 쌍(Ckv)을 생성. KV-Encode는 모델의 내부 상태를 저장하는 함수로 캐시 메모리에서 외부 지식 소스를 인코딩하는 과정을 다음과 같이 표현할 수 있음 CKV= KV-Encode(D) (2) 이렇게 생성된 KV 캐시는 디스크나 메모리에 저장되어 이후 추론 단께에서 바로 로드되어 사용됨.
- 이 KV캐시는 LLM의 추촌 상태를 캡슐화하먀, 이후 사용을 위해 디스크나 메모리에 저장됨. 그러면 D를 처리하는데 드는 계산 비용은 최초 1회만 발생하며, 이후 쿼리 횟수에 관계없이 재사용 가능함.
3. CAG의 추론 (Inference) 과정
- CAG의 추론 단계는 사전 계산된 KV 캐시와 사용자 질의를 결합하여 응답을 생성함
- 먼저, 사용자 질의(D)와 KV캐시(Ckv)를 결합하여 모델에 입력하면 모델이 생성한 응답R은 다음과 같이 표현 할 수 있음.
- R = M(D | ) CKV
- 이떄, KV캐시가 포함된 입력은 모델의 컨텍스트 윈도우에 로드되어 모델은 사전 로딩된 문서와 사용자 질의를 통합적으로 이해하여 높은 품질의 응답을 생성 가능함. 또한, 별도의 검색 단계를 거치지 않아 RAG 대비 더욱 빠른 답변 생성이 가능
- but, 이것은 여러번의 추론이 진행됨에 따라 캐시는 점점 커지므로, 이를 효율적으로 관리하기 위해 캐시 초기화 단계가 필요함
4. 캐시 리셋 (Cache Reset)
- KV 캐시는 새 토큰 t1,t2,…,tk가 순차적으로 추가되며 확장되는데, 초기화는 이 새 토큰을 제거하는 방식으로, 전체 캐시를 디스크에서 다시 로드하지 않고도 빠른 재초기화를 가능하게 하며 지속적인 속도와 응답성을 제공함.
- $C_{KV}^{reset}=Truncate(C_{KV},t1,t2,…,tk)$
실험:
데이터셋: Stanford Question Answering Dataset (SQuAD 1.0) 및 HotPotQA 데이터셋 사용
LLM 모델: Llama 3.1 8B instruction 모델 사용
베이스라인: BM25 및 OpenAI 인덱스 사용
평가지표: BERTScore를 활용하여 생성된 답변과 ground-truth 답변 간의 유사성을 측정
CAG 정확도 비교 실험 결과:
테스트 세트의 전체 문맥을 사전 로드함으로써, 검색 오류를 제거하고 모든 관련 정보를 총체적으로 사용하여 추론할 수 있도록 보장함
dense retrieval 방식 (OpenAI indexes)이 BM25와 같은 sparse retrieval 방식보다 더 나은 성능을 보이긴 하지만, 두방식 모두 검색 정확도와 순위화 휴리스틱에 의존하기 때문에 본질적인 한계가 존재함
but, CAG는 Llama3.1모델의 긴 문맥 처리 능력을 활용해 이러한 문제를 우회하며 우수한 성능을 달성함
CAG 속도 비교 실험 결과:
CAG 접근법과 참조 텍스트를 추론 중 동적으로 제공하여 실시간 KV캐시 계산이 필요한 in-context learning을 비교함. 결과는 KV캐시를 사전 로드함으로써 참조 텍스트 길이가 증가함에 따라 CAG가 생성 시간을 획기적으로 단축 함
BUT, 이 CAG방법이 모든 task에 대해서 해결책은 아닌 것 같음. 계속해서 DB내용이 변해야하고, 실시간 검색이 중요할 떄 여전히 CAG는 한계점을 가진다.
이 논문의 Abstract에서도 아래와 같이 말함
"우리의 방법은 검색을 위한 문서나 지식이 한정적이고 관리 가능한 크기 일 때, 관련 자원을 사전에 전부 불러와서 LLM의 확장된 맥락에 캐시하며 런타임 매개 변수를 저장하는 것이다." -> 활용하려는 데이터가 정적 데이터이고 그리 민감하지 ㅇ낳다면 CAG를 통해 효율적으로 구축할 수 있을 것 같음
결론:
CAG는 대부분의 시나리오에서 기존 RAG 시스템보다 더 높은 BERTScore를 달성했다. 특히, RAG 시스템에서 불완전하거나 관련 없는 패시지를 검색하여 차선의 답변을 생성하는 상황에서 CAG는 전체 맥락을 활용하여 더욱 견고하고 효율적인 성능을 보임
CAG는 RAG와 달리 추론 과정에서 검색 또는 참조 텍스트 입력을 요구하지 않아 프로세스를 간소화하고 효율성을 더욱 향상 시킴
3. 시사점
RAG의 대안: 제한적인 크기의 문서 또는 지식 기반에 대해 CAG는 RAG에 비해 간소화되고 효과적인 대안을 제공함.
장문맥 LLM 활용: 장문맥 LLM 발전은 CAG와 같은 새로운 접근 방식을 통해 지식 통합에 대한 새로운 가능성을 제시함.
검색의 한계 극복: CAG는 기존 RAG 시스템에서 불가피하게 발생하는 검색 오류와 지연 문제를 극복함.
하이브리드 접근 방식: 사전 로딩과 함께 선택적 검색을 결합하는 하이브리드 접근 방식의 가능성을 제시함.
지식 집약적인 작업에 대한 유연성: CAG는 확장된 문맥에서 관련 정보를 추출 및 활용하는데 있어 장점을 보이며, 이는 더 복잡하고 다양한 응용프로그램에 적용할 수 있는 가능성을 시사함.
문서로는 강력해 보이지만, LLM은 여전히 지나치게 긴 문맥을 다룰 때, 정확성이 떨어지는 문제가 있음
특히 기업 환경에서는 데이터 분리 및 보안 문제로 인해 CAG사용에 어려움을 겪을 수 있음.
끊임없이 변동하는 데이터에는 CAG가 적합하지 않음 -> KV Cache는 지속적으로 재계산을 요구한다
BUT
민감하지 않은 정적 데이터를 캐싱할 경우, CAG는 효율적임
RAG와 CAG를 결합하면 더욱 강력한 시스템을 구축할 수 있음