Приємне запитання. У літературі я бачив багато правил зупинки, і для кожного є свої переваги та недоліки, залежно від контексту. Наприклад, optim
функція R має принаймні три різні правила зупинки:
maxit
, тобто заздалегідь визначена максимальна кількість ітерацій. Ще одна аналогічна альтернатива, яку я бачив у літературі, - це максимальна кількість секунд до вичерпання часу. Якщо все, що вам потрібно, - приблизне рішення, це може бути дуже розумним. Насправді, існують класи моделей (особливо лінійних моделей), для яких рання зупинка є аналогічною встановленню Гаусса попереднього значення ваших параметрів. Частіст сказав, що у вас є "норма L2", а не попередня, але вони також вважають це розумною справою. Я лише прокинув цей документ , але він говорить про зв'язок між ранньою зупинкою та регуляризацією і може допомогти вам надати більше інформації. Але коротка версія - так, рання зупинка може бути абсолютно поважною справою, залежно від того, що ти
abstol
, тобто зупиняються, коли функція стає "досить близькою" до нуля. Це може не стосуватися вас (це не здається, що ви очікуєте нуля), тому я пропускаю його.
reltol
, що схоже на вашу другу пропозицію - зупиніться, коли поліпшення опуститься нижче порогового значення. Я насправді не знаю, скільки теорії існує з цього приводу, але ви, мабуть, схильні отримувати менші мінімуми таким чином, ніж при малій максимальній кількості ітерацій. Якщо це важливо для вас, то, можливо, варто запустити код для додаткових ітерацій.
Інша сім'я правил зупинки пов'язана з оптимізацією функції витрат на наборі даних перевірки (або з перехресною валідацією), а не з навчальними даними. Залежно від того, для чого ви хочете використовувати свою модель, ви, можливо, захочете зупинитися, перш ніж дійти до місцевого мінімуму за вашими даними про навчання, оскільки це може спричинити надмірне оснащення. Я впевнений, що Тревор Хасті писав про хороші способи цього, але не можу згадати цитування.
Інші можливі варіанти пошуку нижчих мінімумів за розумну кількість часу можуть включати:
Стохастичний градієнтний спуск, який вимагає одночасно оцінювати градієнти для невеликої частини ваших даних (наприклад, одну точку даних для "чистого" SGD або невеликі міні-партії).
Більш вдосконалені функції оптимізації (наприклад, методи Ньютона або Conjugate Gradient), які використовують інформацію про кривизну вашої цільової функції, щоб допомогти вам орієнтуватися в кращих напрямках і приймати кращі розміри кроків під час руху вниз.
Термін "імпульс" у вашому правилі оновлення, щоб ваш оптимізатор зробив кращу роботу кочення вниз, а не обмежував стіни каньйону у вашій цільовій функції.
Усі ці підходи обговорюються в цих лекційних записках, які я знайшов в Інтернеті.
Сподіваюся, це допомагає!
Редагуйте о, і ви також можете спробувати отримати кращі початкові значення (наприклад, вирішивши більш просту версію проблеми), щоб зайняти менше ітерацій, щоб наблизитись до оптимального з вашого "теплого початку".