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.
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.0Cá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í.