Câu hỏi hay. Tôi đã thấy rất nhiều quy tắc dừng lại trong tài liệu, và có những ưu điểm và nhược điểm đối với từng quy tắc, tùy thuộc vào ngữ cảnh. Các optim
chức năng trong R, ví dụ, có ít nhất ba quy tắc dừng khác nhau:
maxit
, tức là số lần lặp tối đa được xác định trước. Một cách khác tương tự tôi từng thấy trong tài liệu là số giây tối đa trước khi hết thời gian. Nếu tất cả những gì bạn cần là một giải pháp gần đúng, thì đây có thể là một điều rất hợp lý. Trong thực tế, có các lớp mô hình (đặc biệt là mô hình tuyến tính) mà việc dừng sớm tương tự như đặt Gaussian trước các giá trị tham số của bạn. Một người thường xuyên sẽ nói rằng bạn có một "định mức L2" chứ không phải trước đó, nhưng họ cũng sẽ nghĩ đó là một điều hợp lý để làm. Tôi chỉ đọc lướt qua bài viết này , nhưng nó nói về mối quan hệ giữa dừng sớm và chính quy hóa và có thể giúp bạn hướng đến nhiều thông tin hơn. Nhưng phiên bản ngắn là, vâng, dừng sớm có thể là một điều hoàn toàn đáng trân trọng, tùy thuộc vào những gì bạn '
abstol
, tức là dừng khi hàm "đủ gần" về không. Điều này có thể không phù hợp với bạn (có vẻ như bạn không mong đợi số 0), vì vậy tôi sẽ bỏ qua nó.
reltol
, giống như đề xuất thứ hai của bạn - dừng khi cải thiện giảm xuống dưới ngưỡng. Tôi thực sự không biết có bao nhiêu lý thuyết về điều này, nhưng có lẽ bạn sẽ có xu hướng đạt cực tiểu thấp hơn theo cách này với số lần lặp tối đa nhỏ. Nếu điều đó quan trọng với bạn, thì có thể đáng để chạy mã cho nhiều lần lặp hơn.
Một nhóm quy tắc dừng khác phải thực hiện với việc tối ưu hóa hàm chi phí trên tập dữ liệu xác thực (hoặc xác thực chéo) thay vì trên dữ liệu đào tạo. Tùy thuộc vào những gì bạn muốn sử dụng mô hình của bạn cho, bạn có thể muốn dừng tốt trước khi bạn đạt đến mức tối thiểu cục bộ trên dữ liệu đào tạo của bạn, vì điều đó có thể liên quan đến việc thừa. Tôi khá chắc chắn Trevor Hastie đã viết về những cách tốt để làm điều này, nhưng tôi không thể nhớ được trích dẫn.
Các tùy chọn có thể khác để tìm cực tiểu thấp hơn trong một khoảng thời gian hợp lý có thể bao gồm:
Giảm dần độ dốc ngẫu nhiên, chỉ yêu cầu ước tính độ dốc cho một phần nhỏ dữ liệu của bạn tại một thời điểm (ví dụ: một điểm dữ liệu cho SGD "thuần túy" hoặc các lô nhỏ).
Các hàm tối ưu hóa nâng cao hơn (ví dụ: các phương thức kiểu Newton hoặc Conjugate Gradient), sử dụng thông tin về độ cong của hàm mục tiêu của bạn để giúp bạn chỉ ra các hướng tốt hơn và có kích thước bước tốt hơn khi bạn di chuyển xuống dốc.
Thuật ngữ "động lượng" trong quy tắc cập nhật của bạn, để trình tối ưu hóa của bạn thực hiện công việc xuống dốc tốt hơn thay vì vượt qua các bức tường hẻm núi trong chức năng mục tiêu của bạn.
Những cách tiếp cận này đều được thảo luận trong các ghi chú bài giảng mà tôi tìm thấy trên mạng.
Hi vọng điêu nay co ich!
Chỉnh sửa oh, và bạn cũng có thể cố gắng để có được các giá trị khởi đầu tốt hơn (ví dụ: bằng cách giải quyết một phiên bản đơn giản hơn của vấn đề) để có ít lần lặp hơn để tiến gần đến mức tối ưu từ "khởi đầu ấm áp" của bạn.