배치 경사하강법(BGD), 확률적 경사하강법(SGD), 미니배치 경사하강법(MBGD)
0. 용어 정리
-
배치(batch)란 머신러닝의 모델에서 모델의 가중치들을 한 번 업데이트시킬 때 사용하는 데이터들의 집합
-
배치 사이즈(batch size)는 말 그대로 배치의 크기, 즉 모델의 가중치들을 한 번 업데이트 시킬 때 사용하는 데이터의 개수
-
에포크(epoch)란 모델이 전체 데이터를 모두 사용하여 학습을 한 횟수
-
반복(iteration)이란 1 epoch에 필요한 batch의 갯수
(예시)
- 2500의 dataset을 크기가 100인 dataset 25개로 나누어 학습을 진행한다
- batch size가 100
- batch 25개가 생성
- 1 epoch당 25번의 iteration이 생김
- 배치는 GPU가 한번에 처리하는 데이터의 묶음
1. 배치 경사 하강법 (Batch Gradient Descent: BGD)
개념
-
경사 하강법 = 배치 경사 하강법
- 전체 학습 데이터를 하나의 배치로(배치 크기가 n) 묶어 학습시킴
- 보통 딥러닝 라이브러리에서 배치를 지정하지 않으면 이 방법을 쓰고 있음
계산 방법
- 전체 데이터에 대한 모델의 오차의 평균을 구함
- 이를 이용하여 미분을 통해 경사를 산출, 최적화를 진행
특징
- 전체 데이터를 통해 학습시키기 때문에, 가장 업데이트 횟수가 적다. (1 Epoch 당 1회 업데이트)
- 전체 데이터를 모두 한 번에 처리하기 때문에, 메모리가 가장 많이 필요하다.
- 항상 같은 데이터 (전체 데이터)에 대해 경사를 구하기 때문에, 수렴이 안정적이다. (아래 그림 참고)
- 단점은 이전 포스팅에서 언급한 4가지
2. 확률적 경사 하강법 (Stochastic Gradient Descent: SGD)
개념
- 전체 데이터 중 단 하나의 데이터를 이용하여 경사 하강법을 1회 진행(배치 크기가 1)
- 전체 학습 데이터 중 랜덤하게 선택된 하나의 데이터로 학습을 하기 때문에 확률적 이라 부름
특징
- 수렴에 Shooting이 발생한다
- 각 데이터에 대한 손실값의 기울기는 약간씩 다름
- 손실값의 평균이 아닌 개별 데이터에 대해 미분을 수행하면 기울기의 방향이 매번 크게 바뀐다.
- 각 데이터에 대한 손실값의 기울기는 약간씩 다름
- 배치 경사 하강법에 비해 적은 데이터로 빠르게 학습할 수 있다
- 그러나 결국 학습 데이터 전체에 대해 보편적으로 좋은 값을 내는 방향으로 수렴한다.
- 다만, 최저점(Global Minimum)에 안착하기는 어렵다.
- 또한, Shooting은 최적화가 지역 최저점Local Minima에 빠질 확률을 줄여준다.
효율성 측면
-
한 번에 하나의 데이터를 이용하므로 GPU의 병렬 처리를 잘 활용하지는 못한다.
-
1회 학습할 때 계산량이 줄어든다.
3. 미니 배치 확률적 경사 하강법 (Mini-Batch Stochastic Gradient Descent: MSGD)
개념
- SGD와 BGD의 절충안
- 전체 데이터를 batch_size개씩 나눠 배치로 학습시키는 것
- 배치 크기는 사용자가 지정
- 딥러닝 라이브러리 등에서 SGD를 얘기하면 최근에는 대부분 이 방법을 의미
(예시)
- 전체 데이터가 1000개인 데이터를 학습
- batch_size가 100이라면
- 전체를 100개씩 총 10 묶음의 배치로 나누어
- 1 Epoch당 10번 경사하강법을 진행
- batch_size가 100이라면
특징
- BGD보다 계산량이 적다. (Batch Size에 따라 계산량 조절 가능)
- Shooting이 적당히 발생한다. (Local Minima를 어느정도 회피할 수 있다.)
- Shooting이 발생하기는 하지만, 한 배치의 손실값의 평균으로 경사하강을 진행하기 때문에, Shooting이 심하지는 않다.
Batch Size 정하기
- Batch Size는 보통 2의 n승으로 지정
- GPU의 VRAM 용량에 따라 Out of memory가 발생하지 않도록 정해줘야
- 가능하면 학습데이터 갯수에 나누어 떨어지도록 지정하는 것이 좋다
- 마지막 남은 배치가 다른 사이즈이면 해당 배치의 데이터가 학습에 더 큰 비중을 갖게 되기 때문
(예시)
- 530 개의 데이터를 100개의 배치로 나눈다
- 각 배치 속 데이터는 1/100 만큼의 영향력을 갖게 됨
- BUT 마지막 배치(30개)의 데이터는 1/30의 영향력을 갖게 됨
- -> 마지막이 과평가되는 경향
- 그렇기 때문에 보통 마지막 배치의 사이즈가 다를 경우 이는 버리는 방법을 사용
reference