Метод спряженого градієнта

У математиці метод спря́женого градієнта є алгоритмом чисельного рішення окремих систем лінійних рівнянь, а саме тих, чия матриця симетрична і позитивно-визначена. Метод спряженого градієнта часто реалізовується як ітераційний алгоритм, застосовний до розріджених систем, які занадто великі, щоб обробляти їх шляхом прямої реалізації або інших прямих методів, таких як декомпозиція Холеського. Великі розріджені системи часто виникають при чисельному вирішенні часткових диференціальних рівнянь або задачах оптимізації.

Порівняння збіжності градієнтного спуску з оптимальним розміром кроку (зеленим) та кон'югованим вектором (червоним кольором) для мінімізації квадратичної функції, пов'язаної із заданою лінійною системою. Спряжений градієнт, припускаючи точну арифметику, сходиться не більше n кроків, де n - розмір матриці системи (тут n   =   2).

Метод спряженого градієнта також може бути використаний для вирішення необмежених задач оптимізації, таких як мінімізація енергії . Його в основному розробили Магнус Гестенес та Едуард Стіфель [1] які запрограмували його на Z4 .

Метод двобічного спряженого градієнта забезпечує узагальнення до несиметричних матриць. Різні методи нелінійного спряженого градієнта шукають мінімуми нелінійних рівнянь.

Опис задачі, котру вирішують сполучені градієнти ред.

Припустимо, ми хочемо розв’язати систему лінійних рівнянь

 

для вектора x, де відома n × n матриця A симетрична (тобто A T = A ), позитивно-визначена (тобто x T Ax > 0 для всіх ненульових векторів x в R n ), і реальна, і b також відомо. Позначимо унікальний розв'язок цієї системи через   .

Прямий метод ред.

Ми припускаємо, що два ненульові вектори u і v є сполученими (щодо А ), якщо

 

Оскільки A симетрична і позитивно-визначена, ліва частина визначає внутрішній добуток

 

Два вектори є сполученими тоді і лише тоді, коли вони ортогональні щодо цього внутрішнього добутку. Будучи сполученим - це симетричне відношення: якщо u є спряженим на v, то v є спряженим на u . Припустимо, що

 

являє собою сукупність n взаємно сполучених векторів (щодо А ). Тоді P становить основу для  , і ми можемо висловити рішення x of   виходячи з цього:

 

На основі цього розширення ми обчислюємо:

 

Ліву частину множимо на   :

 

підставляючи   і   :

 

потім   і використання   врожайність

 

що означає

 

Це дає наступний метод розв’язання рівняння Ax = b : знайти послідовність n спрямованих напрямків, а потім обчислити коефіцієнти αk .

Як ітеративний метод ред.

Якщо ми обережно оберемо сполучені вектори p k, то, можливо, нам не знадобляться всі, щоб отримати гарне наближення до рішення x . Отже, ми хочемо розглянути метод спряженого градієнта як ітераційний метод. Це також дозволяє приблизно вирішити системи, де n настільки велике, що прямий метод зайняв би занадто багато часу.

Позначимо початкове припущення для x через x0 (можна без втрати загальності вважати, що x0 = 0, інакше розглянемо систему Az = b - Ax 0 ). Починаючи з x0 ми шукаємо вирішення і в кожній ітерації ми повинні мати метрику, котра зможєе сказати нам чи ми ближче до вирішення x, нам це невідомо). Ця метрика випливає з того, що рішення x також є унікальним мінімізатором наступної квадратичної функції

 

Існування унікального мінімізатора очевидно, оскільки його друга похідна задана симетричною позитивно-визначеною матрицею

 

і що мінімалізатор (виокристовує Df(x) = 0) вирішує початкову задачу очевидно з її першої похідної

 

Це говорить про те, щоб перший базовий вектор p 0 був від'ємним градієнтом f при x = x 0 . Градієнт f дорівнює Axb . Починаючи з початкової здогадки x 0, це означає, що беремо p 0 = b - Ax 0 . Інші вектори в основі будуть спряжені з градієнтом, звідси і назва метод спряженого градієнта . Зауважимо, що p 0 також є залишковим, передбаченим цим початковим кроком алгоритму.

Нехай r k - залишок на k- му кроці:

 

Як було зазначено вище, r k - від'ємний градієнт f при x = x k, тому метод спуску градієнтом потребує руху в напрямку r k . Тут, однак, ми наполягаємо, щоб напрямки p k були сполучені один з одним. Практичний спосіб забезпечити це - вимагаючи, щоб наступний напрямок пошуку був побудований з поточного залишкового та всіх попередніх напрямків пошуку. [2] Це дає такий вираз:

 

(див. малюнок у верхній частині статті про вплив обмеження спряженості на збіжність). Слідуючи цьому напрямку, наступне оптимальне місце задається

 

з

 

де остання рівність випливає з визначення r k . Вираз для   може бути отримано, якщо підміняти вираз x k +1 на f і мінімізувати його wrt  

 

Отриманий алгоритм ред.

Наведений вище алгоритм дає найбільш просте пояснення методу спряженого градієнта. Здається, алгоритм, як заявлено, вимагає зберігання всіх попередніх напрямків пошуку та векторів залишків, а також багатьох матричних векторних множень, і, таким чином, може бути обчислювально дорогим. Однак більш детальний аналіз алгоритму показує, що r i є ортогональним до r j, тобто  , для i ≠ j. І p i - A-ортогональна до p j, тобто  , для i ≠ j. Це можна вважати, що в міру просування алгоритму p i і r i охоплюють той самий підпростір Крилова. Якщо r я утворює ортогональну основу відносно стандартного внутрішнього добутку, а p i утворює ортогональну основу відносно внутрішнього добутку, індукованого А. Тому x k можна розглядати як проєкцію x на підпростір Крилова.

Алгоритм детально описаний нижче для розв’язання Ax = b, де A - реальна, симетрична, позитивно-визначена матриця. Вхідний вектор x 0 може бути приблизним початковим рішенням або 0 . Це інша рецептура точної процедури, описаної вище.

 

Це найбільш часто використовуваний алгоритм. Така ж формула для βk також використовується в нелінійному методі градієнта Флетчера-Рівза.

Розрахунок альфа та бета-версії ред.

В алгоритмі αk вибирається таким, що   є ортогональним до r k . Знаменник спрощено від

 

з тих пір   . βk вибирається таким, що   сполучається з p k . Спочатку βk є

 

використовуючи

 

і рівнозначно

 

чисельник βk переписується як

 

оскільки   і r k є ортогональними за конструкцією. Знаменник переписується як

 

використовуючи, що напрямки пошуку p k кон'югуються і знову, що залишки є ортогональними. Це дає β в алгоритмі після скасування αk .

Приклад коду в MATLAB / GNU Octave ред.

function x = conjgrad(A, b, x)
    r = b - A * x;
    p = r;
    rsold = r' * r;

    for i = 1:length(b)
        Ap = A * p;
        alpha = rsold / (p' * Ap);
        x = x + alpha * p;
        r = r - alpha * Ap;
        rsnew = r' * r;
        if sqrt(rsnew) < 1e-10
              break;
        end
        p = r + (rsnew / rsold) * p;
        rsold = rsnew;
    end
end

Числовий приклад ред.

Розглянемо лінійну систему Ax = b, задану через

 

ми виконаємо два етапи методу спряженого градієнта, починаючи з початкової здогадки

 

щоб знайти приблизне рішення для системи.

Рішення ред.

Для довідки правильне рішення

 

Наш перший крок - обчислити залишковий вектор r 0, пов'язаний з x 0 . Цей залишок обчислюється за формулою r 0 = b - Ax 0, а в нашому випадку дорівнює

 

Оскільки це перша ітерація, ми будемо використовувати залишковий вектор r 0 як наш початковий напрямок пошуку p 0 ; метод вибору p k зміниться в подальших ітераціях.

Тепер обчислимо скалярний α0 використовуючи відношення

 

Тепер ми можемо обчислити х 1, використовуючи формулу

 

Цей результат завершує першу ітерацію, результатом якої є "покращене" приблизне рішення для системи, x 1 . Тепер ми можемо перейти і обчислити наступний залишковий вектор r 1 за формулою

 

Наступним нашим кроком у процесі є обчислення скалярного β0 яке згодом буде використано для визначення наступного напрямку пошуку p 1 .

 

Тепер, використовуючи цей скаляр β0, ми можемо обчислити наступний напрямок пошуку p 1, використовуючи відношення

 

Тепер ми обчислюємо скалярний α1 використовуючи нещодавно придбаний p 1, використовуючи той самий метод, що і для α0 .

 

Нарешті, ми знаходимо х 2, використовуючи той самий метод, що і для знаходження х 1 .

 

Результат, x 2, є "кращим" наближенням до рішення системи, ніж x 1 і x 0 . Якби точна арифметика повинна використовуватися в цьому прикладі замість обмеженої точності, то точне рішення теоретично було б досягнуте після n = 2 ітерацій ( n - це порядок системи).

Властивості збіжності ред.

Метод спряженого градієнта теоретично можна розглядати як прямий метод, оскільки він дає точне рішення після кінцевого числа ітерацій, що не перевищує розмір матриці, за відсутності помилки округлення . Однак метод градієнта спряжених нестабільний щодо навіть невеликих збурень, наприклад, більшість напрямків на практиці не є сполученими, і точного рішення так і не отримати. На щастя, метод спряженого градієнта може бути використаний як ітераційний метод, оскільки він забезпечує монотонно поліпшення наближень   до точного рішення, яке може досягти необхідного допуску після відносно невеликої (порівняно з розміром проблеми) кількості ітерацій. Поліпшення, як правило, лінійне і його швидкість визначається числом умови   системної матриці   : тим більше   є, чим повільніше поліпшення. [3]

Якщо   велика, попередня умова використовується для заміни вихідної системи   з   такий як   менше, ніж  , Дивіться нижче.

Теорема конвергенції ред.

Визначте підмножину многочленів як

 

де   - це множина многочленів максимального ступеня   .

Дозволяти   бути ітераційним наближенням точного рішення  , і визначити помилки як   . Тепер швидкість конвергенції можна приблизно оцінити як [4]

 

де   позначає спектр, і   позначає номер умови .

Зауважте, важлива межа, коли   схиляється до  

 

Ця межа показує більш швидкий коефіцієнт конвергенції порівняно з ітераційними методами Якобі або Гаусса-Сейделя, які масштабуються як   .

Метод попередньо обумовленого градієнта ред.

У більшості випадків попередня підготовка необхідна для забезпечення швидкої конвергенції методу градієнта спряжених. Метод попередньо обумовленого градієнта має такий вигляд:

 
 
 
 
repeat
 
 
 
if rk+1 is sufficiently small then exit loop end if
 
 
 
 
end repeat
The result is xk+1

Вищевказаний склад еквівалентний застосуванню методу градієнта спряженого без попереднього обумовлення системи [1]

 

де

 

Матриця попереднього кондиціонера M повинна бути симетричною-позитивно визначеною і фіксованою, тобто не може змінюватися від ітерації до ітерації. Якщо будь-яке з цих припущень щодо попереднього кондиціонера порушено, поведінка методу попередньо обумовленого градієнта може стати непередбачуваним.

Прикладом часто використовуваного попереднього кондиціонера є неповна факторизація Холеського .

Метод гнучких попередньо обумовлених градієнтів ред.

У важкозахисних програмах застосовуються складні попередні кондиціонери, що може призвести до змінної попередньої кондиціонування, що змінюється між ітераціями. Навіть якщо попередній кондиціонер є симетричним позитивно-визначеним на кожній ітерації, той факт, що він може змінитися, робить аргументи вище недійсними, а на практичних тестах призводить до значного уповільнення конвергенції алгоритму, представленого вище. Використовуючи формулу Поляка-Ріб'єра

 

замість формули Флетчер-Рівз

 

може різко покращити конвергенцію в цьому випадку. [5] Цей варіант попередньо обумовленого методу градієнта кон'югату можна назвати [6] гнучким, оскільки він дозволяє змінювати попередню умову. Також показано, що гнучка версія [7] є надійною, навіть якщо попередній кондиціонер не є симетричним позитивним значенням (SPD).

Реалізація гнучкої версії вимагає зберігання додаткового вектора. Для фіксованого попереднього кондиціонера SPD,   тому обидві формули для βk еквівалентні в точній арифметиці, тобто без похибки округлення .

Математичне пояснення кращої поведінки конвергенції методу за формулою Поляка-Ріб'єра полягає в тому, що метод в цьому випадку є локально оптимальним, зокрема, він не зближується повільніше, ніж локально оптимальний метод найбільш крутого спуску. [8]

Приклад коду в MATLAB / GNU Octave ред.

function [x, k] = cgp(x0, A, C, b, mit, stol, bbA, bbC)
% Synopsis:
% x0: initial point
% A: Matrix A of the system Ax=b
% C: Preconditioning Matrix can be left or right
% mit: Maximum number of iterations
% stol: residue norm tolerance
% bbA: Black Box that computes the matrix-vector product for A * u
% bbC: Black Box that computes:
%      for left-side preconditioner : ha = C \ ra
%      for right-side preconditioner: ha = C * ra
% x: Estimated solution point
% k: Number of iterations done 
%
% Example:
% tic;[x, t] = cgp(x0, S, speye(1), b, 3000, 10^-8, @(Z, o) Z*o, @(Z, o) o);toc
% Elapsed time is 0.550190 seconds.
%
% Reference:
%  Métodos iterativos tipo Krylov para sistema lineales
%  B. Molina y M. Raydan - {{ISBN|908-261-078-X}}
        if nargin < 8, error('Not enough input arguments. Try help.'); end;
        if isempty(A), error('Input matrix A must not be empty.'); end;
        if isempty(C), error('Input preconditioner matrix C must not be empty.'); end;
        x = x0;
        ha = 0;
        hp = 0;
        hpp = 0;
        ra = 0;
        rp = 0;
        rpp = 0;
        u = 0;
        k = 0;

        ra = b - bbA(A, x0); % <--- ra = b - A * x0;
        while norm(ra, inf) > stol
                ha = bbC(C, ra); % <--- ha = C \ ra;
                k = k + 1;
                if (k == mit), warning('GCP:MAXIT', 'mit reached, no conversion.'); return; end;
                hpp = hp;
                rpp = rp;
                hp = ha;
                rp = ra;
                t = rp' * hp;
                if k == 1
                        u = hp;
                else
                        u = hp + (t / (rpp' * hpp)) * u;
                end;
                Au = bbA(A, u); % <--- Au = A * u;
                a = t / (u' * Au);
                x = x + a * u;
                ra = rp - a * Au;
        end;

Місцево оптимальний метод найбільш стрімкого спуску ред.

І в оригінальному, і в попередньо обумовленому методах градієнта кон'югату потрібно лише встановити   щоб зробити їх локально оптимальними, використовуючи пошук лінії, найкрутіші методи спуску . При цій підстановці вектори p завжди такі ж, як вектори z, тому немає необхідності зберігати вектори p . Таким чином, кожна ітерація цих найбільш стрімких методів спуску є дещо дешевшою порівняно з методом спряженого градієнта. Однак останні сходяться швидше, якщо не застосовується (високо) змінна та / або попередній кондиціонер, який не є SPD, див. Вище.

Виведення методу ред.

Метод спряженого градієнта може бути отриманий з кількох різних точок зору, включаючи спеціалізацію методу спряженого спрямування для оптимізації та варіацію ітерації Арнольді / Ланцоса для проблем власного значення. Незважаючи на розбіжність у підходах, ці виводи поділяють загальну тему - доказуючи ортогональність залишків та сукупність напрямків пошуку. Ці дві властивості мають вирішальне значення для розробки добре відомого стислого способу.

Спряження градієнта на нормальних рівняннях ред.

Кон'югат градиентного метод може бути застосований до довільного п матриця з розмірністю м матриці, застосовуючи його до нормальним рівнянням Т А і права частина вектора А Т Ь, так як Т А є симетричною позитивно-полуопределена матрицею для будь-якого А. Результат - це спряжений градієнт у звичайних рівняннях (CGNR).

A T Ax = A T b

Як ітераційний метод не потрібно явно формувати A T A в пам'яті, а лише виконувати матричний вектор і транспонувати множення матричного вектора. Отже, CGNR особливо корисний, коли A є розрідженою матрицею, оскільки ці операції зазвичай є надзвичайно ефективними. Однак недоліком формування нормальних рівнянь є те, що число умови κ ( A T A ) дорівнює κ 2 ( A ), тому швидкість конвергенції CGNR може бути повільною і якість приблизного рішення може бути чутливою до округлення помилки. Пошук хорошого попереднього кондиціонера часто є важливою частиною використання методу CGNR.

Запропоновано кілька алгоритмів (наприклад, CGLS, LSQR). Нібито алгоритм LSQR має найкращу числову стійкість, коли A погано обумовлений, тобто A має велике число умов .

Див. також ред.

Примітки ред.

  1. Straeter, T. A. On the Extension of the Davidon-Broyden Class of Rank One, Quasi-Newton Minimization Methods to an Infinite Dimensional Hilbert Space with Applications to Optimal Control Problems. NASA.
  2. The conjugation constraint is an orthonormal-type constraint and hence the algorithm bears resemblance to Gram-Schmidt orthonormalization.
  3. Saad, Yousef (2003). Iterative methods for sparse linear systems (вид. 2nd). Philadelphia, Pa.: Society for Industrial and Applied Mathematics. с. 195. ISBN 978-0-89871-534-7.
  4. Hackbusch, W. (21 червня 2016). Iterative solution of large sparse systems of equations (вид. 2nd). Switzerland: Springer. ISBN 9783319284835. OCLC 952572240.
  5. Golub, Gene H.; Ye, Qiang (1999). Inexact Preconditioned Conjugate Gradient Method with Inner-Outer Iteration. SIAM Journal on Scientific Computing. 21 (4): 1305. CiteSeerX 10.1.1.56.1755. doi:10.1137/S1064827597323415.
  6. Notay, Yvan (2000). Flexible Conjugate Gradients. SIAM Journal on Scientific Computing. 22 (4): 1444—1460. CiteSeerX 10.1.1.35.7473. doi:10.1137/S1064827599362314.
  7. Henricus Bouwmeester, Andrew Dougherty, Andrew V Knyazev. Nonsymmetric Preconditioning for Conjugate Gradient and Steepest Descent Methods. Procedia Computer Science, Volume 51, Pages 276-285, Elsevier, 2015. https://doi.org/10.1016/j.procs.2015.05.241
  8. Knyazev, Andrew V.; Lashuk, Ilya (2008). Steepest Descent and Conjugate Gradient Methods with Variable Preconditioning. SIAM Journal on Matrix Analysis and Applications. 29 (4): 1267. arXiv:math/0605767. doi:10.1137/060675290.

Література ред.

Спосіб спряженого градієнта спочатку був запропонований в

Описи методу можна знайти в наступних підручниках:

Посилання ред.

  • Hazewinkel, Michiel, ed. (2001) [1994], "Conjugate gradients, method of", Encyclopedia of Mathematics, Springer Science+Business Media B.V. / Kluwer Academic Publishers, ISBN 978-1-55608-010-4