🎯 왜 초기화가 중요한가?
딥러닝 모델은 학습을 시작하기 전 모든 가중치를 무작위로 초기화합니다.
이 시작점이 너무 작거나 너무 크면 학습이 비효율적이거나 아예 실패할 수 있습니다.
똑같은 모델, 똑같은 데이터라도
가중치 초기값에 따라 성능이 크게 달라지는 경우가 많습니다.
⚠️ 잘못된 초기화가 초래하는 문제
- Vanishing Gradient (기울기 소실)
- 작은 값으로 초기화하면, 역전파 시 gradient가 계속 작아져 → 학습 불가
- Exploding Gradient (기울기 폭발)
- 너무 큰 값으로 초기화하면 gradient가 점점 커져 → 발산
- Symmetry Breaking 실패
- 모든 가중치를 0 또는 같은 값으로 초기화하면,
각 뉴런이 같은 학습을 반복 → 비효율적
- 모든 가중치를 0 또는 같은 값으로 초기화하면,
⚙️ 주요 초기화 전략
초기화 방법설명사용 시점
Random Normal / Uniform | 기본적인 무작위 값 | 단순 MLP 등 |
Xavier (Glorot) Initialization | 입력과 출력의 수에 기반한 분산 제어 | Sigmoid, Tanh 계열 |
He Initialization | ReLU 계열 활성 함수에 최적화 | CNN, DNN 대부분 |
LeCun Initialization | SELU 등에 적합 | 특수 비선형 모델 |
Orthogonal Initialization | 직교 행렬 기반 → 폭발/소실 방지 | RNN, GAN |
🧪 실습 예시 (PyTorch)
import torch
import torch.nn as nn
import torch.nn.functional as F
# 간단한 MLP 모델 정의
class SimpleMLP(nn.Module):
def __init__(self):
super(SimpleMLP, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 128)
self.fc3 = nn.Linear(128, 10)
self.init_weights()
def init_weights(self):
# He Initialization (ReLU에 적합)
nn.init.kaiming_normal_(self.fc1.weight, nonlinearity='relu')
nn.init.kaiming_normal_(self.fc2.weight, nonlinearity='relu')
nn.init.kaiming_normal_(self.fc3.weight, nonlinearity='relu')
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
return self.fc3(x)
model = SimpleMLP()
print(model)
import torch.nn as nn
import torch.nn.functional as F
# 간단한 MLP 모델 정의
class SimpleMLP(nn.Module):
def __init__(self):
super(SimpleMLP, self).__init__()
self.fc1 = nn.Linear(784, 256)
self.fc2 = nn.Linear(256, 128)
self.fc3 = nn.Linear(128, 10)
self.init_weights()
def init_weights(self):
# He Initialization (ReLU에 적합)
nn.init.kaiming_normal_(self.fc1.weight, nonlinearity='relu')
nn.init.kaiming_normal_(self.fc2.weight, nonlinearity='relu')
nn.init.kaiming_normal_(self.fc3.weight, nonlinearity='relu')
def forward(self, x):
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
return self.fc3(x)
model = SimpleMLP()
print(model)
✅ 위 예시에서는 kaiming_normal_을 사용해 ReLU에 적합한 He 초기화를 적용했습니다.
초기화를 바꿔가며 성능 비교 실험을 해보는 것도 실전에서 매우 중요합니다.
📌 정리 포인트
- 가중치 초기화는 모델의 학습 시작 지점을 결정함
- 적절하지 않은 초기화는 학습 자체를 망칠 수 있음
- 활성 함수와 모델 구조에 따라 맞는 초기화 전략을 선택해야 함
- 실전에서는 대부분 He (ReLU용) 또는 Xavier (Tanh/Sigmoid용)를 사용
'AI > AI Info' 카테고리의 다른 글
Residual Connection: 깊은 네트워크도 뚫고 가는 잔차의 힘 (0) | 2025.06.24 |
---|---|
Gradient Clipping: 기울기 폭주를 막는 딥러닝의 안전장치 (0) | 2025.06.23 |
Activation Function: 딥러닝을 ‘딥’하게 만드는 비선형의 힘 (0) | 2025.06.22 |
Batch Normalization이란? 딥러닝 학습의 가속 페달 (0) | 2025.06.22 |
Regularization이란? 모델이 ‘적당히’ 똑똑해지게 만드는 기술 (0) | 2025.06.17 |