어텐션(attention)은 Transformer가 “현재 토큰이 어떤 이전 토큰을 참고해야 하는가”를 계산하는 메커니즘이다. 토큰 임베딩을 query, key, value로 투영하고, query-key 유사도로 가중치를 만든 뒤, value를 섞어 문맥화된 표현을 만든다. kv-caching은 이 과정에서 이미 계산한 key와 value를 재사용해 자동회귀 생성 속도를 높인다.
어텐션의 역사적 배경
초기 encoder-decoder 번역 모델은 입력 문장 전체를 하나의 고정 길이 벡터에 압축했다. 긴 문장에서는 이 벡터가 병목이 됐다. 2014년 Bahdanau attention은 디코더가 매 출력 토큰마다 입력의 다른 위치를 부드럽게 검색하게 만들었다. 2017년 Transformer는 recurrence와 convolution을 제거하고 self-attention을 중심 연산으로 삼았다.
QKV가 하는 일
각 토큰 벡터는 학습된 행렬을 거쳐 세 가지 역할로 나뉜다.
| 구성요소 | 직관 | 역할 |
|---|---|---|
| Query | 내가 찾는 것 | 현재 토큰이 어떤 정보를 필요로 하는지 표현 |
| Key | 내가 가진 태그 | 다른 토큰이 나를 참고할지 판단할 기준 |
| Value | 실제 내용 | 선택되었을 때 전달되는 정보 |
attention score는 query와 key의 내적으로 계산된다. 점수가 높을수록 현재 토큰은 해당 토큰의 value를 더 많이 가져온다. 이 과정 덕분에 같은 단어도 문맥에 따라 다른 표현을 갖는다.
Self-attention과 causal attention
Self-attention은 한 시퀀스 안의 토큰들이 서로를 참고하는 구조다. 번역이나 분류처럼 전체 입력을 볼 수 있는 작업에서는 모든 위치를 참고할 수 있다. 반면 LLM의 텍스트 생성은 미래 토큰을 볼 수 없으므로 causal mask를 적용한다. 현재 위치는 과거와 현재 토큰만 참고한다.
KV 캐시가 중요한 이유
LLM은 한 토큰씩 생성한다. 새 토큰을 만들 때마다 과거 모든 토큰의 key와 value를 다시 계산하면 낭비가 크다. KV 캐시는 이전 단계에서 계산한 key/value 벡터를 저장해 두고, 다음 토큰 생성 시 새 토큰의 QKV만 추가 계산한다.
효과는 명확하다.
- 긴 프롬프트 이후 생성 속도 개선
- 반복적인 과거 토큰 재계산 제거
- 추론 서버의 지연 시간과 비용 절감
- 대신 컨텍스트 길이에 비례해 메모리 사용량 증가
어텐션은 이해가 아니다
어텐션은 어떤 토큰이 어떤 토큰을 참고했는지 보여 주지만, 그것이 곧 인간식 이해나 의도를 뜻하지는 않는다. 모델은 통계적으로 유용한 관계를 계산할 뿐이다. 따라서 attention map을 해석할 때도 “이 토큰이 중요하게 쓰였다” 정도로 보는 것이 안전하다.
관련 문서
- llm-inference — 토큰화부터 KV 캐시까지 LLM 추론 전체 흐름
- kv-caching — LLM 추론 속도를 높이는 KV 캐싱 개요
- inference-caching — 추론 캐싱 전략 비교
참고 자료
- AI 101: Your Ultimate Guide to Attention: Mechanism, QKV, and KV Cache — Turing Post (2026-05-13)