← 문제 목록/배치 외적 (Batched Outer Product)
문제 해설

배치 외적 (Batched Outer Product)

선형대수 · easy

preview

배치 외적 (Batched Outer Product)

60번 외적 을 배치 차원으로 한 번에 처리. (B, M)(B, N) 두 배치를 받아 각 샘플 b 마다 외적을 구하고 쌓습니다 → (B, M, N).

Ob,i,j=Xb,iYb,jO_{b, i, j} = X_{b, i} \cdot Y_{b, j}

왜 배치로?

  • 샘플별 그래디언트: 선형층 y=Wxy = Wx 의 per-sample gradient WLb=δbxb\nabla_W L_b = \delta_b \otimes x_b. 배치로 계산한 뒤 평균.
  • 어텐션 외부 곱: (query, key) 쌍의 내적이 아닌 외적 (LoRA 같은 low-rank 업데이트에 등장).
  • 자동미분 라이브러리 (PyTorch torch.bmm) 의 기본 빌딩 블록.

구현 팁 (2가지)

# 브로드캐스팅
O = X[:, :, None] * Y[:, None, :]          # (B, M, 1) * (B, 1, N) → (B, M, N)

# einsum
O = np.einsum('bm,bn->bmn', X, Y)

둘 다 루프 없이 한 줄.

과제

함수 batched_outer(X, Y) 를 완성하세요.

  • X shape (B, M), Y shape (B, N).
  • 반환: shape (B, M, N).
  • 루프 금지 (for/while).

테스트 케이스

#이름검증
1shape (B, M, N)
2각 배치가 np.outer 와 일치
3B=1 → 단일 외적과 동일
4전치: batched_outer(Y, X) = (B, M, N) 의 각 b transpose
5루프 사용 금지소스에 for/while 없음
코드 작성
Loading...
실행 결과

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