이유가 분명한 활성화 함수 선택법
ReLU — max(0, x). 2012년 이후 CNN과 대부분의 MLP 은닉층에서 기본값으로 쓰여. 계산이 싸고 활성값이 희소하며, 기울기가 1 아니면 0이라 역전파도 쉬워. 실패 모드는 죽은 뉴런이야. 편향값이 무너지면 유닛이 영원히 0에 갇혀.
GELU — 가우시안 오차 선형 유닛으로, ReLU보다 0 부근이 부드러워. Transformer(BERT, GPT, ViT)의 기본값이야. 계산 비용은 조금 더 들지만 규모가 커질수록 더 잘 학습돼. x * Φ(x).
SiLU / Swish — x * sigmoid(x). EfficientNet, LLaMA, 현대 이미지 생성 모델에 쓰여. GELU처럼 부드러우면서 계산 비용은 약간 더 낮아.
Sigmoid — 값을 (0,1) 범위로 눌러 줘. BCE 손실과 짝지어 이진 분류의 출력 활성화로 쓰는 건 괜찮아. 깊은 신경망의 은닉층 활성화로는 좋지 않아. 기울기가 포화되어 학습이 멈춰.
Tanh — 값을 (-1, 1) 범위로 눌러 주며, 중심이 0이야. RNN(LSTM, GRU) 내부에서 쓰여. 깊은 스택에서는 시그모이드와 같은 포화 문제가 생겨.
소프트맥스 — 로짓 벡터를 확률 분포로 바꿔. 거의 항상 교차 엔트로피 손실 직전에 적용하는 마지막 단계야. PyTorch의 CrossEntropyLoss에는 수치적으로 안정적인 소프트맥스 처리가 이미 들어 있으니 따로 겹쳐 넣지 마.
활성화 함수가 왜 학습 가능성을 좌우할까
활성화 함수는 기울기의 흐름을 통제해. ReLU는 활성화된 곳마다 기울기 1을 전달하고, 나머지에서는 0을 전달해 깊은 스택도 학습 가능한 상태로 유지해. Sigmoid와 tanh는 양끝에서 포화되어 기울기를 죽여. 활성화 함수를 잘못 고르는 건 교과서대로 만든 아키텍처가 실제 데이터셋에서 아무것도 학습하지 못하는 가장 흔한 이유야.