Level 7: Transformer & LLM 원리
🤖

Level 7

Multi-Head Attention

여러 전문가의 동시 분석, 차원 분할

45분
Multi-Head Attention 강의 영상
강의 영상 보기 (새 탭에서 재생)YouTube

📓Google Colab에서 실습하기

이 레슨은 PyTorch/GPU가 필요합니다. 노트북을 다운로드 후 Google Colab에서 열어주세요.

학습 내용

Multi-Head Attention - 여러 전문가의 협업

학습 목표

이 레슨을 완료하면:

  • Multi-Head Attention이 왜 필요한지 설명할 수 있다
  • 여러 Head가 각기 다른 관계를 학습하는 원리를 이해한다
  • 차원 분할과 병합 과정을 이해한다
  • numpy로 Multi-Head Attention을 직접 구현할 수 있다

핵심 메시지

"Multi-Head Attention은 여러 전문가가 동시에 문장을 분석하는 것이다." 한 전문가는 문법을, 다른 전문가는 의미를, 또 다른 전문가는 위치 관계를 분석합니다.


왜 Multi-Head가 필요한가?

비유: 영화 분석팀

비유: 영화를 분석할 때 한 사람보다 여러 전문가가 각자의 관점에서 보는 것이 더 좋습니다.

영화 "기생충" 분석:

전문가초점
전문가 1 (연출)카메라 각도, 조명에 주목
전문가 2 (각본)대사, 스토리 구조에 주목
전문가 3 (사회학자)계급 갈등에 주목

종합하면 → 훨씬 깊고 다양한 분석이 완성!

단일 Head의 한계

문장: "선생님이 학생에게 어려운 수학 문제를 설명했다"

다양한 관계가 존재:

관계 유형연결설명
문법적"선생님이" ↔ "설명했다"주어-동사
의미적"수학" ↔ "문제"수식 관계
행위적"학생에게" ↔ "설명했다"간접목적어-동사

단일 Head는 이 모든 것을 하나의 패턴으로 표현해야 합니다. Multi-Head라면 각 Head가 하나의 관계에 집중할 수 있습니다!


Multi-Head Attention의 구조

핵심 수식

extMultiHead(Q,K,V)=extConcat(exthead1,...,extheadh)imesWO ext{MultiHead}(Q, K, V) = ext{Concat}( ext{head}_1, ..., ext{head}_h) imes W_O

여기서:

  • extheadi=extAttention(QimesWQi,KimesWKi,VimesWVi) ext{head}_i = ext{Attention}(Q imes W_{Q_i}, K imes W_{K_i}, V imes W_{V_i})
  • hh = Head 개수 (보통 8 또는 16)

차원 분할 - 계산량을 늘리지 않는 비결

파라미터설명
dmodeld_{model}512전체 모델 차원
numheadsnum_heads8Head 개수
dkd_k64각 Head의 차원 (512 / 8)

파라미터 수가 동일합니다! 계산량은 비슷하지만, 8가지 다른 관점을 학습할 수 있습니다.

차원 변환 과정

단계동작차원
1입력[batch, seq_len, 512]
2Q, K, V 생성각각 [batch, seq_len, 512]
3Head로 분할[batch, 8, seq_len, 64]
4각 Head에서 독립적으로 Attention 수행[batch, 8, seq_len, 64]
5Head 합치기 (Concatenate)[batch, seq_len, 512]
6W_O 적용[batch, seq_len, 512]

입력과 출력의 크기가 같습니다!


각 Head가 학습하는 것

실제 학습된 Transformer를 분석하면, 각 Head가 자동으로 다른 패턴을 학습합니다.

Head학습된 패턴예시
Head 1인접 단어 관계"빨간" → "사과"
Head 2주어-동사 관계"고양이가" → "먹었다"
Head 3대명사 해석"it" → "cat"
Head 4구분자 주목문장 끝 토큰에 집중
Head 5수식어-명사"아름다운" → "꽃"

중요: 이 역할 분담은 사람이 지정하지 않습니다! 학습 과정에서 각 Head가 자동으로 유용한 패턴을 찾아냅니다.


실행해보기: numpy로 Multi-Head Attention 구현

python
import numpy as np np.random.seed(42) seq_len, d_model, num_heads = 4, 8, 2 d_k = d_model // num_heads # = 4 words = ["나는", "맛있는", "사과를", "먹었다"] print(f"===== Multi-Head Attention 데모 =====") print(f"단어 수: {seq_len}, 모델 차원: {d_model}, Head 수: {num_heads}, 각 Head 차원: {d_k}") print() X = np.random.randn(seq_len, d_model) # 각 Head의 가중치 행렬 W_Qs = [np.random.randn(d_model, d_k) * 0.5 for _ in range(num_heads)] W_Ks = [np.random.randn(d_model, d_k) * 0.5 for _ in range(num_heads)] W_Vs = [np.random.randn(d_model, d_k) * 0.5 for _ in range(num_heads)] def softmax(x): exp_x = np.exp(x - np.max(x, axis=-1, keepdims=True)) return exp_x / np.sum(exp_x, axis=-1, keepdims=True) head_outputs = [] for h in range(num_heads): print(f"===== Head {h+1} =====") Q, K, V = X @ W_Qs[h], X @ W_Ks[h], X @ W_Vs[h] weights = softmax(Q @ K.T / np.sqrt(d_k)) header = " " + " ".join(f"{w:>6}" for w in words) print(f" {header}") for i, word in enumerate(words): row = " ".join(f"{weights[i,j]:>6.3f}" for j in range(seq_len)) print(f" {word:>8} {row}") for i, word in enumerate(words): max_idx = np.argmax(weights[i]) print(f" {word}{words[max_idx]}에 주목 ({weights[i, max_idx]:.1%})") head_outputs.append(weights @ V) print() # Head 합치기 concatenated = np.concatenate(head_outputs, axis=-1) W_O = np.random.randn(d_model, d_model) * 0.5 final_output = concatenated @ W_O print(f"===== 결과 =====") print(f" Head 1 출력: {head_outputs[0].shape}, Head 2 출력: {head_outputs[1].shape}") print(f" 합친 크기: {concatenated.shape} → W_O 적용 → {final_output.shape}") print(f" 입력과 출력 크기 동일: {X.shape} == {final_output.shape}")

실제 모델들의 Head 설정

모델d_modelHead 수d_k파라미터 수
Transformer 원본51286465M
BERT-Base7681264110M
GPT-27681264117M
GPT-31228896128175B

PyTorch로 보는 Multi-Head Attention (참고용)

import torch.nn as nn

# PyTorch 내장 클래스 사용
mha = nn.MultiheadAttention(embed_dim=512, num_heads=8)

# Self-Attention: query = key = value = x
x = torch.randn(10, 32, 512)  # (seq_len, batch, d_model)
output, attn_weights = mha(x, x, x)

핵심 요약

개념설명비유
Multi-Head여러 Attention을 병렬 실행여러 전문가가 동시 분석
차원 분할d_model을 h개의 d_k로 나눔업무를 분담
역할 분담각 Head가 다른 패턴 학습각 전문가의 전문 분야
Concatenate모든 Head 출력을 이어붙임전문가 의견 종합
W_O종합된 정보의 최종 변환종합 보고서 작성

학습 체크리스트

  • 단일 Head의 한계를 설명할 수 있다
  • Multi-Head가 차원을 분할하는 방식을 이해했다
  • 각 Head가 서로 다른 패턴을 자동으로 학습함을 안다
  • 파라미터 수가 증가하지 않는 이유를 이해했다
  • numpy 데모에서 Head별 Attention 패턴 차이를 확인했다

다음 레슨: Positional Encoding - Transformer가 단어 순서를 어떻게 이해하는지 배웁니다!

레슨 정보

레벨
Level 7: Transformer & LLM 원리
예상 소요 시간
45분
참고 영상
YouTube 링크

💡실습 환경 안내

이 레벨은 PyTorch/GPU가 필요하여 Google Colab 사용을 권장합니다.

Colab은 무료 GPU를 제공하여 PyTorch, CNN, Transformer 등을 실행할 수 있습니다.