728x90

학습하는 것:

각 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때 좀 느려질 수 있음)

 

728x90

+ Recent posts