Multi-Head Attention이란? 여러 Head가 서로 다른 관계를 찾는 원리

지난 글에서는 하나의 Self-Attention Head가 입력 X에서 Q·K·V를 만들고, 점수 행렬과 Softmax를 거쳐 문맥 벡터를 만드는 전 과정을 계산했습니다. 그런데 실제 Transformer는 이 계산을 한 번만 수행하지 않습니다. 여러 Attention Head를 병렬로 실행한 뒤 결과를 합칩니다.

Multi-Head Attention의 핵심은 같은 계산을 똑같이 반복하는 것이 아닙니다. 각 Head가 서로 다른 학습 가중치로 입력을 투영하기 때문에 같은 문장에서도 다른 관계를 볼 수 있습니다. 이번 글에서는 Head마다 무엇이 달라지는지, 결과를 어떻게 합치는지, 차원과 계산량은 어떻게 연결되는지 살펴보겠습니다.

왜 Attention Head를 여러 개 사용할까?

문장 안에는 한 종류의 관계만 있는 것이 아닙니다. “철수가 사과를 먹었다. 그것은 달았다”에는 주어와 동사의 관계, 목적어와 동사의 관계, 대명사와 지시 대상의 관계, 가까운 단어 사이의 관계가 함께 존재합니다.

하나의 Head도 여러 관계를 표현할 수 있지만, 하나의 가중치 분포로 모든 관점을 섞으면 중요한 패턴이 평균화될 수 있습니다. 여러 Head는 입력을 서로 다른 표현 공간으로 투영하고 각 공간에서 독립적인 Attention을 계산합니다. Transformer 원 논문도 Multi-Head Attention이 서로 다른 위치와 표현 부분공간의 정보를 함께 참고할 수 있게 한다고 설명합니다.

Head마다 무엇이 다를까?

각 Head는 자기만의 WQ, WK, WV를 가집니다. Head i의 계산은 다음처럼 표현할 수 있습니다.

Qᵢ = XWQᵢ
Kᵢ = XWKᵢ
Vᵢ = XWVᵢ

headᵢ = Softmax(QᵢKᵢᵀ / √dₖ)Vᵢ

입력 X는 같지만 가중치 행렬이 다르므로 Qᵢ·Kᵢ·Vᵢ도 달라집니다. 따라서 Attention Score와 최종 Head 출력도 달라집니다. Head 1이 높은 점수를 주는 토큰 쌍과 Head 2가 강조하는 토큰 쌍이 같을 필요는 없습니다.

이를 여러 사람이 같은 문장을 다른 기준으로 읽는 모습에 비유할 수 있습니다. 한 사람은 문법 구조를 보고, 다른 사람은 지시어가 가리키는 대상을 찾으며, 또 다른 사람은 가까운 단어의 연결을 살필 수 있습니다. 다만 실제 Head에 “문법 담당” 같은 역할을 사람이 지정하는 것은 아닙니다. 역할은 학습 과정에서 나타나며 항상 하나의 명확한 기능으로 해석되는 것도 아닙니다.

차원을 나누어 병렬로 계산한다

모델 표현의 전체 크기를 dmodel, Head 수를 h라고 하겠습니다. 흔한 구성에서는 각 Head의 Query·Key·Value 차원을 다음처럼 나눕니다.

dₖ = dᵥ = d_model / h

예를 들어 dmodel=8이고 Head가 4개라면 각 Head는 2차원 Q·K·V를 사용할 수 있습니다. 네 Head의 출력을 다시 이어 붙이면 2×4=8차원이 되어 원래 모델 차원과 맞아집니다.

Head가 여러 개라고 해서 각 Head가 항상 전체 8차원을 그대로 사용하는 것은 아닙니다. 전체 표현 폭을 작은 부분공간으로 나누어 병렬 계산하므로, Head 수가 네 배가 되었다고 기본 연산량이 단순히 네 배가 된다고만 볼 수 없습니다. 구체적인 비용은 구현, 시퀀스 길이, 차원 설정에 따라 달라집니다.

각 Head 안에서는 같은 Self-Attention을 수행한다

Head마다 내부 순서는 지난 글에서 계산한 Self-Attention과 같습니다.

  1. 입력 X에 해당 Head의 WQᵢ·WKᵢ·WVᵢ를 곱합니다.
  2. QᵢKᵢᵀ로 모든 토큰 쌍의 점수를 계산합니다.
  3. 점수를 √dₖ로 나눕니다.
  4. 필요한 마스크를 적용한 뒤 행별 Softmax를 계산합니다.
  5. 가중치 행렬과 Vᵢ를 곱해 Head 출력을 만듭니다.

중요한 차이는 이 계산에 들어가는 투영 행렬이 Head마다 별개라는 점입니다. 각 Head는 독립된 점수 행렬을 만들지만, 모든 Head는 같은 입력 토큰 순서와 같은 문장 길이를 공유합니다.

Head 출력은 어떻게 하나로 합칠까?

여러 Head의 결과를 단순히 평균 내면 각 Head가 만든 특징이 섞이며 구분이 약해질 수 있습니다. Multi-Head Attention은 먼저 Head 출력들을 마지막 차원 방향으로 이어 붙입니다. 이를 Concat, 즉 연결이라고 합니다.

H = Concat(head₁, head₂, ..., headₕ)

4개 Head가 각각 2차원 출력을 만들었다면 H는 8차원이 됩니다. 하지만 이어 붙인 값은 아직 Head별 결과가 나란히 놓인 상태입니다. 모델은 여기에 학습되는 출력 행렬 WO를 곱합니다.

MultiHead(X) = HWO

WO는 서로 다른 Head의 특징을 다시 조합하고 다음 하위 층에서 사용할 표현으로 바꿉니다. 어떤 Head의 어느 성분을 얼마나 활용할지도 학습으로 결정됩니다. 원 논문의 전체 식은 다음과 같습니다.

MultiHead(Q,K,V)
= Concat(head₁,...,headₕ)WO

작은 차원 예제로 모양 확인하기

토큰이 3개, dmodel=8, Head가 4개이고 각 Head 차원이 2라고 하겠습니다.

X      : 3 × 8
Qᵢ,Kᵢ,Vᵢ : 3 × 2
headᵢ : 3 × 2

Concat 결과 H : 3 × 8
WO             : 8 × 8
최종 출력       : 3 × 8

토큰 수 3은 모든 단계에서 유지됩니다. 각 토큰은 Head마다 2차원 문맥 표현을 얻고, 네 결과가 합쳐져 다시 8차원이 됩니다. 그래서 Multi-Head Attention 출력은 잔차 연결을 위해 입력 X와 같은 dmodel 차원을 유지할 수 있습니다.

여러 Head가 실제로 서로 다른 역할을 보장할까?

서로 다른 가중치 행렬은 다양한 관계를 학습할 가능성을 열어주지만, 모든 Head가 완전히 독립적이고 유용한 역할을 반드시 얻는 것은 아닙니다. 일부 Head는 비슷한 패턴을 보거나 기여도가 낮을 수도 있습니다. Head 수를 늘린다고 성능이 항상 같은 비율로 좋아지는 것도 아닙니다.

또한 Attention 가중치 그림은 모델 내부를 살펴보는 단서이지만 최종 판단의 완전한 설명은 아닙니다. 여러 층의 Head 출력, WO 투영, 잔차 연결과 Feed-Forward Network가 함께 결과를 만듭니다. 한 Head의 높은 값만 보고 모델 전체의 이유를 단정해서는 안 됩니다.

마스킹은 Head마다 어떻게 적용될까?

다음 토큰 생성에서는 미래 위치를 가리는 인과 마스크가 모든 Head의 점수 행렬에 적용됩니다. 패딩을 무시하기 위한 마스크도 마찬가지입니다. Head마다 점수는 달라도 참고가 허용되지 않은 위치는 공통 규칙에 따라 차단됩니다.

마스크 이후 각 Head는 자기 점수에 Softmax를 적용하므로 허용된 위치 사이의 가중치 분포는 Head마다 다르게 나타납니다. 즉 마스크는 접근 가능 범위를 제한하고, 투영 행렬은 그 범위 안에서 무엇을 강조할지 결정합니다.

Self-Attention과 Multi-Head Attention의 차이

  • Single-Head: 하나의 WQ·WK·WV 세트로 하나의 관계 공간을 계산합니다.
  • Multi-Head: Head마다 별도의 투영 세트로 여러 관계 공간을 병렬 계산합니다.
  • 결합 단계: 여러 Head 출력을 Concat한 뒤 WO로 다시 투영합니다.
  • 공통점: 각 Head 내부에서는 스케일된 내적 Attention 공식을 그대로 사용합니다.

정리

Multi-Head Attention은 같은 입력을 여러 학습된 표현 공간에서 바라보는 구조입니다. 각 Head는 독립적인 WQ·WK·WV로 Q·K·V를 만들고 Self-Attention을 계산합니다. 결과는 이어 붙인 뒤 WO를 통해 다시 조합됩니다.

여러 Head 덕분에 모델은 한 문장에서 동시에 나타나는 다양한 관계를 나누어 처리할 수 있습니다. 다음 글에서는 Attention만으로는 알 수 없는 토큰의 순서를 Transformer가 어떻게 표현하는지, Positional Encoding의 숫자가 임베딩에 어떻게 더해지는지 살펴보겠습니다.

댓글

이 블로그의 인기 게시물

AI의 학습 과정

AI란 무엇일까?

머신러닝과 딥러닝이란?