Gradient Descent với Momentum

mọi người cho mình hỏi chỗ điều kiện dừng của thuật toán Gradient Descent với Momentum!

return np.linalg.norm(grad(theta_new))/len(theta_new) < 1e-3

sao lại có dòng này ấy. mong mn giúp mình cảm ơn. link bài viết https://machinelearningcoban.com/2017/01/12/gradientdescent/
a|384x89

Trong đoạn mã bạn đã cung cấp, dòng return np.linalg.norm(grad(theta_new))/len(theta_new) < 1e-3 được sử dụng để kiểm tra điều kiện dừng của thuật toán Gradient Descent với Momentum. Điều kiện này kiểm tra xem gradient của tham số theta_new có đủ nhỏ hay không để coi thuật toán đã hội tụ hay chưa.

Chi tiết hơn, đoạn mã trên tính toán độ lớn của gradient thông qua hàm np.linalg.norm(grad(theta_new)) và chia cho số chiều của vector gradient len(theta_new) . Sau đó, nó kiểm tra xem giá trị này có nhỏ hơn 1e-3 hay không, trong trường hợp này 1e-3 được sử dụng như một ngưỡng để xác định sự hội tụ. Nếu giá trị này nhỏ hơn ngưỡng, thuật toán được coi là đã hội tụ và kết thúc, ngược lại, thuật toán sẽ tiếp tục lặp lại quá trình Gradient Descent để tìm kiếm điểm tối ưu hơn.

Trong bài viết mà bạn đính kèm, ngưỡng 1e-3 được sử dụng làm một giá trị mặc định để kiểm tra sự hội tụ. Bạn có thể thay đổi giá trị này tuỳ thuộc vào bài toán cụ thể của bạn và yêu cầu về độ chính xác.

cảm ơn a đã trả lời câu hỏi của e. ý em là sao lại lấy chuẩn của đạo hàm rồi chia cho số chiều vậy anh. bình thường em nghĩ nếu trong không gian một chiều ta thấy đạo hàm tại điểm đó gần tới không tới một ngưỡng cho phép thì ta có thể dừng thuật toán lại được. còn trong trường hợp n chiều thì tác giả lại lấy chuẩn chi cho số chiều vậy ạ

1 Like

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.

1 Like

cái N = số sample = len(theta) đó là tính thêm trong hàm lost đó
hàm lost bình thường là

L(y, \hat{y}) = \frac{1}{2}||y - \hat{y}||_2^2

Tuy nhiên trong bài tác giả đã có nói

Chú ý : hàm này có khác một chút so với hàm tôi nêu trong bài Linear Regression. Mẫu số có thêm N là số lượng dữ liệu trong training set. Việc lấy trung bình cộng của lỗi này nhằm giúp tránh trường hợp hàm mất mát và đạo hàm có giá trị là một số rất lớn, ảnh hưởng tới độ chính xác của các phép toán khi thực hiện trên máy tính. Về mặt toán học, nghiệm của hai bài toán là như nhau.

Nên lost khi này thành

L(y, \hat{y}) = \frac{1}{2N}||y - \hat{y}||^2_2

Từ đó, ta hiểu được điều kiện dừng của bài trên tính khi lost đủ nhỏ thì nó sẽ dừng.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?