← 문제 목록/Numerically Stable Tanh [medium]
문제 해설

Numerically Stable Tanh [medium]

활성화 함수 · medium

preview

Numerically Stable Tanh [medium]

v1 tanh 은 직관적 공식:

tanh(z)=ezezez+ez\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}}

하지만 z710z \gtrsim 710 이면 np.exp(z) = infinf/inf = NaN 폭발. 실제 신경망은 gradient clipping 이 풀리면 이런 값이 나올 수 있음 (혹은 fp16 에선 z>88z > 88 만 돼도 터짐).

안정화된 두 가지 형태

부호에 따라 지수가 양수가 되는 쪽을 피함:

  • z0z \ge 0: tanh(z)=1e2z1+e2z\tanh(z) = \dfrac{1 - e^{-2z}}{1 + e^{-2z}}exp(-2z)[0,1][0, 1]
  • z<0z < 0: tanh(z)=e2z1e2z+1\tanh(z) = \dfrac{e^{2z} - 1}{e^{2z} + 1}exp(2z)[0,1][0, 1]

두 형태 모두 지수의 인수가 항상 음수 이라 overflow 없음.

과제

함수 tanh_stable(z) 를 완성하세요.

  • 벡터/스칼라 입력.
  • np.tanh 금지 (채점).
  • 조건: 입력 z[1000,1000]z \in [-1000, 1000] 에서도 NaN, inf 없이 [1,1][-1, 1] 반환.
  • 힌트: np.where 또는 np.sign(z) 로 두 브랜치 선택.

테스트 케이스

#이름검증
1tanh_stable(0) = 0
2일반 범위 (-5~5) 에서 np.tanh 와 일치
3z = 1000 → 1.0, finiteoverflow 회피
4z = -1000 → -1.0, finite
5홀함수: f(z)=f(z)f(-z) = -f(z) (극단값 포함)
62D 배열 처리
7극단 범위 [-800, 800] 에서 finite + 단조 + [-1,1]
코드 작성
Loading...
실행 결과

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