배경
SGD에서는 gradient를 한 번 업데이트 하기 위해 일부의 데이터(batch size)만을 사용
이렇게 batch 단위로 학습을 하게 되면 Internal Covariant shift현상이 일어날 수 있음
Batch 단위로 학습을 하게 되면 Batch 단위 간 데이터 분포의 차이가 발생할 수 있음
또한, 현재 layer의 입력은 모든 이전 layer의 파라미터의 변화에 영향을 받게되며, 층이 깊어짐에 따라 이전 layer에서의 작은 파라미터 변화가 증폭되어 뒷잔에큰 영향(분포가 변하는 현상 등)을 끼치게 될 수 있음
(weight
의 미세한 변화들이 가중이 되어 쌓이면 Hidden Layer의 깊이가 깊어질수록 그 변화가 누적되어 커지기 때문 → variance가 커짐)
이와 같은 현상을 막고자, batch Norm이 등장하게 됨
개념
알고리즘
감마, 베타는 활성화 함수가 비선형 성질을 잃게하는 것을 방지
초기값: 감마(1), 베타(0)
노드 당 학습파라미터가 두 개씩 추가됨(beta는 bias를 대신할 수 있으므로(-1) 결국 한 개만 추가되는 것)
→ 따라서 output = $g(BN(WX))$ 가 됨. (g = 활성화 함수)
직관적으로 이해하면,
→ 어딘가 있는 분포를 싹 잡아다가 시그모이드에 이쁘게 나오게 흩뿌리되(1, 2, 3),
→ 95% 값이 sigmoid 함수의 중간 구간에 속하면서 sigmoid가 아니게 되자,
→ 적당히 어디쯤에 얼마만큼 뿌릴지를 training해서 뿌리자(그러나 초기 값을 표준 전규분포(감마 1, 베타 0)로 잡았기 때문에, 그 근처에서 움직일(업데이트될) 것으로 기대)