- •§ 1. Основные понятия
- •1. Определения.
- •2. Задачи оптимизации.
- •3. Пример постановки задачи.
- •§ 2. Одномерная оптимизация
- •Задачи на экстремум.
- •2. Методы поиска.
- •§ 3. Многомерные задачи оптимизации
- •1. Минимум функции нескольких переменных.
- •3. Метод золотого сечения.
- •4. Метод Ньютона.
- •Метод покоординатного спуска.
- •3. Метод градиентного спуска.
Метод покоординатного спуска.
Пусть требуется найти наименьшее значение целевой функции и = f(x1,x2…,xn). В качестве начального приближения выберем в n - мерном пространстве некоторую точку M0 с координатами х1(0) , х2(0) , ... ,хn(0). Зафиксируем все координаты функции и, кроме первой. Тогда v(x1) = f(xl t х2(0),..., xn(0) ) — функция одной переменной x1. Первый шаг процесса оптимизации состоит в спуске по координате x1 в направлении убывания функции v от точки М0 до некоторой точки M1 (x1(1), х2(0),..., xn(0) ). Если функция f дифференцируемая, то значение х1(0) может быть найдено как
Здесь а1(1)>0 — некоторый шаг. Соотношение (6.17) определяет движение в сторону уменьшения значений функции v (если только шаг а1(1) не слишком велик, в противном случае его нужно уменьшить). Действительно, пусть df / dx1(M0) > 0. Тогда с ростом х1 функция v возрастает, а (6.17) определяет движение в сторону уменьшения х1.
Значение х1(1) можно найти и иначе. А именно, можно решить одномерную задачу оптимизации для функции v(x1). Тогда функция v в точке M1 примет наименьшее значение, т. е. функция и примет в этой точке наименьшее значение по координате xi при фиксированных остальных координатах.
Зафиксируем теперь все координаты, кроме х2, и рассмотрим функцию этой переменной w(x2)=f(x1(1), х2, х3(0),… ,xn(0) . Снова осуществляем спуск, теперь по координате x2, в сторону убывания функции wот точки
M1 до точки М2 (х1(1) , х2(1), х3(0) ,..., хn(0)).
Значение x2(1) можно найти либо как
либо, решив задачу одномерной оптимизации для функции w(x2).
Аналогично проводится спуск по координатам х3, х4,… , хп, а затем процедура снова повторяется от х1 до хп и т. д. В результате этого процесса получается последовательность точек M0, М1, ... , в которых значения целевой функции составляют монотонно убывающую последовательность
f (М0) ≥ f (М1) ≥ ...
В качестве критерия завершения итерационного процесса можно использовать условия близости значений проектных параметров или целевой функции на двух последовательных итерациях. Однако под итерацией здесь следует понимать всю процедуру спуска по координатам от х1 до хп. Таким образом, близость проектных параметров можно трактовать как выполнение условий (4.21) - (4.23), а близость значений целевой функции как выполнение условия
М
етод
покоординатного спуска сводит задачу
о нахождении наименьшего значения
функции многих переменных к многократному
спуску в сторону уменьшения значений
функции по каждому проектному параметру.
Данный метод легко проиллюстрировать
геометрически для случая функции двух
переменных z= f(x,y), описывающей
некоторую поверхность в трехмерном
пространстве. На рис 6.5 нанесены линии
уровня этой поверхности. Процесс
оптимизации в этом случае проходит
следующим образом. Точка М0(Х0,У0) описывает
начальное приближение. Проводя спуск
по координате х, попадем
в точку M1(x1,y0). Далее,
двигаясь параллельно оси ординат,
придем в точку M2(X1, y1) и
т. д.
3. Метод градиентного спуска.
Переходя на математический язык, заключаем, что направление наискорейшего спуска соответствует направлению наибольшего убывания функции. Из курса математики известно, что направление наибольшего возрастания функции двух переменных u = f(x,y) характеризуется ее градиентом
где e1, e2 —
единичные
векторы
(орты) в направлении координатных осей.
Следовательно, направление,
противоположное градиентному, укажет
направление наибольшего убывания
функции. Методы, основанные на выборе
пути оптимизации с помощью градиента,
называются градиентными. Идея
метода градиентного спуска состоит в
следующем. Выбираем некоторую
начальную точку
,
и вычисляем в ней градиент рассматриваемой
функции. Делаем шаг в направлении,
обратном градиентному:
В результате приходим в точку M1 (x(1)), значение функции в которой обычно меньше первоначального (а(1) > 0). Если это условие не выполнено, т. е. значение функции не изменилось либо даже возросло, то нужно уменьшить шаг а(1) . В новой точке процедуру повторяем: вычисляем градиент и снова делаем шаг в обратном к нему направлении:
Процесс
продолжается
до
получения наименьшего значения целевой
функции. Строго говоря, момент окончания
поиска наступит тогда, когда движение
из полученной точки с любым шагом
приводит к возрастанию значения целевой
функции. Если минимум функции достигается
внутри рассматриваемой области, то в
этой точке градиент равен нулю, что
также может служить сигналом об окончании
процесса оптимизации. Приближенно
момент окончания поиска можно определить
аналогично тому, как это делается в
других итерационных методах. Например,
можно проверить близость значений
целевой функции на двух последовательных
итерациях:
Метод
градиентного
спуска
обладает тем же недостатком, что и метод
покоординатного спуска: при наличии
оврагов на поверхности сходимость
метода очень медленная.
В описанном методе требуется вычислять на каждом шаге оптимизации градиент целевой функции f(х):
Формулы
для частных
производных
можно получить в явном виде лишь в том
случае, когда целевая функция задана
аналитически. В противном случае эти
производные вычисляются с помощью
численного дифференцирования:
При использовании градиентного спуска в задачах оптимизации основной объем вычислений приходится обычно на вычисление градиента целевой функции в каждой точке траектории спуска. Поэтому целесообразно уменьшить количество таких точек без ущерба для самого решения. Это достигается в некоторых методах, являющихся модификациями градиентного спуска. Одним из них является метод наискорейшего спуска. Согласно этому методу, после определения в начальной точке направления, противоположного градиенту целевой функции, решают одномерную задачу оптимизации, минимизируяфункцию вдоль этого направления. А именно, минимизируется функция
Для минимизации д(а) можно использовать один из методов одномерной оптимизации. Можно и просто двигаться в направлении, противоположном градиенту, делая при этом не один шаг, а несколько шагов до тех пор, пока целевая функция не перестанет убывать. В найденной новой точке снова определяют направление спуска (с помощью градиента) и ищут новую точку минимума целевой функции и т. д. В этом методе спуск происходит гораздо более крупными шагами, и градиент функции вычисляется в меньшем числе точек.
Заметим, что сведение многомерной задачи оптимизации к последовательности одномерных задач на каждом шаге оптимизации рассмотрено в п. 2 для метода покоординатного спуска. Разница состоит в том, что здесь направление одномерной оптимизации определяется градиентом целевой функции, тогда как покоординатный спуск проводится на каждом шаге вдоль одного из координатных направлений.
Проиллюстрируем метод наискорейшего спуска на рис. 6.8 для случая функции двух переменных z=f(x,y) и отметим некоторые его геометрические особенности.
В
о-первых,
легко показать, что градиент функции
перпендикулярен касательной к линии
уровня в данной точке. Следовательно,
в градиентных методах спуск происходит
по нормали к линии уровня.
Во-вторых, в точке, в которой достигается минимум целевой функции вдоль направления, производная функции по этому направлению обращается в нуль. Но производная функции равна нулю по направлению касательной к линии уровня. Отсюда следует, что градиент целевой функции в новой точке перпендикулярен направлению одномерной оптимизации на предыдущем шаге, т. е. спуск на двух последовательных шагах производится во взаимно перпендикулярных направлениях.
Советуем читателю для лучшего понимания метода наискорейшего спуска составить алгоритм, аналогичный представленному на рис. 6.7 для метода покоординатного спуска.
