머신러닝/딥러닝 공부
모델이 학습하는 방법 (3) - 확률적 경사하강법(Stochastic Gradient Descent, SGD)와 미니배치 경사하강법(mini-batch Gradient Descent) 본문
모델이 학습하는 방법 (3) - 확률적 경사하강법(Stochastic Gradient Descent, SGD)와 미니배치 경사하강법(mini-batch Gradient Descent)
호사린가마데라닌 2021. 10. 13. 15:54이전 포스팅에서는 경사하강법(GD)가 가지는 문제들에 살펴보았습니다. 경사하강법의 기울기를 이용한 방법 때문에 근복적으로 생기는 문제들을 완화하기 위해 여러 가지 다른 옵티마이저들이 고안되었습니다. 그중에서 이번 포스팅에서는 확률적 경사하강법(Stochastic Gradient Descent, SGD)와 미니배치 경사하강법(mini-batch Gradient Descent)에 대해 정리해보겠습니다.
그전에 배치(batch)와 에포크(epoch), 반복(iteration)에 대해 알아보겠습니다.
- 배치(batch)란 머신러닝의 모델에서 모델의 가중치들을 한 번 업데이트시킬 때 사용하는 데이터들의 집합입니다.
- 배치 사이즈(batch size)는 말 그대로 배치의 크기, 즉 모델의 가중치들을 한 번 업데이트 시킬 때 사용하는 데이터의 개수를 의미합니다.
- 에포크(epoch)란 모델이 전체 데이터를 모두 사용하여 학습을 한 횟수를 의미합니다.
- 반복(iteration)이란 1 epoch에 필요한 batch의 갯수입니다 .
즉, 2500의 dataset을 크기가 100인 dataset 25개로 나누어 학습을 진행할 때, batch size가 100인 batch 25개가 생성되어 1 epoch당 25번의 iteration이 생깁니다.
앞서 살펴봤었던 경사하강법(Gradient Descent)은 한 번의 가중치 업데이트에 모든 데이터를 사용하므로 배치 사이즈가 전체 데이터 개수라고 할 수 있습니다. 이 때문에 경사하강법은 배치 경사하강법(Batch Gradient Descent, BGD)라고 불리기도 합니다.
1) 확률적 경사하강법(SGD)
경사하강법은 모든 데이터를 사용하여 기울기를 계산하고, 가중치들을 업데이트합니다. 이 방법은 손실 함수의 최솟값에 안정적으로 수렴할 수 있게 해 준다는 장점이 있지만, 모든 데이터를 사용하기 때문에 데이터가 많아지면 연산량이 매우 많고 메모리를 소비가 심하며 학습시간이 증가하여 결국 모델의 성능을 하락시키는 치명적인 단점이 있습니다.
이 단점을 해결하기 위해 나온 아이디어가 바로 확률적 경사하강법(이하 SGD)입니다. SGD는 이름에서 유추할 수 있듯이 확률적으로(랜덤하게) 데이터를 뽑아 한 번의 반복당 한 개의 데이터를 사용하여 가중치들을 업데이트하는 방법입니다. 즉 배치의 크기가 1입니다. 전체 데이터를 사용하는 경사하강법과 달리 SGD는 연산량이 비교적 매우 적어 손실 함수의 최적값에 빠른 수렴 속도를 보이고 메모리 소비량이 적습니다. 하지만 경사하강법과 달리 한 번의 반복에 한 번의 데이터만 사용하기 때문에 최적값에 수렴하지 않을 가능성이 있어 수렴 안정성이 낮고, 진폭이 매우 큽니다. 또한 연산량이 적어 GPU의 자원을 모두 활용하지 못한다는 단점이 있습니다.
이러한 BGD와 SGD의 절충안이 바로 미니배치 경사하강법입니다.
2) 미니배치 경사하강법(mini-batch Gradient Descent, MSGD)
미니배치 경사하강법은 배치의 크기를 사용자가 정하여 사용하는 방법입니다. 정해진 배치의 크기만큼씩 데이터를 여러 묶음으로 나누어 각 묶음에 대하여 경사하강법을 적용합니다.
이 방법은 BGD보다는 연산량이 적고, SGD보다 안정적으로 수렴한다는 장점을 가지고 있습니다.
예를 들어 1000개의 데이터를 이용하여 모델을 100번 반복하여 학습시킬 때, 각각의 방법에 대해 다음과 같이 정리할 수 있습니다.
optimizer | batch개수 | batch size | GD / epoch | iteration / epoch |
BGD | 1 | 1000 | 1 | 1 |
SGD | 1 | 1 | 1 | 1 |
MSGD1 | 10 | 100 | 10 | 10 |
MSGD2 | 5 | 200 | 5 | 5 |
BGD에 비해 높은 연산 속도와 SGD에 비해 높은 안정성 때문에 두 옵티마이저보다 자주 사용되는 옵티마이저입니다. 미니배치 경사하강법을 MSGD라고도 하는데 결국 SGD도 MSGD에서 배치사이즈를 1로 지정한 방식이기 때문에 MSGD를 줄여서 SGD라고 부르기도 합니다.
머신러닝에서 'SGD를 이용한다'라고 하면 대부분 '미니배치 경사하강법을 사용한다'라고 이해하시면 될 것 같습니다.
'AI 공부 > Machine Learning' 카테고리의 다른 글
회귀 (1) - 단순 선형 회귀(Simple Linear Regression) (2) | 2021.10.17 |
---|---|
머신러닝 - 회귀(Regression) VS 분류(Classification) (0) | 2021.10.13 |
모델이 학습하는 방법 (2) - 경사하강법의 한계 (0) | 2021.10.12 |
모델이 학습하는 방법 (1) - 손실함수(Loss function)와 경사하강법(Gradient Descent) (2) | 2021.10.06 |
머신러닝과 딥러닝의 기초 (0) | 2021.10.05 |