본문 바로가기
C.W.K.
Stream
Lesson 04 of 09 · published

경사 하강법과 미니배치

~22 min · sgd, minibatch, noise

Level 0호기심
0 XP0/73 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

경사 하강법의 3가지 방식

배치(전체) 경사 하강법: 전체 데이터셋으로 기울기를 계산해 한 단계씩 갱신하고, 이 과정을 반복해. 변화는 부드럽지만 계산 비용이 커. 에폭마다 기울기를 1개 계산하며, 데이터셋 전체가 메모리에 들어가지 않으면 사용할 수 없어.

SGD: 예시 하나로 기울기를 계산하고 한 단계 갱신한 뒤 반복해. 변화가 불규칙하지만 빠르고, GPU를 효율적으로 활용하기는 어려워.

미니배치 SGD: 작은 배치(16, 32, 256,...)로 기울기를 계산해 한 단계씩 갱신해. 일부 국소 최솟값에서 빠져나올 만큼 불규칙하면서도 안정적으로 학습할 만큼 부드럽고, GPU를 활용할 수 있을 만큼 배치가 커. 실제로는 대부분 이 방식을 써.

잡음이 일반화에 도움이 되는 이유

미니배치를 추출할 때 생기는 무작위성은 암묵적인 규제 역할을 해. 옵티마이저는 실제 기울기를 잡음이 섞인 값으로 추정해 따라가므로, 뾰족한 국소 최솟값에 지나치게 빠르게 안착하지 않아. 뾰족한 최솟값은 평평한 최솟값보다 일반화 성능이 나빠. 그래서 미니배치 SGD는 학습 손실이 더 높은 값에 수렴하더라도, 전체 배치로 더 부드럽게 갱신하는 방식보다 일반화 성능이 좋은 경우가 많아.

팁: 배치가 클수록 기울기의 잡음이 줄어들고, 학습률도 조금 더 크게 쓸 수 있어. 경험칙으로는 선형 비례 조정을 사용해. 하지만 일정 크기를 넘으면 배치를 더 키워도 실제 학습 시간이 줄지 않고 일반화 성능까지 나빠질 수 있어. 배치 크기와 학습률은 둘 다 조정해 봐.

현대 옵티마이저와 미니배치

Adam과 AdamW 같은 현대 옵티마이저는 매개변수마다 기울기의 평균과 분산에 대한 이동 추정치를 유지해. 덕분에 안정적인 학습에서 배치 크기의 중요성이 예전보다 줄었어. 그래도 하드웨어 조건인 메모리와 처리량, 그리고 작은 배치가 규제에 더 유리한 경우가 많은 일반화 성능을 고려해 배치 크기를 조정해야 해. 다만 이제는 심한 기울기 잡음을 통과할 때마다 옵티마이저를 일일이 돌볼 필요는 없어.

원칙: 안정적으로 학습되면서 VRAM에 들어가는 가장 큰 배치를 골라. 모델이 제대로 작동하면 다시 검토해. 실제 학습 시간이 같아도 더 작은 배치가 더 잘 학습되는 경우가 있어.

Code

PyTorch로 구현한 배치 SGD 단계·python
import torch
from torch import nn, optim
from torch.utils.data import DataLoader, TensorDataset

X = torch.randn(10000, 20)
y = torch.randint(0, 5, (10000,))
loader = DataLoader(TensorDataset(X, y), batch_size=128, shuffle=True)

model = nn.Sequential(nn.Linear(20, 64), nn.ReLU(), nn.Linear(64, 5))
opt   = optim.SGD(model.parameters(), lr=0.05)
loss_fn = nn.CrossEntropyLoss()

for epoch in range(3):
    running = 0.0
    for xb, yb in loader:
        opt.zero_grad()
        logits = model(xb)
        loss = loss_fn(logits, yb)
        loss.backward()
        opt.step()
        running += loss.item() * xb.size(0)
    print(f"epoch {epoch} avg loss: {running / len(loader.dataset):.4f}")

External links

Exercise

같은 모델을 배치 크기 16, 64, 512로 각각 학습해. 에폭당 단계 수는 일정하게 유지하고, 최종 검증 정확도를 그래프로 그려. 실제 학습 시간이 가장 짧은 배치와 일반화 성능이 가장 좋은 배치는 각각 어느 것인지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.