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


  1. 성유진 2018.09.17 08:09 신고

    mini batch의 size를 메모리 크기에 따라 정하라고 하셨는데
    메모리라는게 gpu메모리와 cpu의 메모리 크기의 합으로 보는건가요? 어떤식으로 계산이 되어야 하는지 구체적으로 알려 주실 수 있으신가요?

    • JAYNUX 2018.09.19 08:56 신고

      GPU 메모리 사이즈를 의미하고 작성 하였습니다.
      딥러닝 모델 총 Weight 양에 4byte씩 32bit Float면 곱해서 계산했었습니다. 요즘 Keras는 그냥 자동으로 계산해서 보여주기도 하는것 같습니다.

      이때는 그냥 저렇게 글 작성했는데, 다시 요즘 보니 mini-batch도 좀 경험적으로 학습이 잘되는데 사이즈가 있어서 논문보고 구현할 때는 해당 논문에 나온 값을 준수해야 학습에 성공 하는것 같습니다.

+ Recent posts