Gradient descent 의 3 가지 맛
Batch (full) gradient descent — 전체 dataset 에서 gradient 계산, step 한 번, 반복. 부드럽지만 비싸 (epoch 당 gradient 1 개) 고 memory 안 들어가는 dataset 엔 불가능.
SGD — 한 번에 한 example gradient 계산, step, 반복. Noisy, 빠르고, GPU 효율적으로 쓰기 어려움.
Mini-batch SGD — 작은 batch (16, 32, 256, ...) 에서 gradient 계산, step. 일부 local minimum 탈출할 만큼 noisy, stable 할 만큼 부드럽고, GPU 쓸 만큼 batch. 모두가 실제 하는 거야.
왜 noise 가 generalization 에 도움
Mini-batch sampling 의 randomness 가 implicit regularizer 로 작용. Optimizer 가 true gradient 의 noisy 추정 따라가서, sharp local minimum 에 너무 공격적으로 settle 안 함 — sharp minimum 이 flat minimum 보다 generalize 나빠. 그래서 mini-batch SGD 가 자주 더 부드러운 full-batch update 보다 generalize 잘함, training loss 더 높이 converge 해도.
Modern optimizer-aware mini-batch
Modern optimizer (Adam, AdamW) 가 parameter 당 gradient mean 과 variance 의 running estimate 유지해서 batch size 선택이 stable training 에 덜 critical. 여전히 hardware (memory, throughput) 와 generalization (작은 batch 가 자주 regularize 잘함) 위해 tune 하지만, 더 이상 wild gradient noise 통과해 optimizer baby-sit 안 해도 돼.