앞서 기울기 소실과 폭주 문제에서 배치정규화를 다뤘었는데, 이해가 부족한 것 같아 배치정규화에 대해서 다시 공부해보는 포스팅을 작성하게 되었습니다.
배치정규화란?
배치 정규화(batch normalization, BN)는 층으로 들어가는 입력값이 한쪽으로 쏠리거나 너무 퍼지거나 너무 좁아지지 않게 해주는 인공신경망 기법이다. 여러 입력값을 모은 배치에 대해, 각 층의 입력값의 평균과 표준편차를 다시 맞추어 주어, 입력값이 쏠리는 것을 막는다. (위키백과)
입력에서 출발해서 네트워크를 통과하다가 Σ(weights)해서 활성화함수를 통과하기 전에 그 입력값에 대해서 배치정규화를 하게 됩니다.
각 노드들에 전달되는 이 입력값들(빨간점)은 일정한 값을 갖고 있지 않습니다. batch에 대해서 랜덤한 값을 가지고 있다할 수 있는데, batch가 n일 때, n개에 대해서 다음 노드로 전달되는 입력값(빨간점)이 달라진다는 것입니다. 이 값들은 어떠한 분포를 따르고 있습니다
[ 배치정규화 동작 ]
- 미니배치 하나에 대한 평균
- 미니배치 하나에 대한 분산
- 정규화 (평균0, 분산1)
- 정규화된 값에 γ를 곱하고 β를 더해줌 (배치정규화의 결과)
γ와 β는 어떻게 결정 할까요?
γ와 β를 weight를 학습하듯 학습파라미터로 두어 학습시킵니다. 그러면 노드 당 2개씩 학습할 파라미터들이 추가가 되게 됩니다.
β가 더해지는 것은?
신경망에서 다음 노드로 전달되는 입력값은 weight와 입력벡터을 곱하고 bias를 더해 구해집니다.(wx+b) 여기에서 bias도 학습되는 파라미터입니다. 그리고나서 활성화함수를 거치게 됩니다 그래서 일반적으로는 g(wx+b)의 값을 가지게 됩니다. 하지만 배치정규화를 하면 β가 더해지니까 wx+b에서 bias를 학습시킬 필요가 없게 됩니다. bias 학습을 β가 해주는 것입니다. 그래서 활성화함수 통과하기전에 wx에 대해 배치정규화를 하게됩니다. g(BN(wx))
[ test시의 배치정규화 ]
테스트시에는 배치에 대해서 구한 평균들의 평균, 분산들의 평균을 합니다.
분산 평균 구할 때, m / (m-1)을 해주는 이유?
샘플 분산을 구할때는 보통 위와 같은 식으로 계산합니다. 하지만 이는 실제 모분산 값과 다릅니다.
실제로 E[샘플분산] 하면 위와 같이 실제 모분산과 (m-1)/m배 만큼의 차이가 있다는 것입니다. 이를 보정해주기 위해 m/(m-1)을 곱해주는 것입니다.
+)
실제 논문에서는 정규화 할때 분모에 ε을 더해주고 루트를 씌워주는데, 이는 분모가 0이되는 것을 방지하기 위한 작은 양수 값입니다.
'AI > Deep Learning' 카테고리의 다른 글
Regularization (규제화) (0) | 2022.11.07 |
---|---|
CNN (Convolution Neural Network, 합성곱 신경망) (0) | 2022.11.03 |
loss function (손실함수) (0) | 2022.10.20 |
optimizer (옵티마이저) (0) | 2022.10.20 |
activation function (활성화함수) (0) | 2022.10.20 |