Является ли бесполезным предоставление приблизительных градиентов оптимизатору на основе градиентов?

9

Бессмысленно использовать алгоритмы оптимизации на основе градиента, если вы можете предоставить только числовой градиент? Если нет, зачем в первую очередь указывать числовой градиент, если для самой библиотеки оптимизации достаточно просто выполнить конечное дифференцирование?

[РЕДАКТИРОВАТЬ]

  • Просто чтобы уточнить, мой вопрос действительно в более общем смысле, чем конкретное применение. Хотя моя область применения - оптимизация вероятности в различных статистических рамках.

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

  • Думаю, мне нужно лучше сформулировать свой вопрос, но я плохо справляюсь с этим. Если у вас есть возможность либо использовать алгоритм оптимизации без производных, либо алгоритм оптимизации на основе производных с оговоркой, что я могу дать ему только числовой градиент, какой из них в среднем будет лучше?

профессор Бигглсворт
источник
2
Вы пытаетесь спросить, почему бы предоставить аналитический градиент, а не просто вычислить приблизительный, используя конечные различия?
спектр
1
Мой вопрос, сформулированный иначе, предположим, что ваши уравнения слишком сложны для того, чтобы вы могли вычислять аналитические градиенты, могут ли алгоритмы оптимизации, зависящие от градиента, по-прежнему превосходить алгоритмы, которые вообще не требуют градиентов?
профессор Бигглсворт
Это другой вопрос, который вы задали выше. Вы можете вычислить числовые производные другими способами, например, конечными элементами.
Никогуаро
1
@nicoguaro Да, в контексте оптимизации с помощью уравнений в частных производных, это, безусловно, так (и, так как это была одна из моих областей исследований, это была моя первая мысль). Но вопрос не упоминает ничего в этом направлении (и более полезен в этой общности. Я думаю).
Кристиан Клэйсон
1
Кроме того, даже в этом случае это разумный вопрос: что если ваш (система) PDE настолько сложен, что вы не можете вывести сопряженное уравнение для численного решения для получения градиента? (Эти вещи могут стать довольно неприятными, особенно если речь идет о нестандартных граничных условиях.)
Кристиан Клэйсон

Ответы:

11

В дополнение к отличному ответу Брайана, позвольте мне дать немного (редакционного) фона. Методы оптимизации без производных определяются как методы, использующие только оценки функций, и в основном представляют собой все варианты «более или менее систематической выборки допустимого набора и сохранения наилучшего значения функции» - это все, что вы можете сделать, учитывая информацию. Эти методы можно условно разделить на

  1. Стохастические методы , где выборка выборок является в основном случайной (это означает, что случайность является критическим компонентом; могут существовать другие детерминированные компоненты). Эти методы часто мотивируются физическими или биологическими процессами и имеют соответствующие названия, такие как «имитация отжига», «генетические алгоритмы» или «метод роя частиц / светлячка / муравейника». Существует редко какая-либо теория конвергенции за пределами ", если вы попытаетесь достаточно долго, вы с вероятностью достигнете всех точек (включая минимизатор)1"(Независимо от того , что произойдет , - с какой - либо вероятностью - до тепловой смерти вселенной другого дела ...) Как математик, я хотел бы рассмотреть эти методы в качестве последнего средства: Если вы не знаете ничего о вашем Функция, это все, что вы можете сделать, и вам может повезти.

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

  3. Методы на основе модели , где значения функции используются для построения локальной модели функции (например, путем интерполяции), которая затем минимизируется с помощью стандартных (на основе градиента / гессиана) методов. Поскольку конечно-разностное приближение эквивалентно точной производной полиномиального интерполятора, классический подход «числовой градиент» также попадает в этот класс.

Как видите, границы между этими классами изменчивы, и зачастую это просто вопрос интерпретации. Но мораль должна быть ясной: убедитесь, что вы используете всю доступную информацию о функции, которую вы минимизируете. Процитирую Корнелиуса Ланцоша:

Нехватка информации не может быть исправлена ​​никаким математическим обманом.

В конце концов, если вы не знаете ничего о вашей функции, она также может быть совершенно случайной, и свести к минимуму случайного значения является поручением дурака ...

Кристиан Клэйсон
источник
17

Если ваша цель гладкая, то использование конечно-разностных аппроксимаций для производной часто более эффективно, чем использование алгоритма бесплатной оптимизации с производной. Если у вас есть код, который точно вычисляет производные, то обычно лучше использовать этот код, чем использовать конечно-разностные аппроксимации.

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

Другой вариант, который часто стоит того, - это использовать методы автоматического дифференцирования для создания подпрограммы, которая вычисляет аналитические производные из исходного кода для вычисления самой целевой функции.

Брайан Борхерс
источник
3
+1 за автоматическое дифференцирование . Это часто намного лучше, чем априорное символическое выражение для градиента или конечно-разностное приближение.
оставил около
Я также рекомендовал бы использовать автоматическое дифференцирование. Для Фортрана попробуйте тапенаду от INRIA Sophia-Antipolis, основанную на трансформации источника. Для C / C ++ есть более широкий выбор, например adol-c, adept, sacado (часть Trilinos). Все они основаны на перегрузке оператора и просты в использовании, хотя и не очень эффективны для очень больших проблем.
cfdlab
Существуют также некоторые обстоятельства, при которых автоматическое дифференцирование (AD) может быть затруднительным, но сложное пошаговое дифференцирование, которое иногда может составлять почти то же самое, что и AD (кроме возможности рассчитать весь градиент одновременно с помощью обратного режима). AD) может быть применимым и относительно простым в применении.
Марк Л. Стоун
В ответ на пересмотренный вопрос: если ваша цель гладкая (нет смысла использовать алгоритм оптимизации на основе производных, если это не так), и если число переменных достаточно мало (выполнение производных с конечными разностями не работает в ограниченной оптимизации PDE) ), то, скорее всего, вам лучше использовать метод оптимизации на основе производных с конечно-разностными аппроксимациями, а не метод DFO.
Брайан Борчерс
4

Ваш вопрос спрашивает об оптимизаторах на основе градиента, так что я думаю, что Брайан был прав. Я бы только поделился, поскольку я сам сейчас с этим борюсь, некоторыми вопросами.

Проблемы с конечной разницей заключаются в 1) производительности, потому что вам необходимо заново оценить функцию для каждого измерения, и 2) может быть сложно выбрать хороший размер шага. Если шаг слишком велик, предположение о линейности функции может не выполняться. Если шаг слишком мал, он может столкнуться с шумом в самой функции, потому что производные усиливают шум. Последнее может стать реальной проблемой, если функция включает решение дифференциальных уравнений. Если возможно рассчитать градиенты аналитически или с использованием уравнений чувствительности, это, безусловно, будет более точным и, возможно, более быстрым.

Есть еще один подход, который вы можете попробовать, если вы еще не потратили слишком много времени на программное обеспечение, а именно запустить его со сложной арифметикой. Это называется сложной ступенчатой ​​дифференциацией . Основная идея заключается в том, что, когда вы оцениваете функцию, если вы хотите, чтобы ее градиент относился к параметру X, вы устанавливаете мнимую часть X в очень малое число eps . После того, как вы выполните вычисления, мнимая часть значения функции, разделенная на eps , будет градиентом по отношению к X. Если вам нужен градиент по отношению к Y, вам, конечно, придется делать все это снова. Что интересного в том, что EPSможно сделать очень маленьким. Причина, по которой он работает, состоит в том, что нормальные правила дифференциального исчисления точно отражены в правилах комплексной арифметики.

Тем не менее, я считаю, что это не панацея, потому что не всегда легко выполнить сложную функцию в сложной арифметике, это не стоит того, чтобы градиент можно было рассчитать аналитически, а в случае дифференциальных уравнений это точно эквивалентно уравнениям чувствительности , который я делаю по мере необходимости.

Майк Данлавей
источник
Я думаю, что одним из главных преимуществ является тот факт, что вы не делаете никаких вычитаний в этой сложной формуле конечных разностей. Когда я недавно читал статью, в которой говорилось о деривациях для этого метода, это было одним из пунктов, которые они, казалось, подтверждали экспериментально по сравнению с другими формулами конечных разностей. Это различие позволяло выбирать меньшие размеры шагов, прежде чем ошибки округления стали проблемой.
спектр
@choward: верно. Вот что мило в этом. Я был скептически, хотя. Некоторые из моих коллег, казалось, думали, что это волшебная пуля. Я подозревал, что это было эквивалентно уравнениям чувствительности, и один из моих коллег, прикладной математик, доказал это.
Майк Данлавей
Это круто насчет уравнения чувствительности. Это интересный подход, но он, безусловно, может иметь компромиссы при реализации. Предполагая, что вы хотите его использовать, вы должны определить сложные версии своих функций, а затем выполнить дополнительные сложные алгебраические вычисления / вычисления, которые удлиняют оценку каждой функции. Это одна из тех вещей, которую вы должны выяснить, если более медленная оценка функции стоит дополнительной производной точности.
спектр
@choward: К такому выводу я пришел, плюс мы обычно оптимизируем вектор, что означает повторную оценку. Конечно, альтернатива в том, что уравнения чувствительности могут быть сложными для получения. Я использую символическую дифференциацию, и они все еще хитры. Весь предмет - немного минное поле.
Майк Данлавей