최적화·연습 문제

Soft Thresholding (L1 prox)

문제 설명PROBLEM

preview

Soft Thresholding

Lasso / ISTA / FISTA 같은 L1 최적화 알고리즘의 핵심 연산. 각 원소를 원점 방향으로 λ 만큼 당기되, 부호가 바뀌면 0으로 자릅니다:

Sλ(x)=sign(x)max(xλ,0)S_\lambda(x) = \text{sign}(x) \cdot \max(|x| - \lambda, 0)

  • xλ|x| \le \lambda: 출력 = 0 (작은 값은 완전히 제거 → sparsity)
  • x>λ|x| > \lambda: 부호 유지 + 절댓값에서 λ\lambda

이 연산이 L1 페널티가 해를 희소 하게 만드는 메커니즘의 본질입니다.

등가 수식

Sλ(x)=max(xλ,0)max(xλ,0)S_\lambda(x) = \max(x - \lambda, 0) - \max(-x - \lambda, 0)

혹은 np.where 로 분기 처리해도 됨.

과제

함수 soft_threshold(x, lam) 을 완성하세요.

  • 스칼라 또는 배열 x.
  • 반환: 같은 shape, elementwise 적용.
  • np.sign, np.maximum 조합.

테스트 케이스

#이름입력기대
1작은 값 → 0x=0.3, λ=0.50
2양수 임계값 초과x=1.2, λ=0.50.7
3음수 임계값 초과x=-1.5, λ=0.4-1.1
4벡터[-2, -0.3, 0, 0.3, 2], λ=0.5[-1.5, 0, 0, 0, 1.5]
5λ=0 은 항등임의 xx 그대로
개념 노트와 실수 포인트

최적화 (옵티마이저)

  • GD/SGD/모멘텀/Adam. ⚠️ 학습률: 너무 크면 발산, 너무 작으면 느림.
  • 파라미터 -= lr * gradient. 모멘텀/Adam 은 과거 기울기 활용.