Методы спуска

## Общая схема

Все методы спуска решения задачи безусловной минимизации различаются либо выбором направления спуска, либо способом движения вдоль направления спуска. Это позволяет написать общую схему методов спуска.

Решается задача минимизации функции j(x) на всём пространстве En. Методы спуска состоят в следующей процедуре построения последовательности {xk}. В качестве начального приближения выбирается любая точка x0ÎEn. Последовательные приближения x1, x2, … строятся по следующей схеме:

1) в точке xk выбирают направление спуска - Sk;

2) находят (k+1)-е приближение по формуле xk+1=xk-hkSk.

Направление Sk выбирают таким образом, чтобы обеспечить неравенство f(xk+1)<f(xk) по крайней мере для малых значений величины hk. На вопрос, какому из способов выбора направления спуска следует отдать предпочтение при решении конкретной задачи, однозначного ответа нет.

Число hk определяет расстояние от точки xk до точки хk+1. Это число называется длиной шага или просто шагом. Основная задача при выборе величины hk - это обеспечить выполнение неравенства j(xk+1)<j(xk).

Величина шага сильно влияет на эффективность метода. Большей эффективностью обладает вариант метода, когда шаг по каждой переменной определяется направляющими косинусами градиента(в градиентных методах).

xk+1=xk-hk cos

где - cos=

В этом случаи величина рабочего шага не зависит от величины модуля градиента, и ею легче управлять изменением h . В районе оптимума может возникать значительное «рыскание», поэтому используют различные алгоритмы коррекции h.

Наибольшее распространение получили следующие алгоритмы:

1. (без коррекции);

2. если ; если

3. , если ; , если; ,если ,

где –угол между градиентами на предыдущем и текущем шаге;

и – заданные пороговые значения выбираются субъективно

(например, ).

Вдали от оптимума направление градиента меняется мало, поэтому шаг можно увеличить (второе выражение), вблизи от оптимума направление резко меняется (угол между градиентами R(x) большой), поэтому h сокращается (третье выражение).

Метод градиентного спуска.

Рассмотрим функцию f, считая для определенности, что она зависит от трех переменных x,y,z. Вычислим ее частные производные дf/дх, дf/ду, дf/дz и образуем с их помощью вектор, который называют градиентом функции:

grad f(x, у, z) = дf (х, у,z) /дх*i+дf( x, у, z)/ду*j+дf(x, y,z)/дг*k.

Здесь i, j, k - единичные векторы, параллельные координатным осям. Частные производные характеризуют изменение функции f по каждой независимой переменной в отдельности. Образованный с их помощью вектор градиента дает общее представление о поведении функции в окрестности точки (х, у,z). Направление этого вектора является направлением наиболее быстрого возрастания функции в данной точке. Противоположное ему направление, которое часто называют антиградиентным, представляет собой направление наиболее быстрого убывания функции. Модуль градиента
______________________
|grad (х, у,z)| =Ö (дf/дх (х, у,z))2 +(дf/ду( x, у, z))2+(дf/дг(x, y,z))2.

определяет скорость возрастания и убывания функции в направлении градиента и антиградиента. Для всех остальных направлений скорость изменения функции в точке (х, у, z) меньше модуля градиента. При переходе от одной точки к другой как направление градиента, так и его модуль, вообще говоря, меняются. Понятие градиента естественным образом переносится на функции любого числа переменных.

Перейдем к описанию метода градиентного спуска. Основная его идея состоит в том, чтобы двигаться к минимуму в направлении наиболее быстрого убывания функции, которое определяется антиградиентом. Эта идея реализуется следующим образом.

Выберем каким-либо способом начальную точку, вычислим в ней градиент рассматриваемой функции и сделаем небольшой шаг в обратном, антиградиентном направлении. В результате мы придем в точку, в которой значение функции будет меньше первоначального. В новой точке повторим процедуру: снова вычислим градиент функции и сделаем шаг в обратном направлении. Продолжая этот процесс, мы будем двигаться в сторону убывания функции. Специальный выбор направления движения на каждом шаге позволяет надеяться на то, что в данном случае приближение к наименьшему значению функции будет более быстрым, чем в методе покоординатного спуска.

Метод градиентного спуска требует вычисления градиента целевой функции на каждом шаге. Если она задана аналитически, то это, как правило, не проблема: для частных производных, определяющих градиент, можно получить явные формулы. В противном случае частные производные в нужных точках приходится вычислять приближенно.

Для оценки частных производных используются разностные методы:

f(x 1, ...,x i+ g i, ..., x n) - f(x 1, ..., x i, ..., x n) gi

1.Алгоритм с центральной пробой

2. Алгоритм с парными пробами

f(x 1, ...,x i+ gi, ..., x n) - f(x 1, ..., x i- g i..., x n) 2gi

где gi – пробный шаг по i-й переменной, выбираемый достаточно малым для разностной оценки производной.

Отметим, что при таких расчетах gi ,нельзя брать слишком малым, а значения функции нужно вычислять с достаточно высокой степенью точности, иначе при вычислении разности

Df(x1, ...,xi+ gi, ..., xn) - f(x1, ..., xi, ..., xn)

Df(x1, ...,xi+ gi, ..., xn) - f(x1, ..., xi- gi,..., xn)

будет допущена большая ошибка.

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

На рис. изображены линии уровня функции двух переменных u= f (х, у), , и приведена траектория поиска ее минимума с помощью метода градиентного спуска.