정리 노트

배치 정규화(Batch Normalization) 본문

개념 정리/머신러닝 & 딥러닝 & A.I

배치 정규화(Batch Normalization)

꿈만 꾸는 학부생 2022. 12. 4. 16:23
728x90

이 포스트는 국민대학교 소프트웨어학부 '컴퓨터 비전' 강의와 '인공지능' 강의를 듣고 요약하는 포스트입니다. 원하시는 정보가 없을 수도 있습니다. 이 점 유의 바랍니다. 오류 지적은 매우 환영합니다!


딥러닝 모델을 구현하거나 모델의 구조를 본 적이 있는 사람들은 Batch Normalization을 사용한 모델들을 몇 번 보셨을 것입니다. 예를 들어 ResNet이라 하는 CNN 구조를 따르는 모델이 있습니다. Pytorch에서 제공하는 resnet 모델의 구조를 살펴보면 'BatchNorm2d'를 통해 배치 정규화를 적용했음을 확인할 수 있습니다.

ResNet 구조의 일부, BatchNorm2d: Pytorch에서 제공하는 배치 정규화

이번 글을 통해 배치 정규화가 왜 등장했고, 배치 정규화가 무엇인지에 대해 알아보려 합니다.

배치 정규화를 하는 이유

이 이유를 알기 위해서는 2가지 개념에 대해 알아야 합니다.

  • 공변량 변화(covariate shift) 현상: 훈련 데이터 집합과 테스트 데이터 집합의 분포가 다른 현상
  • 내부의 공변량 변화(internal covariate shift): 학습이 진행되면서 데이터의 분포가 계속 변화하는 것
source: https://www.diva-portal.org/smash/get/diva2:955562/FULLTEXT01.pdf

딥러닝 모델에서 학습이 진행되면서 각 층마다 가지고 있는 파라미터들의 값은 바뀌게 될 것입니다. 그러면 하나의 층 입장에서 생각해보면 자신의 층에 들어오는 입력의 분포는 계속 바뀌는 입력의 분포를 받게 됩니다. 이러한 현상은 층이 깊어질수록 더 심각해질 것입니다. 이러한 현상을 내부의 공변량 변화 현상이라 부릅니다. 이 것이 모델의 학습을 방해하는 요인으로 작용됩니다.
이럴 때, 배치 정규화를 적용하면 출력 값들이 일정 범위 안의 값으로 조절되기 때문에 층이 깊어질수록 분포가 계속 틀어지는 현상을 줄일 수 있게 됩니다. 배치 정규화는 이것 말고도 여러 장점들이 있습니다. 먼저, 신경망에서의 경사도 흐름을 개선시킬 수 있습니다. 정규화를 통해 값을 모아주면서 gradient vanishing 현상을 방지할 수 있습니다. 또한 높은 학습률을 적용시킬 수도 있게 되며, 정규화가 규제와 유사하게 행동하여 dropout의 필요성을 감소시키는 효과도 가지고 있습니다. 그리고 배치 정규화를 적용하지 않은 모델과 비교했을 때, 빠른 epoch으로 적용하지 않은 모델과 비슷한 accuracy를 보입니다.

[source] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift(https://arxiv.org/pdf/1502.03167.pdf)

Batch Normalization

배치 정규화는 각 레이어의 출력을 정규화시켜서 분포가 최대한 바뀌지 않도록 유지시키려 하는 것입니다. 학습 과정에서 배치 정규화를 통해 출력 값들이 표준 정규 분포(평균: 0, 표준 편차: 1)를 따르게끔 정규화시킵니다.

[source] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift

하나의 미니 배치의 size를 m이라고 할 때 위의 식은 다음과 같이 설명됩니다.

  1. 미니 배치 안에서 입력 xi(i = 1 ~ m)들의 평균과 분산을 구합니다. 계산된 평균과 분산을 이용해서 각 입력에 대해 정규화가 진행됩니다.
  2. 정규화 식을 보면 분산에 엡실론(ε)이 붙어있는 것을 볼 수 있습니다. 이는 0으로 나눠지는 불상사를 막기 위해 추가된 매우 작은 숫자라 생각하시면 됩니다.
  3. 정규화된 입력에 대해 두 가지의 학습 파라미터인 감마(γ)와 베타(β)가 추가됩니다. 이는 표준 정규 분포의 모양을 유지하되, 원래 데이터의 분포와 최대한 유사하게 맞추도록 하기 위해서 추가됩니다.

학습 과정이 끝난 후, 평가 과정에서도 정규화 과정을 거치게 되는데 이때 사용하는 평균과 분산은 학습 때처럼 배치 별로 계산하지 않습니다. 평가 결과는 deterministic 하게 나와야 하기 때문에 고정된 평균과 분산을 사용합니다.

[source] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covaraite Shift

논문을 보면 평균은 미니 배치들의 평균들의 평균을 사용했고, 분산은 미니 배치들의 분산들의 평균값에다가 m / (m - 1) 값을 곱해줍니다.

Batch Normalization in Convolutional Networks

지금까지 설명한 내용들을 이제 Convolutional Network들에 적용해봅시다. 여기서부터는 CNN에 대한 기초적인 지식이 필요합니다. 전에 제가 CNN에 대해 적었던 글을 보고 오시면 앞으로 읽기 수월하실 것 같습니다.

2022.08.29 - [개념 정리/머신러닝 & 딥러닝 & A.I] - CNN(Convolutional Neural Network)

CNN(Convolutional Neural Network)

이 포스트는 2015년 12월에 나온 Kerion O'shea and Ryan Nash의 'An Introduction to Convolutional Neural Networks'의 일부 내용과 국민대학교X프로그래머스 주관하는 '2022학년도 여름방학 인공지능 온라인 실전 부트

study-note-99.tistory.com

여기서는 정규화가 convolutional 한 특징까지 따르게 해야 합니다. 따라서 지금까지 설명한 batch normalization 방법과 약간 다른 batch normalization 방법을 사용하게 됩니다. 이에 대한 설명은 아래 사이트에서 너무 잘해주셔서 그 사이트의 설명을 가져왔습니다.

...(전략) convolution의 성질을 유지시키고 싶기 때문에, 각 channel을 기준으로 각각의 Batch Normalization 변수들을 만든다. 예를 들어 m의 mini-batch-size, n의 channel size 를 가진 Convolution Layer에서 Batch Normalization을 적용시킨다고 해보자. convolution을 적용한 후의 feature map의 사이즈가 p x q 일 경우, 각 채널에 대해 m x p x q 개의 각각의 스칼라 값에 대해 mean과 variance를 구하는 것이다. 최종적으로 gamma와 beta는 각 채널에 대해 한개씩 해서 총 n개의 독립적인 Batch Normalization 변수들이 생기게 된다.(https://shuuki4.wordpress.com/2016/01/13/batch-normalization-%EC%84%A4%EB%AA%85-%EB%B0%8F-%EA%B5%AC%ED%98%84/)

글만 보고 이해하려니 헷갈려서 직접 그림을 그려봤습니다.

(그림자... 무시해주세요...) p * q: feature map의 size, n: channel의 수(=사용한 kernel의 수), m: 배치의 수

하나의 미니 배치에서 같은 채널의 feature map들에 대해 평균과 분산을 계산해서 배치 안의 같은 채널들에 대해 정규화가 적용됩니다. 그림에서 색칠한 feature map의 channel을 1번 채널이라 불러봅시다. 그러면 미니 배치 안의 1번 채널들의 모든 스칼라 값들(p * q * m개)을 가지고 평균과 분산을 계산할 것이고, 이 값을 이용해서 배치의 1번 채널들에다 정규화가 적용됩니다. 그리고 학습 파라미터인 감마와 베타는 채널 당 하나씩 만들어집니다. 이렇게 2번 채널, 3번 채널,..., n번 채널까지 한다면 총 n개의 Batch Normalization 변수가 생깁니다.

어디에 정규화를 적용시킬 것인가?

학습 과정에서 이러한 정규화 과정은 주로 convolutional layer나 fully-connected layer 다음, 활성화 함수(ex. ReLU, tanh, sigmoid,...)를 거치기 이전에 Batch Normalize layer로 적용됩니다. 가장 위에 있는 이미지를 보시면 batch normalization이 convolution layer 이후, relu 이전에 있는 것을 확인하실 수 있습니다.

참고 사이트

[Deep Learning] Batch Normalization (배치 정규화)

사람은 역시 기본에 충실해야 하므로 ... 딥러닝의 기본중 기본인 배치 정규화(Batch Normalization)에 대해서 정리하고자 한다. 배치 정규화 (Batch Normalization) 란? 배치 정규화는 2015년 arXiv에 발표된 후

eehoeskrap.tistory.com

Batch Normalization 설명 및 구현

NIPS (Neural Information Processing Systems) 는 머신러닝 관련 학회에서 가장 권위있는 학회들 중 하나이다. 이 학회에서는 매년 컨퍼런스를 개최하고, 작년 12월에도 NIPS 2015라는 이름으로 러시아에서 컨

shuuki4.wordpress.com

728x90

'개념 정리 > 머신러닝 & 딥러닝 & A.I' 카테고리의 다른 글

GAN  (0) 2022.12.11
확률적 경사 하강법의 변형들  (0) 2022.12.10
Computational Graph(연산 그래프)  (0) 2022.11.25
규제(Regularize)  (0) 2022.11.25
확률적 경사 하강(SGD)  (0) 2022.10.20