
Numerically Stable log-sigmoid [medium]
v1 시그모이드 의 로그 logσ(z) 는 BCE loss, logistic log-likelihood 계산에서 필수. 단 순진하게 np.log(sigmoid(z)) 는:
- z→+∞: σ→1 → log 안전.
- z→−∞: σ→0 →
log(0) = -inf.
안정한 공식
logσ(z)=−log(1+e−z)=−softplus(−z)
다시 수치 안정 softplus 로 표현:
logσ(z)=min(0,z)−log(1+e−∣z∣)
증명:
- z≥0: min(0,z)=0, ∣z∣=z → −log(1+e−z). ✓
- z<0: min(0,z)=z, ∣z∣=−z → z−log(1+ez)=log(ez/(1+ez))=logσ(z). ✓
두 경우 모두 exp 인자가 음수여서 오버플로 없음.
과제
함수 log_sigmoid(z) 를 완성하세요.
- 입력: 임의 shape 배열.
- 반환: 같은 shape, 값 ≤0.
- 큰 양/음수 (예: ±1000) 에서 NaN/Inf 금지.
- 힌트:
np.minimum(z, 0) - np.log1p(np.exp(-np.abs(z))).
테스트 케이스
| # | 이름 | 검증 |
|---|
| 1 | shape 유지 | |
| 2 | log_sigmoid(0) = -log 2 | |
| 3 | 모든 출력 ≤ 0 | sigmoid ≤ 1 |
| 4 | 큰 양수 z → ≈ 0 | |
| 5 | 큰 음수 z → ≈ z | |
| 6 | z=±1000 에서 finite (순진 구현은 NaN) | |
| 7 | log(sigmoid(z)) 와 작은 z 에서 일치 | |