Thực tế là đoạn mã return np.linalg.norm(grad(theta_new))/len(theta_new) < 1e-3
không lấy chuẩn của gradient rồi chia cho số chiều.
Thay vào đó, nó chỉ đơn giản là tính độ lớn của gradient ( np.linalg.norm(grad(theta_new))
) và so sánh nó với một ngưỡng (trong trường hợp này là 1e-3
).
Việc kiểm tra độ lớn của gradient để xác định điều kiện dừng là phổ biến trong thuật toán Gradient Descent. Ý tưởng là nếu độ lớn của gradient đủ nhỏ, tức là gradient không thay đổi nhiều nữa và gần với 0, thì ta có thể cho rằng thuật toán đã tìm được một điểm cực tiểu cục bộ hoặc điểm tối ưu của hàm mất mát.
Trong trường hợp này, ngưỡng được đặt là 1e-3
để kiểm tra xem độ lớn của gradient có nhỏ hơn mức này hay không. Nếu nhỏ hơn, thuật toán sẽ dừng lại và trả về kết quả.
Với những bài viết khác về Gradient Descent, có thể có những phương pháp kiểm tra điều kiện dừng khác nhau. Tuy nhiên, phổ biến nhất là kiểm tra độ lớn của gradient, nhưng không cần chia cho số chiều như trong trường hợp trên.