Метод коллинеарных градиентов: различия между версиями
[непроверенная версия] | [непроверенная версия] |
(не показано 39 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
'''Метод коллинеарных градиентов'''<ref>''Tolstykh V.K.'' Collinear Gradients Method for Minimizing Smooth Functions // Oper. Res. Forum. — 2023. — Vol. 4. — No. 20. — doi: [https://doi.org/10.1007/s43069-023-00193-9 s43069-023-00193-9]</ref> — [[Итерация (математика)|итерационный метод]] направленного поиска [[Локальный экстремум|локального экстремума]] функции <math>J(u) |
'''Метод коллинеарных градиентов (МКГ)'''<ref>''Tolstykh V.K.'' Collinear Gradients Method for Minimizing Smooth Functions // Oper. Res. Forum. — 2023. — Vol. 4. — No. 20. — doi: [https://doi.org/10.1007/s43069-023-00193-9 s43069-023-00193-9]</ref> — [[Итерация (математика)|итерационный метод]] направленного поиска [[Локальный экстремум|локального экстремума]] [[Гладкая функция|гладкой]] [[функция многих переменных|функции многих переменных]] <math>J(u)\colon\R^n\to\R</math> с движением к экстремуму вдоль вектора <math>d\in \mathbb R^n</math> такого, где [[градиент]]ы <math>\nabla J(u)</math> и <math>\nabla J(u+d)</math> [[Коллинеарность|коллинеарные]]. Это метод перового порядка (использует только первые производные <math>\nabla J</math>) с квадратичной [[скорость сходимости|скоростью сходимости]]. Может применяться к функциям высокой размерности <math>n</math> с несколькими локальными экстремумами. МКГ можно отнести к семейству методов [https://en.wikipedia.org/wiki/Truncated_Newton_method Truncated Newton method] |
||
[[Файл:Collinearity.png|thumb|Коллинеарные векторы <math>\nabla J(u^k)</math> и <math>\nabla J(u^{k_\ast})</math> с направлением минимизации <math>d^k</math> для выпуклой функции, <math>n=2</math>]] |
[[Файл:Collinearity.png|thumb|Коллинеарные векторы <math>\nabla J(u^k)</math> и <math>\nabla J(u^{k_\ast})</math> с направлением минимизации <math>d^k</math> для выпуклой функции, <math>n=2</math>]] |
||
=== Идея метода === |
=== Идея метода === |
||
Для гладкой функции <math>J(u)</math> в относительно большой окрестности точки <math>u^k</math> найдётся точка <math>u^{k_\ast}</math>, где градиенты <math>\nabla J^k\,\overset{\textrm{def}}{=}\,\nabla J(u^k)</math> и <math>\nabla J^{k_\ast}\,\overset{\textrm{def}}{=}\,\nabla J(u^{k_\ast})</math> коллинеарные. Направлением на экстремум <math>u_\ast</math> из точки <math>u^k</math> будет направление <math>d^k={(u^{k_\ast}-u}^k)</math>. Вектор <math>d^k</math> указывает на максимум или на минимум в зависимости от положения точки <math>u^{k_\ast}</math>. Она может быть спереди или сзади от <math>u^k</math> относительно направления на <math>u_\ast</math> (см. рисунок). Далее будем рассматривать минимизацию. |
|||
Очередная итерация МКГ: |
Очередная {{font color|pink||итерация МКГ}}: |
||
(1) <math>\quad u^{k+1}=u^k+b^kd^k, \quad k\in \left\{ 0,1\dots\right\},</math> |
|||
⚫ | |||
: ( |
: (2) <math>\quad b^{k}=\left (1- \frac{\langle \nabla J(u^{k_\ast},d^k \rangle}{\langle\nabla J(u^k),d^k\rangle}\right )^{-1},\quad\forall u^{k_\ast}.</math> |
||
Угловые скобки — это [[скалярное произведение]] в [[Евклидово пространство|евклидовом пространстве]] <math>\mathbb R^n</math>. Если <math>J(u)</math> [[выпуклая функция]] в окрестности <math>u^k</math>, то для передней точки <math>u^{k_\ast}</math> получаем число <math>b^k>0</math>, для задней <math>b^k<0</math>. Делаем шаг (1). |
|||
⚫ | |||
: (2) <math>\quad b^{k}=\left (1- \frac{\langle \nabla J(u^{k_\ast},d^k \rangle}{\langle\nabla J(u^k),d^k\rangle}\right )^{-1},\quad\forall u^{k_\ast}.</math> |
|||
Для строго выпуклой квадратичной функции <math>J(u)</math> {{font color|pink||шаг МКГ}} |
|||
⚫ | |||
<math>b^kd^k=-H^{-1}\nabla J^k,</math> |
|||
т.е. {{font color|pink||это шаг [[метод Ньютона|метода Ньютона]]}} (метод второго порядка с квадратичной скоростью сходимости), где <math>H</math> — [[матрица Гессе]]. Такие шаги обеспечивают МКГ квадратичную скорость сходимости. |
|||
⚫ | |||
Из [[невязка|невязки]] [[орт вектора|ортов]] градиентов можно найти <math>u^{k_\ast}</math> как корень системы <math>n</math> уравнений: |
|||
⚫ | В общем случае, если <math>J(u)</math> имеет переменную выпуклость и возможны [[Седловая точка|седловые точки]], то следует контролировать направление минимизации по углу <math>\gamma</math> между векторами <math>\nabla J^k</math> и <math>d^k</math>. Если <math>\cos(\gamma)=\frac{\langle \nabla J^k,d^k\rangle}{||\nabla J(u^k)||\; ||d^k||}\geq 0</math>, то <math>d^k</math> — это направление максимизации и в (1) следует брать <math>b^k</math> с обратным знаком. |
||
⚫ | |||
⚫ | |||
{{font color|pink||Коллинеарность градиентов}} оценивается [[невязка|невязкой]] их [[орт вектора|ортов]], которая имеет вид системы <math>n</math> уравнений для поиска корня <math>u=u^{k_\ast}</math>: |
|||
⚫ | |||
где [[sgn|знак]] <math>s=\sgn\langle\nabla J(u),\nabla J(u^k)\rangle</math> позволяет одинаково оценивать коллинеарность градиентов по одну или разные стороны от минимума <math>u_\ast</math>, <math>||r^k(u)||\le \sqrt{2}</math>. |
где [[sgn|знак]] <math>s=\sgn\langle\nabla J(u),\nabla J(u^k)\rangle</math> позволяет одинаково оценивать коллинеарность градиентов по одну или разные стороны от минимума <math>u_\ast</math>, <math>||r^k(u)||\le \sqrt{2}</math>. |
||
Система (3) решается итерационно (подитерации <math>l</math>) [[Метод сопряжённых градиентов (СЛАУ)|методом сопряжённых градиентов]] в предположении, что она линейна в окрестности <math>u^k</math>: |
Система (3) решается итерационно ('''''подитерации''''' <math>l\,</math>) [[Метод сопряжённых градиентов (СЛАУ)|методом сопряжённых градиентов]] в предположении, что она линейна в окрестности <math>u^k</math>: |
||
: (4) <math>\quad u^{k_{l+1}}=u^{k_l}+\tau^lp^l, \quad l=1,2\ldots,</math> |
: (4) <math>\quad u^{k_{l+1}}=u^{k_l}+\tau^lp^l, \quad l=1,2\ldots,</math> |
||
где вектор <math>p^l\ |
где вектор <math>\;p^l\;\overset{\textrm{def}}{=}\,p(u^{k_l})=-r^l+{\beta^lp}^{l-1}</math>, <math>\;r^l\,\overset{\textrm{def}}{=}\,r(u^{k_l})</math>, <math>\;\beta^l=||r^l||^2/||r^{l-1}||^2, \ \beta^{1,n,2n...}=0</math>, <math>\;\tau^l=||r^l||^2/\langle p^l,H^lp^l\rangle</math>, произведение матрицы Гессе <math>H^l</math> на <math>p^l</math> находится численным дифференцированием: |
||
: (5) <math>\quad H^lp^l\approx \frac{r(u^{k_h})-r(u^{k_l})}{h/||p^l||},</math> |
: (5) <math>\quad H^lp^l\approx \frac{r(u^{k_h})-r(u^{k_l})}{h/||p^l||},</math> |
||
Строка 52: | Строка 55: | ||
# <math>\left| \frac{||r^l||-||r^{l-1}||}{||r^l||}\right| \leq c_1,\quad l>1 </math> — прекратилась сходимость; |
# <math>\left| \frac{||r^l||-||r^{l-1}||}{||r^l||}\right| \leq c_1,\quad l>1 </math> — прекратилась сходимость; |
||
# <math>l \leq l_{max}=\operatorname{integer} \left| c_2 \ln c_1 \ln n \right|,\quad c_2 \geq 1 </math> — избыточность подитераций. |
# <math>l \leq l_{max}=\operatorname{integer} \left| c_2 \ln c_1 \ln n \right|,\quad c_2 \geq 1 </math> — избыточность подитераций. |
||
== Алгоритм выбора направления минимизации == |
== Алгоритм выбора направления минимизации == |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | # Если <math>||r^l||\leq c_1\sqrt{2}\,</math> или <math> l \geq l_{max}</math>, или <math>||u^{k_l}-u^k|| < \delta_m </math>, или {<math>\,l>1</math> и <math>\left| \frac{||r^l||-||r^{l-1}||}{||r^l||}\right| \leq c_1 </math>}, то принимаем <math>u^{k_\ast}=u^{k_l}</math>, возвращаем <math>\nabla J\left(u^{k_\ast}\right)</math>, <math>d^k={(u^{k_\ast}-u}^k)</math>, '''<big>стоп</big>''' |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | # <code>Если <math>||r^l||\leq c_1\sqrt{2}\,</math> или <math> l \geq l_{max}</math>, или <math>||u^{k_l}-u^k|| < \delta_m </math>, или {<math>\,l>1</math> и <math>\left| \frac{||r^l||-||r^{l-1}||}{||r^l||}\right| \leq c_1 </math>}, то принимаем <math>u^{k_\ast}=u^{k_l}</math>, возвращаем <math>\nabla J\left(u^{k_\ast}\right)</math>, <math>d^k={(u^{k_\ast}-u}^k)</math>, {{font color||red|'''<big>стоп</big>'''}}.</code> |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | Параметр <math>c_2=3\div 5 |
||
⚫ | |||
Описанный алгоритм позволяет приблизительно найти коллинеарные градиенты из системы уравнений (3). Полученное направление <math>b^kd^k</math> для алгоритма МКГ (1) будет {{font color|pink||приблизительным направлением Ньютона}} (truncated Newton method). |
|||
== Демонстрации<ref>''Tolstykh V.K.'' Демонстрационное Windows-приложение [https://tolstykh.com/docs/Оптимизация/optimization.rar Optimization ]</ref> == |
== Демонстрации<ref>''Tolstykh V.K.'' Демонстрационное Windows-приложение [https://tolstykh.com/docs/Оптимизация/optimization.rar Optimization ]</ref> == |
||
Во всех демонстрациях МКГ показывает сходимость не хуже, а иногда и лучше |
Во всех демонстрациях МКГ показывает сходимость не хуже, а иногда и лучше (для функций переменной выпуклости), чем метод Ньютона. |
||
=== Тестовая функция «повёрнутый эллипсоид» === |
=== Тестовая функция «повёрнутый эллипсоид» === |
||
Строго выпуклая квадратичная функция: |
|||
[[Файл:ColGM.png|thumb|Минимизация МКГ, <math>n=2</math>]] |
[[Файл:ColGM.png|thumb|Минимизация МКГ, <math>n=2</math>]] |
||
: <math>J(u)=\sum_{i=1}^{n}\left(\sum_{j=1}^{i}u_j\right)^2,\quad u_{\ast}=(0...0).</math> |
: <math>J(u)=\sum_{i=1}^{n}\left(\sum_{j=1}^{i}u_j\right)^2,\quad u_{\ast}=(0...0).</math> |
||
Строка 86: | Строка 93: | ||
При <math>{\color{red}n=1000}</math> (параметр <math>\delta^0={10}^{-5}</math>) с начальной точкой <math>u^0=(-1...1)</math> МКГ достиг <math>u_\ast</math> с точностью 1 % за 3 итерации и 754 вычисления <math>J</math> и <math>\nabla J</math>. Другие методы первого порядка: [[Квазиньютоновские методы|Квазиньютоновский BFGS]] (работа с матрицами) потребовал 66 |
При <math>{\color{red}n=1000}</math> (параметр <math>\delta^0={10}^{-5}</math>) с начальной точкой <math>u^0=(-1...1)</math> МКГ достиг <math>u_\ast</math> с точностью 1 % за 3 итерации и 754 вычисления <math>J</math> и <math>\nabla J</math>. Другие методы первого порядка: [[Квазиньютоновские методы|Квазиньютоновский BFGS]] (работа с матрицами) потребовал 66 итераций и 788 вычислений; [[метод сопряжённых градиентов|сопряжённых градиентов]] (Fletcher-Reeves) — 274 итерации и 2236 вычислений; конечно-разностный метод Ньютона — 1 итерация и 1001 вычислений. [[Метод Ньютона]] второго порядка — 1 итерация. |
||
С ростом размерности <math>\color{red}n</math>, вычислительные погрешности при реализации условия коллинеарности (3), могут заметно возрастать. Поэтому МКГ, по сравнению с методом Ньютона, в рассматриваемом примере потребовал более одной итерации. |
|||
[[Файл:ColGM-Rosenbrock.png|thumb|Минимизация МКГ: 3 итерации и 16 вычислений <math>J</math> и <math>\nabla J</math>]] |
[[Файл:ColGM-Rosenbrock.png|thumb|Минимизация МКГ: 3 итерации и 16 вычислений <math>J</math> и <math>\nabla J</math>]] |
||
=== Тестовая функция Розенброка === |
=== Тестовая функция [[Функция Розенброка|Розенброка]] === |
||
: <math>J(u)=100(u_1^2-u_2)^2+(u_1-1)^2,\quad u_\ast=(1,1).</math> |
: <math>J(u)=100(u_1^2-u_2)^2+(u_1-1)^2,\quad u_\ast=(1,1).</math> |
||
Строка 111: | Строка 121: | ||
МКГ является очень экономичным по количеству вычислений <math>J</math> и <math>\nabla J</math>. Благодаря формуле (2), он не требует затратных вычислений шагового множителя <math>b^k</math> посредством линейного поиска ([[метод золотого сечения]] и т. |
{{font color|pink||МКГ является очень экономичным}} по количеству вычислений <math>J</math> и <math>\nabla J</math>. Благодаря формуле (2), он не требует затратных вычислений шагового множителя <math>b^k</math> посредством линейного поиска (например, [[метод золотого сечения|методом золотого сечения]] и т.п.). |
||
== Примечания == |
== Примечания == |
||
{{примечания}} |
{{примечания}} |
||
[[Категория: |
[[Категория:Численные методы]] |
||
[[Категория:Алгоритмы и методы оптимизации]] |
|||
[[Категория:Алгоритмы оптимизации]] |
Версия от 15:11, 27 декабря 2024
Метод коллинеарных градиентов (МКГ)[1] — итерационный метод направленного поиска локального экстремума гладкой функции многих переменных с движением к экстремуму вдоль вектора такого, где градиенты и коллинеарные. Это метод перового порядка (использует только первые производные ) с квадратичной скоростью сходимости. Может применяться к функциям высокой размерности с несколькими локальными экстремумами. МКГ можно отнести к семейству методов Truncated Newton method
Идея метода
Для гладкой функции в относительно большой окрестности точки найдётся точка , где градиенты и коллинеарные. Направлением на экстремум из точки будет направление . Вектор указывает на максимум или на минимум в зависимости от положения точки . Она может быть спереди или сзади от относительно направления на (см. рисунок). Далее будем рассматривать минимизацию.
Очередная итерация МКГ:
(1)
где оптимальное находится аналитически из предположения квадратичности одномерной функции :
- (2)
Угловые скобки — это скалярное произведение в евклидовом пространстве . Если выпуклая функция в окрестности , то для передней точки получаем число , для задней . Делаем шаг (1).
Для строго выпуклой квадратичной функции шаг МКГ
т.е. это шаг метода Ньютона (метод второго порядка с квадратичной скоростью сходимости), где — матрица Гессе. Такие шаги обеспечивают МКГ квадратичную скорость сходимости.
В общем случае, если имеет переменную выпуклость и возможны седловые точки, то следует контролировать направление минимизации по углу между векторами и . Если , то — это направление максимизации и в (1) следует брать с обратным знаком.
Поиск коллинеарных градиентов
Коллинеарность градиентов оценивается невязкой их ортов, которая имеет вид системы уравнений для поиска корня :
(3)
где знак позволяет одинаково оценивать коллинеарность градиентов по одну или разные стороны от минимума , .
Система (3) решается итерационно (подитерации ) методом сопряжённых градиентов в предположении, что она линейна в окрестности :
- (4)
где вектор , , , , произведение матрицы Гессе на находится численным дифференцированием:
- (5)
где , — малое положительное число такое, что .
Начальное приближение задаётся под 45° ко всем осям координат длинной :
- (6)
Начальный радиус -окрестности точки корректируется:
- (7)
Необходимо . Здесь малое положительное число заметно больше машинного эпсилон.
Подитерации завершаются при выполнении хотя бы одного из условий:
- — достигнута точность;
- — прекратилась сходимость;
- — избыточность подитераций.
Алгоритм выбора направления минимизации
Параметры: .
Входные данные: .
. Если задаём из (7).
Находим из (6).
Вычисляем и находим из (3) при .
Если или , или , или { и }, то принимаем , возвращаем , , стоп.
Если , задаём , иначе .
Вычисляем .
Находим шаговый множитель для подитераций:
запоминаем , , , , ;
задаём , вычисляем , и находим из (5), присваиваем ;
если , тогда , возвращаемся к шагу 7.2;
восстанавливаем , , , , ;
находим .
Делаем подитерацию из (4).
, переходим к шагу 3.
Параметр . Для функций без седловых точек рекомендуется , . Для «обхода» седловых точек рекомендуется , .
Описанный алгоритм позволяет приблизительно найти коллинеарные градиенты из системы уравнений (3). Полученное направление для алгоритма МКГ (1) будет приблизительным направлением Ньютона (truncated Newton method).
Демонстрации[2]
Во всех демонстрациях МКГ показывает сходимость не хуже, а иногда и лучше (для функций переменной выпуклости), чем метод Ньютона.
Тестовая функция «повёрнутый эллипсоид»
Строго выпуклая квадратичная функция:
На рисунке для заданы три чёрные стартовые точки . Серые точки — подитерации с (показано пунктиром, завышено для демонстрации). Параметры , . Для всех потребовалась одна итерация и подитераций не более двух.
При (параметр ) с начальной точкой МКГ достиг с точностью 1 % за 3 итерации и 754 вычисления и . Другие методы первого порядка: Квазиньютоновский BFGS (работа с матрицами) потребовал 66 итераций и 788 вычислений; сопряжённых градиентов (Fletcher-Reeves) — 274 итерации и 2236 вычислений; конечно-разностный метод Ньютона — 1 итерация и 1001 вычислений. Метод Ньютона второго порядка — 1 итерация.
С ростом размерности , вычислительные погрешности при реализации условия коллинеарности (3), могут заметно возрастать. Поэтому МКГ, по сравнению с методом Ньютона, в рассматриваемом примере потребовал более одной итерации.
Тестовая функция Розенброка
Параметры те же, кроме . Траектория спуска МКГ полностью совпадает с методом Ньютона. На рисунке синяя начальная точка , красная — . В каждой точке нарисованы орты градиентов.
Тестовая функция Химмельблау
Параметры , .
МКГ является очень экономичным по количеству вычислений и . Благодаря формуле (2), он не требует затратных вычислений шагового множителя посредством линейного поиска (например, методом золотого сечения и т.п.).
Примечания
- ↑ Tolstykh V.K. Collinear Gradients Method for Minimizing Smooth Functions // Oper. Res. Forum. — 2023. — Vol. 4. — No. 20. — doi: s43069-023-00193-9
- ↑ Tolstykh V.K. Демонстрационное Windows-приложение Optimization