Batch Size가 클수록 forward & backward의 횟수를 줄여주어 학습의 속도를 높여준다.
또한 Batch size에 따라 모델 성능이 달라진다. 작은 batch size는 local minima를 탈출할 수 있다고 알려져있으나 큰 데이터셋에서는 batch size가 클수록 오히려 성능이 높아지는 경우가 있다.
→ 모델의 성능이 떨어지지않는 한도 내에서 Batch size를 최대로 하여 학습을 빠르게 진행할 수 있다.
(SGD를 사용할 경우 LR과 Batch size는 비례 관계를 갖게 되는데 Adam을 사용할 경우 LR을 크게 신경 쓸 필요가 없다.)
그러나 개인 단일 GPU로 학습하는 경우 메모리에 제한이 있어 큰 배치사이즈를 가지지 못하는 문제가 존재한다.
이런 문제를 해결하기 위한 방법이 Gradient Accumulation이다.
Gradient Accumulation
Forward / Backward를 할 때마다 파라미터를 업데이트(optimizer.step())을 하는 대신, k step번 gradient를 누적해서 나중에 한번에 파라미터를 업데이트 하는 방법이다.
이 방법은 마치 누적횟수 만큼 Batch size가 증가된 효과를 줄 수 있다. (k번 accumulation == k X batch_size)
해당 방법은 feed forward나 backward 횟수 자체는 같기 때문에 속도 상의 이점은 크게 없지만 해당 큰 Batch size를 쓰는 것처럼 사용할 수 있다.