Stochastic Gradient Descent
Hạ gradient ngẫu nhiên
Bạn muốn tìm quán phở ngon nhất thành phố. Cách nào nhanh nhưng vẫn đáng tin?
Hình minh họa
Nhấn Chạy đua để so sánh cả 3 phương pháp tìm cực tiểu trên cùng bề mặt loss.
SGD đánh đổi sự ổn định lấy tốc độ — giống Grab bike len lỏi qua đường đông đúc: nhanh nhưng lắc lư. Mini-batch GD là Grab car: ổn định hơn, vẫn nhanh, và là lựa chọn mặc định của mọi framework deep learning!
Dataset có 1.000.000 ảnh. Batch GD cần tính gradient trên CẢ triệu ảnh mỗi bước. Vấn đề lớn nhất là gì?
Giải thích
Ba biến thể của Gradient Descent khác nhau ở lượng dữ liệu dùng để ước lượng gradient mỗi bước:
| Phương pháp | Dữ liệu/bước | Đường đi | Khi nào dùng |
|---|---|---|---|
| Batch GD | Toàn bộ N mẫu | Mượt mà, thẳng hướng | Dataset nhỏ (< 10K mẫu) |
| SGD | 1 mẫu | Zigzag, nhiễu nhiều | Online learning, dữ liệu streaming |
| Mini-batch | B mẫu (32-256) | Hơi dao động, nhưng hướng đúng | Mặc định cho mọi bài toán |
Công thức cập nhật cho cả 3 đều giống nhau, chỉ khác cách tính gradient:
Với = N (Batch), = 1 (SGD), hoặc = B nhỏ (Mini-batch).
import torch
from torch.utils.data import DataLoader
# Mini-batch: chia dataset thành các lô nhỏ
loader = DataLoader(dataset, batch_size=64, shuffle=True)
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
for epoch in range(10):
for batch_x, batch_y in loader: # mỗi lô 64 mẫu
pred = model(batch_x) # forward pass
loss = loss_fn(pred, batch_y) # tính loss trên lô nhỏ
loss.backward() # tính gradient
optimizer.step() # cập nhật trọng số
optimizer.zero_grad() # xóa gradient cũBạn tăng batch size từ 32 lên 256 nhưng giữ nguyên learning rate. Điều gì có thể xảy ra?
- Batch GD tính gradient trên toàn bộ dữ liệu: ổn định nhưng chậm và tốn RAM.
- SGD cập nhật sau mỗi mẫu: nhanh nhưng dao động mạnh (nhiễu).
- Mini-batch GD (32-256 mẫu) là mặc định: cân bằng tốc độ + ổn định + vừa GPU.
- Noise của SGD giúp thoát local minima — một dạng regularization tự nhiên.
- Quy tắc: tăng batch size gấp đôi → tăng learning rate gấp đôi (linear scaling).
Kiểm tra hiểu biết
Tại sao noise trong SGD lại có thể là ưu điểm?