콘텐츠로 이동

가중치 초기화 (Weight Initialization)

핵심 요약: 가중치(Weight)의 시작값이 학습의 성패를 좌우한다. 너무 작으면 신호가 소멸(Vanishing)하고, 너무 크면 폭발(Exploding)한다. Xavier 초기화와 He 초기화가 이 문제를 해결하며, 활성화 함수(Activation Function)에 맞는 초기화 전략을 선택하는 것이 핵심이다.

가중치 초기화(Weight Initialization)는 신경망 학습의 시작점을 결정하는 중요한 요소이다. 잘못된 초기화는 기울기 소실(vanishing gradient) 또는 기울기 폭발(exploding gradient)을 유발하여 학습을 불가능하게 만들 수 있다. 좋은 초기화 전략은 각 층의 활성화 분산을 일정하게 유지하여, 기울기가 안정적으로 흐르도록 보장한다.

일상적 비유: 가중치 초기화는 오케스트라의 튜닝과 같다. 연주를 시작하기 전에 모든 악기가 같은 기준음(A = 440Hz)에 맞추지 않으면, 아무리 뛰어난 연주자들이라도 합주가 불가능하다. 마찬가지로, 신경망의 각 층이 제각각 다른 크기의 값을 가지고 시작하면 학습이라는 “합주”가 제대로 이루어질 수 없다.


가중치 초기화는 오랫동안 “그냥 작은 랜덤 값으로 시작하면 된다”는 경험 법칙에 의존해왔다. 이 관행이 깨진 것은 두 편의 핵심 논문 덕분이다.

  1. Glorot & Bengio (2010) — “Understanding the difficulty of training deep feedforward neural networks”: 이 논문은 깊은 네트워크에서 왜 학습이 어려운지를 활성화 값과 기울기의 분산 관점에서 체계적으로 분석한 최초의 연구이다. 저자들은 각 층의 활성화 분산이 유지되려면 가중치의 분산이 2nin+nout\frac{2}{n_{in} + n_{out}}이어야 한다는 것을 유도했다. 이 “Xavier 초기화”는 sigmoid와 tanh 활성화 함수에서 탁월한 효과를 보였다.

  2. He et al. (2015) — “Delving Deep into Rectifiers”: ReLU가 표준 활성화가 되면서, Xavier 초기화의 한계가 드러났다. ReLU는 음의 입력을 모두 0으로 만들기 때문에 활성화의 분산이 절반으로 줄어든다. He Kaiming 등은 이를 보정하여 분산을 2nin\frac{2}{n_{in}}으로 설정하는 “He 초기화”를 제안했다. 이 간단한 수정 덕분에 매우 깊은 네트워크(예: 152층 ResNet)의 안정적인 학습이 가능해졌다.

이 두 논문의 핵심 통찰은 동일하다: 초기화는 “충분히 작은 랜덤 값”이 아니라, 네트워크 구조와 활성화 함수에 맞는 정밀한 분산 설계가 필요하다.


초기화 방법문제점
모두 0으로모든 뉴런이 동일한 기울기 → 대칭성 문제 (symmetry breaking 실패)
너무 큰 값활성화 폭발 → 기울기 폭발
너무 작은 값활성화 소실 → 기울기 소실

목표: 각 층의 활성화(activation)와 기울기(gradient)의 분산을 적절한 수준으로 유지하는 것이다.

입력 뉴런 100개, 출력 뉴런 50개인 층에서 Xavier 초기화를 적용해 보자.

  • Xavier 초기화의 분산(Variance) 공식: 2nin+nout\frac{2}{n_{in} + n_{out}}

    • nin=100n_{in} = 100 (Fan-in: 입력 뉴런 수), nout=50n_{out} = 50 (Fan-out: 출력 뉴런 수)
    • 분산 = 2100+50=21500.013\frac{2}{100 + 50} = \frac{2}{150} \approx 0.013
    • 표준편차(Standard Deviation) = 0.0130.115\sqrt{0.013} \approx 0.115
    • 즉, 가중치를 N(0,0.013)\mathcal{N}(0, 0.013)에서 랜덤 샘플링한다
  • He 초기화 (ReLU용): 2nin=2100=0.02\frac{2}{n_{in}} = \frac{2}{100} = 0.02

    • Xavier보다 분산이 약간 더 크다 (ReLU가 절반을 0으로 만드는 것을 보정)
  • 잘못된 초기화와 비교:

    • N(0,1.0)\mathcal{N}(0, 1.0): 분산 1.0 → Xavier의 약 77배 → 활성화 폭발
    • N(0,0.0001)\mathcal{N}(0, 0.0001): 분산 0.0001 → Xavier의 약 1/130 → 활성화 소실

Glorot & Bengio (2010)가 제안한 방법으로, sigmoid나 tanh 같은 대칭 활성화 함수에 적합하다.

정규분포: WN(0,2nin+nout)W \sim \mathcal{N}\left(0, \frac{2}{n_{in} + n_{out}}\right)

균등분포: WU(6nin+nout,6nin+nout)W \sim U\left(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}\right)

  • ninn_{in}: 입력 뉴런 수 (Fan-in — 해당 층으로 들어오는 연결 수)
  • noutn_{out}: 출력 뉴런 수 (Fan-out — 해당 층에서 나가는 연결 수)

유도 직관: 순전파와 역전파 모두에서 활성화의 분산이 유지되도록 fan-in과 fan-out의 평균을 사용한다. 이는 선형 활성화 가정 하에서 유도되었다.

한계: ReLU에서는 부적합하다. ReLU가 입력의 절반을 0으로 만들기 때문에, 분산이 절반으로 줄어든다.

He et al. (2015)이 ReLU 활성화 함수를 위해 제안하였다.

WN(0,2nin)W \sim \mathcal{N}\left(0, \frac{2}{n_{in}}\right)

유도 직관: ReLU가 입력의 약 절반을 0으로 만드는 것을 보정하기 위해 분산에 2를 곱한다. fan-out은 사용하지 않고 fan-in만 사용한다.

적합한 활성화: ReLU 및 그 변형 (Leaky ReLU, PReLU 등)

실무에서 가장 널리 사용되는 초기화 방법이다. ReLU가 기본 활성화인 현대 네트워크에서는 He 초기화를 먼저 시도하는 것이 좋다.

4. 직교 초기화 (Orthogonal Initialization)

섹션 제목: “4. 직교 초기화 (Orthogonal Initialization)”

방법: 랜덤 행렬을 생성한 후 SVD(Singular Value Decomposition, 특이값 분해)를 수행하여 직교 행렬(Orthogonal Matrix)을 추출한다. 직교 행렬은 행렬 곱을 거쳐도 벡터의 크기가 변하지 않는 성질이 있다.

장점:

  • 기울기의 노름(norm)이 보존됨
  • 순전파와 역전파 시 정보 손실 최소화

사용처: RNN/LSTM의 순환 가중치(recurrent weights)에 특히 유용하다. 순환 가중치가 직교이면 기울기의 노름이 시간 단계를 거쳐도 유지된다.

기법설명특징
LSUV데이터 기반으로 각 층의 분산을 1로 맞춤데이터 의존적, 안정적
FixupBatchNorm 없이 깊은 ResNet 학습 가능잔차 블록의 마지막 층을 0으로 초기화
Zero Init (잔차 블록)잔차 경로의 마지막 층을 0으로초기에 항등 함수로 시작

활성화 함수에 따른 초기화 전략

섹션 제목: “활성화 함수에 따른 초기화 전략”

활성화 함수에 따른 초기화 전략 다이어그램

초기화에 따른 활성화 분포 변화

섹션 제목: “초기화에 따른 활성화 분포 변화”

잘못된 초기화와 올바른 초기화에 따른 층별 활성화 분포를 직관적으로 이해하자:

분산이 너무 작은 경우 (WN(0,0.01)W \sim \mathcal{N}(0, 0.01)):

  • 층을 지날수록 활성화 값이 0에 수렴
  • 기울기도 함께 소실 → 초기 층 학습 불가

분산이 너무 큰 경우 (WN(0,1.0)W \sim \mathcal{N}(0, 1.0)):

  • 층을 지날수록 활성화 값이 폭발
  • Sigmoid/Tanh의 포화 영역에 갇힘 → 기울기 소실

적절한 초기화 (Xavier/He):

  • 층을 지나도 활성화 분포가 일정하게 유지
  • 기울기가 안정적으로 흐름 → 효율적 학습

상황추천 초기화
CNN + ReLUHe 초기화
MLP + Tanh/SigmoidXavier 초기화
RNN 순환 가중치직교 초기화
TransformerXavier (PyTorch 기본값으로 충분한 경우 多)
ResNet 잔차 블록He 초기화 + 마지막 BN의 γ=0\gamma=0
Fine-tuning사전 학습 가중치 사용 (초기화 불필요)
BatchNorm 없는 깊은 네트워크Fixup 또는 LSUV

ResNet-50을 잘못된 초기화로 훈련했을 때 발산한 사례

섹션 제목: “ResNet-50을 잘못된 초기화로 훈련했을 때 발산한 사례”

가중치 초기화의 중요성은 깊은 네트워크에서 극적으로 드러난다. ResNet-50(50층)을 학습시킬 때, 초기화 전략에 따라 결과가 정상 학습완전한 발산으로 갈린다.

실험 시나리오: ResNet-50을 ImageNet 데이터셋으로 학습시키되, He 초기화 대신 단순한 N(0,0.01)\mathcal{N}(0, 0.01) 정규분포로 초기화한 경우이다. 이 분산(0.0001)은 50층 네트워크에게는 너무 작아서, 순전파 시 활성화 값이 층을 거치며 기하급수적으로 0에 수렴했다. 5번째 잔차 블록을 지나면 활성화 값의 평균이 10810^{-8} 수준으로 떨어졌고, 역전파 시 기울기도 함께 소실되어 초기 층은 전혀 학습되지 않았다.

반대로 N(0,1.0)\mathcal{N}(0, 1.0) 같은 큰 분산으로 초기화하면, 활성화 값이 폭발하여 몇 번의 iteration 만에 NaN(Not a Number)이 발생하고 학습이 완전히 중단되었다.

He 초기화 적용 결과: N(0,2nin)\mathcal{N}(0, \frac{2}{n_{in}})으로 초기화하면, 50층을 거쳐도 활성화 분산이 안정적으로 유지되었고, 표준 학습 스케줄로 ImageNet top-5 정확도 93% 이상을 달성할 수 있었다.

교훈: BatchNorm이 초기화에 대한 민감도를 줄여주지만, 극단적으로 잘못된 초기화는 BatchNorm으로도 구제할 수 없다. 특히 BatchNorm 없는 아키텍처(예: 일부 Transformer 변형)에서는 초기화가 학습 성패를 가르는 결정적 요인이다.


  1. “초기화는 별로 중요하지 않다”: BatchNorm이 초기화에 대한 민감도를 줄여주지만, 초기화가 나쁘면 학습 초기 몇 에폭의 비효율이 생기고, BatchNorm 없는 네트워크에서는 학습 자체가 실패할 수 있다.

  2. “사전 학습 모델에서 초기화가 중요하다”: 전이 학습에서는 사전 학습된 가중치가 초기화 역할을 하므로, 별도의 초기화 전략보다 사전 학습 가중치를 유지하는 것이 중요하다. 새로 추가한 층에만 적절한 초기화가 필요하다.

  3. 모든 층에 같은 초기화를 사용: 활성화 함수가 층마다 다른 경우 (예: 은닉층은 ReLU, 출력층은 sigmoid), 각 층에 맞는 초기화를 사용해야 한다.

  4. 편향(bias) 초기화 무시: 편향은 보통 0으로 초기화하면 충분하다. 그러나 ReLU에서 약간의 양수(0.01)로 초기화하면 dying ReLU를 예방하는 데 도움이 될 수 있다 (논란 있음).


  • 활성화 함수: 활성화 함수에 따라 초기화 전략이 달라짐
  • 역전파: 기울기 흐름의 안정성과 직접 연관
  • 정규화: BatchNorm이 초기화에 대한 민감도를 줄여줌
  • RNN/LSTM/GRU: 직교 초기화의 주요 사용처
  • 전이 학습: 사전 학습 가중치가 초기화를 대체
  • CNN: ResNet에서의 초기화 전략