(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. Последняя отличается от первой тем, что для построения используется не полная история итеративной процедуры, а только последние шагов. При этом не строится аппроксимирующая матрица гессиана, а сразу вычисляется направление. Поэтому последняя версия является более подходящей для решения крупномасштабных задач, так как в таких задачах будет быстро расти потребность в памяти для хранения соответствующих векторов.
Как и в других квазиньютоновских решателях в этом пакете, скаляр представлен следующим образом
и выбирается алгоритмом линейного поиска так, чтобы каждый шаг давал достаточный спуск.