본문 바로가기
IT 와 Social 이야기/NLP 자연어처리

[딥러닝을이용한 자연어 처리 입문] 0805 기울기 소실(Gradient Vanishing)과 폭주(Exploding)를 막는 방법

by manga0713 2021. 5. 18.

[ 이미지 출처 : morioh.com - Vanishing and Exploding Gradient Problems ]

 

1. ReLU와 ReLU의 변형들

 

- Leaky ReLU를 사용하면 모든 입력값에 대해서 기울기가 0에 수렴하지 않아 죽은 ReLU 문제를 해결

- 은닉층에서는 ReLU나 Leaky ReLU와 같은 ReLU 함수의 변형들을 사용

 

2. 그래디언트 클리핑(Gradient Clipping)

 

- 기울기 폭주를 막기 위해 임계값을 넘지 않도록 임계치만큼 크기를 감소

 

3. 가중치 초기화(Weight initialization)

 

- 가중치가 초기에 어떤 값을 가졌느냐에 따라서 모델의 훈련 결과가 달라지기도 함. 따라서 가중치 초기화만 적절히 해줘도 기울기 소실 문제과 같은 문제를 완화 시킬 수 있음

  • 세이비어 초기화(Xavier Initialization)
  • He 초기화(He initialization)

4. 배치 정규화(Batch Normalization)

 

- 내부 공변량 변화(Internal Covariate Shift)

  • 공변량 변화는 훈련 데이터의 분포와 테스트 데이터의 분포가 다른 경우를 의미
  • 내부 공변량 변화는 신경망 층 사이에서 발생하는 입력 데이터의 분포 변화를 의미

- 배치 정규화(Batch Normalization)

  • 배치 정규화를 사용하면 시그모이드 함수나 하이퍼볼릭탄젠트 함수를 사용하더라도 기울기 소실 문제가 크게 개선
  • 가중치 초기화에 훨씬 덜 민감
  • 훨씬 큰 학습률을 사용할 수 있어 학습 속도를 개선
  • 미니 배치마다 평균과 표준편차를 계산하여 사용하므로 마치 드롭아웃과 비슷한 효과. 드롭 아웃과 함께 사용하는 것이 좋음
  • 테스트 데이터에 대한 예측 시에 실행 시간이 느려짐. 서비스 속도를 고려하는 관점에서는 배치 정규화가 꼭 필요한지 고민이 필요

- 배치 정규화의 한계

  • 미니 배치 크기에 의존적
  • RNN에 적용하기 어려움

5. 층 정규화(Layer Normalization)

 

- 출처 : [딥러닝을이용한 자연어 처리 입문] 0805 기울기 소실(Gradient Vanishing)과 폭주(Exploding)를 막는 방법