
93번 Padding Mask 는 (B, L) — 각 시퀀스에서 실제 토큰 위치. 실제 Transformer 디코더 학습에서는 이걸 causal 마스크와 결합 해 (B, L, L) 어텐션 마스크를 만듭니다:
query 쪽 padding 은 loss mask 에서 따로 처리 (여기선 key side 만).
lengths = [3, 5]
L = 5
→ 결과 shape (2, 5, 5)
batch 0 (길이 3): batch 1 (길이 5):
T F F F F (row 0) T F F F F
T T F F F T T F F F
T T T F F T T T F F
T T T F F ← row 3 pad key T T T T F
T T T F F 는 F 유지 T T T T T
(B=0의 row 3, 4 는 query 도 pad 이지만 key 마스크는 여전히 유효 key 3개만 True.)
함수 combined_mask(lengths, L) 를 완성하세요.
lengths: shape (B,), int.(B, L, L) bool.causal = arange(L)[None, :, None] >= arange(L)[None, None, :]; not_pad = arange(L)[None, None, :] < lengths[:, None, None]; causal & not_pad.| # | 이름 | 검증 |
|---|---|---|
| 1 | shape (B, L, L), bool | |
| 2 | 각 배치 (causal ∧ padding) 일치 | |
| 3 | 상삼각 모두 False | 미래 가림 |
| 4 | pad key 위치 False | j >= lengths[b] |
| 5 | 길이 최대 → 93번 causal 브로드캐스트 |
코드를 작성하고 Run 을 눌러보세요.