Batch 크기의 결정 방법


보통 vectorization방법으로 gradient descent알고리즘의 효율을 높이게 된다.

하지만 input 데이터가 너무 크다면 그 방법을 사용할 수 없다.
메모리 문제도 발생하고 한 번 interation (epoch)당 시간이 너무 오래 걸리기 때문이다.

Batch-gradient descent mini-bach gradient descent의 cost 그래프의 차이는 아래와 같다.

Choosing your mini-batch size

  • Mini-batch 크기가 전체 트레이닝 셋 데이터 사이즈인 m과 같다면 이것은 Batch gradient descent방법이다.

    • (+) 상대적으로 아래의 contour그래프를 보면 알 수 있듯이 적은 noise Large step으로 글로벌 미니멈에 수렴한다.
    • (+) vectorization 효율이 좋다.
    • (-) interation당 속도가 느리다.
    • (-) 메모리 여유 공간에 따라서 실행 불가능 할 수도 있다.
  • Mini-batch 크기가 1이라면,Stochastic gradient descent라고 부른다.

    • (+) 적은 메모리로 동작 가능하다. noise한 부분은 learning rate을 작게하면 완화 할 수 있다.
    • (-) vectorization 효율이 없다. training data를 1개만 사용하기 때문이다.
  • Mini-batch크기를 너무 작게도 크게도 하지 않는다.

    • (+) vectorization을 효과 본다.
    • (+) interation당 긴 시간없이 progress를 만들 수 있다.

최종적 가이드라인

  • 데이터가 별로 없다면 batch gradient descent를 쓴다.
    • ex 2,000 정도
  • mini-batch를 선택
    • 64, 128, 256, 512 사이즈로 선택한다. 메모리 사이즈에 맞춰서
  • CPU/GPU memory 사이즈에 맞춰서 조절 한다.

Take-away message
SGD GD가 같은 글로벌 cost 최소점에 도달 할 수 있다는 것은 증명이 되어 있지만, neural netwrok은 convex가 아니기 때문에 batch 크기의 설정 방법에 따라 수렴하는 조건이 다를 수 있다.

Batch size는 일반적으로 메모리가 감당할 수 있는 정도까지 최대한 크게 잡는게 좋을것 같다.

참고자료

Coursera DeepLearning ai, Andrew Ng


+ Recent posts