
v1 SDPA 는 하나의 attention head. Transformer 의 실제 레이어는 Multi-Head:
where 는 를 각각 로 projection 후 개 head 로 분할한 slice.
(L, d_model).(L, H, d_head) 로 reshape → (H, L, d_head) 로 transpose.(L, L) bool 을 head 축으로 broadcast), softmax, × .(L, d_model) → .d_model % num_heads == 0 가정.
함수 multi_head_attention(x, W_q, W_k, W_v, W_o, num_heads, mask=None) 를 완성하세요.
x (L, d_model), W_q/W_k/W_v/W_o (d_model, d_model).num_heads 로 분할.(L, d_model).| # | 이름 | 검증 |
|---|---|---|
| 1 | shape (L, d_model) | |
| 2 | num_heads=1, W_*=I → SDPA | single-head identity |
| 3 | num_heads>1 ≠ single head | |
| 4 | W_o=0 → 출력 = 0 | |
| 5 | W_v=0 → 출력 = 0 | |
| 6 | mask 적용 확인 | 차단 토큰 무시 |
| 7 | 각 head 의 softmax weight 합 = 1 (간접 검증) |
A(m×n) @ B(n×p) — 안쪽 차원이 같아야 함.코드를 작성하고 실행하면 5개의 테스트가 각각 표시됩니다.