주제: TS-1 초기화 (Xavier vs He Initialization)

분류: foundations

타입: concept

난이도: 입문

선수지식: 있음 - 역전파, gradient, 활성함수

문제 설정

신경망에서 파라미터 초기화가 잘못되면 gradient vanishing, gradient explosion, 학습 지연이 발생할 수 있습니다.

초기화의 목표는 레이어를 지날 때 신호 분산을 안정적으로 유지하는 것입니다.

즉 Xavier와 He를 배우는 이유는 "초기 weight를 예쁘게 뿌리기 위해서"가 아니라, 학습 시작 시점에 신호와 gradient가 너무 커지거나 너무 작아지지 않게 만들기 위해서입니다.

초심자 관점에서는 이렇게 이해하면 됩니다. 초기화가 나쁘면 모델은 출발부터 불안정한 상태가 되고, optimizer가 아무리 좋아도 학습이 느리거나 아예 잘 안 될 수 있습니다.

직관 비유

1. Xavier Initialization

Var(W)=2/(nin+nout)

입출력 분산을 균형 있게 유지하도록 설계되었습니다.

주로 tanh/sigmoid 계열에서 사용됩니다.

Xavier는 보통 자비에르 초기화라고 읽고, Glorot initialization이라고도 부릅니다. 핵심은 한 레이어의 입력 쪽 fan-in과 출력 쪽 fan-out을 함께 고려해서, 앞뒤로 신호 크기가 크게 무너지지 않도록 맞추는 것입니다.

2. He Initialization

Var(W)=2/nin

ReLU 계열에서 음수 영역이 잘리는 특성을 보정하기 위해 설계되었습니다.

주로 ReLU/LeakyReLU 계열에서 사용됩니다.

He는 보통 허 초기화 또는 헤 초기화라고 부릅니다. ReLU는 음수 절반을 잘라내기 때문에 Xavier보다 분산이 더 빨리 줄 수 있는데, He 초기화는 이 특성을 고려해 더 크게 시작하도록 설계된 방식입니다.

3. Xavier vs He 비교

항목XavierHe
분산2/(n_in+n_out)2/n_in
권장 활성함수tanh/sigmoidReLU 계열
핵심 목적입출력 분산 균형ReLU 분산 감소 보정

즉 둘은 누가 더 최신이냐의 문제가 아니라, 어떤 활성함수를 쓰느냐에 따라 더 잘 맞는 쪽이 달라진다고 이해하는 게 맞습니다. 일반적으로 tanh/sigmoid 쪽이면 Xavier, ReLU 계열이면 He가 더 자연스럽습니다.

4. 초기화가 중요한 이유

forward에서 분산이 계속 줄거나 커지면 backward에서도 gradient가 불안정해집니다.

즉 좋은 초기화는 "학습을 대신 해주는 기술"이 아니라, 학습이 제대로 시작될 수 있게 바닥을 평평하게 다져 주는 기술입니다. 시작부터 activation이 너무 작거나 크면, 역전파도 안정적으로 흐르지 못합니다.

5. Dense layer에서는 무엇을 쓰나

Dense layer라고 해서 완전히 별도의 초기화 규칙이 있는 것은 아닙니다. 보통은 그 Dense layer 뒤에 어떤 활성함수가 오느냐에 따라 Xavier 또는 He를 고릅니다.

즉 "Dense initializer"의 핵심은 층 이름보다 activation 특성입니다. 다만 프레임워크 기본값으로는 Dense layer에 Xavier(Glorot)가 들어가 있는 경우도 많아서, 이를 기본 initializer처럼 자주 보게 됩니다.

6. 코드-수식 연결

수식PyTorch 코드설명
Xaviertorch.nn.init.xavier_uniform_()tanh/sigmoid 계열
Hetorch.nn.init.kaiming_uniform_()ReLU 계열
fanfan_in, fan_out입력/출력 뉴런 수

읽는 법도 정리해두면 좋습니다. Xavier는 자비에르, He는 허/헤, 그리고 PyTorch에서는 He 초기화를 보통 kaiming_uniform_ 또는 kaiming_normal_ 이름으로 만납니다.

7. 자주 하는 오해 5개

8. 체크리스트 (스스로 설명 가능해야 하는 질문)