딥러닝에서 네트워크 파라미터 초기화는 학습 성능에 큰 영향을 미치는 핵심 요소입니다. 특히, He 초기화(He Initialization)는 ReLU 활성화 함수를 사용할 때 매우 효과적인 초기화 방법입니다.
1. 왜 파라미터 초기화가 중요한가요?
딥러닝 모델에서 학습은 파라미터(W, b)를 업데이트하면서 손실을 줄여가는 과정입니다.
이때, 파라미터의 초기값이 잘못 설정되면 다음과 같은 문제가 생깁니다:
- Gradient Vanishing (기울기 소실): 역전파 시, 기울기가 0에 가까워져 학습이 멈춤
- Gradient Exploding (기울기 폭주): 기울기가 너무 커져서 파라미터가 발산
- 비효율적인 수렴: 학습 속도가 느려짐
즉, 초기화는 학습을 시작하는 기반이며, 빠르고 안정적인 학습을 위한 기본 조건입니다.
2. 대표적인 초기화 방법
2.1. 무작위 초기화 (Random Initialization)
너무 단순해서 실제로는 잘 쓰이지 않음. 예를 들어 W ~ N(0, 1)
처럼.
2.2. Xavier 초기화 (Glorot Initialization)
- 주로 sigmoid, tanh 등 양쪽으로 출력이 분포되는 함수에 사용
- 입력과 출력의 개수를 모두 고려해서 초기화
W∼N(0,nin1)또는N(0,nin+nout2)
3. He 초기화 (He Initialization)
3.1. 언제 사용하나요?
- **ReLU 계열 활성화 함수 (ReLU, LeakyReLU 등)**를 쓸 때 사용
- ReLU는 음수 출력을 0으로 만들기 때문에, Xavier보다 더 큰 분산이 필요
3.2. 수식:
W∼N(0,nin2)
또는
W∼Uniform(−nin6,nin6)
n_in
: 현재 layer로 들어오는 입력 노드 개수
3.3. 왜 좋은가요?
- ReLU 함수는 입력의 절반을 0으로 만들어버리기 때문에,
출력의 분산을 일정하게 유지하려면 더 큰 초기값 분산이 필요함
- He 초기화는 이 점을 수학적으로 반영해서 학습 안정성과 속도를 높여줍니다
4. 실전 예시 (PyTorch 기준):
import torch.nn as nn
import torch.nn.init as init
layer = nn.Linear(128, 64)
init.kaiming_normal_(layer.weight, nonlinearity='relu')
또는 Keras에서는 이렇게:
from tensorflow.keras.layers import Dense
from tensorflow.keras.initializers import HeNormal
Dense(64, kernel_initializer=HeNormal())
5. 요약 정리
초기화 방법 | 주로 사용하는 활성화 함수 | 수식 | 특징 |
---|
Random | 없음 | N(0, 1) 등 | 비효율적, 비추천 |
Xavier | tanh, sigmoid | N(0, 1 / n) | 평균적 분산 유지 |
He | ReLU 계열 | N(0, 2 / n) | ReLU에 최적, 널리 사용 |