Какие соображения следует учитывать при выборе между BFGS и сопряженным градиентом для оптимизации? Функция, которую я пытаюсь согласовать с этими переменными, является экспоненциальной функцией; тем не менее, фактическая целевая функция включает в себя, среди прочего, интеграцию и очень дорогая, если это вообще помогает.
25
Ответы:
JM прав насчет хранения. BFGS требует приблизительного гессиана, но вы можете инициализировать его с помощью матрицы тождеств, а затем просто вычислять обновления ранга два для приблизительного гессиана, пока у вас есть доступная информация о градиенте, предпочтительно аналитически, а не через конечные различия. BFGS - это квазиньютоновский метод, который будет сходиться за меньшее количество шагов, чем CG, и имеет немного меньшую тенденцию «застрять» и требует небольших алгоритмических настроек, чтобы добиться значительного снижения для каждой итерации.
Напротив, CG требует матрично-векторных продуктов, которые могут быть вам полезны, если вы можете рассчитать производные по направлению (опять же, аналитически или с использованием конечных разностей). Расчет конечной разности производной по направлению будет намного дешевле, чем расчет конечной разности гессиана, поэтому, если вы решите построить свой алгоритм с использованием конечных разностей, просто рассчитайте производную по прямой. Это наблюдение, однако, на самом деле не относится к BFGS, который будет вычислять приблизительные гессианы, используя внутренние произведения информации о градиенте.
Я бы сравнил два алгоритма для небольшой тестовой задачи для вашего приложения, если вы знаете, что с хранилищем проблем не будет. Не зная специфики вашей проблемы, я предполагаю, что BFGS будет быстрее, но вы должны действительно протестировать два алгоритма, чтобы получить лучшее представление о том, какой из них будет работать лучше.
Наконец, несколько слов об автоматической дифференциации: имея некоторый опыт работы с внутренним средством автоматической дифференцировки (AD) для Fortran ( DAEPACK ), я могу сказать, что инструменты AD часто бывают привередливыми. Они могут не обязательно различать код, который они генерируют сами. Существует два типа инструментов AD:
Инструменты «источник-источник» - это существенно модифицированные компиляторы, которые берут написанный вами исходный код, анализируют его и автоматически генерируют новый исходный код, который вычисляет градиент функций в вашем исходном коде. Перегрузка операторов инструментами AD требует, чтобы вы использовали перегруженные операторы AD в исходном коде, чтобы можно было рассчитать производные, что потребовало бы от вас дополнительных усилий для расчета аналитических производных с AD.
источник
По моему опыту, BFGS с большим количеством обновлений хранит информацию слишком далеко от текущего решения, чтобы быть действительно полезной для аппроксимации не запаздывающего якобиана, и вы можете фактически потерять сходимость, если будете хранить слишком много. Существуют варианты «без памяти» BFGS, которые во многом выглядят как нелинейные сопряженные градиенты (см. Последнее обновление, описанное для одного из них) именно по этим причинам. Поэтому, если вы хотите использовать L-BFGS, а не BFGS, проблемы с памятью исчезают, а методы связаны . Неофициальные данные указывают на то, что перезапуск является сложной задачей, так как иногда это бывает ненужным, а иногда очень необходимым.
Ваш выбор между ними также сильно зависит от проблем, которые вас интересуют. Если у вас есть ресурсы, вы можете попробовать обе проблемы и решить, какая из них лучше работает. Например, я лично не занимаюсь оптимизацией с помощью этих алгоритмов, а вместо этого забочусь о решении систем нелинейных уравнений. Для них я обнаружил, что NCG работает лучше и легче выполнять нелинейную предварительную обработку. BFGS является более надежным.
источник
В небольших измерениях хорошо реализованный метод BFGS, как правило, быстрее и надежнее CG, особенно если функция не очень далека от квадратичной.
Ни BFGS, ни CG не нуждаются в предположении о выпуклости; только начальное гессенское приближение (для BFGS) соотв. предварительный кондиционер (для CG) должен быть положительно определенным. Но они всегда могут быть выбраны в качестве матрицы идентичности в небольших измерениях без особого вреда. Смотрите также /scicomp//a/3213/1117
В отсутствие запрограммированного градиента использование числовых градиентов является большой тратой усилий, особенно когда значения функций являются дорогостоящими. Скорее, следует использовать алгоритм без производных. См. Http://archimedes.cheme.cmu.edu/?q=dfocomp для недавнего опроса.
источник