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 messageSGD
와 GD
가 같은 글로벌 cost 최소점에 도달 할 수 있다는 것은 증명이 되어 있지만, neural netwrok은 convex가 아니기 때문에 batch 크기의 설정 방법에 따라 수렴하는 조건이 다를 수 있다.
Batch size는 일반적으로 메모리가 감당할 수 있는 정도까지 최대한 크게 잡는게 좋을것 같다.
참고자료
Coursera DeepLearning ai, Andrew Ng
'Data Science > TensorFlow, PyTorch, Keras, Scikit' 카테고리의 다른 글
학습 모델의 재사용 (Transfer Learning) (0) | 2017.12.09 |
---|---|
TensorFlow 모델을 저장하고 불러오기 (save and restore) (3) | 2017.12.09 |
Batch 크기의 결정 방법 (6) | 2017.12.07 |
Neural Network 적용 전에 Input data를 Normalize 해야 하는 이유 (4) | 2017.12.07 |
rpy2와 Pandas를 활용한 R object 변환 (0) | 2017.08.08 |
Confusion Matrix in python (0) | 2017.08.03 |
-
성유진 2018.09.17 08:09
mini batch의 size를 메모리 크기에 따라 정하라고 하셨는데
메모리라는게 gpu메모리와 cpu의 메모리 크기의 합으로 보는건가요? 어떤식으로 계산이 되어야 하는지 구체적으로 알려 주실 수 있으신가요? -
이명훈 2019.01.09 17:06
말씀하신 mini batch란 개념이 그냥 batch size를 임의적으로 줄이는걸 말하는건가요? 케라스로 파이썬에서 딥러닝을 구동중인데요, 저의 경우에는 fit단계에서 batch_size를 작게하면 할 수록 학습속도가 느려지더라고요.. 위의 설명글에는 배치사이즈를 작게할수록 적은 메모리로 빠르게 학습할 수 있다고 쓰여있는거 같은데 말이죠..ㅠ 제가 아직 초보라 혹시 이 부분에 대해서 설명해주실 수 있으신가요?
-
cur 2019.01.29 10:55
보다가 문득 든 생각이 batch size를 왜 64, 128, 256, 512 같이 2의 배수로 하는건지 아시나요?