주제: TS-1 초기화 (Xavier vs He Initialization)
문제 설정
신경망에서 파라미터 초기화가 잘못되면 gradient vanishing, gradient explosion, 학습 지연이 발생할 수 있습니다.
초기화의 목표는 레이어를 지날 때 신호 분산을 안정적으로 유지하는 것입니다.
즉 Xavier와 He를 배우는 이유는 "초기 weight를 예쁘게 뿌리기 위해서"가 아니라, 학습 시작 시점에 신호와 gradient가 너무 커지거나 너무 작아지지 않게 만들기 위해서입니다.
초심자 관점에서는 이렇게 이해하면 됩니다. 초기화가 나쁘면 모델은 출발부터 불안정한 상태가 되고, optimizer가 아무리 좋아도 학습이 느리거나 아예 잘 안 될 수 있습니다.
직관 비유
- 초기화: 학습 시작 위치
- 너무 작은 값: 신호가 점점 사라짐
- 너무 큰 값: 신호가 폭발
1. Xavier Initialization
- n_in: 입력 뉴런 수
- n_out: 출력 뉴런 수
입출력 분산을 균형 있게 유지하도록 설계되었습니다.
주로 tanh/sigmoid 계열에서 사용됩니다.
Xavier는 보통 자비에르 초기화라고 읽고, Glorot initialization이라고도 부릅니다. 핵심은 한 레이어의 입력 쪽 fan-in과 출력 쪽 fan-out을 함께 고려해서, 앞뒤로 신호 크기가 크게 무너지지 않도록 맞추는 것입니다.
2. He Initialization
- n_in: 입력 뉴런 수
ReLU 계열에서 음수 영역이 잘리는 특성을 보정하기 위해 설계되었습니다.
주로 ReLU/LeakyReLU 계열에서 사용됩니다.
He는 보통 허 초기화 또는 헤 초기화라고 부릅니다. ReLU는 음수 절반을 잘라내기 때문에 Xavier보다 분산이 더 빨리 줄 수 있는데, He 초기화는 이 특성을 고려해 더 크게 시작하도록 설계된 방식입니다.
3. Xavier vs He 비교
| 항목 | Xavier | He |
|---|---|---|
| 분산 | 2/(n_in+n_out) | 2/n_in |
| 권장 활성함수 | tanh/sigmoid | ReLU 계열 |
| 핵심 목적 | 입출력 분산 균형 | ReLU 분산 감소 보정 |
즉 둘은 누가 더 최신이냐의 문제가 아니라, 어떤 활성함수를 쓰느냐에 따라 더 잘 맞는 쪽이 달라진다고 이해하는 게 맞습니다. 일반적으로 tanh/sigmoid 쪽이면 Xavier, ReLU 계열이면 He가 더 자연스럽습니다.
4. 초기화가 중요한 이유
forward에서 분산이 계속 줄거나 커지면 backward에서도 gradient가 불안정해집니다.
- 분산 감소 -> vanishing gradient
- 분산 증가 -> exploding gradient
즉 좋은 초기화는 "학습을 대신 해주는 기술"이 아니라, 학습이 제대로 시작될 수 있게 바닥을 평평하게 다져 주는 기술입니다. 시작부터 activation이 너무 작거나 크면, 역전파도 안정적으로 흐르지 못합니다.
5. Dense layer에서는 무엇을 쓰나
Dense layer라고 해서 완전히 별도의 초기화 규칙이 있는 것은 아닙니다. 보통은 그 Dense layer 뒤에 어떤 활성함수가 오느냐에 따라 Xavier 또는 He를 고릅니다.
- Dense + tanh/sigmoid -> Xavier가 잘 맞는 경우가 많음
- Dense + ReLU/LeakyReLU -> He가 더 잘 맞는 경우가 많음
즉 "Dense initializer"의 핵심은 층 이름보다 activation 특성입니다. 다만 프레임워크 기본값으로는 Dense layer에 Xavier(Glorot)가 들어가 있는 경우도 많아서, 이를 기본 initializer처럼 자주 보게 됩니다.
6. 코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
| Xavier | torch.nn.init.xavier_uniform_() | tanh/sigmoid 계열 |
| He | torch.nn.init.kaiming_uniform_() | ReLU 계열 |
| fan | fan_in, fan_out | 입력/출력 뉴런 수 |
읽는 법도 정리해두면 좋습니다. Xavier는 자비에르, He는 허/헤, 그리고 PyTorch에서는 He 초기화를 보통 kaiming_uniform_ 또는 kaiming_normal_ 이름으로 만납니다.
7. 자주 하는 오해 5개
- 초기화는 랜덤이면 충분하다고 생각한다
- Xavier와 He의 목적이 같다고 생각한다
- 초기화는 학습 결과에 영향이 작다고 생각한다
- 활성함수와 무관하게 초기화를 고를 수 있다고 생각한다
- 초기화 문제는 매우 깊은 모델에서만 생긴다고 생각한다
8. 체크리스트 (스스로 설명 가능해야 하는 질문)
- 초기화가 학습 안정성에 중요한 이유는 무엇인가?
- Xavier 분산 공식은 무엇인가?
- He 초기화가 ReLU에서 필요한 이유는 무엇인가?
- Xavier와 He 초기화의 핵심 차이는 무엇인가?
- Dense layer에서 Xavier와 He를 어떤 기준으로 고르는가?
- 잘못된 초기화가 만드는 대표 문제는 무엇인가?