SGD, Batch, mini-Batch 경사하강법 비교

해당 포스트에서는 손실 함수(loss function)을 최적화하는 경사하강법들을 비교하여 설명합니다.

INTRO

SGD(Stochastic gradient descent), Batch, mini-Batch는 모두 경사하강법(Gradient Descent) 방식의 일종으로, 손실 함수(loss function)를 최적화하는 과정에서 가중치(weight)를 갱신(update)하는 방법입니다.

아래에서는 먼저 각 방법론을 설명한 후, 세 방법론들을 비교하여 차이를 설명합니다.

경사하강법(Gradient Descent)?

경사 하강법(Gradient Descent)은 기계 학습 및 최적화에서 가장 일반적으로 사용되는 최적화 알고리즘 중 하나입니다. 함수의 기울기(gradient)를 이용하여 함수의 최솟값을 찾는 알고리즘으로, 기울기는 해당 지점에서 함수 값이 가장 빠르게 증가하는 방향을 나타내므로, 함수의 최솟값을 찾으려면 기울기의 반대 방향으로 이동해야 합니다.

경사 하강법은 시작점에서 시작하여, 기울기를 구하고 그것의 반대 방향으로 이동하여 함수의 값을 줄입니다. 이 과정을 반복하면서 함수의 최솟값에 근접한 값을 찾게 되는데, 기울기가 0인 지점에서 수렴하면 함수의 최솟값에 도달한 것으로 간주합니다.

참고
경사 하강법은 주로 선형 회귀, 로지스틱 회귀 및 인공 신경망에서 가중치(weight)를 최적화하는 데 사용됩니다.

gradient-descent-sgd-batch-minibatch
[출처] AI Wiki

SGD? Batch? mini-Batch?

SGD(Stochastic gradient descent)는 일반적으로 빠른 학습 속도와 메모리 사용량이 적어서 대규모 데이터셋에 적합합니다. 그러나 데이터의 노이즈와 이상치(outliers)에 민감하게 반응하고, 학습 과정에서 가중치 값이 불안정하게 변화할 수 있어 수렴(convergence) 속도가 느릴 수 있습니다.


반면에 BatchSGD와 달리 모든 데이터를 한 번에 처리하기 때문에 가중치 갱신의 정확성과 안정성이 높습니다. 그러나 Batch의 크기가 너무 크면 메모리 사용량과 연산 속도가 증가하여 학습 시간이 길어질 수 있습니다.


mini-BatchSGDBatch의 장점을 조합한 방법으로, 빠른 학습 속도와 안정성이 높은 가중치 갱신이 가능합니다. mini-Batch의 크기는 적절히 조절하여 SGDBatch의 중간 지점을 찾아 최적의 성능을 발휘할 수 있으며, mini-BatchSGDBatch보다 하이퍼파라미터(hyperparameters) 설정이 쉽고, 수렴 속도와 안정성이 높아서 대부분의 경우에 추천되는 방법입니다.


마지막으로, SGD, Batch, mini-Batch 모두 과적합(overfitting)을 방지하기 위해 학습 데이터를 무작위로 섞어서 사용합니다. 이는 학습 데이터의 순서에 따라 가중치 갱신값이 달라지는 것을 방지하고, 모델이 데이터에 과도하게 적합되는 것을 방지하기 위함입니다.

gradient-descent-sgd-batch-minibatch
[출처] ml-explained.com

마무리

위에서 설명한 SGD(Stochastic gradient descent), Batch, mini-Batch는 각각 장단점이 있습니다. 따라서, 하나만 선택적으로 사용하는 것이 아니라 상황과 문제의 맥락에 따라 맞춰 균등(uniformly)하게 사용해야 합니다.

관련 링크

[1] SGD(Stochastic gradient descent)
[2] Gradient Descent
[3] Overfitting