QKV를 1분 만에 이해하기 — 외우지 말고 문제를 기억하라
← 전체 목차 · 이전: 왜 대규모 모델은 전부 Transformer를 선택했나 · 다음: "다음 단어 예측"만으로는 부족하다 — LLM 추론 전 과정
Q, K, V는 외우지 마라. 세 기호를 정의로 암기하는 대신 그것들이 함께 푸는 하나의 문제를 기억해야 한다.
한 문장 안에서, 어떤 단어가 어떤 단어들을 중점적으로 참조해야 하는가, 그리고 참조하고 나서 무슨 정보를 가져오는가.
문제를 기억하면 세 기호는 저절로 제자리를 찾는다.
핵심 비유: 자료를 찾는 과정
| 기호 | 비유 대상 | 한 줄 책임 |
|---|
| Q (Query) | 내 손에 든 질문 | 무엇을 찾으려 하는가 |
| K (Key) | 자료의 제목과 태그 | 자기가 무엇인지 설명한다 |
| V (Value) | 자료의 본문 | 실제로 내용을 제공한다 |
흐름: Query --매칭--> Key --추출--> Value
계산 흐름: Q와 K로 유사도 → 점수 → V 집계
- 매칭할 때는 Query로 Key와 유사도를 계산한다.
- 유사도가 높을수록 그 정보가 주목할 가치가 크다(가중치가 크다).
- 모델이 어떤 단어를 처리할 때는 그 단어의 Q로 다른 단어들의 K에 점수를 매긴다.
- 점수를 softmax로 정규화한 뒤 그 가중치대로 V를 집계한다.
가장 자주 나오는 구분: K는 "누구를 볼지", V는 "무엇을 보았는지"
- 점수를 매기고 나서 실제로 집계되는 것은 Value다.
- Key는 "누구를 볼지" 판정에만 쓰인다(매칭도 판단용).
- Value가 "무엇을 보았는지"를 제공한다.
한 줄로: K는 점수 계산에 참여하지만 출력에 들어가지 않고, V는 점수 계산에 참여하지 않지만 출력을 구성한다.
지시 대상 해소 예시
문장: "사과가 땅에 떨어졌다, 왜냐하면 그것이 익었기 때문이다."
- 모델은 "그것"이 사과를 가리킨다고 판단해야 한다.
- 방법: "그것"의 Query를 앞의 단어들과 매칭시켜 유사도가 높은 "사과"를 찾고, 관련 단어의 Value에서 정보를 가져온다.
한 줄 정리 (그대로 암기 가능)
Q는 현재 token의 질문, K는 다른 token들의 인덱스 태그, V는 내용 자체다. 그리고 Attention은 Q와 K로 가중치를 계산한 뒤, 그 가중치대로 V를 집계하는 것이다.
핵심 통찰
- 먼저 "문제"를 기억하고, 그다음에 "기호"를 기억할 것 — QKV가 외우기 어려운 이유는 대부분 세 글자의 정의를 외우고 그것들이 함께 봉사하는 하나의 문제("누구를 볼지 + 무엇을 볼지")를 외우지 않기 때문이다. 문제를 기억하면 세 기호는 자동으로 제자리를 찾는다.
- K와 V의 분업이 가장 큰 채점 포인트다 — K는 점수 계산에만 참여(주의력 가중치를 누구에게 배분할지 결정), V는 출력에만 참여(집계되어 들어오는 내용이 무엇인지 결정). 공식을 복창하는 것보다 이 점을 스스로 말할 수 있는 편이 이해의 깊이를 훨씬 잘 드러낸다.
- Attention의 본질은 한 번의 "소프트 검색"이다 — 태그(Key)가 달린 항목들을 Query로 검색해, 관련도에 따라 가중하여 본문(Value)을 가져온다. RAG의 검색-리콜 패러다임과 직관적으로 동형이며, 다만 Attention의 검색은 미분 가능하고 조밀하며 매 층 매 token마다 한 번씩 수행된다.
- 유사도가 곧 가중치이고, 가중치가 곧 "참조 정도"다 — softmax 이후의 주의력 점수를 "참조 비율"로 이해하는 편이 추상적인 행렬 곱으로 이해하는 것보다 구두 설명에 유리하다.
- 지시 대상 해소는 Self-Attention을 설명하는 가장 경제적인 예시다 — "그것"이 무엇을 가리키는지는 누구나 직관이 있고, 반드시 문맥에 의존해야 풀리는 과제이므로 Q가 앞 문맥에서 K를 찾는 과정에 자연스럽게 대응된다.
- "한 단어의 Q로 다른 단어들의 K에 점수를 매긴다"는 문장에 Self-Attention의 정의가 숨어 있다 — Q와 K가 같은 시퀀스에서 나와야 Self-Attention이다. Q가 다른 시퀀스(디코더 측 등)에서 오면 Cross-Attention이 된다. 추가 질문을 받았을 때의 가점 포인트다.
엔지니어링 실전 Tips
- 비유를 먼저, 공식은 나중에:
softmax(QKᵀ/√d)V를 곧바로 던지면 디테일을 파고드는 추가 질문에 말리기 쉽다. "자료 찾기"로 공감대를 만든 뒤 공식을 보태는 편이 안정적이다.
- 소스가 말하지 않은 두 가지를 보태면 차이가 크게 벌어진다:
- 스케일링 인자 √d_k: 나누지 않으면 내적의 분산이 차원에 비례해 커지고, softmax가 포화 구간에 들어가 기울기가 소실된다.
- 다중 헤드(Multi-Head): 단일 QKV 조합은 한 가지 "참조 관계"만 표현할 수 있다. 다중 헤드는 문법·지시·의미 등 서로 다른 부분 공간을 동시에 주목하게 한다.
- K와 V를 같은 것으로 말하지 말 것: 구현상 K와 V가 같은 은닉 상태를 서로 다른 선형 층에 통과시켜 얻어지더라도, 책임은 구분해서 설명해야 한다. 그렇지 않으면 결론을 외운 것으로 보인다.
- KV Cache와 연결할 것: K/V가 "다른 token들의 태그와 내용"이라면, 추론 시 이미 생성된 token에 대해서는 불변이다. 이것이 KV Cache가 성립하는 전제이며, 여기서 자연히 이어지는 고빈도 추가 질문이다.
- 예시 점수(90/70/50)는 어디까지나 예시: 실제 주의력 가중치는 softmax 정규화 후의 확률이며 합이 1이다. 구두 설명 시 "점수"를 최종 가중치라고 말하지 말고 "softmax 정규화를 거친다"를 한 문장 보탤 것.
- 이어지는 학습 경로:
왜 √d_k로 나누는가 → Multi-Head의 역할 → KV Cache 원리 → MHA/MQA/GQA의 차이 → Flash Attention이 해결한 문제. 전부 QKV에서 직접 자라나는 추가 질문들이다.