[ML][용어] GELU 함수
GELU는 입력을 양수일 확률만큼 부드럽게 통과시키는 활성화 함수로, 매끄러운 비선형성과 죽은 뉴런 완화라는 장점이 있지만 ReLU보다 계산이 복잡한 단점이 있습니다.
1. GELU 함수의 정의
GELU(Gaussian Error Linear Unit) 함수는 입력값 를 확률적으로 통과시키는 활성화 함수입니다.
ReLU는 0보다 작으면 아예 끊어버리지만, GELU는 작은 음수도 조금은 통과시켜서 부드러운 출력 곡선을 만듭니다.
수학적으로 정의하면 다음과 같습니다.

는 표준정규분포의 누적분포함수(CDF) 입니다.
즉, 평균 0·분산 1인 정규분포에서 임의로 뽑은 값이 이하일 확률입니다.
따라서 x Φ(x)는 입력 x를 확률 Φ(x) 만큼 통과시킨 값으로 볼 수 있습니다.
여기서, 는 표준 정규분포의 누적분포함수(CDF) 로 정의됩니다:

즉, 는 정규분포에서 임의로 뽑은 값이 x 이하일 확률을 나타냅니다.
입력이 큰 양수일 때는 Φ(x) ≈ 1 ⇒ f(x) ≈ x → 거의 그대로 나감.
입력이 큰 음수일 때는 Φ(x) ≈ 0 ⇒ f(x) ≈ 0 → 거의 다 막힘.
입력이 큰 양수일 때는 Φ(x) ≈ 0.5 ⇒ f(x) ≈ 0.5x → 절반만 통과.
이를 볼 때, GELU는 입력을 양수가 될 확률만큼 통과시키는 함수라고 볼 수 있습니다.

2. 주요 특징
1) 비선형성
ReLU와 달리 0에서 부드럽게 이어지므로 미분 가능하고 학습이 안정적입니다.
2) 죽은 뉴런 완화
ReLU는 음수일 때 항상 0을 출력하지만, GELU는 작은 음수도 약간은 통과시켜 뉴런이 완전히 죽는 것을 방지합니다.
3) 확률적 게이팅 해석
GELU는 입력이 양수일 가능성을 계산해서, 그 비율만큼 값을 흘려보냅니다. 그래서 단순히 수학 공식이 아니라, 확률적으로 문이 열렸다 닫히는 것처럼 동작한다는 의미가 있습니다.
4) 중심성 (Zero-centered)
Transformer, BERT 같은 대형 언어모델에서 기본 활성화 함수로 쓰이며, ReLU 대비 성능이 더 좋은 경우가 많습니다.
5) 계산 비용
GELU는 원래 정규분포 적분을 계산해야 하는데, 이 과정은 계산이 복잡하고 시간이 오래 걸립니다. 그래서 실제 딥러닝 프레임워크에서는 계산을 단순화하기 위해 tanh 함수를 이용한 근사 공식을 사용합니다.
3. GELU 함수 코드 사용 예시
import torch
import torch.nn as nn
# 기본 GELU
gelu = nn.GELU()
# 근사형 GELU (tanh 사용)
gelu_tanh = nn.GELU(approximate='tanh')
x = torch.tensor([-2.0, -1.0, 0.0, 1.0, 2.0])
print("GELU:", gelu(x))
print("GELU (tanh approx):", gelu_tanh(x))