06.3 배치 정규화
앞 절에서는 각 층의 활성화값 분포를 관찰해보며, 가중치의 초깃값을 적절히 설정하면 각 층의 활성화값 분포가 적당히 퍼지면서 학습이 원활하게 수행된다는 것을 배웠습니다. 그렇다면 각 층이 활성화를 적당히 퍼뜨리도록 ‘강제’해보면 어떨까요? 실은 배치 정규화${}^{\text{Batch Normalization}}$[11]가 그런 아이디어에서 출발한 방법입니다.
6.3.1 배치 정규화 알고리즘
배치 정규화는 2015년에 제안된 방법입니다. 배치 정규화는 아직 세상에 나온 지 얼마 안 된 기법임에도 많은 연구자와 기술자가 즐겨 사용하고 있습니다. 실제로 기계학습 콘테스트의 결과를 보면 이 배치 정규화를 사용하여 뛰어난 결과를 달성한 예가 많습니다.
배치 정규화가 주목받는 이유는 다음과 같습니다.
- 학습을 빨리 진행할 수 있다(학습 속도 개선).
- 초깃값에 크게 의존하지 않는다(골치 아픈 초깃값 선택 장애여 안녕!).
- 오버피팅을 억제한다(드롭아웃 등의 필요성 감소).
딥러닝의 학습 시간이 길다는 걸 생각하면 첫 번째 이점은 아주 반가운 일입니다. 초깃값에 크게 신경 쓸 필요가 없고, 오버피팅 억제 효과가 있다는 점도 딥러닝 학습의 두통거리를 덜어줍니다.
자, 배치 정규화의 기본 아이디어는 앞에서 말했듯이 각 층에서의 활성화값이 적당히 분포되도록 조정하는 것입니다.
지니가 중구난방인 크기값을 가진 마블 알갱이들을 배치 정규화 깔때기에 부어 넣자, 알갱이들이 평균 0, 분산 1의 표준 정규분포 영역으로 가지런하게 균일 필터링되어 방출되는 원리를 보여주고 있어요.
지니의 데이터 정돈 기법 (배치 정규화)
- 지니: “도로시, 각 층을 통과하는 은닉 활성화 값들의 분포가 찌그러지거나 치우치지 않게, 미니배치 단위로 평균 0, 분산 1이 되도록 깔때기를 씌워 강제 조정하는 기술이 바로 배치 정규화(Batch Normalization)란다!”
- 도로시: “와! 이렇게 깔때기를 하나씩 이식해 두니까, 매번 가중치 초깃값을 조심조심 고르느라 골머리 앓을 필요도 없고, 신호가 막힘없이 흘러서 학습 속도가 극적으로 빨라지겠어!”
그래서 [그림 6-16]과 같이 데이터 분포를 정규화하는 ‘배치 정규화${}^{\text{Batch Norm}}$ 계층’을 신경망에 삽입합니다.
그림 6-16 배치 정규화를 사용한 신경망의 예
배치 정규화는 그 이름과 같이 학습 시 미니배치를 단위로 정규화합니다. 구체적으로는 데이터 분포가 평균이 0, 분산이 1이 되도록 정규화합니다. 수식으로는 다음과 같습니다.
\(\mu_B \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_i\) \(\sigma_B^2 \leftarrow \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2\) \(\hat{x}_i \leftarrow \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \varepsilon}} \tag{식 6.7}\)
여기에는 미니배치 $B = {x_1, x_2, \dots, x_m}$이라는 $m$개의 입력 데이터의 집합에 대해 평균 $\mu_B$와 분산 $\sigma_B^2$을 구합니다. 그리고 입력 데이터를 평균이 0, 분산이 1이 되게(적절한 분포가 되게) 정규화합니다. 그리고 [식 6.7]에서 $\varepsilon$ 기호${}^{\text{epsilon, 엡실론}}$는 작은 값(예컨대 $10\text{e-}7$ 등)으로, 0으로 나누는 사태를 예방하는 역할입니다.
[식 6.7]은 단순히 미니배치 입력 데이터 ${x_1, x_2, \dots, x_m}$을 평균 0, 분산 1인 데이터 ${\hat{x}_1, \hat{x}_2, \dots, \hat{x}_m}$으로 변환하는 일을 합니다. 이 처리를 활성화 함수의 앞(혹은 뒤)에 삽입*함으로써 데이터 분포가 덜 치우치게 할 수 있습니다.
도로시가 신경망 파이프 결합부 중간중간에 배치 정규화 밸브 장치를 차례로 용접해 조립하고 있고, 지니가 그 학습 고속도로 개통 효과를 설명하고 있어요.
도로시의 밸브 조립 소감 (BatchNorm 효과)
- 도로시: “네트워크 관로 중간마다 이 배치 정규화 밸브를 장착했더니, 내부 공정의 데이터 찌그러짐 현상이 전부 사라져서 역전파 흐름이 막힘없이 통과해! 심지어 오버피팅까지도 알아서 어느 정도 억제된다니, 정말 사기적인 부품인걸!”
- 지니: “맞아! 배치 정규화는 딥러닝 모델의 체질을 개선해 초깃값 민감도를 크게 낮춰주므로, 요즘 최신 아키텍처들에는 무조건 기본 옵션으로 들어가는 만능 안전장치란다.”
- 토토: “왈왈! (파이프 위에서 꼬리를 흔들며) 고속도로 밸브 완료다 멍!”
또, 배치 정규화 계층마다 이 정규화된 데이터에 고유한 확대${}^{\text{scale}}$와 이동${}^{\text{shift}}$ 변환을 수행합니다. 수식으로는 다음과 같습니다.
\[y_i \leftarrow \gamma \hat{x}_i + \beta \tag{식 6.8}\]이 식에서 $\gamma$가 확대를, $\beta$가 이동을 담당하죠. 두 값은 처음에는 $\gamma = 1$, $\beta = 0$부터 시작하고,** 학습하면서 적합한 값으로 조정해갑니다.
이상이 배치 정규화의 알고리즘입니다. 이 알고리즘이 신경망에서 순전파 때 적용되죠. 이를 5장에서 설명한 계산 그래프로는 [그림 6-17]처럼 그릴 수 있습니다.
그림 6-17 배치 정규화의 계산 그래프[13]

배치 정규화의 역전파 유도는 다소 복잡하므로 여기에서는 설명하지 않습니다만, [그림 6-17] 같은 계산 그래프를 그려보면 비교적 쉽게 도출할 수 있을 겁니다. 자세한 설명은 프레드릭 크레저트${}^{\text{Frederik Kratzert}}$의 블로그[13]에서 찾을 수 있으니 궁금한 분은 참고하세요.
6.3.2 배치 정규화의 효과
그럼 배치 정규화 계층을 사용한 실험을 해봅시다. 우선은 MNIST 데이터셋을 사용하여 배치 정규화 계층을 사용할 때와 사용하지 않을 때의 학습 진도가 어떻게 달라지는지를 보겠습니다(소스 코드는 ch06/batch_norm_test.py에 있습니다). [그림 6-18]이 그 결과입니다.
그림 6-18 배치 정규화의 효과: 배치 정규화가 학습 속도를 높인다.

[그림 6-18]과 같이 배치 정규화가 학습을 빨리 진전시키고 있습니다. 계속해서 초깃값 분포를 다양하게 줘가며 학습 진행이 어떻게 달라지는지를 보겠습니다. [그림 6-19]는 가중치 초깃값의 표준편차를 다양하게 바꿔가며 학습 경과를 관찰한 그래프입니다.
그림 6-19 실선이 배치 정규화를 사용한 경우, 점선이 사용하지 않은 경우 : 가중치 초깃값의 표준편차는 각 그래프 위에 표기

거의 모든 경우에서 배치 정규화를 사용할 때의 학습 진도가 빠른 것으로 나타납니다. 실제로 배치 정규화를 이용하지 않는 경우엔 초깃값이 잘 분포되어 있지 않으면 학습이 전혀 진행되지 않는 모습도 확인할 수 있습니다.
지금까지 살펴본 것처럼 배치 정규화를 사용하면 학습이 빨라지며, 가중치 초깃값에 크게 의존하지 않아도 됩니다. 배치 정규화는 이처럼 장점이 많으니 앞으로 다양한 분야에서 활약할 것입니다.
* 배치 정규화를 활성화 함수의 앞이나 뒤, 어느 쪽에 삽입할지에 관한 논의와 실험이 문헌 [11]과 [12] 등에서 진행되고 있습니다. ** 옮긴이_ $\gamma = 1$은 1배 확대를 뜻하고 $\beta = 0$은 이동하지 않음을 뜻합니다. 즉, 처음에는 원본 그대로에서 시작한다는 이야기입니다.