배치(batch)와 에포크(epoch)란?
안녕하세요. 코딩재개발입니다. CNN과 같은 딥러닝 모델을 훈련시키다보면 꼭 만나게 되는 것이 배치(batch), 에포크(epoch)라는 단어입니다. 이 두 단어가 무엇을 지칭하는 것인지를 알아야 모델을 제대로 훈련시킬 수 있습니다.
배치
먼저 배치가 무엇인지에 대해서 알아보겠습니다. batch의 사전적 의미에는 "집단, 무리; 한 회분; (일괄 처리를 위해) 함께 묶다" 등이 있습니다. 딥러닝에서 배치는 모델의 가중치를 한번 업데이트시킬 때 사용되는 샘플들의 묶음을 의미합니다. 만약에 총 1000개의 훈련 샘플이 있는데, 배치 사이즈가 20이라면 20개의 샘플 단위마다 모델의 가중치를 한번씩 업데이트시킵니다. 그러니까 총 50번(=1000/20) 가중치가 업데이트되겠죠. 하나의 데이터셋을 총 50개의 배치로 나눠서 훈련을 진행했다고 보면 됩니다.
에포크
epoch의 사전적 의미는 "(중요한 사건, 변화들이 일어난) 시대"입니다. 딥러닝에서 에포크는 학습의 횟수를 의미합니다. 만약 에포크가 10이고 배치 사이즈가 20이면, 가중치를 50번 업데이트하는 것을 총 10번 반복합니다. 각 데이터 샘플이 총 10번씩 사용되는 것입니다. 결과적으로 가중치가 총 500번 업데이트되죠.
만약 배치 사이즈가 너무 크면 한번에 처리해야할 양이 그만큼 많기 때문에 학습 속도가 느려지고, 어떤 경우에는 메모리 부족 문제를 겪을 수도 있습니다. 이런 경우에는 배치 사이즈를 조금 줄여서 훈련셋을 더 많은 배치로 나눠서 모델을 훈련시키는 것이 좋습니다. 또한 배치 사이즈가 너무 작아도 문제가 될 수 있습니다. 너무 적은 샘플을 참조해서 가중치가 자주 업데이트되기 때문에 비교적 불안정하게 훈련되는 것이죠. 따라서 배치 사이즈를 바꿔가면서 언제 모델이 가장 효율적으로 훈련되는지를 살펴볼 필요가 있습니다.
관련 글
[python] 메모리 에러 해결법(MemoryError: Unable to allocate ## for an array with shape ## and data type ##)
참고자료
[1] https://nittaku.tistory.com/293, 동신한의 조재성, "15. Batch size & Batch Norm"
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.