Batch Norm introduction
This article was expressed in my own words after listening to the DLS batch norm lecture.
Input Normalization 과 유사점
이전에 보았던 Input Normalization은 Input 의 range(scale)를 조정해줘서 , weight의 update가 균일하게 끔 되게 해주었습니다. 따라서, 상대적으로 수렴이 빠르게 되도록 해주는 역할을 하였습니다.
왜 batch normalization을 사용하는가?
batch normalization은 이를 hidden layer의 input의 적용해주는 것입니다. 이를 통해 수렴을 빠르게 되서 더 빠른 hyperparmeter search가 가능해집니다.
Batch Norm을 어떻게 하는가
예를 들어 보겠습니다.
두번째 hidden layer의 평균, 분산을 구합니다.
\[\Sigma z^{(2)}_{i}\] \[\mu = \frac {\Sigma z^{(2)}_{i}} {m}\] \[\sigma = \frac {\Sigma (z^{(2)}_{i} - \mu )^2} {m}\] \[z_{norm}^{(i)} = \frac {( z^{(2)}_{i} - \mu )}{ {\sigma} }\]하지만 , 이렇게 하면 \(\sigma\) 가 0이 될 경우 계산을 할 수 없습니다. 따라서, 아래와 같이 계산을 합니다.
\[z_{norm}^{(i)} = \frac {( z^{(2)}_{i} - \mu )} {\sqrt {\sigma^2 + \epsilon} }\]Batch Norm의 실제 적용
\(z_{norm}\) 를 그대로 사용하게 된다면 분포가 N(0,1)을 따르게 됩니다. 하지만, 우리는 모든 z의 분포가 N(0,1)을 따르기를 원하지 않습니다. 이 식을 좀더 발전을 시켜서
\[\widehat{z} = \alpha z_{norm} + \beta\]로 작성할 수 있습니다. 이렇게 작성을 하게 된다면 \(\alpha = {\sqrt {\sigma^2 + \epsilon} }, \beta = \mu\) 로 초기화를 하는데 이를 통해 평균,분산을 원하는 분포를 따르도록 \(\alpha , \beta\)를 learnable parameters로 사용하게 됩니다 .
Leave a comment