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)를 막는 방법
'IT 와 Social 이야기 > NLP 자연어처리' 카테고리의 다른 글
[딥러닝을이용한 자연어 처리 입문] 0807 케라스의 함수형 API(Keras Functional API) (0) | 2021.05.19 |
---|---|
[딥러닝을이용한 자연어 처리 입문] 0806 케라스(Keras) 훑어보기 (0) | 2021.05.18 |
[딥러닝을이용한 자연어 처리 입문] 0804 과적합(Overfitting)을 막는 방법들 (0) | 2021.05.18 |
[딥러닝을이용한 자연어 처리 입문] 0803 딥 러닝의 학습 방법 (0) | 2021.05.18 |
[딥러닝을이용한 자연어 처리 입문] 0802 인공 신경망(Artificial Neural Network) 훑어보기 (0) | 2021.05.18 |