어텐션 직관: 쿼리 · 키 · 값을 손으로 계산하기
쿼리 · 키 · 값과 softmax(QKᵀ/√d)V를 3토큰 예로 손계산하는 어텐션 기초 수업
먼저 알아야 할 것
다루는 내용
트랜스포머의 핵심 부품인 어텐션을 다룹니다. 쿼리 · 키 · 값의 역할과 스케일드 내적 어텐션을 토큰 3개 · 2차원 예로 끝까지 계산하고, √d로 나누는 이유를 분산과 숫자로 확인합니다. 셀프 · 교차 어텐션, 인과 마스킹, 멀티헤드, 위치 인코딩, 길이 제곱 계산량까지 정리합니다.
해설
어텐션 직관: 쿼리 · 키 · 값을 손으로 계산하기
어텐션(attention) 은 "지금 필요한 정보와 관련 있는 곳에 더 많은 가중치를 주어 섞는" 계산입니다. 트랜스포머와 모든 LLM의 핵심 부품이지만, 실제 계산은 내적 → 소프트맥스 → 가중합 세 단계뿐입니다. 이 수업에서는 토큰 3개 · 2차원짜리 예로 이 세 단계를 끝까지 손으로 계산하고, 로 나누는 이유, 셀프 · 교차 어텐션, 마스킹, 멀티헤드, 계산량까지 정리합니다.
| 항목 | 내용 |
|---|---|
| 참고 출처 | Dive into Deep Learning 11장 「Attention Mechanisms and Transformers」 11.1~11.6절 (11.1 쿼리 · 키 · 값, 11.3 점수 함수, 11.6 셀프 어텐션) |
| 트랙 · 수준 | NLP·트랜스포머 · 기초 |
| 이 수업이 다루는 범위 | 쿼리 · 키 · 값, 스케일드 내적 어텐션, 의 이유, 덧셈형 어텐션, 셀프 · 교차 어텐션, 마스킹, 멀티헤드 개요, 위치 인코딩, 계산량 |
들어가기 전에
- 임베딩과 벡터 유사도 — 내적이 '비슷함'을 잰다는 것. 어텐션 점수가 바로 이 내적입니다.
- 신경망으로 시퀀스를 시퀀스로 학습하기 (seq2seq) — 긴 문장을 벡터 하나에 담는 병목. 어텐션은 이 병목을 풀려고 나왔습니다.
- 소프트맥스 계산(→ 언어 모델의 기본)을 할 줄 알면 충분합니다.
한눈에 보기
- 쿼리 · 키 · 값이 각각 무슨 역할인지 비유와 식으로 설명할 수 있습니다.
- 를 작은 행렬로 직접 계산합니다.
- 로 나누지 않으면 소프트맥스가 왜 한쪽으로 쏠리는지 숫자로 확인합니다.
- 셀프 어텐션 · 교차 어텐션 · 인과 마스킹의 차이를 압니다.
- 어텐션 계산량이 문장 길이의 제곱으로 늘어나는 이유를 압니다.
1. 쿼리 · 키 · 값
직관(해설용 비유). 도서관 검색을 떠올립니다. 내가 찾는 것을 적은 메모가 쿼리(query), 책마다 붙은 분류표가 키(key), 책의 실제 내용이 값(value) 입니다. 메모와 분류표가 잘 맞는 책일수록 그 내용을 더 많이 가져와 섞습니다. 일반 데이터베이스는 딱 맞는 키 하나만 꺼내지만, 어텐션은 모든 책을 조금씩, 맞는 정도에 비례해 가져옵니다.
단계.
- 점수: 쿼리와 각 키의 내적으로 '얼마나 맞는지'를 잽니다.
- 크기 보정: 차원 의 제곱근으로 나눕니다.
- 가중치: 소프트맥스로 점수를 합이 1인 가중치로 바꿉니다.
- 가중합: 가중치로 값 벡터들을 섞습니다.
D2L 11.3절의 스케일드 내적 어텐션(scaled dot-product attention)입니다.
| 기호 | 크기 | 뜻 |
|---|---|---|
| 쿼리 개(행마다 하나) | ||
| 키 개 | ||
| 값 개(키와 짝) | ||
| 모든 쿼리-키 쌍의 내적 점수 | ||
| — | 점수 크기 보정 | |
| softmax | — | 행마다(쿼리마다) 가중치 합이 1이 되게 |
| 결과 | 쿼리마다 섞어 낸 값 벡터 |
2. 손으로 계산하기 (토큰 3개 · 2차원)
숫자로 해 보기(해설용). 토큰 세 개의 키 · 값이 다음과 같다고 합시다(, ).
| 토큰 | 키 | 값 |
|---|---|---|
| 1 | (1, 0) | (1, 0) |
| 2 | (0, 1) | (0, 2) |
| 3 | (1, 1) | (3, 1) |
쿼리 의 경우.
- 점수: , ,
- 보정: , ,
- 소프트맥스: , → 합 → 가중치
- 가중합:
쿼리 의 경우. 점수 → 보정 → 가중치 → 출력 . 키가 쿼리와 가장 같은 방향인 토큰 3이 절반을 차지합니다.
출력은 어느 값 하나가 아니라 값들의 섞임 이라는 점, 그리고 섞는 비율이 쿼리에 따라 달라진다는 점이 핵심입니다.
3. 왜 √d 로 나누나
D2L의 설명은 이렇습니다. 쿼리와 키의 각 원소가 서로 독립이고 평균 0 · 분산 1이라고 하면, 두 벡터의 내적은 평균 0 · 분산 가 됩니다. 차원이 커질수록 점수의 폭이 커진다는 뜻입니다. 로 나누면 차원과 상관없이 분산이 1로 돌아옵니다.
숫자로 해 보기(해설용). 에서 점수가 으로 나왔다고 합시다.
- 그대로 소프트맥스: — 거의 한 토큰만 봅니다.
- 로 나눈 : — 고르게 봅니다.
왜 쏠림이 나쁜가. 소프트맥스가 한쪽으로 거의 1이 되면 나머지 토큰에 대한 기울기가 0에 가까워져 학습이 잘 안 됩니다. 보정은 학습 초기에 '여러 곳을 골고루 보며 배울 여지'를 남깁니다.
다른 선택지: 덧셈형 어텐션. D2L은 형태의 덧셈형(additive) 어텐션도 소개합니다. 쿼리와 키의 차원이 달라도 되는 장점이 있고, 바다나우 어텐션 이 이 방식입니다. 내적형은 행렬 곱 한 번으로 끝나 GPU에서 훨씬 빠르기 때문에 트랜스포머가 택했습니다.
4. 셀프 어텐션과 교차 어텐션
셀프 어텐션(self-attention). 쿼리 · 키 · 값을 같은 문장 에서 만듭니다. 각 토큰 임베딩 에 학습되는 행렬 세 개를 곱합니다.
그러면 각 토큰이 문장 안의 모든 토큰을 보고 자기 표현을 고칩니다. 예를 들어 "그 동물은 너무 피곤해서 길을 건너지 않았다"에서 '그'의 표현은 '동물' 쪽 가중치를 크게 받아 섞일 수 있습니다(해설용 예). 같은 토큰이라도 문맥마다 다른 벡터가 되는 '문맥 임베딩'이 여기서 나옵니다.
교차 어텐션(cross-attention). 쿼리는 한쪽(번역 모델의 디코더), 키 · 값은 다른 쪽(인코더 출력)에서 옵니다. "지금 쓰려는 단어를 위해 원문 어디를 볼까"를 계산합니다. seq2seq의 고정 벡터 병목을 푼 것이 바로 이것입니다.
인과 마스킹(causal masking). GPT처럼 다음 토큰을 예측하는 모델은 미래 토큰을 보면 안 됩니다. 그래서 자기보다 뒤의 위치 점수를 아주 큰 음수로 바꿔 소프트맥스 가중치를 0으로 만듭니다. D2L의 마스크드 소프트맥스 구현도 무시할 자리에 같은 큰 음수를 넣습니다(D2L에서는 패딩 위치를 가리는 데 씁니다).
숫자로 해 보기(해설용). 위 표에서 토큰 2가 쿼리 로 인과 마스킹을 하면 토큰 1 · 2만 봅니다. 점수 → 가중치 → 출력 . 마스킹이 없을 때(토큰 3까지 볼 때)의 출력 과 달라집니다.
flowchart LR
X[토큰 임베딩 X] --> Q[Q = X·W_Q]
X --> K[K = X·W_K]
X --> V[V = X·W_V]
Q --> S[점수 Q·Kᵀ]
K --> S
S --> D[√d 로 나누기]
D --> M[마스크<br/>미래 · 패딩 가리기]
M --> SM[행마다 소프트맥스]
SM --> W[가중합 × V]
V --> W
W --> O[문맥이 섞인 출력]5. 멀티헤드와 위치 정보
멀티헤드 어텐션(multi-head attention). 하나의 어텐션은 "한 가지 관점"의 관련성만 봅니다. 그래서 를 여러 벌(헤드) 두어 각자 다른 관계(문법 관계, 지시어, 가까운 단어 등)를 보게 하고, 결과를 이어 붙여 행렬 하나로 다시 섞습니다. 보통 전체 차원을 헤드 수로 나눠 각 헤드의 차원을 작게 해서, 전체 계산량은 헤드 하나일 때와 비슷하게 유지합니다.
위치 정보. 어텐션 계산에는 순서 개념이 없습니다. 토큰 순서를 섞어도 점수 계산 자체는 같습니다. 그래서 입력에 위치 인코딩을 더합니다. D2L이 소개하는 사인 · 코사인 위치 인코딩은 위치 , 차원 · 에 대해
입니다. 위치가 일정하게 떨어진 두 자리의 인코딩이 선형 변환으로 이어져, 상대 위치도 배울 수 있다고 D2L은 설명합니다.
6. 계산량: 왜 긴 문맥이 비싼가
길이 인 문장에서 모든 토큰 쌍의 점수를 구하므로 점수 행렬이 입니다. D2L의 비교표는 다음과 같습니다(차원 , 합성곱 커널 크기 ).
| 구조 | 계산량 | 순차 연산 | 최대 경로 길이 |
|---|---|---|---|
| CNN | |||
| RNN | |||
| 셀프 어텐션 |
셀프 어텐션은 어느 두 토큰이든 한 번에 연결되고(경로 길이 ) 병렬 계산이 되지만, 길이의 제곱 으로 비용이 듭니다. 문맥을 2배로 늘리면 점수 행렬은 4배가 됩니다. 이 비용을 줄이려는 연구가 플래시어텐션 같은 기법입니다.
연습 문제
- 본문 표에서 쿼리 (마스크 없음)의 가중치와 출력을 구하세요.
- 풀이: 점수 → 보정 → 가중치 → 출력 입니다.
- 토큰 1,000개 문장의 점수 행렬에는 원소가 몇 개인가요? 4,000개면?
- 풀이: 개, 개(16배)입니다.
- 모든 키가 똑같다면 출력은?
- 풀이: 점수가 모두 같아 가중치가 균등()해지고, 출력은 값 벡터들의 단순 평균입니다.
- 모델 차원 512, 헤드 8개면 헤드 하나의 차원은?
- 풀이: 입니다.
스스로 점검
- 키와 값을 왜 따로 두나요?
- 답: '찾을 때 맞춰 보는 정보(키)'와 '찾은 뒤 가져올 정보(값)'의 역할이 다르기 때문입니다. 따로 학습하면 각각에 맞는 표현을 배웁니다.
- 로 나누지 않으면 어떤 문제가 생기나요?
- 답: 차원이 클수록 점수의 분산이 커져 소프트맥스가 한 토큰에 쏠리고, 나머지 위치의 기울기가 거의 0이 되어 학습이 어려워집니다.
- GPT류 모델에서 인과 마스킹이 꼭 필요한 이유는?
- 답: 학습 때 다음 토큰을 예측하는데, 미래 토큰을 볼 수 있으면 정답을 베끼게 되어 실제 생성 때 쓸 수 없는 모델이 됩니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 어텐션(attention) | 관련 있는 곳에 가중치를 더 주어 정보를 섞는 계산 |
| 쿼리(query) | 지금 찾고 있는 것을 나타내는 벡터 |
| 키(key) | 각 위치가 '나는 이런 정보'라고 내미는 꼬리표 벡터 |
| 값(value) | 각 위치가 실제로 건네주는 내용 벡터 |
| 스케일드 내적 어텐션 | 내적 점수를 로 나눠 소프트맥스하는 어텐션 |
| 셀프 어텐션 | 같은 문장 안에서 Q · K · V를 만드는 어텐션 |
| 교차 어텐션 | 쿼리와 키 · 값이 서로 다른 문장에서 오는 어텐션 |
| 인과 마스킹 | 미래 위치를 못 보게 가리는 것 |
| 멀티헤드 | 여러 벌의 어텐션을 나란히 돌려 합치는 것 |
| 위치 인코딩 | 순서 정보를 입력에 더해 주는 벡터 |
더 깊이 보려면
- 정렬과 번역을 함께 학습하는 신경망 번역 (어텐션의 시작) — 덧셈형 어텐션으로 seq2seq 병목을 푼 논문
- 어텐션만 있으면 된다 (트랜스포머) — 오늘 계산을 층으로 쌓은 구조 전체
- 플래시어텐션: 메모리를 아끼는 정확한 어텐션 — 점수 행렬을 메모리에 다 올리지 않는 계산법
- D2L 11.4절(바다나우 어텐션) · 11.5절(멀티헤드) · 11.7절(트랜스포머)
다음에 볼 것
- 위치 인코딩: 사인파 · 학습형 · RoPE · ALiBi — 어텐션에 순서 정보를 넣는 방법(사인파 · RoPE · ALiBi)
- 정렬과 번역을 함께 학습하는 신경망 번역 (어텐션의 시작) — 어텐션이 처음 등장한 문맥을 원 논문으로
- 어텐션만 있으면 된다 (트랜스포머) — 셀프 어텐션 · 멀티헤드 · 위치 인코딩을 조립한 모델
라이선스
본문은 KAITABASE 자체 해설입니다. 참고 자료 Dive into Deep Learning은 CC BY-SA 4.0으로 공개되어 있습니다. 쿼리 · 키 · 값 숫자와 예문은 이 수업을 위해 만든 해설용 예입니다.
출처
- D2L 11.1 Queries, Keys, and Values: https://d2l.ai/chapter_attention-mechanisms-and-transformers/queries-keys-values.html
- D2L 11.3 Attention Scoring Functions: https://d2l.ai/chapter_attention-mechanisms-and-transformers/attention-scoring-functions.html
- D2L 11.6 Self-Attention and Positional Encoding: https://d2l.ai/chapter_attention-mechanisms-and-transformers/self-attention-and-positional-encoding.html
AI 원리부터 이해하기 · NLP·트랜스포머 모듈
NLP·트랜스포머 모듈 학습
이 글은 NLP·트랜스포머 모듈의 학습 자료입니다. 전체 23개 자료 중 7번째입니다.
출처·원문
원문 보기요약만