Метод градиентного спуска.
Рассмотрим функцию 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) меньше модуля градиента. При переходе от одной точки к другой как направление градиента, так и его модуль, вообще говоря, меняются. Понятие градиента естественным образом переносится на функции любого числа переменных.
Перейдем к описанию метода градиентного спуска. Основная его идея состоит в том, чтобы двигаться к минимуму в направлении наиболее быстрого убывания функции, которое определяется антиградиентом. Эта идея реализуется следующим образом.
Выберем каким-либо способом начальную точку, вычислим в ней градиент рассматриваемой функции и сделаем небольшой шаг в обратном, антиградиентном направлении. В результате мы придем в точку, в которой значение функции будет меньше первоначального. В новой точке повторим процедуру: снова вычислим градиент функции и сделаем шаг в обратном направлении. Продолжая этот процесс, мы будем двигаться в сторону убывания функции. Специальный выбор направления движения на каждом шаге позволяет надеяться на то, что в данном случае приближение к наименьшему значению функции будет более быстрым, чем в методе HYPERLINK "http://school-sector.relarn.ru/dckt/projects/optim/pocspusc.htm" покоординатного спуска.
Метод градиентного спуска требует вычисления градиента целевой функции на каждом шаге. Если она задана аналитически, то это, как правило, не проблема: для частных производных, определяющих градиент, можно получить явные формулы. В противном случае частные производные в нужных точках приходится вычислять приближенно, заменяя их соответствующими разностными отношениями:
дf ???f(x1, ...,xi+?xi, ..., xn) - f(x1, ..., xi, ..., xn)
дх ?????????????????????????????????xi
Отметим, что при таких расчетах ?xi ,нельзя брать слишком малым, а значения функции нужно вычислять с достаточно высокой степенью точности, иначе при вычислении разности
??f(x1, ...,xi+?xi, ..., xn) - f(x1, ..., xi, ..., xn)
будет допущена большая ошибка.
На рис. 3 изображены линии уровня той же функции двух переменных u= f (х, у), что и на HYPERLINK "http://school-sector.relarn.ru/dckt/projects/optim/pocspusc.htm" рис. 2, и приведена траектория поиска ее минимума с помощью метода градиентного спуска.
Сравнение HYPERLINK "http://school-sector.relarn.ru/dckt/projects/optim/pocspusc.htm" рис. 2 и 3 показывает, насколько более эффективным является метод градиентного спуска.
INCLUDEPICTURE "http://school-sector.relarn.ru/dckt/projects/optim/image016.jpg" \* MERGEFORMATINET
Рис. 3. Поиск наименьшего значения
функции методом градиентного спуска.