!! Natation
지금까지 gradient vanishing을 풀기 위해 한 일
1) 활성함수를 시그모이드 -> ReLU로 교체
2) 초기화를 잘 하기
그렇다면 Gradient exploding 문제는? learning rate를 낮게 조절하면 된다. (주로 0.001, 0.01)
하지만 낮은 learning rate에 의해 학습 수렴이 매우 느리다.
!! 배치정규화 (Batch Normalization)
- 다양한 초기화 전략은 활성함수의 출력값을 정규분포로 만들기 위해 한 작업
- 그럼 그냥 출력값을 정규화 하면 되지 않을까?
+ 배치 단위로 정규화를 진행 (계산이 간편함)
+ 각각 차원을 독립으로 보고, 차원마다 정규화를 따로 진행
* N은 배치사이즈, D는 차원
- 문제점
1) 평균과 분산을 0, 1로 고정하는 것은 비선형성을 깨뜨릴 수 있다.
2) 각 차원을 독립이라고 한 가정이 모델을 제한할 수 있음
- 해결책
정규화 된 값을 추가적인 파라미터를 사용하여 변형시킴
즉, 배치단위로 정규화하여 정규분포를 만들고, 감마와 베타를 이용해 새로운 값을 내놓는다.
- 일반적으로 레이어를 거친 뒤, 배치 정규화를 수행하고 이를 활성함수의 입력값으로 전달
즉, 배치정규화를 일종의 레이어라 생각하고 구현 가능
- 장점
1) gradient vanishing 문제를 매우 잘 해결한다.
2) Learning rate를 높게 주어도 학습을 잘하기 때문에 수렴속도가 빠름
3) 학습을 할대마다 출력값을 정규화로 만들어 주기 때문에, 초기화 전략에 영향을 덜 받음 (물론 어느정도 중요하지만)
4) 배치정규화(BN)이 regularizer의 역할을 한다.
+ 항상 그렇지는 않지만 Dropout을 제거해도 비슷한 성능을 보이고, 일반적으로 성능이 상승한다.
+ 배치 단위로 정규화를 하면서 모델에 노이즈를 주는 것으로 해석 가능. 이 노이즈로 인해 성능이 좋아짐
(배치단위로 정규화를 하면 평균과 분산이 전체 평균의 분산과 값이 약간 다를 수 있다. 이는 일종의 노이즈가 됨)
- 테스트 단계
+ Dropout처럼 학습/테스트 단계의 연산이 다름
+ 학습단계는 데이터가 배치단위로 들어오기 때문에 배치의 평균, 분산을 구하는 것이 가능 하지만,
테스트 단계에서는 배치 단위로 평균/분산을 구하기가 어려움
+ 이를 해결하기 위해서는?
1) 학습단계에서 배치단위의 평균/분산을 저장해놓기 (이동평균)
2) 테스트시에는 구해진 이동평균을 사용하여 정규화
'Machine Learning & Deep Learning' 카테고리의 다른 글
[Chapter2] An understanding of data (0) | 2018.09.17 |
---|---|
[Chapter1] Types of Machine Learning (0) | 2018.09.17 |
03. 정규화 (Regularization) (0) | 2017.08.03 |
03. 초기화 (0) | 2017.08.03 |
01. 활성함수(activation function) - Sigmoid, ReLU (0) | 2017.08.03 |