← 문제 목록/Multi-Head Attention (200번째 - 최종)
문제 해설

Multi-Head Attention (200번째 - 최종)

어텐션 · easy

preview

Multi-Head Attention 🎉 (200번째 문제!)

100번 Scaled Dot-Product Attention 한 head 만 계산. Multi-Head Attentiondd 차원을 HH 개 head 로 쪼개 각각 attention 을 병렬로 실행한 뒤 다시 붙입니다:

MHA(Q,K,V)=Concat(head1,,headH)\text{MHA}(Q, K, V) = \text{Concat}(\text{head}_1, \ldots, \text{head}_H) headh=softmax-v1 ⁣(QhKhdh)Vh\text{head}_h = \text{softmax-v1}\!\left(\frac{Q_h K_h^\top}{\sqrt{d_h}}\right) V_h

  • dh=d/Hd_h = d / H: head 당 차원.
  • 각 head 가 서로 다른 "관점" (문법, 의미, 위치 등) 을 배움.
  • 실제 Transformer 구현은 Q/K/V 를 linear projection 으로 만들지만, 이 문제는 이미 프로젝션된 Q, K, V 를 입력으로.

Shape 흐름

Q, K, V: (L, d)
  → reshape → (L, H, d_h)
  → transpose → (H, L, d_h)
  → attention per head → (H, L, d_h)
  → transpose back → (L, H, d_h)
  → reshape → (L, d)

200번까지 오면서 등장한 모든 블록이 여기 모여 있습니다

  • 4번: 행렬곱 → QK^T
  • 7번 / 91번: softmax-v1
  • 92번: 마스킹
  • 82번: linear projection (Q,K,V,out)
  • 94번 / 194번: 위치 인코딩
  • 80번 / 81번: 정규화
  • 96번 / 97번: FFN 활성
  • 그리고 이 200번 MHA 로 전체 Transformer 가 하나의 블록으로 완성!

과제

함수 multi_head_attention(Q, K, V, num_heads) 를 완성하세요.

  • Q, K, V shape (L, d), ddnum_heads 로 나뉨.
  • 반환: (L, d).
  • Attention 은 scaled dot-product-v1, mask 없음.
  • 힌트:
    L, d = Q.shape; H = num_heads; dh = d // H
    Qh = Q.reshape(L, H, dh).transpose(1, 0, 2)   # (H, L, dh)
    Kh = K.reshape(L, H, dh).transpose(1, 0, 2)
    Vh = V.reshape(L, H, dh).transpose(1, 0, 2)
    scores = Qh @ Kh.transpose(0, 2, 1) / np.sqrt(dh)   # (H, L, L)
    scores -= scores.max(axis=-1, keepdims=True)         # stability
    w = np.exp(scores)
    w /= w.sum(axis=-1, keepdims=True)
    out_h = w @ Vh                                       # (H, L, dh)
    return out_h.transpose(1, 0, 2).reshape(L, d)
    

테스트 케이스

#이름검증
1shape (L, d)
2H=1 → 100번 attention 과 동일
3H=d → 각 head 가 1차원dh=1
4Q=K=V (동일) → 자기 자신 포함한 분포
5Q, K 분해 후 head 별 결과 합과 일치논리 검증

축하합니다. 200개 ML/DL 문제 완주! 🎓

코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.