머신러닝에서 말하는 Batch의 정의

  • 모델을 학습할 때 한 Iteration당(반복 1회당) 사용되는 example의 set 모임
  • 여기서 iteration은 정해진 batch size를 이용하여 학습(forward - backward)를 반복하는 횟수를 말한다
  • 한 번의 epoch를 위해 여러번의 iteration이 필요하다 
  • training error와 validation error가 동일하게 감소하다가 validation error가 증가하기 시작하는 직전 점의 epoch를 선택해야 함 (이는 overfitting을 방지하기 위함이다)

Batch size의 정의 및 Batch Size를 선택하는 방법
  • Batch 하나에 포함되는 example set의 갯수
  • Batch / Mini-Batch /Stochastic  세 가지로 나눌 수 있다.(아래 그림 참고)


  • SGD(Stochastic Gradient Descent) 은 배치 크기가 1, Mini-Batch는 10~1,000 사이지만 보통 2의 지수승 (32 64 128..)으로 구성

Batch별 특징 및 장단점
Batch
  • 여러 개 샘플들이 한거번에 영향을 주어 합의된 방향으로 smooth하게 수렴, 그러나 샘플 갯수를 전부 계산해야 하므로 시간이 많이 소요된다(한 step을 처리하는데 많은 수의 데이터를 계산해야 한다). 즉 모든 Training data set 사용함.
Stochastic Gradient Descent
  • 데이터를 한 개씩 추출해서(한 개 씩 뽑아서) 처리해보고 이를 모든 데이터에 반복하는 것. 오차율이 크다(수렴 속도는 빠르지만 global minimum을 찾지 못할 가능성이 있다 - 위 그림 참고) . 또한 하나씩 처리하기 때문에 GPU 성능을 제대로 활용하지 못하기 때문에 비효율적이다.
Mini-Batch
  • 전체 학습 데이터를 배치 사이즈로 등분하여(나눠) 각 배치 셋을 순차적으로 수행, 배치보다 빠르고 SGD보다 낮은 오차율 
정리
  • Mini-Batch의 사이즈가 전체 Training data 사이즈와 같으면 Batch Gradient Descent, Mini-Batch의 사이즈가 1이면 Stochastic Gradient Descent)
  • 실제로는 Batch Gradient를 잘 쓸 수 없다. 왜나하면 메모리에 모든 데이터를 한번에 올릴수 없기 때문이다.

Python 코드 예시 


  • Training data set이 5528이라고 가정 


  • 학습 셋이 5528개인데 샘플 코드에서는 Batch Size를 32로 설정
  • 즉 epoch가 173번 돌게 된다(5528/32 = 172.75 --> 반올림해서 173)
  • 마지막 epoch을 돌리지 않으면 172*32 = 5504 --> 24개가 버려짐(배치32로 포함 안되니깐)
  • 이를 방지하기 위해 math.ceil을 이용해 반올림 (172.75 반올림하면 173)하게 되면 모든 데이터 처리 가능(32개씩 172번, 마지막 epoch는 24개) 



+ Recent posts