AI Sparkup

최신 AI 쉽게 깊게 따라잡기⚡

LLM 추론 팁 – 어텐션, QKV, KV 캐시 한 번에 이해하기

어텐션(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을 해석할 때도 “이 토큰이 중요하게 쓰였다” 정도로 보는 것이 안전하다.

관련 문서

참고 자료



AI Sparkup 구독하기

최신 게시물 요약과 더 심층적인 정보를 이메일로 받아 보세요! (무료)