주제: TS-2 활성함수 (ReLU, GELU, SwiGLU)

분류: foundations

타입: concept

난이도: 입문

선수지식: 있음 - 퍼셉트론, z = Wx + b, 역전파

문제 설정

신경망은 선형 연산만으로는 복잡한 패턴을 학습할 수 없기 때문에 비선형 활성함수가 필요합니다.

a=sigma(Wx+b)

이 부분이 중요한 이유는, 층을 아무리 많이 쌓아도 각 층이 모두 선형이면 전체 네트워크도 결국 하나의 큰 선형변환과 같아지기 때문입니다. 즉 활성함수는 "깊게 쌓는 것"을 실제 표현력 증가로 바꿔 주는 핵심 장치입니다.

직관 비유

1. ReLU

ReLU(x)=max(0,x)

주의: 음수 영역 gradient가 0이라 dead neuron 문제가 생길 수 있습니다.

그래서 ReLU는 빠르고 강력하지만, 모든 상황에서 가장 부드러운 선택은 아닙니다. CNN이나 비교적 단순한 MLP에서는 여전히 강력한 기본값이지만, 더 정교한 표현이 필요한 구조에서는 다른 활성함수가 자주 고려됩니다.

2. GELU

GELU(x)=x*Phi(x)

Phi(x)는 표준정규 누적분포함수(CDF)입니다.

주의: ReLU보다 계산량이 다소 큽니다.

GELU를 직관적으로 보면 "값을 0/1로 딱 자르는" 대신, 입력이 클수록 더 자연스럽게 통과시키는 방식입니다. 그래서 정보가 갑자기 끊기지 않고 부드럽게 흐르며, Transformer 계열에서 안정적인 학습에 잘 맞는 편입니다.

3. SwiGLU

SwiGLU(x)=(xW1)*Swish(xW2)
Swish(x)=x*sigmoid(x)

주의: 파라미터/연산량이 증가합니다.

SwiGLU는 단순히 "새 활성함수 하나"라기보다 gating 구조를 활용해 어떤 정보를 더 강하게 살리고 어떤 정보는 약하게 통과시키는 방식에 가깝습니다. 그래서 대형 언어모델의 FFN에서는 표현력을 올리는 선택지로 자주 등장합니다.

4. 활성함수 비교

활성함수수식사용 맥락
ReLUmax(0,x)CNN, 일반 MLP
GELUx*Phi(x)Transformer
SwiGLU(xW1)*Swish(xW2)LLM FFN

5. Transformer에서 위치

x -> Linear -> Activation -> Linear
FFN(x)=W2*sigma(W1x)

여기서 sigma로 ReLU/GELU/SwiGLU가 사용됩니다.

코드-수식 연결

수식PyTorch 코드설명
ReLU(x)torch.relu(x)ReLU 활성함수
GELU(x)torch.nn.GELU()Transformer 활성함수
Swish(x)x * torch.sigmoid(x)Swish 계산

자주 하는 오해 5개

체크리스트 (스스로 설명 가능해야 하는 질문)