Метод сопряжённых градиентов

Материал из testwiki
Перейти к навигации Перейти к поиску

Шаблон:Другие значения Метод сопряжённых градиентов (Метод Флетчера — Ривcа)метод нахождения локального экстремума функции на основе информации о её значениях и её градиенте. В случае квадратичной функции в n минимум находится не более чем за n шагов.

Основные понятия

Определим терминологию:

Пусть S1,,Sn𝕏n.

Введём на 𝕏 целевую функцию f(x)C2(𝕏).

Векторы S1,,Sn называются сопряжёнными, если:

  • SiTHSj=0,ij,i,j=1,,n
  • SiTHSi0,i=1,,n

где Hматрица Гессе f(x).

Шаблон:Message box

Обоснование метода

Нулевая итерация

Иллюстрация последовательных приближений метода наискорейшего спуска (зелёная ломаная) и метода сопряжённых градиентов (красная ломаная) к точке экстремума.

Пусть S0=f(x0)(1)

Тогда x1=x0+λ1S0.

Определим направление

S1=f(x1)+ω1S0 (2)

так, чтобы оно было сопряжено с S0:

S0THS1=0(3)

Разложим f(x) в окрестности x0 и подставим x=x1:

f(x1)f(x0)=H(x1x0)=λ1HS0

Транспонируем полученное выражение и домножаем на H1 справа:

(f(x1)f(x0))TH1=λ1S0THTH1

В силу непрерывности вторых частных производных HT=H. Тогда:

S0T=(f(x1)f(x0))TH1λ1

Подставим полученное выражение в (3):

(f(x1)f(x0))TH1HS1λ1=0

Тогда, воспользовавшись (1) и (2):

(f(x1)f(x0))T(f(x1)ω1f(x0)))=0(4)

Если λ=argminλf(x0+λS0), то градиент в точке x1=x0+λS0 перпендикулярен градиенту в точке x0, тогда по правилам скалярного произведения векторов:

(f(x0),f(x1))=0

Приняв во внимание последнее, получим из выражения (4) окончательную формулу для вычисления ω:

ω1=||f(x1)||2||f(x0)||2

К-я итерация

На k-й итерации имеем набор S0,,Sk1.

Тогда следующее направление вычисляется по формуле:

Sk=f(xk)f(xk)2(f(xk1)f(xk1)2++f(x0)f(x0)2)

Это выражение может быть переписано в более удобном итеративном виде:

Sk=f(xk)+ωkSk1,ωi=f(xi)2f(xi1)2,

где ωk непосредственно рассчитывается на k-й итерации.

Алгоритм

  • Пусть x0 — начальная точка, r0 — направление антиградиента и мы пытаемся найти минимум функции f(x). Положим S0=r0 и найдём минимум вдоль направления S0. Обозначим точку минимума x1.
  • Пусть на некотором шаге мы находимся в точке xk, и rk — направление антиградиента. Положим Sk=rk+ωkSk1, где ωk выбирают либо (rk,rk)(rk1,rk1) (стандартный алгоритм — Флетчера-Ривса, для квадратичных функций с H>0), либо max(0,(rk,rkrk1)(rk1,rk1)) (алгоритм Полака–Рибьера). После чего найдём минимум в направлении Sk и обозначим точку минимума xk+1. Если в вычисленном направлении функция не уменьшается, то нужно забыть предыдущее направление, положив ωk=0 и повторив шаг.

Формализация

  1. Задаются начальным приближением и погрешностью: x0,ε,k=0
  2. Рассчитывают начальное направление: j=0,Skj=f(xk),xkj=xk
  3. xkj+1=xkj+λSkj,λ=argminλf(xkj+λSkj),Skj+1=f(xkj+1)+ωSkj,ω=||f(xkj+1)||2||f(xkj)||2
    • Если ||Skj+1||<ε или ||xkj+1xkj||<ε, то x=xkj+1 и остановка.
    • Иначе
      • если (j+1)<n, то j=j+1 и переход к 3;
      • иначе xk+1=xkj+1,k=k+1 и переход к 2.

Случай квадратичной функции

Шаблон:Message box

Литература

  1. Шаблон:Книга
  2. Шаблон:Книга
  3. Шаблон:Книга
  4. Шаблон:Книга
  5. Шаблон:Книга
  6. Шаблон:Книга

Шаблон:Методы оптимизации