Context Windows: The Model's Working Memory
개요
컨텍스트 윈도우는 언어 모델이 한 번에 처리할 수 있는 최대 토큰 수를 의미하며, 시스템 프롬프트, 대화 기록, 모델의 자체 출력을 포함합니다. 이 윈도우의 물리적 한계는 모델의 성능에 영향을 미치며, 단순히 윈도우가 꽉 차지 않더라도 중요한 정보가 중간에 묻히면 모델이 이를 무시하는 'lost in the middle' 현상이 발생할 수 있습니다.
주요 내용
- 컨텍스트 윈도우의 개념: 컨텍스트 윈도우는 모델이 한 번에 "볼 수 있는" 텍스트의 양을 제한하며, 이는 마치 휴대폰 화면에서 레시피의 일부만 보이는 것에 비유됩니다. 모든 메시지와 모델의 응답은 이 제한된 윈도우 내의 토큰 수를 소모합니다.
- KV 캐시(Key-Value Cache): 모델은 대화 기록을 재처리하는 대신, 각 토큰에 대한 키(key)와 값(value) 벡터를 저장하는 KV 캐시를 사용하여 효율적으로 정보를 기억합니다. 이는 모델의 '메모장'과 같은 역할을 하며, 첫 토큰 이후의 생성 속도를 높입니다. KV 캐시는 GPU 메모리를 상당 부분 차지할 수 있습니다.
- 컨텍스트 윈도우의 한계: 어텐션(Attention) 메커니즘은 컨텍스트 윈도우 크기에 따라 계산 복잡성이 제곱으로 증가합니다. 예를 들어, 윈도우 크기가 두 배가 되면 연산량은 네 배가 됩니다. 이로 인해 긴 컨텍스트를 처리하는 데 시간과 메모리 비용이 많이 들기 때문에 모델에는 최대 시퀀스 길이가 존재합니다.
- 긴 대화의 문제점: 'Lost in the middle' 효과는 모델이 컨텍스트의 시작과 끝 부분에 더 집중하고 중간 부분의 정보를 간과하는 현상입니다. 또한, 모델의 훈련 시 사용된 컨텍스트 길이보다 긴 길이로 추론할 경우, 위치 인코딩(positional encodings)이 불안정해져 성능이 저하됩니다.
- 컨텍스트 윈도우 관리 기법:
- Truncation (잘라내기): 가장 오래된 토큰을 제거하고 최근 토큰만 유지하는 가장 간단한 방법입니다.
- Retrieval-Augmented Generation (RAG): 전체 정보 대신 관련 문서를 검색하여 프롬프트에 포함시키는 방식입니다.
- KV 캐시 압축: 학습된 모듈을 사용하여 KV 캐시를 요약하여 고정된 크기의 요약으로 만드는 방법입니다.
- 가장 최근 대화 블록 유지 및 요약/폐기: 위치적 무결성을 유지하면서 오래된 토큰을 압축하거나 폐기하는 방식입니다.
시사점
컨텍스트 윈도우의 물리적, 학습적 한계는 언어 모델의 실제 성능에 중대한 영향을 미치며, 'lost in the middle'과 같은 현상은 정보 검색 및 대화 유지 시 주의 깊은 관리가 필요함을 시사합니다. RAG와 같은 기법은 긴 맥락을 효율적으로 관리하고 모델의 성능 저하를 완화하는 데 중요한 역할을 할 수 있습니다.
원문을 불러오는 중...
댓글
GitHub Discussions