[DL Basic] - Batch Size 배치 사이즈 정리하기

반응형

Batch size

Batch란 학습을 할 때 모델에 한 번에 들어가게 되는 데이터 집합을 의미한다고 볼 수 있습니다.

학습할 때 준비한 Train 데이터 전체를 모델에 입력으로 넣을 수 없기 때문에 나눈 것을 Batch라고 생각하면 됩니다.

 

Batch Normalization

Batch normalizatiom 은 입력값 x를 평균 0, 분산 1로 표준화하여 활성화 함수로 전달하고 활성화 함수 출력값을 분포를 고르게 합니다.

x를 표준화 하는 과정에서 batch size 단위로 평균과 분산값을 계산하는데요. 어떤 배치 사이즈를 선택하느냐에 따라서 평균과 분산값이 달라지므로 성능에 영향을 미치게 됩니다.

 

 

Batch-Norm 이란 무엇일까요?

Gaussian 범위로 activation을 유지시키는 하나의 아이디어 입니다.

Neural Network를 훈련시키기 위해서는 골치 아픈 문제들이 많이 있습니다. 그중 하나는 트레이닝을 시작할 때 network가 unit gaussian distribution을 취할 수 있도록 만들어 주는 것입니다.

Batch normalization의 동작 과정 ?

어떤 레이어로부터 나온 Batch 단위만큼의 activation이 있다고 할 때, 이 값들이 Unit gaussian이기를 원합니다.

현재 Batch에서 계산한 mean과 variance를 이용해서 Normalization 해 볼 수 있을 것입니다. 가중치를 잘 초기화시키는 대신에 학습할 때마다 각 레이어에 이런 일을 해줘서 모든 레이어가 Unit Gaussian이 되도록 해줍니다. 그래서 결국 학습하는 동안 모든 레이어의 입력이 unit gaussian이 되었으면 좋겠다는 것입니다.

 

따라서 이제부터 할 일은 네트워크의 forward pass 동안에 그렇게 되도록 ‘명시적으로’ 만들어 주는 것입니다.

각 뉴런과 평균과 분산으로 Normalization 해주는 함수를(functionally) 구현하는 것입니다.

 

 

요약 → Batch 단위로 한 레이어에 입력으로 들어오는 모든 값들을 이용해서 평균과 분산을 구합니다.

평균과 분산값을 이용해 Normalization 해줍니다.

Batch Norm은 미분이 가능한 함수입니다.

 

Batch Normalization의 위치 ?

 

Batch Norm 연산은 FC(Fully-Connected Layer)나 Conv(Convolution Layer) 직후에 넣어줍니다.

깊은 네트워크에서 각 레이어의 W가 지속적으로 곱해져서 Bad scaling effect가 발생했습니다만 Normalization은 그 bad effect를 상쇄시켜 버립니다. (Q. bad scaling effect?)

Batch-Norm은 입력의 스케일만 살짝 조정해주는 역할이기 때문에 FC와 Conv 어디에든 적용할 수 있습니다.

Conv Layer에서 차이점이 있다면 Conv Layer는 Normalization을 차원마다 독립적으로 수행하지 않습니다. Conv Layer는 같은 Activation Map의 같은 채널에 있는 요소들은 같이 Normalize 해줍니다. 왜냐하면 Conv 특성상 같은 방식으로 normalize 시켜야 하기 때문입니다.

Batch Size 와 학습 시간

batch size와 학습은 어떤 관계가 있을까요? 일반적으로 GPU를 이용하여 학습을 진행하기 때문에 GPU를 사용하고, 이때 GPU의 병렬 처리 덕분에 배치 크기의 상관 없이 한 번 학습할 때 걸리는 시간은 동일하다고 가정.

이러한 상황에서는 epoch당 학습 횟수를 줄이는 것이 중요합니다.

ex → 1000개의 데이터가 있을 때, batch size가 1이면 1000번 학습을 합니다. batch size가 1000이면 1번 학습을 합겠죠. batch size가 클수록 학습 횟수가 줄어들기 때문에 좋아보입니다. 하지만 실제로는 그렇지 않습니다.

 

Batch size 선택 가이드 라인

(1) batch size를 크게 하는 경우

batch norm은 batch를 기준으로 통계값을 계산하여 training set의 분포를 추정합니다. batch size가 큰 경우에 training set 분포를 좀 더 근사화하여 추정할 수 있습니다. 이 말은 noise를 감소시켜 모델의 convergence를 향상시킬 수 있다는 것입니다. 또한 gpu를 최대한 활용할 수 있어, 모델의 학습속도가 향상됩니다.

 

(2) batch size를 작게 하는 경우

batch size를 작게 하는 경우에 sample의 수가 적어 training set 통계값을 부정확하게 계산합니다. 이 경우에 noise가 많아 모델의 불안정한 convergence를 유발합니다. 하지만 학습을 방해하는 약간의 noise는 overfitting을 방지하여 모델의 성능을 향상시키는 계기가 될 수 있습니다. 즉, batch size를 작게하면 noise가 많아지고 regularization 효과를 줄 수 있습니다. 너무 작게하면 noise가 너무 커져서 성능에 악영향을 주고, 적절한 크기의 batch를 선택하면 regularization 효과를 줄 수 있습니다.

gpu 제한으로 batch size를 작게할 수 밖에 없는 object detection과 segmentation 분야에서는 batch가 아닌 iteration을 기준으로 배치 통계값을 계산합니다. 

 

+Batch size와 learning rate의 상관 관계

출처 : https://inhovation97.tistory.com/32

 

Learning rate & batch size best 조합 찾기 (feat.논문리뷰와 실험결과)

* 2022-08-29 수정함. 이번 포스팅은 저의 지난 포스팅의 배경 지식이 요구되므로 읽고 오시기를 추천드립니다 :) 저는 모델링 경험이 엄청 많지는 않기 때문에 고수분들에게는 해당 포스팅이 당연

inhovation97.tistory.com

best 조합 1 : 작은 batch & 낮은 lr

한 번에 적은 데이터로 조금씩 학습하기 때문에 그 만큼 step, 학습 수가 많아지므로 local minima에 빠져 optimal minima에 도달하긴 힘들지만, 초기 방향은 쉽게 잡히고 수렴은 잘 될 것이다.

 

best 조합 2 : 큰 batch & 높은 lr

한 번에 많은 데이터로 많이 학습하기 때문에 초기 방향을 잡기 힘들어 lr을 잘 조절해야 할 것이다. 과적합의 문제도 존재한다. local minima에 걸릴 확률이 적고, optimal minima에 수렴할 수 있다.

 

worst 조합 1 : 작은 batch & 높은 lr

적은 데이터로 많은 학습을 바라기 때문에 잘 수렴하기 힘들 것이다.

 

worst 조합 2 : 큰 batch & 낮은 lr

많은 데이터로 조금씩 학습해나가기 때문에 과적합이 쉽게 될 것이다.

요약→ fine tuning에서 Adam으로도 SGD보다 더 좋은 성능을 낼 수 있음.

 

fine tuning에서 Adam을 이용하려면 낮은 lr도 중요하지만, batch size도 굉장히 중요하다.

Learning rate와 Batch size는 양의 상관관계가 있다.

Batch Size를 낮게 설정하면 시간이 오래걸림

 

관련 논문 - Rethinking ‘Batch’ in BatchNorm(2021)

 

→ 32~128 사이의 배치 사이즈를 선택하는 것이 베스트라고 말하네요.

 

반응형