Метод сопряжённых градиентов
Материал из 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>  | + | <tex>r_1 = b - Ax_0</tex> <br/>  | 
| - | <tex>   | + | <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кб] ]]  | ||
| + | |||
| + | == Список литературы ==  | ||
* '' Васильев Ф. П. ''   Методы оптимизации - Издательство «Факториал Пресс», 2002 <br/>  | * '' Васильев Ф. П. ''   Методы оптимизации - Издательство «Факториал Пресс», 2002 <br/>  | ||
| - | * '' Nocedal J., Wright S.J. ''   Numerical Optimization ,Springer, 1999  | + | * '' Nocedal J., Wright S.J. ''   Numerical Optimization ,Springer, 1999  | 
Версия 22:27, 23 ноября 2008
Содержание | 
Постановка задачи оптимизации
Пусть задано множество  и на этом множестве определена целевая функция (objective function) 
. Задача оптимизации состоит в нахождении на множестве 
  точной верхней или точной нижней грани целевой функции. 
Множество точек, на которых достигается нижняя грань целевой функции обозначается  . 
Если , то задача оптимизации называется безусловной (unconstrained).
Если 
, то задача оптимизации называется условной (constrained).
Метод сопряжённых градиентов
Метод сопряжённых градиентов (conjugate gradient method)  первоначально был разработан для решения систем линейных уравнений с положительно определённой матрицей. Позже этот метод обобщили для решения задач безусловной оптимизации в 
Линейный метод сопряжённых градиентов
Изложение метода
Рассмотрим сначала метод сопряжённых градиентов для решения следующей задачи оптимизации: 
Здесь  - симметричная положительно определённая матрица размера 
.
Такая задача оптимизации называется квадратичной. 
Заметим, что 
. Условие экстремума функции 
 эквивалентно системе 
Функция 
 достигает своей нижней грани в единственной точке 
, определяемой уравнением 
 . Таким образом, данная задача оптимизации сводится к решению системы линейных уравнений 
 
Идея метода сопряжённых градиентов состоит в следующем: 
Пусть  - базис в 
 . Тогда для любой точки 
 вектор 
 раскладывается по базису  
Таким образом, 
 представимо в виде 
Каждое следующее приближение вычисляется по формуле: 
Определение. Два вектора  и 
 называются сопряжёнными относительно симметричной матрицы B, если 
Опишем способ построения базиса  в методе  сопряжённых градиентов
В качестве начального приближения 
 выбираем произвольный вектор. 
На каждой итерации 
 выбираются по правилу: 
Базисные вектора  вычисляются по формулам: 
Коэффициенты  выбираются так, чтобы векторы 
 и 
были сопряжёнными относительно А. 
Если обозначить за  , то после нескольких упрощений получим окончательные формулы, используемые при применении метода сопряжённых градиентов на практике: 
 
 
Анализ метода
Для метода сопряжённых градиентов справедлива следующая теорема: 
Теорема
Пусть , где 
 - симметричная положительно определённая матрица размера 
. Тогда метод сопряжённых градиентов сходится не более чем за 
 шагов 
и справедливы следующие соотношения:
Сходимость метода
Если все вычисления точные, и исходные данные точны то метод сходится к решению системы не более чем за  итераций, где
  - размерность системы. Более тонкий анализ показывает, что число итераций не превышает 
, где 
 -  число различных собственных значений матрицы A. 
Для оценки скорости сходимости верна следующая (довольно грубая) оценка: 
, где
. Она позволяет оценить скорость сходимости, если известны
оценки для максимального 
 и минимального 
 собственных значений матрицы 
На практике чаще всего используют следующий критерий останова:
.
Вычислительная сложность
На каждой итерации метода выполняется  операций. Такое количество операций требуется для вычисления произведения
 - это самая трудоёмкая процедура на каждой итерации. Отальные вычисления требуют O(n) операций. 
Суммарная вычислительная сложность метода не превышает  
 - так как число итераций не больше n.
Нелинейный метод сопряжённых градиентов
Расссмотрим теперь модификацию метода сопряжённых градиентов, для случая, когда минимизируемый функционал не является квадратичным: Будем решать задачу:
.
 - непрерывно дифференцируемая в 
 функция.
Чтобы модифицировать метод сопряжённых градиентов для решения этой задачи, необходимо получить для 
 формулы, в кторые не входит матрица А:
 можно вычислять по одной из трёх формул: 
- Метод Флетчера - Ривса (Fletcher–Reeves method)
- Метод Полака - Райбера (Polak–Ribi`ere method)
Если функция  - квадратичная и строго выпуклая, то все три формулы дают одинаковый результат. Если 
 -
произвольная функция, то каждой из формул cоответствует своя модификация метода сопряжённых градиентов. Третья формула используется редко, так как она требует, чтобы функция 
 и вычисления гессиана функции 
 на каждом шаге метода. 
Анализ метода
Если функция  - не квадратичная, метод сопряжённых градиентов может и не сходиться за конечное число шагов. Кроме того, точное вычисление 
 на каждом шаге возможно только в редких случаях. Поэтому накопление погрешностей приводит к тому, что вектора 
 перестают указывать направление убывания функции 
. Тогда на какои-то шаге  полагают 
. Совокупность всех номеров 
, при которых принимается 
 обозначим за 
. Номера 
 называются моментами обновления метода. На практике часто выбирают 
, где 
 - размерность пространства.
Сходимость метода
Вычислительная сложность
На каждой итерации методов Полака-Райбера или Флетчера-Ривса по одному разу вычисляются  функция  и её градиент
, решается задача одномерной оптимизации 
 . Таким образом, сложность одного шага метода споряжённых градиентов имеет тот же порядок что и сложность шага метода скорейшего спуска. На практике, метод сопряжённых градиентов
показывает лучшую скорость сходимости.
Численные примеры
Рекомендации программисту
Линейный метод сопряженных градиентов, исходный код [1кб] 
Нелинейный метод сопряжённых градиентов, исходный код [1кб] 
 Библиотека алгоритмов линейной алгебры [180кб] 
Список литературы
-   Васильев Ф. П.    Методы оптимизации - Издательство «Факториал Пресс», 2002 
 - Nocedal J., Wright S.J. Numerical Optimization ,Springer, 1999
 

