선형대수·연습 문제

Nuclear Norm (특이값 합)

문제 설명PROBLEM

preview

Nuclear Norm (특이값 합)

64번 Frobenius 노름 은 원소 제곱합의 제곱근 = 특이값 제곱합의 제곱근. Nuclear norm 은 특이값을 그냥 더합니다:

A=iσi(A)\|A\|_* = \sum_i \sigma_i(A)

  • Frobenius: σi2\sqrt{\sum \sigma_i^2} (L2-처럼 작용)
  • Nuclear: σi\sum \sigma_i (L1-처럼 작용 — 특이값을 0으로 밀어넣음)

왜 중요?

  • 저-rank 정규화 의 convex surrogate. rank(A)\text{rank}(A) 는 비볼록(0-노름 같음); nuclear는 볼록 → 경사 기반 최적화 가능.
  • 행렬 완성 (Matrix Completion): Netflix 문제처럼 결측 엔트리 복원에 min ||A||_* subject to A_observed = M_observed.
  • Robust PCA: low-rank + sparse 분해.

관계

  • rank(A)k\text{rank}(A) \le k 이면 AAFk\|A\|_* \le \|A\|_F \sqrt{k}
  • 등호는 모든 특이값이 같을 때.

과제

함수 nuclear_norm(A) 를 완성하세요.

  • A shape (M, N).
  • 반환: Python float.
  • 힌트: np.linalg.svd(A, compute_uv=False).sum().

테스트 케이스

#이름검증
1영행렬 → 0
2단위행렬 → N대각 특이값 1이 N개
3스케일 선형성`‖cA‖_* =
4rank=1 행렬 → 유일 특이값 = ‖A‖_F
5np.linalg.norm(A, 'nuc') 일치
개념 노트와 실수 포인트

선형대수

  • 행렬곱 (m×n)·(n×p)=(m×p), 전치 .T, 내적.
  • ⚠️ @(행렬곱) 와 *(요소별 곱)은 완전히 다름.