Документация Engee

(L-)BFGS

Здесь приводятся сведения о методе BFGS и его версии L-BFGS с ограниченным использованием памяти.

Конструкторы

BFGS(; alphaguess = LineSearches.InitialStatic(),
       linesearch = LineSearches.HagerZhang(),
       initial_invH = nothing,
       initial_stepnorm = nothing,
       manifold = Flat())

initial_invH по умолчанию имеет значение nothing. Если пользователь хочет задать определенную начальную матрицу, она должна быть представлена в виде функции массива, аналогичного начальной точке x0.

Если значение initial_stepnorm равно числу z, начальной матрицей будет матрица тождественности, масштабированная в z раз по сверхнорме градиента в начальной точке x0.

LBFGS(; m = 10,
        alphaguess = LineSearches.InitialStatic(),
        linesearch = LineSearches.HagerZhang(),
        P = nothing,
        precondprep = (P, x) -> nothing,
        manifold = Flat(),
        scaleinvH0::Bool = true && (typeof(P) <: Nothing))

Описание

Это означает, что он выполняет шаги в соответствии с

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

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

Как и в других квазиньютоновских решателях в этом пакете, скаляр представлен следующим образом

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

Пример

Справочные материалы

Wright, Stephen, and Jorge Nocedal (2006) Numerical optimization. Springer