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

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

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

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

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

Пусть S1→,…,Sn→∈𝕏⊂ℝn.

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

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

  • Si→THSj→=0,i≠j,i,j=1,…,n
  • Si→THSi→⩾0,i=1,…,n

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

Шаблон:Message box

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

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

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

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

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

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

S1→=−∇f(x1→)+ω1S0→ (2)

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

S0→THS1→=0(3)

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

∇f(x1→)−∇f(x0→)=H(x1→−x0→)=λ1HS0→

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

(∇f(x1→)−∇f(x0→))TH−1=λ1S0→THTH−1

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

S0→T=(∇f(x1→)−∇f(x0→))TH−1λ1

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

(∇f(x1→)−∇f(x0→))TH−1HS1→λ1=0

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

(∇f(x1→)−∇f(x0→))T(−∇f(x1→)−ω1∇f(x0→)))=0(4)

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

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

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

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

К-я итерация

На k-й итерации имеем набор S0→,…,Sk−1→.

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

Sk→=−∇f(xk→)−‖∇f(xk→)‖2⋅(∇f(x→k−1)‖∇f(x→k−1)‖2+…+∇f(x0→)‖∇f(x→0)‖2)

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

Sk→=−∇f(xk→)+ωkS→k−1,ωi=‖∇f(xi→)‖2‖∇f(x→i−1)‖2,

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

Алгоритм

  • Пусть x→0 — начальная точка, r→0 — направление антиградиента и мы пытаемся найти минимум функции f(x→). Положим S→0=r→0 и найдём минимум вдоль направления S→0. Обозначим точку минимума x→1.
  • Пусть на некотором шаге мы находимся в точке x→k, и r→k — направление антиградиента. Положим S→k=r→k+ωkS→k−1, где ωk выбирают либо (r→k,r→k)(r→k−1,r→k−1) (стандартный алгоритм — Флетчера-Ривса, для квадратичных функций с H>0), либо max⁡(0,(r→k,r→k−r→k−1)(r→k−1,r→k−1)) (алгоритм Полака–Рибьера). После чего найдём минимум в направлении Sk→ и обозначим точку минимума x→k+1. Если в вычисленном направлении функция не уменьшается, то нужно забыть предыдущее направление, положив ωk=0 и повторив шаг.

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

  1. Задаются начальным приближением и погрешностью: x→0,ε,k=0
  2. Рассчитывают начальное направление: j=0,S→kj=−∇f(x→k),x→kj=x→k
  3. x→kj+1=x→kj+λS→kj,λ=arg⁡minλf(x→kj+λS→kj),S→kj+1=−∇f(x→kj+1)+ωS→kj,ω=||∇f(x→kj+1)||2||∇f(x→kj)||2
    • Если ||S→kj+1||<ε или ||x→kj+1−x→kj||<ε, то x→=x→kj+1 и остановка.
    • Иначе
      • если (j+1)<n, то j=j+1 и переход к 3;
      • иначе x→k+1=x→kj+1,k=k+1 и переход к 2.

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

Шаблон:Message box

Литература

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

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