주제: 1-7 정규화와 학습 안정화
문제 설정
신경망이 깊어지면 gradient explosion, gradient vanishing, 학습 불안정 문제가 자주 발생합니다.
대표 대응 방법은 입력 데이터 표준화, Layer Normalization, gradient clipping입니다.
직관 비유
- 데이터 분포: 신호의 크기
- 정규화: 신호의 스케일을 일정하게 유지
- gradient 문제: 신호가 너무 작거나 너무 커짐
1. 데이터 표준화 (Standardization)
기호 의미
- x: 원본 데이터
- mu: 평균
- sigma: 표준편차
왜 필요한가
입력 스케일을 맞추면 학습이 더 안정적이고 빠르게 진행됩니다.
주의점
학습 데이터에서 계산한 평균/표준편차를 검증·테스트에도 동일하게 사용해야 합니다.
2. Layer Normalization
기호 의미
- x: 레이어 출력 벡터
- mu: 평균
- sigma^2: 분산
- epsilon: 수치 안정성 상수
왜 필요한가
레이어 출력 분포를 안정적으로 유지해 학습을 안정화합니다.
주의점
BatchNorm과 달리 LayerNorm은 배치 크기에 덜 민감합니다.
3. Gradient Vanishing
역전파에서 gradient가 매우 작아져 초기 레이어가 거의 업데이트되지 않는 문제입니다.
대응 방법
- ReLU 계열 활성함수 사용
- Residual connection
- LayerNorm
4. Gradient Explosion
gradient 값이 너무 커져 파라미터 업데이트가 불안정해지고 학습이 발산할 수 있는 문제입니다.
대응 방법
- gradient clipping
- 적절한 learning rate
- 정규화 기법
5. Gradient Clipping
g <- g * (tau / ||g||) if ||g|| > tau
기호 의미
- g: gradient
- tau: 최대 gradient 크기
왜 필요한가
gradient explosion을 방지해 학습 안정성을 높입니다.
주의점
너무 강한 clipping은 학습 속도를 낮추거나 underfitting을 유발할 수 있습니다.
코드-수식 연결
| 수식 | PyTorch 코드 | 설명 |
|---|---|---|
| x' = (x-mu)/sigma | sklearn.preprocessing.StandardScaler | 데이터 표준화 |
| LayerNorm | torch.nn.LayerNorm() | 레이어 정규화 |
| gradient clipping | torch.nn.utils.clip_grad_norm_() | gradient 제한 |
자주 하는 오해 5개
- 정규화는 데이터 전처리만 의미한다고 생각한다
- LayerNorm과 BatchNorm이 동일한 역할이라고 생각한다
- gradient 문제는 깊은 네트워크에서만 발생한다고 생각한다
- gradient clipping은 항상 필요하다고 생각한다
- 정규화가 항상 성능을 높인다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- 데이터 표준화는 왜 필요한가?
- LayerNorm은 어떤 문제를 해결하는가?
- gradient vanishing은 왜 발생하는가?
- gradient explosion은 어떻게 대응하는가?
- LayerNorm과 BatchNorm의 차이는 무엇인가?