주제: TS-2 활성함수 (ReLU, GELU, SwiGLU)
문제 설정
신경망은 선형 연산만으로는 복잡한 패턴을 학습할 수 없기 때문에 비선형 활성함수가 필요합니다.
이 부분이 중요한 이유는, 층을 아무리 많이 쌓아도 각 층이 모두 선형이면 전체 네트워크도 결국 하나의 큰 선형변환과 같아지기 때문입니다. 즉 활성함수는 "깊게 쌓는 것"을 실제 표현력 증가로 바꿔 주는 핵심 장치입니다.
직관 비유
- Wx+b: 입력 신호를 계산하는 단계
- 활성함수: 신호를 필터링하는 장치
- a: 변형된 출력 신호
1. ReLU
- 양수는 통과, 음수는 0으로 차단
- 계산이 단순하고 빠름
- vanishing gradient 완화에 도움
주의: 음수 영역 gradient가 0이라 dead neuron 문제가 생길 수 있습니다.
그래서 ReLU는 빠르고 강력하지만, 모든 상황에서 가장 부드러운 선택은 아닙니다. CNN이나 비교적 단순한 MLP에서는 여전히 강력한 기본값이지만, 더 정교한 표현이 필요한 구조에서는 다른 활성함수가 자주 고려됩니다.
2. GELU
Phi(x)는 표준정규 누적분포함수(CDF)입니다.
- ReLU보다 부드러운 비선형성
- Transformer 계열에서 자주 사용
주의: ReLU보다 계산량이 다소 큽니다.
GELU를 직관적으로 보면 "값을 0/1로 딱 자르는" 대신, 입력이 클수록 더 자연스럽게 통과시키는 방식입니다. 그래서 정보가 갑자기 끊기지 않고 부드럽게 흐르며, Transformer 계열에서 안정적인 학습에 잘 맞는 편입니다.
3. SwiGLU
- 두 경로 중 하나를 gate처럼 사용
- 정보를 선택적으로 통과시켜 표현력 향상
- 최근 LLM FFN에서 널리 사용
주의: 파라미터/연산량이 증가합니다.
SwiGLU는 단순히 "새 활성함수 하나"라기보다 gating 구조를 활용해 어떤 정보를 더 강하게 살리고 어떤 정보는 약하게 통과시키는 방식에 가깝습니다. 그래서 대형 언어모델의 FFN에서는 표현력을 올리는 선택지로 자주 등장합니다.
4. 활성함수 비교
| 활성함수 | 수식 | 사용 맥락 |
|---|---|---|
| ReLU | max(0,x) | CNN, 일반 MLP |
| GELU | x*Phi(x) | Transformer |
| SwiGLU | (xW1)*Swish(xW2) | LLM FFN |
5. Transformer에서 위치
x -> Linear -> Activation -> Linear
여기서 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개
- 모든 활성함수가 동일한 역할을 한다고 생각한다
- ReLU가 항상 최선이라고 생각한다
- 활성함수는 단순한 추가 연산이라고 생각한다
- LLM에서도 ReLU가 주로 사용된다고 생각한다
- 활성함수는 성능에 큰 영향을 주지 않는다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- 활성함수는 왜 필요한가?
- ReLU의 장점과 단점은 무엇인가?
- GELU가 Transformer에서 사용되는 이유는 무엇인가?
- SwiGLU는 어떤 구조를 가지는가?
- 활성함수 선택이 모델 성능에 어떤 영향을 미치는가?