Attention은 Q와 K로 참고 비율을 정하고, 그 비율로 V를 섞어 새로운 표현을 만드는 계산이다.

1. 한 토큰의 표현에 문맥을 넣기

  • 예시 문장: “동물이 길을 건너지 않았다. 그것은 너무 피곤했다.”
  • 설명할 위치: 그것. 이 위치의 표현을 만들 때 동물의 정보를 많이 참고하면 유용할 수 있음.
  • 계산 방식: 관련 토큰 하나만 선택하는 대신, 각 위치의 정보를 서로 다른 비율로 합산.
  • Self-Attention: Q·K·V의 출처가 같은 시퀀스. 자기 토큰만 본다는 뜻이 아니라, 같은 시퀀스의 허용된 위치들을 참고한다는 뜻.

2. Q·K·V를 나누는 이유

Q·K·V: 비교와 전달을 위한 세 변환같은 입력에서 학습 가중치가 서로 다른 Q K V를 만든다. Q와 K는 참고 비율, V는 전달 내용이다. Q·K·V: 비교와 전달을 위한 세 변환 토큰의 현재 표현 X Q = XW_Q 무엇을 찾는가 K = XW_K 무엇과 맞는가 V = XW_V 무엇을 전달하는가 Q·K·V는 모두 숫자 벡터 · 세 가중치는 학습으로 결정
벡터 해설용 비유 계산에서의 역할
Q · Query 무엇을 찾는가 참고하려는 위치의 비교 벡터
K · Key 어떤 조건과 맞는가 각 후보 위치의 비교 벡터
V · Value 무엇을 전달하는가 실제 가중합에 들어가는 정보
  • 모두 숫자 벡터: Q에 자연어 질문이 저장되는 것은 아님.
  • 학습 가능한 변환: Q = XW_Q, K = XW_K, V = XW_V. 같은 X에서도 가중치가 다르므로 서로 다른 표현 생성.
  • 역할 분리: Q·K는 비율 결정, V는 내용 전달. 같은 벡터를 비교와 전달에 모두 쓰도록 강제하지 않는 구조.
  • 내적의 의미: 학습된 공간에서의 적합도 점수. 정규화된 코사인 유사도나 사람이 정의한 의미 유사도와 반드시 같지는 않음.

3. 참고 비율로 V를 섞기

비교 → 비율 → 정보의 가중합현재 query와 모든 key로 점수를 만들고 스케일링과 마스크 및 softmax를 거쳐 value를 가중합한다. 비교 → 비율 → 정보의 가중합 현재 위치의 Q 예: 그것 모든 위치의 K 예: 동물 · 길 · 그것 QKᵀ · 내적 점수 스케일링 · 필요 시 마스크 행별 softmax · 참고 비율 V의 가중합 현재 위치의 어텐션 출력 모든 V
  • 그림의 현재 Q: 그것 위치의 query.
  • 예시 단순화를 위해 동물, 길, 그것 세 위치만 사용.
  • 아래 비율은 이미 softmax를 거쳤다고 가정한 값. Q·K에서 실제로 측정한 값은 아님.
참고 위치 가중치 V 가중치를 곱한 V
동물 0.7 [10, 0] [7, 0]
길 0.1 [0, 10] [0, 1]
그것 0.2 [5, 5] [1, 1]
합계 1.0 — [8, 2]
  • 출력: 0.7 × [10, 0] + 0.1 × [0, 10] + 0.2 × [5, 5] = [8, 2].
  • 이 출력은 그것 위치에서 모은 정보. 각 위치의 Q로 같은 계산을 수행하면 위치별 출력 벡터 생성.
  • V의 수치는 설명용 좌표이며, 첫 성분을 특정 의미로 고정해 해석하지 않음.

4. Scaled Dot-Product Attention 수식 읽기

Attention⁡(Q,K,V)=softmax⁡(QKTdk)V\operatorname{Attention}(Q,K,V) =\operatorname{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V

순서 연산 의미
1 QKᵀ 각 Q와 모든 K의 내적 점수
2 ÷ √d_k head의 key 차원에 따른 점수 크기 조절
3 필요하면 마스크 미래·패딩 위치를 softmax 전에 제외
4 행별 softmax 각 Q마다 허용된 K에 대한 합이 1인 비율 생성
5 × V 해당 비율로 V들을 가중합
  • 스케일링의 이유: 차원이 커질 때 내적 크기가 커져 softmax가 지나치게 뾰족해지는 현상을 완화.
  • 원 논문의 설명 전제: Q·K 성분이 독립이고 평균 0·분산 1이면 내적의 분산은 d_k. 따라서 √d_k로 나누면 분산 크기를 조절 가능.
  • 행렬 표기: 여러 토큰의 query를 행으로 모은 것이 Q. 모든 위치의 계산을 행렬 곱으로 묶어 병렬 처리.

기존 그림: Scaled Dot-Product Attention

기존 포스팅의 Scaled Dot-Product Attention 연산 그림

기존 그림 1 — 점수 계산·스케일링·마스크·softmax·V 가중합. 위 단계 표와 함께 읽는 기존 도식. 수식과 구조의 기준: 원 논문 §3.2.1, Figure 2.

5. Multi-Head: 왜 여러 벌로 계산할까

서로 다른 참고 비율과 정보 변환으로 만든 결과를, 결합 단계까지 따로 유지하기 위해서다.

여러 방식으로 모은 뒤 결합하기각 head가 서로 다른 Q K V 가중치로 attention을 수행하고 결과를 특성 축으로 이어 붙여 출력 투영한다. 여러 방식으로 모은 뒤 결합하기 공통 입력 표현 Head 1 자체 Q·K·V 변환 자체 참고 비율 Head 2 자체 Q·K·V 변환 자체 참고 비율 Head 3 자체 Q·K·V 변환 자체 참고 비율 결과 A │ 결과 B │ 결과 C 출력 투영 W_O head별 의미 역할은 미리 지정하지 않음
  • 예시 문장: “민수가 영희에게 책을 주었다.”
  • 주었다 위치에서 필요한 관계의 예: 누가 주었는지, 누구에게 주었는지, 무엇을 주었는지.
  • 단일 head: 여러 토큰을 참고할 수 있지만, query마다 참고 비율 한 벌로 V를 합산.
  • 여러 head: 각각 다른 Q·K·V 가중치를 사용해 서로 다른 비율과 전달 정보를 학습할 수 있음.
  • 결합: head별 결과를 특성 차원으로 이어 붙인 뒤 W_O로 선형 변환.
  • 해석의 한계: “1번 head는 주어 담당”처럼 역할을 지정하지 않음. 비슷하거나 중복된 head가 생길 수 있으며, 문법 역할별 분업이 보장되는 것도 아님.

head⁡i=Attention⁡(XQWiQ,XKWiK,XVWiV)\operatorname{head}_i =\operatorname{Attention}(X_QW_i^Q,X_KW_i^K,X_VW_i^V)

MultiHead⁡=Concat⁡(head⁡1,…,head⁡h)WO\operatorname{MultiHead} =\operatorname{Concat}(\operatorname{head}_1,\ldots,\operatorname{head}_h)W^O

  • X_Q, X_K, X_V: 투영 전의 입력 표현. Self-Attention에서는 같은 시퀀스, Cross-Attention에서는 디코더와 인코더에서 각각 가져옴.
비교 기준 단일 head 여러 head
query별 참고 비율 한 벌 head마다 한 벌
정보 투영 한 종류의 Q·K·V 변환 head마다 서로 다른 변환
가중합 결과 하나의 혼합 결과 서로 다른 혼합 결과를 이어 붙임
관계 학습 여러 관계를 표현할 수 있음 다양한 관계를 병렬로 학습할 여지
보장되지 않는 것 한 토큰만 본다는 해석 head마다 고정된 의미 역할이라는 해석

Head 수만큼 계산량이 늘어날까

  • 원 논문 기본 모델: d_model = 512, h = 8, head당 d_k = d_v = 64.
  • 폭 고정: 전체 차원 512를 유지하면서 각 head를 작게 구성.
  • Attention 행렬 곱: h × n² × (d/h) = n²d. 전체 차원 d를 고정하면 head 수에 단순 비례하지 않음.
  • 비용 해석: 원 논문은 전체 차원을 쓰는 단일 head와 비슷한 계산 비용으로 여러 투영을 사용. “멀티 헤드 자체가 연산량을 줄인다”는 설명은 부정확.
  • 남는 차이: softmax의 head별 비용, 메모리 배치와 하드웨어 효율은 달라질 수 있음. 자세한 비교는 3편 참고.

기존 그림: Multi-Head Attention

기존 포스팅의 Multi-Head Attention 구조 그림

기존 그림 2 — Linear → 병렬 Attention → Concat → Linear. 추가 도표는 이 구조를 역할별로 풀어 쓴 해설. 구조의 기준: 원 논문 §3.2.2, Figure 2.

6. 같은 계산을 어디에 연결하는가

적용 위치 Q의 출처 K·V의 출처 참고 가능한 위치
인코더 Self-Attention 해당 층의 인코더 입력 같은 입력 패딩을 제외한 원문 전체
디코더 Masked Self-Attention 해당 층의 디코더 입력 같은 입력 현재 위치와 이전 위치
디코더 Cross-Attention 첫 Add & Norm 뒤의 디코더 표현 인코더의 최종 출력 패딩을 제외한 원문 전체
  • 계산 원리는 동일: Q·K로 비율을 정하고 V를 합산.
  • 달라지는 점: 표현의 출처와 마스크. Cross-Attention은 출력 문장의 각 위치가 입력 문장을 참고하는 연결.
  • 마스킹의 기준: 현재 입력 위치는 볼 수 있음. 한 칸 밀린 정답을 예측하므로 다음 정답을 미리 보지 않는 구조.

다음 편과 참고자료