
Bilinear Form x⊤Ay [medium]
v1 내적 은 x⋅y=∑ixiyi. 더 일반적인 bilinear form 은 사이에 행렬 A∈Rd×d 를 끼워 넣습니다:
⟨x,y⟩A=x⊤Ay=∑i,jxiAijyj
어디에 쓰이나
- Mahalanobis-like similarity: A=Σ−1 로 두면 공분산 정규화된 유사도.
- Attention score: query q 와 key k 사이 q⊤Wak 형태 (additive attention 변형).
- Bilinear pooling (visual QA 등): 이미지 feature와 질문 feature 의 상호작용.
- Metric learning: A 가 학습 가능한 거리/유사도 행렬.
구현 트릭
x @ A @ y — 세 행렬 연쇄. 순서에 따라 비용이 다를 수 있지만 scalar 결과라 동일.
- 배치:
X (N, d), Y (N, d) 의 per-sample bilinear = (X @ A * Y).sum(axis=1) — element-wise 후 합. X@A 는 (N, d), * Y 도 (N, d), sum → (N,).
- 루프 금지.
과제
함수 bilinear(X, A, Y) 를 완성하세요.
X, Y shape (N, d), A shape (d, d).
- 반환: shape
(N,) — 각 샘플의 xi⊤Ayi.
- 힌트:
(X @ A * Y).sum(axis=1).
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | shape (N,) | |
| 2 | A=I → 일반 내적 (v1 확장) | 각 샘플 x·y |
| 3 | A=0 → 0 | |
| 4 | 대칭 A: bilinear(x, A, y) == bilinear(y, A, x) | |
| 5 | 손계산 2x2 | 수동 |
| 6 | 루프 금지 | |