Градиентный спуск

Градиентный спуск — метод нахождения локального минимума или максимума функции с помощью движения вдоль градиента. Для минимизации функции в направлении градиента используются методы одномерной оптимизации, например, метод золотого сечения. Также можно искать не наилучшую точку в направлении градиента, а какую-либо лучше текущей.
Наиболее простой в реализации из всех методов локальной оптимизации. Имеет довольно слабые условия сходимости, но при этом скорость сходимости достаточно мала (линейна). Шаг градиентного метода часто используется как часть других методов оптимизации, например, метод Флетчера — Ривса.
Описание
Пусть целевая функция имеет вид:
F ( x → ) : X → R {displaystyle F({vec {x}}):;mathbb {X} o mathbb {R} } .И задача оптимизации задана следующим образом:
F ( x → ) → min x → ∈ X {displaystyle F({vec {x}}) o min _{{vec {x}}in mathbb {X} }}В случае, когда требуется найти максимум, вместо F ( x → ) {displaystyle F({vec {x}})} используется − F ( x → ) {displaystyle -F({vec {x}})}
Основная идея метода заключается в том, чтобы идти в направлении наискорейшего спуска, а это направление задаётся антиградиентом − ∇ F {displaystyle - abla F} :
x → [ j + 1 ] = x → [ j ] − λ [ j ] ∇ F ( x → [ j ] ) {displaystyle {vec {x}}^{[j+1]}={vec {x}}^{[j]}-lambda ^{[j]} abla Fleft({vec {x}}^{[j]} ight)}где λ [ j ] {displaystyle lambda ^{[j]}} задает скорость градиентного спуска и может быть выбрана
- постоянной (в этом случае метод может расходиться);
- убывающей в процессе градиентного спуска;
- гарантирующей наискорейший спуск:
- Для поиска минимума F ( x → ) {displaystyle Fleft({vec {x}} ight)} получаем λ [ j ] = a r g m i n λ F ( x → [ j + 1 ] ) = a r g m i n λ F ( x → [ j ] − λ ∇ F ( x → [ j ] ) ) {displaystyle lambda ^{[j]}=mathrm {argmin} _{lambda }Fleft({vec {x}}^{[j+1]} ight)=mathrm {argmin} _{lambda },Fleft({vec {x}}^{[j]}-lambda abla Fleft({vec {x}}^{[j]} ight) ight)}
- Для поиска максимума F ( x → ) {displaystyle Fleft({vec {x}} ight)} получаем λ [ j ] = a r g m a x λ F ( x → [ j + 1 ] ) = a r g m a x λ F ( x → [ j ] + λ ∇ F ( x → [ j ] ) ) {displaystyle lambda ^{[j]}=mathrm {argmax} _{lambda }Fleft({vec {x}}^{[j+1]} ight)=mathrm {argmax} _{lambda },Fleft({vec {x}}^{[j]}+lambda abla Fleft({vec {x}}^{[j]} ight) ight)}
Алгоритм
- Если | x → [ j + 1 ] − x → [ j ] | > ε {displaystyle left|{vec {x}}^{[j+1]}-{vec {x}}^{[j]} ight|>varepsilon } , | F ( x → [ j + 1 ] ) − F ( x → [ j ] ) | > ε {displaystyle left|Fleft({vec {x}}^{[j+1]} ight)-Fleft({vec {x}}^{[j]} ight) ight|>varepsilon } или ‖ ∇ F ( x → [ j + 1 ] ) ‖ > ε {displaystyle left| abla Fleft({vec {x}}^{[j+1]} ight) ight|>varepsilon } (выбирают одно из условий), то j = j + 1 {displaystyle j=j+1} и переход к шагу 2.
- Иначе x → = x → [ j + 1 ] {displaystyle {vec {x}}={vec {x}}^{[j+1]}} и останов.
Соотношение Канторовича
Для квадратичной функции вида x T Γ x 2 + c T x , Γ T = Γ {displaystyle {frac {x^{T}Gamma x}{2}}+c^{T}x,Gamma ^{T}=Gamma } метод наискорейшего градиентного поиска сходится из любой начальной точки x 0 {displaystyle x_{0}} со скоростью геометрической прогрессии (линейно) со знаменателем, не превосходящим значение q {displaystyle q} . При этом справедливы следующие оценки:
∃ a = a ( x 0 ) , T > 0 : 0 ≤ a ≤ q = ( λ m i n / λ m a x − 1 ) 2 ( λ m i n / λ m a x + 1 ) 2 {displaystyle exists a=a(x_{0}),T>0:0leq aleq q={frac {left(lambda _{min}/lambda _{max}-1 ight)^{2}}{left(lambda _{min}/lambda _{max}+1 ight)^{2}}}} , f ( x k ) − f ( x ∗ ) ≤ a k ( f ( x 0 ) − f ( x ∗ ) ) {displaystyle f(x_{k})-f(x^{*})leq a^{k}(f(x_{0})-f(x^{*}))} , ‖ x k − x ∗ ‖ ≤ T a k / 2 ‖ x 0 − x ∗ ‖ {displaystyle |x_{k}-x^{*}|leq Ta^{k/2}|x_{0}-x^{*}|} ,где λ m i n {displaystyle lambda _{min}} и λ m a x {displaystyle lambda _{max}} — минимальное и максимальное собственные числа матрицы вторых производных ∇ 2 f ( x ) = Γ {displaystyle abla ^{2}f(x)=Gamma } .
Таким образом, поскольку функция близка в малом к своей квадратичной аппроксимации, скорость сходимости, в окрестности точки минимума, зависит от отношения собственных чисел. Чем больше это отношение, тем хуже сходимость метода.
Пример
Применим градиентный метод к функции F ( x , y ) = sin ( 1 2 x 2 − 1 4 y 2 + 3 ) cos ( 2 x + 1 − e y ) {displaystyle F(x,y)=sin left({frac {1}{2}}x^{2}-{frac {1}{4}}y^{2}+3 ight)cos(2x+1-e^{y})} . Тогда последовательные приближения будут выглядеть так:
Это типичный пример овражной функции. Градиентный метод «прыгает» с одного склона оврага на другой и обратно, иногда почти не двигаясь в нужном направлении, что существенно замедляет сходимость. Другим примером тестовой овражной функции является функция Розенброка.
Усовершенствования
Метод градиентного спуска оказывается очень медленным при движении по оврагу, причём при увеличении числа переменных целевой функции такое поведение метода становится типичным. Для борьбы с этим явлением используется метод оврагов, суть которого очень проста. Сделав два шага градиентного спуска и получив три точки, третий шаг следует сделать в направлении вектора, соединяющего первую и третью точку, вдоль дна оврага.
Для функций, близких к квадратичным, эффективным является метод сопряжённых градиентов.
Применение в искусственных нейронных сетях
Метод градиентного спуска с некоторой модификацией широко применяется для обучения перцептрона и в теории искусственных нейронных сетей известен как метод обратного распространения ошибки. При обучении нейросети типа «персептрон» требуется изменять весовые коэффициенты сети так, чтобы минимизировать среднюю ошибку на выходе нейронной сети при подаче на вход последовательности обучающих входных данных. Формально, чтобы сделать всего один шаг по методу градиентного спуска (сделать всего одно изменение параметров сети), необходимо подать на вход сети последовательно абсолютно весь набор обучающих данных, для каждого объекта обучающих данных вычислить ошибку и рассчитать необходимую коррекцию коэффициентов сети (но не делать эту коррекцию), и уже после подачи всех данных рассчитать сумму в корректировке каждого коэффициента сети (сумма градиентов) и произвести коррекцию коэффициентов «на один шаг». Очевидно, что при большом наборе обучающих данных алгоритм будет работать крайне медленно, поэтому на практике часто производят корректировку коэффициентов сети после каждого элемента обучения, где значение градиента аппроксимируются градиентом функции стоимости, вычисленном только на одном элементе обучения. Такой метод называют стохастическим градиентным спуском или оперативным градиентным спуском. Стохастический градиентный спуск является одной из форм стохастического приближения. Теория стохастических приближений даёт условия сходимости метода стохастического градиентного спуска.