← 문제 목록/GELU 활성화
문제 해설

GELU 활성화

신경망 · easy

preview

GELU (Gaussian Error Linear Unit)

BERT, GPT, ViT 등 대부분 Transformer 가 FFN 내부에서 쓰는 활성화. ReLU 는 음수를 딱 잘라버리지만 GELU 는 확률적으로 잘라냄 — 큰 음수는 거의 0, 작은 음수는 부드럽게 감쇠.

정확한 정의:

GELU(x)=xΦ(x)=x2(1+erf(x/2))\text{GELU}(x) = x \cdot \Phi(x) = \frac{x}{2}\left(1 + \text{erf}(x/\sqrt{2})\right)

여기서 Φ\Phi 는 표준정규 CDF. numpy.math.erf 대신 scipy.special.erf / np.vectorize(math.erf) 대신 직접 공식 을 써도 되고, 다음 tanh 근사도 실무에서 흔히 쓰임:

GELU(x)0.5x(1+tanh ⁣(2/π(x+0.044715x3)))\text{GELU}(x) \approx 0.5\, x \left(1 + \tanh\!\left(\sqrt{2/\pi}\,(x + 0.044715\,x^3)\right)\right)

이 문제에서는 정확식 (erf) 을 구현하세요. math.erf 를 원소별로 적용.

과제

함수 gelu-v1(x) 를 완성하세요.

  • 입력: shape 임의 (원소별 적용).
  • 반환: 동일 shape.
  • 정확식 사용.

테스트 케이스

#이름검증
1shape 보존
2gelu-v1(0) = 0
3큰 양수 → ≈ xgelu-v1(10) ≈ 10
4큰 음수 → ≈ 0gelu-v1(-10) ≈ 0
5공식 일치scipy/math.erf 기반 ref 비교
코드 작성
Loading...
실행 결과

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