Gradient descent — máy học bằng cách nào

Bài 2/720 phút

Với mô hình lớn, không có nghiệm đóng. Thay vào đó ta đi xuống dốc: gradient ∇L chỉ hướng loss tăng nhanh nhất, nên cập nhật tham số theo hướng ngược lại:

θ ← θ − lr · ∇L(θ)

lr (learning rate) là độ dài mỗi bước: quá nhỏ thì học chậm, quá lớn thì loss dao động hoặc tăng vọt.

gradient_descent.py
w, b, lr = 0.0, 0.0, 0.1
x = np.array([0.0, 1.0, 2.0]); y = np.array([1.0, 3.0, 5.0])   # y = 2x + 1
for step in range(200):
    e = w * x + b - y                   # sai số
    dw = 2 * (e * x).mean()             # ∂MSE/∂w
    db = 2 * e.mean()                   # ∂MSE/∂b
    w, b = w - lr * dw, b - lr * db
print(round(w, 3), round(b, 3))         # ≈ 2.0, 1.0

Các biến thể bạn sẽ gặp: SGD/mini-batch (mỗi bước chỉ dùng một phần dữ liệu — nhanh hơn, có nhiễu giúp thoát điểm xấu), Momentum và Adam (tự điều chỉnh bước cho từng tham số — mặc định trong đa số mô hình hiện nay).

Nếu loss thành nan sau vài bước, việc đầu tiên là giảm learning rate đi 10 lần.

?Gradient của loss theo w đang dương. Gradient descent sẽ làm gì với w?

Luyện tập ngay

Viết code và chấm tự động — có trợ lý AI gợi ý khi bí.