학습하는 것:
각 node마다 4개씩 parameters가 생긴다. scaling term, shift term, mean term, std term.
이 중 scaling term과 shift term은 trainable이고, 남은 2개는 moving average로 계산한다.(non-trainable)
mean term과 shift term은 training이 마친 후 prediction때 batch mean, batch std가 없으니 사용함
(mean term과 shift term은 어찌보면 trainable인데 keras에서는 trainable로 잡진 않음, 즉 backpropagation 대상이 아니기 때문임)
mean term, std term이 moving average로 계산되는 방법:
new batch mean(a)과 new batch std(b가 들어오면 직전까지의 mean term(A), std term(B) 에 대해
갱신을 다음과 같이 한다.
new mean term(A') = A*momentum + a*(1-momentum)
new std term(B') = B*momentum + b*(1-momentum)
이러한 방식을 exponential moving average라 한다.
(대개, newbie에게 적은 가중치를 주고, 직전꺼에 크게 줌)
효과:
-vanishing gradient 현상 감소
-weight initialization 의존성 감소
-large learning rate 사용 가능 -> 학습속도 상승
-overfit 방지(as a regulizer)
-계산량이 늘어나 보이지만, 직전 Batch Normalization layer앞에 dense layer가 있다면, Dense layer의 weight, bias를 수정하면, 계산량이 늘지 않게 가능
단점:
-직전 layer가 없다면 계산량이 늘어남(prediction때 좀 느려질 수 있음)
'ML' 카테고리의 다른 글
Bias-Variance Tradeoff (0) | 2020.11.10 |
---|---|
[MachineLearning] Optimizer에 대해서 (0) | 2020.11.05 |
[Numpy]ndarray가 (built-in)list보다 빠른 이유 (0) | 2020.11.02 |
[Clustering]K-means Clustering (0) | 2020.10.29 |
[Numpy]각 row에서 k개의 the largest values 뽑기 (0) | 2020.10.25 |