AI 입문 시리즈
2편에서 미분·적분·Dense Layer를 통해 학습의 핵심을 정리했다.
이번 3편에서는 신경망의 비선형성을 부여하는 활성화 함수(Activation Functions)를 본격적으로 알아보겠다.
구체적으로 Sigmoid, Tanh, ReLU, GELU를 정리해 볼거다.
목표는 TR(트랜스포머)를 겨냥했지만, 그 바닥을 이루는 초석를 확실히 잡는 것이다.
0. 이번 편의 핵심
- 활성화 함수 = 비선형성의 열쇠: 선형만으로는 복잡한 패턴 학습 불가.
- 각 함수의 출력 범위·미분·문제점을 알면 왜 특정 모델에서 특정 활성화가 선택되는지 이해.
- Sigmoid/Tanh: 초기 신경망의 고전, 하지만 기울기 소실 문제.
- ReLU: 현대의 기본, 단순·빠르지만 죽은 뉴런 문제.
- GELU: TR 시대의 스타, 매끄럽고 성능 우위.
- 선택 기준: 깊이·데이터·태스크에 따라 다르다. 실험과 직관으로 익히자.
- 적분 관점에서 확률·누적·스무딩을 연결해 보자.
1. 활성화 함수가 왜 필요한가
1.1 선형성의 한계
Dense Layer의 선형 부분만 쌓으면(2편 참조):
\[\mathbf{y} = W_n ( \cdots (W_2 (W_1 \mathbf{x} + \mathbf{b}_1) + \mathbf{b}_2) \cdots ) + \mathbf{b}_n = W_{\text{eff}} \mathbf{x} + \mathbf{b}_{\text{eff}}\]즉, 전체가 하나의 선형 변환으로 축소된다.
복잡한 비선형 결정 경계(예: XOR 문제)를 학습할 수 없다.
-
해결: 각 층 사이에 비선형 함수 $f$를 끼워넣는다.
\[\mathbf{h}_1 = f(W_1 \mathbf{x} + \mathbf{b}_1), \quad \mathbf{y} = f(W_2 \mathbf{h}_1 + \mathbf{b}_2)\]
이제 합성이 비선형이 되어 보편 근사 정리(Universal Approximation Theorem)에 따라 임의 함수를 근사할 수 있다.
1.2 미분 가능성의 중요
학습은 역전파(2편)가 핵심이므로, 활성화 $f$는 대부분 미분 가능해야 한다. (예외: ReLU는 0에서 subgradient 사용)
- 기울기 전달: $f’(z)$가 너무 작으면(소실) 또는 폭주하면 학습이 어려워진다.
1.3 그래프와 출력 범위의 역할
- 출력 범위: 확률(0~1) 해석 vs 중심 0(평균화 유리).
- 그래프 모양: 매끄러움 vs 날카로움 → 수렴 속도·안정성 영향.
2. Sigmoid — 확률 해석의 고전
2.1 정의와 그래프
\[\sigma(z) = \frac{1}{1 + e^{-z}}\]- 출력: (0, 1)
- 그래프: S자 곡선, z→∞ 시 1, z→-∞ 시 0, z=0 시 0.5.
직관: 로지스틱 함수로, 이진 확률 모델링에 적합(예: 로지스틱 회귀).
2.2 미분
\[\sigma'(z) = \sigma(z) (1 - \sigma(z))\]- 최대값: z=0에서 0.25.
-
문제: z 클 때 미분 → 0 (기울기 소실, vanishing gradient).
2.3 장단점
- 장점: 매끄러움, 출력이 확률처럼 해석 가능.
- 단점:
- 기울기 소실: 깊은 네트워크에서 초기 층 기울기 0 → 학습 정지.
- 출력 비중심: 평균 ~0.5 → 다음 층 입력이 양수 편향 → 지그재그 수렴.
- exp 계산 비용.
2.4 사용 사례
- 출력층: 이진 분류 (소프트맥스 대신).
- 초기 RNN/LSTM 게이트.
- 현대: ReLU 계열로 대체됨, 하지만 이해를 위한 기본.
3. Tanh — Sigmoid의 스케일 버전
3.1 정의와 그래프
\[\tanh(z) = \frac{e^z - e^{-z}}{e^z + e^{-z}} = 2\sigma(2z) - 1\]- 출력: (-1, 1)
- 그래프: S자, z=0 시 0, 대칭적.
직관: Sigmoid를 (-1,1)로 스케일/시프트. 중심 0으로 수렴 유리.
3.2 미분
\[\tanh'(z) = 1 - \tanh^2(z)\]- 최대값: z=0에서 1.
-
문제: z 클 때 미분 → 0 (기울기 소실).
3.3 장단점
- 장점: 중심 0 → 데이터 중앙화, Sigmoid보다 기울기 강함(최대 1 vs 0.25).
- 단점: 여전히 기울기 소실, exp 비용.
3.4 사용 사례
- 초기 신경망 히든 레이어.
- RNN/LSTM (게이트 제외).
- 현대: ReLU로 대체, 하지만 음수 허용이 필요한 경우.
4. ReLU — 현대 딥러닝의 기본
4.1 정의와 그래프
\[\text{ReLU}(z) = \max(0, z)\]- 출력: [0, ∞)
- 그래프: z<0 시 0, z≥0 시 z (직선).
직관: 죽이기와 통과. 음수 입력 무시 → 희소성(sparsity) 부여.
4.2 미분
\[\text{ReLU}'(z) = \begin{cases} 0 & z < 0 \\ 1 & z > 0 \end{cases}\](z=0은 0 또는 1로 정의, 실전 subgradient 0).
- 문제: z<0 시 기울기 0 (죽은 ReLU, dying ReLU).
4.3 장단점
- 장점:
- 계산 단순 (no exp), 빠름.
- 기울기 소실 적음 (양수 영역 1).
- 희소 활성화 → 효율·과적합 완화.
- 단점:
- 죽은 뉴런: 학습 중 일부 뉴런 영원히 0 → 용량 손실.
- 출력 비중심: 평균 >0 → 편향.
4.4 사용 사례
- CNN 히든 레이어 (AlexNet부터 표준).
- 대부분의 딥 네트워크 기본.
- 변형: Leaky ReLU (음수에 작은 기울기 α=0.01).
5. GELU — TR의 매끄러운 선택
5.1 정의와 그래프
\[\text{GELU}(z) = z \cdot \Phi(z)\]여기서 Φ(z)는 표준정규 누적분포함수(CDF)이다:
\[\Phi(z) = \frac{1}{2} \left(1 + erf\left(\frac{z}{\sqrt{2}}\right)\right)\]근사식 (실전 구현):
\[\text{GELU}(z) \approx 0.5 z \left(1 + \tanh\left(\sqrt{\frac{2}{\pi}} \left(z + 0.044715 z^3\right)\right)\right)\]- 출력: (-∞, ∞), but 음수 약화.
- 그래프: ReLU 비슷 but 매끄럽고 음수 약간 허용.
직관: Gaussian Error Linear Unit. 확률적으로 게이팅 (z * 확률).
5.2 미분
\[\text{GELU}'(z) = \Phi(z) + z \cdot \phi(z)\]ϕ(z)는 정규 밀도: ϕ(z) = (1/√(2π)) exp(-z²/2).
- 매끄러움: 모든 점에서 미분 가능, 기울기 소실 적음.
5.3 장단점
- 장점:
- ReLU의 희소성 + Sigmoid/Tanh의 매끄러움.
- 음수 약간 허용 → 죽은 뉴런 적음.
- 실증적 우위: TR(BERT/GPT)에서 성능 ↑.
- 단점:
- 계산 비용 (erf/tanh), but GPU 최적화로 무시.
5.4 사용 사례
- Transformer 모델 (MLP 부분).
- 현대 대형 모델 기본 (GELU/SiLU 등).
6. 숫자로 따라가는 미니 예제 (손으로 풀어보기)
설정: 단일 입력 z= [ -2, -1, 0, 1, 2 ], 각 활성화 적용 후 미분 계산.
6.1 Sigmoid
σ(z): [0.119, 0.269, 0.5, 0.731, 0.881]
σ’(z): [0.105, 0.197, 0.25, 0.197, 0.105]
6.2 Tanh
tanh(z): [-0.964, -0.762, 0, 0.762, 0.964]
tanh’(z): [0.071, 0.420, 1, 0.420, 0.071]
6.3 ReLU
ReLU(z): [0, 0, 0, 1, 2]
ReLU’(z): [0, 0, 0/1, 1, 1] (0에서 0 가정)
6.4 GELU (근사)
GELU(z) ≈ [-0.046, -0.159, 0, 0.841, 1.954]
GELU’(z) ≈ [0.023, 0.158, 0.5, 0.842, 0.977]
직관: ReLU는 음수 0, GELU는 약간 누출. 미분에서 Sigmoid/Tanh는 양끝 0, ReLU/GELU는 양수 1에 가까움.
6.5 역전파 시뮬 (간단 손실 L = (y - target)^2, target=1)
$y = f(z), dL/dy = 2(y-1), dL/dz = dL/dy * f’(z)$
$z=2$ 예: $ReLU y=2, dL/dy=2(2-1)=2, dL/dz=2*1=2$
Sigmoid y=0.881, $dL/dy=2(0.881-1)=-0.238$, $dL/dz=-0.238*0.105≈-0.025$ (작음)
소실 예시: Sigmoid에서 기울기 약화.
7. 그래프 비교와 시각화 팁
- Sigmoid/Tanh: S자, 대칭/비대칭.
- ReLU: 꺾인 직선, GELU: 부드러운 ReLU.
- 시각화: Matplotlib로 플롯 → 범위 [-5,5], f와 f’ 함께.
직관: 깊은 층에서 f’ 연곱(체인룰)이 1에 가까워야 기울기 유지.
8. 기울기 소실/폭주 — 문제와 해결
8.1 소실 (Vanishing)
Sigmoid/Tanh: | z | >5 시 f’≈0 → 체인룰로 초기 층 기울기 0. |
해결: ReLU/GELU, 초기화(He/Xavier), 정규화(BN/LN).
8.2 폭주 (Exploding)
큰 초기화나 불안정 → 기울기 ∞.
해결: Gradient Clipping, 적절 학습률.
8.3 죽은 ReLU
학습 중 뉴런이 항상 음수 → 0 출력.
해결: Leaky ReLU (αz for z<0), PReLU(α 학습), ELU.
9. 적분의 관점 — 확률과 스무딩
적분(2편)은 누적. $GELU = z Φ(z)$에서 $Φ$는 적분(누적 확률).
- 직관: GELU는 z를 “확률적으로 통과” (dropout-like).
- 규제: 활성화의 누적 효과로 과적합 완화.
- 기댓값: $E[f(z)]$로 모델 안정성 해석.
10. 초기화와 활성화의 궁합
- Xavier (Glorot): $Sigmoid/Tanh$용, 분산 $1/fan_avg$.
- He: $ReLU/GELU$용, 분산 $2/fan_in$ (음수 절반 고려).
직관: 층 통과 시 분산 유지 → 소실/폭주 방지.
11. 활성화를 코드로 확인해보기 (NumPy 의사코드)
import numpy as np
from scipy.special import erf # GELU용
def sigmoid(z):
return 1 / (1 + np.exp(-z))
def dsigmoid(z):
s = sigmoid(z)
return s * (1 - s)
def tanh(z):
return np.tanh(z)
def dtanh(z):
return 1 - np.tanh(z)**2
def relu(z):
return np.maximum(0, z)
def drelu(z):
return (z > 0).astype(float)
def gelu(z):
return 0.5 * z * (1 + erf(z / np.sqrt(2)))
def dgelu(z):
phi = 1 / np.sqrt(2 * np.pi) * np.exp(-0.5 * z**2)
Phi = 0.5 * (1 + erf(z / np.sqrt(2)))
return Phi + z * phi
# 테스트
z = np.array([-2, -1, 0, 1, 2])
print("Sigmoid:", sigmoid(z), dsigmoid(z))
print("Tanh:", tanh(z), dtanh(z))
print("ReLU:", relu(z), drelu(z))
print("GELU:", gelu(z), dgelu(z))
이 코드로 각 함수의 출력/미분을 숫자로 확인. 실전 프레임워크는 내장.
12. 자주 헷갈리는 포인트 정리
- 출력 범위 영향: Sigmoid (0,1) → 게이트, ReLU [0,∞) → 양수 특징.
- 미분 at 0: ReLU 불연속 but 실전 OK.
- 수치 안정: exp 오버플로 → 클리핑 or 근사.
- 변형 선택: 태스크별 (이미지: ReLU, NLP: GELU).
13. 활성화 쌓기와 네트워크 동역학
다층: h = f(W x + b), y = f(V h + c)
역전파: dL/dh = dL/dy * f’(V h + c) * V, then dL/dx via f’(W x + b).
직관: f’가 체인에서 곱셈 → 안정적 f’ 필요.
14. 실무 감각: 선택과 튜닝
- 선택 기준: CNN → ReLU, RNN → Tanh, TR → GELU.
- 실험: Ablation study (활성화 바꿔 성능 비교).
- 디버깅: 히스토그램으로 활성화 분포 모니터 → 소실 시 변경.
- 트렌드: Swish/SiLU (z sigmoid(z)), Mish 등 신흥.
15. 활성화와 TR(트랜스포머)의 연결고리 미리보기
- TR MLP: 두 Dense 사이 GELU (희소 + 매끄러움).
- 어텐션: 소프트맥스 (Sigmoid-like).
- 왜 GELU? 대형 모델에서 미세한 누적 효과로 성능 ↑.
이번 편 요약(한 장으로)
- 활성화 = 비선형 부여: 선형 한계 극복.
- Sigmoid: σ(z)=1/(1+e^{-z}), 범위 (0,1), 소실 문제.
- Tanh: tanh(z), 범위 (-1,1), 중심 0 but 소실.
- ReLU: max(0,z), 빠름 but 죽은 뉴런.
- GELU: z Φ(z), 매끄럽고 TR 표준.
- 미분: 체인룰 전달 핵심, 소실/폭주 주의.
- 적분: GELU의 확률 누적 직관.
- 실전: 초기화·정규화와 함께, 태스크별 선택.
결론
이번 편에서는 활성화 함수를 Sigmoid부터 GELU까지 비교하며 왜 각자가 언제 유리한지 해부하였다. 이 감각이 생기면, 네트워크 설계가 훨씬 자유로워진다.
다음 4편에서는 정규화(Normalization)를 다룬다. BatchNorm/LayerNorm/GroupNorm을 수식·직관·TR 적용으로 설명하고, 왜 대형 모델에서 필수인지 알아보자.