← 문제 목록/Causal + Padding 결합 어텐션 마스크
문제 해설

Causal + Padding 결합 어텐션 마스크

어텐션 · easy

preview

Causal + Padding 결합 마스크

93번 Padding Mask(B, L) — 각 시퀀스에서 실제 토큰 위치. 실제 Transformer 디코더 학습에서는 이걸 causal 마스크와 결합(B, L, L) 어텐션 마스크를 만듭니다:

Mb,i,j=(ji)  (j<lengthsb)M_{b, i, j} = (j \le i) \ \land \ (j < \text{lengths}_b)

  • jij \le i: causal (미래 안 보기)
  • j<lengthsbj < \text{lengths}_b: key 위치가 실제 토큰 (pad 아님)

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.
  • 반환: shape (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.

테스트 케이스

#이름검증
1shape (B, L, L), bool
2각 배치 (causal ∧ padding) 일치
3상삼각 모두 False미래 가림
4pad key 위치 Falsej >= lengths[b]
5길이 최대 → 93번 causal 브로드캐스트
코드 작성
Loading...
실행 결과

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