신경망·연습 문제

Masked Mean Pooling

문제 설명PROBLEM

preview

Masked Mean Pooling

bag-of-embeddings-v1 는 모든 토큰을 평균했지만, 실제 Transformer 배치는 padding-mask-v1 로 pad 위치를 표시함. pad 는 평균에서 제외 해야 문장 임베딩이 정확해짐 (Sentence-BERT 의 "mean pooling" 도 동일).

pool(x,m)b=lmb,lxb,l,:lmb,l\text{pool}(x, m)_b = \frac{\sum_{l} m_{b,l} \cdot x_{b,l,:}}{\sum_l m_{b,l}}

  • x: shape (B, L, d) — 토큰별 벡터.
  • mask: shape (B, L) bool — True = 실제 토큰, False = pad.
  • 반환: (B, d).

구현 힌트

m = mask[..., None].astype(float)       # (B, L, 1)
num = (x * m).sum(axis=1)                # (B, d)
den = m.sum(axis=1).clip(min=1e-9)       # (B, 1)
return num / den

0 으로 나눗셈 방지 위해 clip(min=eps) 를 쓰거나, 호출측에서 전부 pad 인 배치는 없다고 가정하세요.

테스트 케이스

#이름검증
1shape (B, d)
2mask 전부 True → 평범한 mean
3pad 제외됨pad 값 바뀌어도 출력 불변
4수식 일치numerator/denominator ref
5서로 다른 유효 길이올바른 분모
개념 노트와 실수 포인트

신경망

  • 순전파 → 손실 → 역전파(연쇄법칙) → 갱신.
  • ⚠️ 행렬곱 차원: A(m×n) @ B(n×p) — 안쪽 차원이 같아야 함.
  • 비선형 활성화가 없으면 층을 쌓아도 선형. 가중치 초기화 중요.