Я начну с общего замечания: информация первого порядка (т. Е. Использование только градиентов, которые кодируют наклон) может дать вам только информацию о направлении: она может сказать вам, что значение функции уменьшается в направлении поиска, но не в течение какого времени , Чтобы решить, как далеко идти вдоль направления поиска, вам нужна дополнительная информация (градиентный спуск с постоянной длиной шага может не сработать даже для выпуклых квадратичных задач). Для этого у вас есть два варианта:
- Используйте информацию второго порядка (которая кодирует кривизну), например, используя метод Ньютона вместо градиентного спуска (для которого вы всегда можете использовать длину шага1 достаточно близко к минимизатору).
- Метод проб и ошибок (что, конечно, я имею в виду, используя правильный поиск строки, такой как Armijo).
Если, как вы пишете, у вас нет доступа ко вторым производным, и оценка функции объектива стоит очень дорого, ваша единственная надежда - пойти на компромисс: используйте достаточно приблизительную информацию второго порядка, чтобы получить подходящую длину шага кандидата, такую что строка поиск нужен только O(1) оценки (т. е. не более (небольшая) постоянная кратность усилий, необходимых для оценки градиента).
Одной из возможностей является использование длины шага Барзилай - Борвейна (см., Например, Флетчер: О методе Барзилай-Борвейна . Оптимизация и управление с приложениями, 235–256, Appl. Optim., 96, Springer, New York, 2005 ). Идея состоит в том, чтобы использовать конечно-разностную аппроксимацию кривизны вдоль направления поиска, чтобы получить оценку размера шага. В частности, выберитеα0>0 произвольный набор g0:=∇f(x0) а затем для k=0,...:
- Набор sk=−α−1kgk а также xk+1=xk+sk
- оценивать gk+1=∇f(xk+1) и установить yk=gk+1−gk
- Набор αk+1=(yk)Tyk(yk)Tsk
Можно показать, что этот выбор сходится (на практике очень быстро) для квадратичных функций, но сходимость не является монотонной (т. Е. Значение функцииf(xk+1) может быть больше чем f(xk), но только время от времени; см. график на стр. 10 в статье Флетчера). Для неквадратичных функций вам необходимо объединить это с поиском строк, который необходимо изменить, чтобы справиться с немонотонностью. Одна возможность выбораσk∈(0,α−1k) (например, путем возврата), так что
f(xk−σkgk)≤maxmax(k−M,1)≤j≤kf(xj)−γσk(gk)Tgk,
где - типичный параметр Armijo, а управляет степенью монотонности (например, ). Есть также вариант, в котором вместо значений функции используются значения градиента, но в вашем случае вычисление градиента даже дороже, чем функции, поэтому здесь это не имеет смысла. (Примечание: Вы, конечно, можете попытаться слепо принять длину шага BB и довериться удаче, но если вам нужна какая-либо надежность - как вы написали в своих комментариях - это было бы действительно плохой идеей.)
γ∈(0,1)MM=10
Альтернативный (и, на мой взгляд, гораздо лучший) подход будет использовать это приближение конечных разностей уже при расчете направления поиска; это называется квазиньютоновским методом . Идея состоит в том, чтобы постепенно построить аппроксимацию гессиана , используя различия градиентов. Например, вы можете взять (единичная матрица) и для решить
и установить
с помощью как указано выше, и . (Это называется Broyden update∇2f(xk)H0=Idk=0,…
Hksk=−gk,(1)
Hk+1=Hk+(yk−Hksk)T(sk)T(sk)Tsk
ykxk+1=xk+skи редко используется на практике; Лучшим, но немного более сложным обновлением является обновление
BFGS , для которого - и больше информации - я обращаюсь к книге «
Численная оптимизация» Носедала и Райта .) Недостатком является то, что а) для этого потребуется решение линейной системы на каждом этапе (но только размером неизвестного, который в вашем случае является начальным условием, следовательно, усилия должны основываться на решении PDE для получения градиента, а также существуют правила обновления для приближений
обратного гессиана, которые требуют вычисления только одной матрицы -векторный продукт) и б) вам все еще нужен поиск строки, чтобы гарантировать сходимость ...
К счастью, в этом контексте существует альтернативный подход, который использует каждую функцию оценки. Идея состоит в том, что для симметричной и положительно определенной (что гарантировано для обновления BFGS) решение эквивалентно минимизации квадратичной модели
В методе области доверия вы должны сделать это с дополнительным ограничением, которое , где - это правильно выбранный радиус доверительной области (который играет роль длины шага ). Ключевая идея заключается в том, чтобы теперь адаптивно выбирать этот радиус на основе вычисленного шага. В частности, вы смотрите на соотношение
Hk(1)
qk(s)=12sTHks+sTgk.
∥s∥≤ΔkΔkσkρk:=f(xk)−f(xk+sk)f(xk)−qk(sk)
фактического и прогнозируемого уменьшения значения функции. Если очень мало, ваша модель была плохой, и вы отбрасываете и попробуйте снова с . Если близко к , ваша модель хороша, и вы устанавливаете и увеличиваете . В противном случае вы просто устанавливаете и оставляете покое. Чтобы вычислить фактический минимизатор из
ρkskΔk+1<Δkρk1xk+1=xk+skΔk+1>Δkxk+1=xk+skΔkskmin∥s∥≤Δkqk(s)существует несколько стратегий, позволяющих избежать решения проблемы полной ограниченной оптимизации; мой фаворит -
усеченный метод компьютерной графики Стейхауга . Для более подробной информации, я снова обращаюсь к Nocedal и Wright.