본문 바로가기
AI 및 Data Analysis/Deep Learning

[Weight Initialization] Concept

by doraemin_dev 2025. 4. 16.

 

배경: 우리는 왜 weight 초기화를 고민할까?

딥러닝에서 학습은 다음과 같은 계산을 반복합니다:

 

혹은 벡터 형태로:

  • 여기서 x입력값
  • w는 학습해야 하는 가중치
  • y는 각 layer에서 나오는 출력값

목표: 학습 초기에 출력 y가 너무 크지도, 너무 작지도 않게 만들기

왜냐하면:

  • 너무 크면 → activation 함수가 saturation zone으로 진입 → gradient 사라짐 (학습 안 됨)
  • 너무 작으면 → 정보가 소멸됨 → gradient도 작아짐 → 역시 학습 잘 안 됨

→ 그래서 출력의 분산이 너무 커지거나 작아지는 걸 막아야 함


“입력과 출력의 분산이 비슷했으면 좋겠다”의 의미

이건 아래처럼 생각하면 돼요:

"입력값 x가 다양한 값을 가지고 있다면,
출력값 y그 다양성을 어느 정도 반영해야
다음 layer에서 정보가 전달된다!"

즉,

  • Var(y)≈Var(x)
    이 되도록 weight를 설정하면, 정보가 잘 흘러간다는 의미예요.

직관적 비유

⚖️ "모래 1kg을 10개의 그릇에 나눌 때는 1개당 100g씩 넣고,
100개의 그릇에 나눌 땐 10g씩 넣어야 공평하죠?"

  • 마찬가지로, 뉴런이 100개면 각각의 weight가 작은 영향을 줘야 함
  • 그래야 전체 합 y=wT x과도하게 커지지 않음

그런데 왜 weight w 분산을 1/n으로 설정할까?

확률적 관점에서 다음처럼 유도돼요:

4. 이게 Var(x)랑 같았으면 좋겠으면?

 

 

초기화 방식 추천 상황 분산 설정
Xavier (Glorot) sigmoid, tanh 1/n 또는  2/(n_in + n_out)
He ReLU, LeakyReLU 2/(n_in)

layer마다 뉴런 수가 다르면, 매 layer마다 바로 전 layer의 뉴런 수에 맞춰 weight의 분산을 다르게 설정

딥러닝에서는 각 layer가 독립적으로 weight를 초기화하고,
이때 자기 직전 layer의 뉴런 수(= 입력 차원 수)에 따라 분산을 조절합니다.

 

예시 구조 :

Input (size=784)
↓
Hidden Layer 1 (size=512)
↓
Hidden Layer 2 (size=128)
↓
Output (size=10)

 

각 layer별 weight 초기화 시 Var(w)설정


Layer weight shape n_in Xavier 초기화 시 Var(w)
Input → H1 (512, 784) 784 1/784
H1 → H2 (128, 512) 512 1/512
H2 → Output (10, 128) 128 1/128

✔️ 각 layer는 자기 직전 layer로부터 입력을 받기 때문에,
입력 차원이 클수록 weight의 영향력을 줄여야
출력값의 분산이 과도하게 커지거나 작아지는 걸 막을 수 있어요.

즉,

"정보의 흐름을 균형 있게 유지하려면, 각 layer는 자기 입력에 맞게 weight를 조절해서 분산을 통제해야 한다"


+ Binary classification은 어차피 y가 0 또는 1인데? 분산 비교가 왜 필요해?

네, 출력값 y 자체는 sigmoid나 softmax를 거치면 확률이 되고 → 0 또는 1에 가까운 값으로 바뀌죠.
하지만 지금 얘기하는 y그 전 단계, 즉:

→ activation 함수에 들어가기 전 단계의 선형 조합 결과를 말합니다.
zz가 너무 크거나 작으면 → sigmoid/tanh가 saturation 영역으로 들어가 gradient가 죽어버립니다.