공부하는 안씨의 기록
[최적화] Batch Size와 경사 하강법(Gradient Descent) 본문
이전 게시글에서 각 하이퍼파라미터의 의미와 용도에 대해 배워보았다. 그런데, 이런 하이퍼파라미터를 변경시켜 학습을 진행하면, 구체적으로 어떻게 달라지는 것일까?
이번 게시글에서는 데이터가 5개라고 가정하고, batch_size를 1에서 2로 늘릴 때 어떤 변화가 일어나는지 경사하강법과 연관시켜 설명해보도록 한다.
기본 전제
아래와 같이, 5개의 데이터 개수에 대해 learning rate와 epoch는 고정시키고, batch size만 1에서 2로 변경하면 학습 진행이 어떻게 달라지는지에 대해 이야기해보겠다.
(데이터 개수라는 것은 학습시키기 위해 준비해 둔 데이터셋의 개수를 의미한다.)
- 데이터 개수: 5개 (D = [D1, D2, D3, D4, D5])
- learning rate: 0.01 (동일)
- batch_size: 1 → 2로 변경할 것.
- epoch: 2회 (동일)
1. batch_size = 1 (Stochastic Gradient Descent, SGD)
batch_size = 1일 때는 한 번의 업데이트마다 하나의 데이터 샘플로 기울기를 계산하고 가중치를 즉시 업데이트한다.
즉, SGD(Stochastic Gradient Descent, 확률적 경사 하강법)를 사용한다.
과정
- Epoch 1:
- D1 → 가중치 업데이트
- D2 → 가중치 업데이트
- D3 → 가중치 업데이트
- D4 → 가중치 업데이트
- D5 → 가중치 업데이트
- Epoch 2:
다시 D1부터 D5까지 한 번씩 모두 반복하며 가중치를 업데이트한다.
총 업데이트 횟수
총 업데이트 수=5×2 (데이터 개수×Epoch 수)=10 (번)
즉, 위와 같은 하이퍼파라미터 세팅을 바탕으로 총 10번 업데이트 된다.
특징
- 매우 빠른 업데이트
- 기울기 진동이 심할 수 있음 → 최적값 근처에서 불안정할 수 있다.
- 메모리 사용량 적음
2. batch_size = 2 (Mini-Batch Gradient Descent)
batch_size = 2일 때는 두 개의 데이터 샘플을 사용해 평균 기울기를 계산하고 가중치를 업데이트한다.
즉, 전체 데이터셋을 배치사이즈로 나누어(이때, 배치 사이즈는 2 이상) 순차적으로 계산하는 Mini-Batch Gradient Descent를 사용한다. 주어진 전체 데이터셋은 5개이므로, 2개씩 나누어 주면 된다. 해당 과정은 아래와 같이 나타낼 수 있다.
과정
- Epoch 1:
- D1, D2 → 기울기 평균 계산 후 가중치 업데이트
- D3, D4 → 기울기 평균 계산 후 가중치 업데이트
- D5 (5개 데이터 중 하나만 남았으므로, 마지막 배치는 하나만 사용) → 가중치 업데이트
- Epoch 2:
다시 D1부터 D5까지 위 과정 반복
총 업데이트 횟수
총 업데이트 수=3×2 (Mini-batches 수×Epoch 수)=6 (번)
즉, 위와 같은 하이퍼파라미터 세팅을 바탕으로 총 6번 업데이트 된다.
특징
- 기울기 진동이 줄어듦 → 더 안정적인 학습 가능
- 업데이트 횟수 감소 → 계산 속도 증가
- 메모리 사용량 적당
Batch Size와 Learning Rate, Epoch의 관계
1. Batch Size가 작으면 (batch_size = 1)
- 기울기 진동이 크다 → 다양한 경로로 최적점을 탐색할 가능성이 높다.
- Learning Rate를 작게 설정해야 안정적인 학습이 가능하다.
- Epoch 수는 많아야 수렴할 가능성이 높다.
2. Batch Size가 크면 (batch_size = 2 또는 그 이상)
- 기울기 진동이 줄어들어 더 정확한 기울기 추정 가능
- Learning Rate를 더 크게 설정할 수 있다.
- Epoch 수는 작아도 비교적 빠르게 수렴할 수 있다.
batch_size가 1에서 2로 변경되면서 생기는 변화
- 업데이트 횟수가 줄어든다.
- batch_size = 1 → 10번 업데이트 (본 게시글의 예제)
- batch_size = 2 → 6번 업데이트
- 기울기 진동이 감소해 더 안정적인 학습이 가능하다.
- 진동이 줄어들면서 최적값 근처에서 더 정확히 수렴할 수 있다.
- Learning Rate를 더 크게 설정해도 안전하다.
- 작은 batch_size에서는 진동이 크기 때문에 작은 learning rate가 필요하지만,
- batch_size = 2로 늘리면 진동이 줄어 더 큰 learning rate도 허용할 수 있다.
정리
- batch_size는 한 번의 가중치 업데이트에 사용할 데이터의 크기로, 학습 속도와 성능에 영향을 미친다.
- 작은 batch_size는 업데이트가 빠르지만 불안정할 수 있고,
- 큰 batch_size는 업데이트가 안정적이지만 계산 비용이 더 든다.
- Learning Rate와 Epoch는 batch_size에 따라 조정해야 한다. 작은 batch_size일 때는 더 작은 learning rate와 많은 epoch가 필요할 수 있다.
'인공지능' 카테고리의 다른 글
| [모델학습] 하이퍼파라미터(Hyperparameter), 학습 결과 (0) | 2025.02.25 |
|---|---|
| [머신러닝] 선형회귀와 경사하강법 (수식 포함) (1) | 2025.02.13 |
| [머신러닝] 지도학습, 비지도학습, 자기지도학습, 강화학습 (1) | 2025.02.10 |