

<aside> ✔️ 일반 경사 하강법의 경우, **Gradient를 한번 업데이트 하기 위해 모든 학습 데이터를 사용(batch size = train data 수)**함 (전체 데이터셋에 대한 error 구한 후 기울기를 한번만 계산하여 parameter 업데이트함)
</aside>
[문제점] 학습샘플의 개수가 증가한다면 계산량이 지나치게 많아짐 & 시간 많이..... 😭


<aside> ✔️
**SGD**의 경우, Gradient를 한번 업데이트 하기 위해 일부의 데이터(batch size = 1)만을 사용함
</aside>
<aside> ✔️ 전체 훈련세트 중, 랜덤하게 하나의 데이터를 선택해 기울기를 업데이트하기 때문에 **'확률적'(Stochastic)**이라고 부릅
</aside>
수렴에 Shooting이 발생
-1개의 데이터마다 비용함수의 기울기는 약간씩 다르기 때문에, 각각의 데이터에 대해 미분을 수행하면 기울기의 방향이 매번 크게 바뀜
-전역 최저점(Global Minimum)에 수렴하기는 어렵지만, 지역 최저점(Local Minimum)에 빠질 확률을 줄여줌
훈련데이터를 1개씩 처리하기 때문에, 벡터화 과정에서 대부분의 속도를 잃으며 GPU의 병렬 처리를 잘 활용하지 못함.

<aside> ✔️ 배치 경사하강법(BGD)과 확률적 경사하강법(SGD)의 절충안으로, 전체 훈련세트를 1~M 사이의 적절한 batch size로 나누어 학습 (ex. 전체 훈련세트가 5000000개일 때, 배치 사이즈를 100000개라고 한다면, 50개의 묶음이 나오게 되므로 기울기는 1 Epoch 당 50번 업데이트)
</aside>