Чи марно наближати градієнти до оптимізатора на основі градієнта?


9

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

[EDIT]

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

  • Моє питання з автоматичною диференціацією полягає в тому, що завжди здається, що це є улов. Або бібліотека AD не може поширюватись на зовнішні дзвінки з бібліотеки (наприклад, BLAS), або вам доведеться переробляти робочий процес настільки різко, що це справляє біль ... особливо якщо ви працюєте з чутливими мовами типу. Мої проблеми з AD - це окрема тема. Але я хочу вірити!

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


2
Ви намагаєтеся запитати, чому б можна надати аналітичний градієнт, а не просто обчислити приблизний, використовуючи кінцеві відмінності?
спектр

1
Моє питання - іншим способом, припустимо, що ваші рівняння занадто задіяні для обчислення аналітичних градієнтів, чи можуть алгоритми оптимізації градієнта залежно від градієнтів все ж перевершити ті, які взагалі не потребують градієнтів?
професор bigglesworth

Це інше питання, яке ви ставили вище. Ви можете обчислити числові похідні іншими способами, наприклад, кінцевими елементами.
nicoguaro

1
@nicoguaro Так, в контексті оптимізації з частковими диференціальними рівняннями, це, безумовно, так (і, мабуть, це одна з моїх дослідницьких областей, це було і моєю першою думкою). Але питання нічого в цьому напрямку не згадує (і корисніше в цій загальності. Я думаю).
Крістіан Класон

1
Крім того, навіть у цьому випадку є розумним питанням: Що робити, якщо ваш (система) PDE (s) є настільки складним, що ви не можете отримати суміжне рівняння, яке чисельно вирішується для отримання градієнта? (Ці речі можуть стати досить неприємними, особливо якщо задіяні нестандартні граничні умови.)
Крістіан Класон

Відповіді:


11

Щоб доповнити відмінну відповідь Брайана, дозвольте трохи ознайомитись із (редакційною) основою. Методи оптимізації без похідних визначаються як методи, які використовують лише оцінки функцій, і це, в основному, всі варіанти "вибірки допустимого набору більш-менш систематично і збереження найкращого значення функції" - це все, що ви можете зробити з урахуванням інформації. Ці методи можна приблизно розділити

  1. Стохастичні методи , де відбір зразків принципово випадковий (мається на увазі, що випадковість є вирішальним компонентом; можуть бути й інші, детерміновані компоненти). Ці методи часто мотивовані фізичними або біологічними процесами і мають відповідні назви, такі як "імітаційний відпал", "генетичні алгоритми" або "метод рою частинок / світлячок / мурашник". Рідко існує будь-яка теорія конвергенції за межами "якщо ви постараєтеся досить довго, ви з усіма імовірностями вдаритесь по всіх точках (включаючи мінімізатор)1"(Незалежно від того , що станеться , - з якою - або ймовірністю - до теплової смерті всесвіту іншої справи ...) Як математик, я хотів би розглянути ці методи в якості останнього засобу: Якщо ви не знаєте нічого про ваш функція, це все, що ви можете зробити, і ви можете пощастить.

  2. Детерміновані методи , де відбір зразків не є випадковим, тобто заснований виключно на попередніх оцінках функцій. Найвідоміший приклад - це, мабуть, метод симплекса Нельдера - Мід; інші генерують набір методів пошуку . Важливо усвідомити, що це може працювати лише за наявності будь-якого (експлуатованого) співвідношення між значенням функції в різних точках - тобто деякої плавності функції. Фактично, теорія конвергенції, наприклад, для методу Нельдера - Мід заснована на побудові неоднорідної формикінцево-різницьке наближення градієнта на основі значень функції у вершинах симплекса та показує, що воно сходиться як до точного градієнта, так і до нуля, оскільки симплекс стискається до точки. (Варіант, заснований на стандартному наближенні з кінцевою різницею, називається компасом .)

  3. Методи на основі моделі , де значення функцій використовуються для побудови локальної моделі функції (наприклад, за допомогою інтерполяції), яка потім мінімізується за допомогою стандартних (на основі градієнта / Гессіана) методів. Оскільки наближення скінченної різниці еквівалентне точній похідній поліноміального інтерполянта, класичний підхід "числового градієнта" також потрапляє до цього класу.

Як бачимо, межі між цими класами є плинні, і часто це лише питання інтерпретації. Але мораль має бути зрозумілою: переконайтеся, що ви використовуєте всю наявну інформацію про функцію, яку ви мінімізуєте. Цитувати Корнелія Ланцоса:

Відсутність інформації не може бути усунена жодними математичними хитрощами.

В кінці кінців, якщо ви не знаєте нічого про вашу функції, вона також може бути абсолютно випадковою, і звести до мінімуму випадкового значення є дорученням дурня ...


17

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

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

Іншим варіантом, який часто варто застосувати, є використання автоматичних методів диференціації для створення підпрограми, яка обчислює аналітичні похідні з вихідного коду для обчислення самої цільової функції.


3
+1 для автоматичної диференціації . Це часто набагато краще, ніж або апріорі символічний вираз для градієнта, або наближення з кінцевою різницею.
Ліворуч близько

Я також рекомендував би використовувати автоматичну диференціацію. Для fortran спробуйте стрільбу від INRIA Sophia-Antipolis, яка заснована на трансформації джерела. Для C / C ++ є більше вибору, як adol-c, adept, saado (частина Trilinos). Все це базується на перевантаженні оператора та простіші у використанні, хоча і не дуже ефективні для дуже великих проблем.
cfdlab

Існують також деякі обставини, за яких автоматичну диференціацію (AD) може бути важко застосувати, але складна диференціальна ступінь, яка іноді може становити майже те саме, що і AD (крім того, що не можна обчислити весь градієнт одночасно за зворотним режимом AD) може бути застосовним і відносно простим у застосуванні.
Марк Л. Стоун

У відповідь на переглянуте запитання: Якщо ваша мета гладка (немає сенсу використовувати алгоритм оптимізації на основі похідних, якщо його немає) і якщо кількість змінних досить мала (виконання похідних з обмеженою різницею не працює в обмеженій оптимізації PDE ), то, швидше за все, вам буде краще використовувати метод оптимізації на основі похідних з обмеженими різницевими наближеннями, а не використовувати техніку DFO.
Брайан Борчерс

4

Ваше запитання задає оптимізатори на основі градієнта, тому я думаю, що Брайан був прав. Я б лише поділився, оскільки зараз я сам борюся з цим, про деякі питання.

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

Є ще один підхід, який можна спробувати, якщо ви ще не вклали занадто багато часу в програмне забезпечення, і це запустити його зі складною арифметикою. Це називається складною ступеневою диференціацією . Основна ідея полягає в тому, що коли ви оцінюєте функцію, якщо ви хочете її градієнта щодо параметра X, ви встановлюєте уявну частину X на дуже мале число eps . Після того, як ви зробите обчислення, уявна частина значення функції, розділена на eps , є градієнтом відносно X. Коли ви хочете градієнт відносно Y, ви, звичайно, повинні це робити ще раз. Що цікавого в цьому полягає в тому, що epsможна зробити дуже маленьким. Причина, по якій це працює, полягає в тому, що нормальні правила диференціального числення точно відображаються в правилах складної арифметики.

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


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

@choward: Правильно. Ось що в цьому досить. Я був скептично налаштований. Дехто з моїх колег здавалося, що це чарівна куля. Я підозрював, що це рівносильно рівнянням чутливості, і один з моїх колег, прикладний математик, це довів.
Майк Данлаве

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

@choward: До такого висновку я прийшов, плюс ми зазвичай оптимізуємо вектор, а це означає повторювану оцінку. Звичайно, альтернативою є те, що рівняння чутливості можна отримати досить складно. Я використовую символічну диференціацію, і вони все ще хитрі. Весь предмет - це трохи мінне поле.
Майк Данлаве
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.