Поскольку обновления матрицы кривизны BFGS не требуют обращения матрицы , ее вычислительная сложность составляет всего , по сравнению с методом Ньютона . Также широко используется L-BFGS , который является версией BFGS с ограниченной памятью, которая особенно подходит для задач с очень большим количеством переменных (например, >1000). Вариант BFGS-B обрабатывает простые ограничения ящика. [3] . Матрица BFGS также допускает компактное представление , что делает ее более подходящей для больших задач с ограничениями.
Задача оптимизации заключается в минимизации , где — вектор в , а — дифференцируемая скалярная функция. Нет ограничений на значения, которые могут принимать.
Алгоритм начинается с начальной оценки оптимального значения и продолжается итеративно для получения более точной оценки на каждом этапе.
Направление поиска p k на этапе k задается решением аналога уравнения Ньютона:
где — приближение к матрице Гессе в , которая обновляется итеративно на каждом этапе, а — градиент функции, вычисленной в x k . Затем используется линейный поиск в направлении p k для нахождения следующей точки x k +1 путем минимизации по скаляру
Квази-Ньютоновское условие, налагаемое на обновление, равно
Пусть и , тогда удовлетворяет
,
что является уравнением секанса.
Условие кривизны должно быть выполнено для того, чтобы быть положительно определенным, что можно проверить, предварительно умножив уравнение секущей на . Если функция не является сильно выпуклой , то условие должно быть выполнено явно, например, путем нахождения точки x k +1 , удовлетворяющей условиям Вульфа , которые влекут за собой условие кривизны, с помощью линейного поиска.
Вместо того чтобы требовать вычисления полной матрицы Гессе в точке как , приближенный Гессиан на этапе k обновляется путем добавления двух матриц:
Наконец, подставляем и и получаем уравнение обновления :
Алгоритм
Рассмотрим следующую задачу безусловной оптимизации,
где — нелинейная целевая функция.
Из начального предположения и начального предположения матрицы Гессе следующие шаги повторяются по мере сходимости к решению:
Получите направление, решив .
Выполнить одномерную оптимизацию ( поиск по линии ) для нахождения приемлемого размера шага в направлении, найденном на первом шаге. Если выполняется точный поиск по линии, то . На практике обычно достаточно неточного поиска по линии с приемлемым удовлетворяющим условиям Вульфа .
Установить и обновить .
.
.
Сходимость можно определить, наблюдая за нормой градиента; при наличии некоторого можно остановить алгоритм, когда Если инициализировано с помощью , первый шаг будет эквивалентен градиентному спуску , но дальнейшие шаги все больше и больше уточняются с помощью , приближения к гессиану.
Первый шаг алгоритма выполняется с использованием обратной матрицы , которую можно эффективно получить, применив формулу Шермана–Моррисона к шагу 5 алгоритма, что дает
Это можно эффективно вычислить без временных матриц, распознавая, что является симметричным, и что и являются скалярами, используя такое расширение, как
Поэтому, чтобы избежать инверсии матрицы, можно аппроксимировать обратную матрицу Гессе вместо самой матрицы Гессе: [9]
Из начального предположения и приблизительной обратной матрицы Гессе следующие шаги повторяются по мере сходимости к решению:
Получите направление, решив .
Выполнить одномерную оптимизацию ( поиск по линии ) для нахождения приемлемого размера шага в направлении, найденном на первом шаге. Если выполняется точный поиск по линии, то . На практике обычно достаточно неточного поиска по линии с приемлемым удовлетворяющим условиям Вульфа .
Формула обновления BFGS в значительной степени опирается на то, что кривизна строго положительна и отделена от нуля. Это условие выполняется, когда мы выполняем линейный поиск с условиями Вульфа на выпуклой цели. Однако некоторые реальные приложения (например, методы последовательного квадратичного программирования) регулярно выдают отрицательные или почти нулевые кривизны. Это может произойти при оптимизации невыпуклой цели или при использовании подхода доверительной области вместо линейного поиска. Также возможно получение ложных значений из-за шума в цели.
В таких случаях можно использовать одно из так называемых затухающих обновлений BFGS (см. [11] ), которые модифицируют и/или для получения более надежного обновления.
Известные реализации
Известные реализации с открытым исходным кодом:
ALGLIB реализует BFGS и его версию с ограниченным объемом памяти на C++ и C#
GSL реализует BFGS как gsl_multimin_fdfminimizer_vector_bfgs2. [12]
В R алгоритм BFGS (и версия L-BFGS-B, которая допускает ограничения по ящикам) реализован как опция базовой функции optim(). [13]
В SciPy функция scipy.optimize.fmin_bfgs реализует BFGS. [14] Также возможно запустить BFGS с использованием любого из алгоритмов L-BFGS , установив параметр L на очень большое число.
В Julia пакет Optim.jl реализует BFGS и L-BFGS в качестве опции решателя для функции optimize() (среди прочих опций). [15]
Известные фирменные реализации включают в себя:
Программное обеспечение для крупномасштабной нелинейной оптимизации Artelys Knitro реализует, среди прочего, алгоритмы BFGS и L-BFGS.
В MATLAB Optimization Toolbox функция fminunc использует BFGS с кубическим линейным поиском, когда размер задачи установлен на «средний масштаб».
^ Деннис, Дж. Э. младший ; Шнабель, Роберт Б. (1983), «Методы секущих для безусловной минимизации», Численные методы безусловной оптимизации и нелинейные уравнения , Энглвуд Клиффс, Нью-Джерси: Prentice-Hall, стр. 194–215, ISBN0-13-627216-9
^ Берд, Ричард Х.; Лу, Пэйхуан; Нокедаль, Хорхе; Чжу, Цию (1995), «Алгоритм с ограниченной памятью для оптимизации с ограниченными ограничениями», SIAM Journal on Scientific Computing , 16 (5): 1190–1208, CiteSeerX 10.1.1.645.5814 , doi : 10.1137/0916069
^ Бройден, К. Г. (1970), «Сходимость класса алгоритмов минимизации двойного ранга», Журнал Института математики и ее приложений , 6 : 76–90, doi : 10.1093/imamat/6.1.76
^ Флетчер, Р. (1970), «Новый подход к алгоритмам с переменной метрикой», Computer Journal , 13 (3): 317–322, doi : 10.1093/comjnl/13.3.317
^ Голдфарб, Д. (1970), «Семейство переменных метрических обновлений, полученных с помощью вариационных средних», Математика вычислений , 24 (109): 23–26, doi : 10.1090/S0025-5718-1970-0258249-6
^ Шэнно, Дэвид Ф. (июль 1970 г.), «Обусловленность квазиньютоновских методов минимизации функций», Mathematics of Computation , 24 (111): 647–656, doi : 10.1090/S0025-5718-1970-0274029-X , MR 0274029
Луенбергер, Дэвид Г .; Йе, Инью (2008), Линейное и нелинейное программирование , Международная серия по исследованию операций и науке управления, т. 116 (третье изд.), Нью-Йорк: Springer, стр. xiv+546, ISBN978-0-387-74502-2, г-н 2423726
Келли, CT (1999), Итерационные методы оптимизации , Филадельфия: Общество промышленной и прикладной математики, стр. 71–86, ISBN0-89871-433-8