전공/인공지능, ML, DL
Batch, mini batch 배치와 미니배치 그리고 여러가지 경사하강법
import ysy
2022. 1. 8. 16:08
GPU는 병렬 연산에 특화되었기 때문에 한번에 여러 데이터를 처리하는 것이 효율적이다.
여기서 GPU가 한 번에 처리하는 데이터의 묶음을 배치(Batch)라고 한다.
mini batch는 여러가지 경사하강법을 통해 알아보자.
배치경사하강법(Batch Gradient Descent, BHD)
전체 학습 데이터를 하나의 batch(묶음)으로 묶어 학습시키는 경사하강법이다.
전체 데이터에 대한 모델의 오차의 평균을 구한 다음 미분을 구하고 최적화 하는 가장 기본적인 방법이다.
이 때 전체 데이터를 모두 한 번에 처리하여 메모리가 많이 필요하고 업데이트 횟수도 적다.
항상 전체에 대해 경사하강법을 적용하기 때문에 안정적으로 수렴한다.
확률적 경사하강법(Stochastic Gradient Descent, SGD)
전체 데이터 중 단 하나의 데이터를 이용하여 경사 하강법을 1회 진행하는 경사하강법이다.
배치 크기를 1이라고 볼 수 있고 이 때 하나의 데이터는 랜덤으로 선택된다.
배치 크기가 1이라는 것은 GPU의 병렬처리를 잘 이용할 수 없다는 뜻이기다 하다.
속도가 빠르지만 수렴에 shooting이 발생한다.
기울기의 방향이 매번 크게 바뀌기 때문이다.
shooting으로 인해 local minima에 빠질 확률을 줄여준다.
미니배치 확률적 경사하강법(Mini-Batch Stochastic Gradient Descent, MSGD)
전체 데이터를 batch_size개로 나누어 한 batch(묶음)씩 학습하는 경사하강법이다.
예를 들어 total train data가 1024개이고 batch_size를 64개로 설정하면,
한 epoch에 32개의 data 학습을 총 16번 실행하게 된다.
BGD와 SGD의 절충안으로, 최근에는 대부분 이 방법을 사용한다.
미니배치 확률적 경사하강법을 사용할 때는 batch_size를 적절히 정하는 것이 중요하다.
보통은 2의 n제곱으로 지정하는데, 사용하는 GPU의 RAM용량에 맞게 적절하게 조절해야 한다.
너무 작으면 GPU의 병렬처리 효율이 떨어지고,
너무 크면 Out of memory error가 발생하여 학습할 수 없다.
또한 가능하다면 total data 개수에 딱 떨어지게 정해야 한다.
왜냐하면 마지막 batch만 다른 사이즈면 해당 batch의 data가 학습에 큰 비중을 갖게 되기 때문이다.
이를 과평가라고 하는데, 이를 막기위해 일반적으로는 마지막 배치는 버린다.
반응형