← 문제 목록/Top-K Hard Thresholding (정확한 k-sparsity) [medium]
문제 해설

Top-K Hard Thresholding (정확한 k-sparsity) [medium]

최적화 · medium

preview

Top-K Hard Thresholding [medium]

v1 Hard threshold값 기반 (|x| ≥ λ). 실무에서는 정확히 k 개만 살리고 싶을 때 가 많음 — 모델 pruning, k-sparse 분해, compressed sensing:

Tk(x)=(|x| 기준 상위 k 개만 남기고 나머지 0)T_k(x) = \text{(|x| 기준 상위 k 개만 남기고 나머지 0)}

이것이 L0 제약 x0k\|x\|_0 \le k 에 대한 projection (Euclidean 거리 최소화).

알고리즘

  1. 절댓값 |x| 기준으로 내림차순 정렬.
  2. 상위 k 개 인덱스 유지.
  3. 그 외 위치는 0.

O(N)O(N) 선형 시간으로 np.argpartition 활용:

k_largest = np.argpartition(-np.abs(x), k)[:k]
mask = np.zeros_like(x, dtype=bool)
mask[k_largest] = True
return np.where(mask, x, 0)

언제 쓰나

  • Matching Pursuit 계열 희소 복원.
  • IHT (Iterative Hard Thresholding) 의 projection 단계.
  • Neural network pruning: weight magnitude 작은 것부터 자르기.
  • Top-k attention: query 당 가장 유사한 k 개 key 만 활성.

Edge cases

  • k = 0: 모두 0 반환.
  • k ≥ N: 원본 그대로.
  • 동률 (tie): 하나만 선택 (argpartition 이 자동).

과제

함수 top_k_hard_threshold(x, k) 를 완성하세요.

  • x: 1D 배열 shape (N,).
  • k: 0 ≤ k ≤ N 정수.
  • 반환: 같은 shape, 정확히 min(k, non-zero count) 개만 non-zero.

테스트 케이스

#이름검증
1shape 유지
2k=0 → 모두 0
3k=N → 원본 그대로
4정확 k 개 non-zero
5유지된 값들은 `x
6non-zero 위치의 값은 원본 그대로 (축소 없음)
7수치 예제: [3, -5, 1, 4, -2], k=3 → [0, -5, 0, 4, 0]인지 (상위 3 =5
코드 작성
Loading...
실행 결과

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