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

Материал из MachineLearning.

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: ==Постановка задачи оптимизации== Пусть задано множество <tex> X \subset R^n </tex> и на этом множестве определе...)
Строка 1: Строка 1:
-
 
==Постановка задачи оптимизации==
==Постановка задачи оптимизации==
Строка 41: Строка 40:
Если обозначить за <tex>r_k = b - Ax_k = -f'(x_{k})</tex> , то после нескольких упрощений получим окончательные формулы, используемые при применении метода сопряжённых градиентов на практике: <br/>
Если обозначить за <tex>r_k = b - Ax_k = -f'(x_{k})</tex> , то после нескольких упрощений получим окончательные формулы, используемые при применении метода сопряжённых градиентов на практике: <br/>
<p align = "center">
<p align = "center">
-
<tex>r_0 = b - Ax_0</tex> <br/>
+
<tex>r_1 = b - Ax_0</tex> <br/>
-
<tex> p_0 = r_0 </tex> <br/>
+
<tex> p_1 = r_1 </tex> <br/>
<tex>
<tex>
\begin{equation*}
\begin{equation*}
Строка 66: Строка 65:
Если все вычисления точные, и исходные данные точны то метод сходится к решению системы не более чем за <tex>n</tex> итераций, где<tex>n</tex> - размерность системы. Более тонкий анализ показывает, что число итераций не превышает <tex>m</tex>, где <tex>m</tex> - число различных собственных значений матрицы A.
Если все вычисления точные, и исходные данные точны то метод сходится к решению системы не более чем за <tex>n</tex> итераций, где<tex>n</tex> - размерность системы. Более тонкий анализ показывает, что число итераций не превышает <tex>m</tex>, где <tex>m</tex> - число различных собственных значений матрицы A.
Для оценки скорости сходимости верна следующая (довольно грубая) оценка: <br/>
Для оценки скорости сходимости верна следующая (довольно грубая) оценка: <br/>
-
::<tex> || x_k - x_* ||_A \leq ( \frac{ \sqrt {\kappa(A) } - 1}{ \sqrt { kappa(A) } + 1} ) || x_0 - x_* ||_A </tex>, где
+
::<tex> || x_k - x_* ||_A \leq ( \frac{ \sqrt {\kappa(A) } - 1}{ \sqrt { \kappa(A) } + 1} ) || x_0 - x_* ||_A </tex>, где
<tex> \kappa(A) = || A || \: || A^{-1} || = \lambda_1 / \lambda_n </tex>. Она позволяет оценить скорость сходимости, если известны
<tex> \kappa(A) = || A || \: || A^{-1} || = \lambda_1 / \lambda_n </tex>. Она позволяет оценить скорость сходимости, если известны
оценки для максимального <tex>\lambda_1</tex> и минимального <tex>\lambda_n</tex> собственных значений матрицы <tex>A</tex>
оценки для максимального <tex>\lambda_1</tex> и минимального <tex>\lambda_n</tex> собственных значений матрицы <tex>A</tex>
Строка 97: Строка 96:
==== Сходимость метода ====
==== Сходимость метода ====
 +
 +
====Вычислительная сложность====
 +
На каждой итерации методов Полака-Райбера или Флетчера-Ривса по одному разу вычисляются функция <tex>F(x)</tex> и её градиент
 +
<tex>F'(x)</tex>, решается задача одномерной оптимизации
 +
<tex>F(x_{k - 1} + \alpha_k p_k) \to min \limits_{\alpha_k \geq 0} </tex> . Таким образом, сложность одного шага метода споряжённых градиентов имеет тот же порядок что и сложность шага метода скорейшего спуска. На практике, метод сопряжённых градиентов
 +
показывает лучшую скорость сходимости.
==Численные примеры==
==Численные примеры==
-
==Рекомендации программисту==
+
==Рекомендации программисту ==
-
== Список литературы ==
+
[[Media:Slimper_LinearGradient.zip|Линейный метод сопряженных градиентов, исходный код [1кб]]] <br/>
 +
[[Media:Slimper_NonLinearGradient.zip|Нелинейный метод сопряжённых градиентов, исходный код [1кб] ]]<br/>
 +
[[Media:Slimper_Ublas.zip| Библиотека алгоритмов линейной алгебры [180кб] ]]
 +
 +
== Список литературы ==
* '' Васильев Ф. П. '' &nbsp; Методы оптимизации - Издательство «Факториал Пресс», 2002 <br/>
* '' Васильев Ф. П. '' &nbsp; Методы оптимизации - Издательство «Факториал Пресс», 2002 <br/>
-
* '' Nocedal J., Wright S.J. '' &nbsp Numerical Optimization ,Springer, 1999
+
* '' Nocedal J., Wright S.J. '' &nbsp; Numerical Optimization ,Springer, 1999

Версия 22:27, 23 ноября 2008

Содержание

Постановка задачи оптимизации

Пусть задано множество  X \subset R^n и на этом множестве определена целевая функция (objective function) f : R^n \mapsto R. Задача оптимизации состоит в нахождении на множестве X точной верхней или точной нижней грани целевой функции.
Множество точек, на которых достигается нижняя грань целевой функции обозначается X_* .

X_* = \{x \in X| f(x) = inf \limits_{x \in X} f(x) \}

Если  X = R^n , то задача оптимизации называется безусловной (unconstrained). Если  X \neq R^n , то задача оптимизации называется условной (constrained).

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

Метод сопряжённых градиентов (conjugate gradient method) первоначально был разработан для решения систем линейных уравнений с положительно определённой матрицей. Позже этот метод обобщили для решения задач безусловной оптимизации в R^n

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

Изложение метода

Рассмотрим сначала метод сопряжённых градиентов для решения следующей задачи оптимизации:

F(x) = \frac{1}{2} \langle Ax, x \rangle - \langle b, x \rangle \to inf, \quad x \in R^n

Здесь A - симметричная положительно определённая матрица размера n \times n. Такая задача оптимизации называется квадратичной. Заметим, что F'(x) = Ax - b. Условие экстремума функции F'(x) = 0 эквивалентно системе  Ax - b = 0 Функция F достигает своей нижней грани в единственной точке x_*, определяемой уравнением  Ax_* = b . Таким образом, данная задача оптимизации сводится к решению системы линейных уравнений  Ax = b
Идея метода сопряжённых градиентов состоит в следующем:
Пусть  \{p_k \} _{k = 1}^n - базис в R^n . Тогда для любой точки  x_0 \in R^n вектор x_* - x_0 раскладывается по базису x_* - x_0 = \alpha_1 p_1 + \dots \alpha_n p_n Таким образом, x_* представимо в виде

x_* = x_0 + \alpha_1 p_1 + \dots \alpha_n p_n

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

x_k = x_0 + \alpha_1 p_1 + \dots \alpha_n p_k

Определение. Два вектора p и q называются сопряжёнными относительно симметричной матрицы B, если  \langle Bp,q \rangle = 0

Опишем способ построения базиса  \{p_k \}_{k = 1}^n в методе сопряжённых градиентов В качестве начального приближения  x_0 выбираем произвольный вектор. На каждой итерации \alpha_k выбираются по правилу:

\alpha_k = argmin \limits_{\alpha_k} F(x_{k-1} + \alpha_k  p_k)

Базисные вектора  \{p_k \} вычисляются по формулам:

 p_1 = -F'(x_0)
 p_{k+1} = - F'(x_{k}) + \beta_{k} p_{k}

Коэффициенты \beta_k выбираются так, чтобы векторы p_k и p_{k + 1} были сопряжёнными относительно А.

\beta_k =  \frac{ \langle F'(x_{k}), Ap_k \rangle}{ \langle Ap_k,  p_k \rangle}


Если обозначить за r_k = b - Ax_k = -f'(x_{k}) , то после нескольких упрощений получим окончательные формулы, используемые при применении метода сопряжённых градиентов на практике:

r_1 = b - Ax_0
 p_1 = r_1

\begin{equation*}
\alpha_k  = \frac{ \langle r_k, r_k \rangle }{ \langle Ap_k, p_k \rangle } \\
x_{k + 1} = x_k + \alpha_k p_k \\
r_{k + 1} = r_k - \alpha_k Ap_k \\
\beta_k = \frac{ \langle r_{k + 1}, r_{k + 1} \rangle }{\langle r_k,  r_k \rangle} \\
p_{k + 1} = r_{k + 1} + b_k p_k \\ 
\end{equation*}

Анализ метода

Для метода сопряжённых градиентов справедлива следующая теорема:
Теорема Пусть F(x) = \frac{1}{2}  \langle Ax, x \rangle - \langle b, x \rangle , где A - симметричная положительно определённая матрица размера n. Тогда метод сопряжённых градиентов сходится не более чем за n шагов и справедливы следующие соотношения:

  1. \langle A p_k, p_m \rangle = 0 \quad \forall k, m, \quad k \neq m
  2. \langle F'(x_k), F'(x_m)  \rangle = 0 \quad \forall k, m, \quad k \neq m
  3. \langle F'(x_k),p_m)  \rangle = 0 \quad \forall k, m, \quad m < k

Сходимость метода

Если все вычисления точные, и исходные данные точны то метод сходится к решению системы не более чем за n итераций, гдеn - размерность системы. Более тонкий анализ показывает, что число итераций не превышает m, где m - число различных собственных значений матрицы A. Для оценки скорости сходимости верна следующая (довольно грубая) оценка:

 || x_k - x_* ||_A \leq  ( \frac{ \sqrt  {\kappa(A) } - 1}{ \sqrt { \kappa(A) } + 1} ) || x_0 - x_* ||_A , где

 \kappa(A) = || A || \: || A^{-1} || = \lambda_1 / \lambda_n . Она позволяет оценить скорость сходимости, если известны оценки для максимального \lambda_1 и минимального \lambda_n собственных значений матрицы A На практике чаще всего используют следующий критерий останова:

|| r_k || < \eps.

Вычислительная сложность

На каждой итерации метода выполняется O(n^2) операций. Такое количество операций требуется для вычисления произведения Ap_k - это самая трудоёмкая процедура на каждой итерации. Отальные вычисления требуют O(n) операций. Суммарная вычислительная сложность метода не превышает O(n^3) - так как число итераций не больше n.

Нелинейный метод сопряжённых градиентов

Расссмотрим теперь модификацию метода сопряжённых градиентов, для случая, когда минимизируемый функционал не является квадратичным: Будем решать задачу:

F(x) \to min, \quad x \in R^n .

F(x) - непрерывно дифференцируемая в R^n функция. Чтобы модифицировать метод сопряжённых градиентов для решения этой задачи, необходимо получить для p_k, \alpha_k, \beta_k формулы, в кторые не входит матрица А:

\alpha_k = argmin \limits_{\alpha_k} F(x_{k-1} + \alpha_k  p_k)
 p_{k+1} = - F'(x_{k}) + \beta_{k} p_{k}

 \beta_k можно вычислять по одной из трёх формул:

  1.  \beta_k = - \frac{\langle F'(x_{k + 1} ), F'(x_{k + 1}) \rangle}{\langle F'(x_k), F'(x_k) \rangle} - Метод Флетчера - Ривса (Fletcher–Reeves method)
  2.  \beta_k = \frac{\langle F'(x_{k + 1}), F'(x_k) - F'(x_{k + 1} ) \rangle}{\langle F'(x_k), F'(x_k) \rangle} - Метод Полака - Райбера (Polak–Ribi`ere method)
  3.  \beta_k = \frac{\langle F''(x_{k+1} )p_{k},F'(x_{k + 1}) \rangle}{\langle F''(x_{k})p_k, p_k \rangle}

Если функция F(x) - квадратичная и строго выпуклая, то все три формулы дают одинаковый результат. Если F(x) - произвольная функция, то каждой из формул cоответствует своя модификация метода сопряжённых градиентов. Третья формула используется редко, так как она требует, чтобы функция F(x) \in C^2(R^n) и вычисления гессиана функции F(x) на каждом шаге метода.

Анализ метода

Если функция F(x) - не квадратичная, метод сопряжённых градиентов может и не сходиться за конечное число шагов. Кроме того, точное вычисление \alpha_k на каждом шаге возможно только в редких случаях. Поэтому накопление погрешностей приводит к тому, что вектора  p_k перестают указывать направление убывания функции F(x). Тогда на какои-то шаге полагают \beta_k = 0. Совокупность всех номеров k, при которых принимается \beta_k = 0 обозначим за I_0. Номера k \in I_0 называются моментами обновления метода. На практике часто выбирают I_0 = \{n, 2n, 3n, \dots \}, где n - размерность пространства.

Сходимость метода

Вычислительная сложность

На каждой итерации методов Полака-Райбера или Флетчера-Ривса по одному разу вычисляются функция F(x) и её градиент F'(x), решается задача одномерной оптимизации F(x_{k - 1} + \alpha_k p_k) \to min \limits_{\alpha_k \geq 0} . Таким образом, сложность одного шага метода споряжённых градиентов имеет тот же порядок что и сложность шага метода скорейшего спуска. На практике, метод сопряжённых градиентов показывает лучшую скорость сходимости.

Численные примеры

Рекомендации программисту

Линейный метод сопряженных градиентов, исходный код [1кб]
Нелинейный метод сопряжённых градиентов, исходный код [1кб]
Библиотека алгоритмов линейной алгебры [180кб]


Список литературы

  • Васильев Ф. П.   Методы оптимизации - Издательство «Факториал Пресс», 2002
  • Nocedal J., Wright S.J.   Numerical Optimization ,Springer, 1999
Личные инструменты