Як визначити умову закінчення для спуску градієнта?


24

Власне, я хотів запитати вас, як я можу визначити умову, що закінчується для спуску градієнта.

Чи можу я зупинити його на основі кількості ітерацій, тобто враховуючи значення параметрів для, скажімо, 100 ітерацій?

Або я повинен зачекати так, що різні в двох параметрах значення "new" і "old" дуже малі на порядок скажемо ? Це, безумовно, займе багато часу.10-6

Який найкращий спосіб? У моєму випадку навіть одна ітерація потребує значного часу. У цій ситуації, якщо я зачекаю другої умови, можливо, це може зайняти навіть тижні.

Отже, який підхід я повинен використовувати. Як вирішити цей сценарій?


1
Це прямо не вказано, але я припускаю, що ви намагаєтесь знайти MLE. Ваш результат справді повністю залежить від вашого простору параметрів, вашої вірогідності та ваших потреб (так само найкраще не визначено). Якщо ви просто шукаєте теоретичні обгрунтування, такі як асимптотична ефективність; в умовах Le'Cam ви можете просто використовувати одномоментний MLE (Згідно з подальшим припущенням, що ви використовуєте метод Ньютона та функцію оцінки для спуску градієнта). Це вимагає, щоб ваше початкове значення було таким, що з вірогідністю. н1/2θ^0θ
Джонатан Лисич

тому зачекайте, коли ви сказали, що "новий" - "старий" є достатньо малим, це неправильна умова припинення для спуску градієнта? (якщо застосовуються фіксовані точки, як теореми, ця умова має бути нормальною?)
Чарлі Паркер

Можна зупинитися, коли будь-яке з: значень функції , або градієнти , або параметри , здається, перестане рухатися, будь-яке відносне чи абсолютне значення. Але на практиці параметри .. занадто багато, тому вони складаються, але кожна програма робить це по-різному. Див. Відхилення Mathworks та критерії зупинки для зображення. fifiхi3×2ftolabs ftolrelxtolabs
деніс

Відповіді:


19

Приємне запитання. У літературі я бачив багато правил зупинки, і для кожного є свої переваги та недоліки, залежно від контексту. Наприклад, optimфункція R має принаймні три різні правила зупинки:

  • maxit, тобто заздалегідь визначена максимальна кількість ітерацій. Ще одна аналогічна альтернатива, яку я бачив у літературі, - це максимальна кількість секунд до вичерпання часу. Якщо все, що вам потрібно, - приблизне рішення, це може бути дуже розумним. Насправді, існують класи моделей (особливо лінійних моделей), для яких рання зупинка є аналогічною встановленню Гаусса попереднього значення ваших параметрів. Частіст сказав, що у вас є "норма L2", а не попередня, але вони також вважають це розумною справою. Я лише прокинув цей документ , але він говорить про зв'язок між ранньою зупинкою та регуляризацією і може допомогти вам надати більше інформації. Але коротка версія - так, рання зупинка може бути абсолютно поважною справою, залежно від того, що ти

  • abstol, тобто зупиняються, коли функція стає "досить близькою" до нуля. Це може не стосуватися вас (це не здається, що ви очікуєте нуля), тому я пропускаю його.

  • reltol, що схоже на вашу другу пропозицію - зупиніться, коли поліпшення опуститься нижче порогового значення. Я насправді не знаю, скільки теорії існує з цього приводу, але ви, мабуть, схильні отримувати менші мінімуми таким чином, ніж при малій максимальній кількості ітерацій. Якщо це важливо для вас, то, можливо, варто запустити код для додаткових ітерацій.

Інша сім'я правил зупинки пов'язана з оптимізацією функції витрат на наборі даних перевірки (або з перехресною валідацією), а не з навчальними даними. Залежно від того, для чого ви хочете використовувати свою модель, ви, можливо, захочете зупинитися, перш ніж дійти до місцевого мінімуму за вашими даними про навчання, оскільки це може спричинити надмірне оснащення. Я впевнений, що Тревор Хасті писав про хороші способи цього, але не можу згадати цитування.

Інші можливі варіанти пошуку нижчих мінімумів за розумну кількість часу можуть включати:

  • Стохастичний градієнтний спуск, який вимагає одночасно оцінювати градієнти для невеликої частини ваших даних (наприклад, одну точку даних для "чистого" SGD або невеликі міні-партії).

  • Більш вдосконалені функції оптимізації (наприклад, методи Ньютона або Conjugate Gradient), які використовують інформацію про кривизну вашої цільової функції, щоб допомогти вам орієнтуватися в кращих напрямках і приймати кращі розміри кроків під час руху вниз.

  • Термін "імпульс" у вашому правилі оновлення, щоб ваш оптимізатор зробив кращу роботу кочення вниз, а не обмежував стіни каньйону у вашій цільовій функції.

Усі ці підходи обговорюються в цих лекційних записках, які я знайшов в Інтернеті.

Сподіваюся, це допомагає!

Редагуйте о, і ви також можете спробувати отримати кращі початкові значення (наприклад, вирішивши більш просту версію проблеми), щоб зайняти менше ітерацій, щоб наблизитись до оптимального з вашого "теплого початку".


Проблема вибору фіксованої кількості ітерацій полягає в тому, що якщо ви не зможете чітко побудувати свою криву витрат (і у неї невеликий шум), то важко знати, скільки ітерацій занадто багато, особливо якщо функція оптимізації складна і хто знає скільки локальних мінімумів у вас є, і якщо ви рандомізували ініціалізацію, це ще більше погіршує проблему, оскільки це ще важче здогадається, що таке хороша "мала" кількість ітерацій. Як ти вирішуєш ці проблеми насправді, якщо ти хочеш реально скористатися ранньою зупинкою? Як ви переконайтеся, що не робите над стріляниною та не підкреслюєте занадто багато?
Чарлі Паркер

Я хотів би уточнити, що reltolозначає (тобто коли перестає бути "поліпшенням"). Перше вдосконалення означає зниження функції витрат. Тож я припускаю, що ви маєте на увазі те, що коли вартість витрат перестає зменшуватися (або починає збільшуватися) одна зупинка, правда? Один насправді не робить "| старий - новий |" тип правила оновлення, правда?
Чарлі Паркер

1
abstolПараметр має сенс тільки тоді , коли ви приймаєте допуск градієнта функції витрат, а не як така функція витрат. У локальному оптимізаторі значення градієнта дорівнює нулю; але не значення функції.
Маріо Бесерра

"теплий старт" - дуже розумний трюк! дякую
Мехді ЛАМРАНІ
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.