Идея состоит в том, чтобы делать повторяющиеся шаги в противоположном направлении градиента ( или приблизительного градиента) функции в текущей точке, поскольку это направление наискорейшего спуска. И наоборот, шаг в направлении градиента приведет к траектории, которая максимизирует эту функцию; тогда процедура известна как градиентный подъем . Это особенно полезно в машинном обучении для минимизации функции стоимости или потерь. [ 1] Градиентный спуск не следует путать с алгоритмами локального поиска , хотя оба являются итеративными методами оптимизации .
Градиентный спуск обычно приписывают Огюстену-Луи Коши , который впервые предложил его в 1847 году. [2] Жак Адамар независимо предложил аналогичный метод в 1907 году. [3] [4] Его свойства сходимости для нелинейных задач оптимизации были впервые изучены Хаскеллом Карри в 1944 году, [5] и метод становился все более хорошо изученным и используемым в последующие десятилетия. [6] [7]
Градиентный спуск основан на наблюдении, что если функция многих переменных определена и дифференцируема в окрестности точки , то убывает быстрее всего, если двигаться от в направлении отрицательного градиента в точке . Отсюда следует, что если
для достаточно малого размера шага или скорости обучения , то . Другими словами, член вычитается из , потому что мы хотим двигаться против градиента, к локальному минимуму. Имея это наблюдение в виду, начинаем с предположения для локального минимума , и рассматриваем последовательность так, что
так что последовательность сходится к желаемому локальному минимуму. Обратите внимание, что значение размера шага может изменяться на каждой итерации.
Можно гарантировать сходимость к локальному минимуму при определенных предположениях относительно функции (например, выпуклой и липшицевой ) и конкретных вариантах выбора . К ним относится последовательность
Этот процесс проиллюстрирован на соседнем рисунке. Здесь предполагается, что определено на плоскости, и что его график имеет форму чаши . Синие кривые — это контурные линии , то есть области, на которых значение постоянно. Красная стрелка, исходящая из точки, показывает направление отрицательного градиента в этой точке. Обратите внимание, что (отрицательный) градиент в точке ортогонален контурной линии, проходящей через эту точку. Мы видим, что градиентный спуск приводит нас ко дну чаши, то есть к точке, где значение функции минимально.
Аналогия для понимания градиентного спуска
Основная интуиция, лежащая в основе градиентного спуска, может быть проиллюстрирована гипотетическим сценарием. Люди застряли в горах и пытаются спуститься (т. е. пытаются найти глобальный минимум). Сильный туман, из-за которого видимость крайне низкая. Следовательно, путь вниз по горе не виден, поэтому они должны использовать локальную информацию, чтобы найти минимум. Они могут использовать метод градиентного спуска, который заключается в том, чтобы посмотреть на крутизну холма в их текущем положении, а затем продолжить движение в направлении с самым крутым спуском (т. е. под гору). Если бы они пытались найти вершину горы (т. е. максимум), то они бы продолжили движение в направлении самого крутого подъема (т. е. в гору). Используя этот метод, они в конечном итоге нашли бы свой путь вниз по горе или, возможно, застряли бы в какой-нибудь яме (т. е. локальном минимуме или седловине ), например, в горном озере. Однако предположим также, что крутизна холма не сразу очевидна при простом наблюдении, а скорее требует сложного инструмента для измерения, который у людей есть в данный момент. Измерение крутизны холма с помощью инструмента занимает довольно много времени, поэтому им следует свести использование инструмента к минимуму, если они хотят спуститься с горы до захода солнца. Затем сложность заключается в выборе частоты, с которой они должны измерять крутизну холма, чтобы не сбиться с пути.
В этой аналогии люди представляют алгоритм, а путь, пройденный с горы, представляет последовательность настроек параметров, которые алгоритм будет исследовать. Крутизна холма представляет наклон функции в этой точке. Инструментом, используемым для измерения крутизны, является дифференциация . Направление, в котором они выбирают движение, совпадает с градиентом функции в этой точке. Количество времени, которое они проходят, прежде чем сделать следующее измерение, является размером шага. Если они сойдут со скалы в тумане, они оптимизируют свой путь спуска.
Выбор размера шага и направления спуска
Поскольку использование слишком маленького размера шага замедлит сходимость, а слишком большой приведет к перерегулированию и расхождению, поиск хорошей настройки является важной практической проблемой. Филип Вулф также выступал за использование «умного выбора направления [спуска]» на практике. [10] Хотя использование направления, которое отклоняется от направления самого крутого спуска, может показаться нелогичным, идея заключается в том, что меньший уклон может быть компенсирован за счет поддержания на гораздо большем расстоянии.
Чтобы рассуждать об этом математически, рассмотрим направление и размер шага , а также рассмотрим более общее обновление:
.
Поиск хороших настроек и требует некоторых размышлений. Прежде всего, мы хотели бы, чтобы направление обновления указывало вниз. Математически, обозначив угол между и , это требует, чтобы Чтобы сказать больше, нам нужно больше информации о целевой функции, которую мы оптимизируем. При довольно слабом предположении, что она непрерывно дифференцируема, мы можем доказать, что: [11]
Это неравенство подразумевает, что величина, на которую мы можем быть уверены, что функция уменьшается, зависит от компромисса между двумя членами в квадратных скобках. Первый член в квадратных скобках измеряет угол между направлением спуска и отрицательным градиентом. Второй член измеряет, насколько быстро градиент изменяется вдоль направления спуска.
В принципе неравенство ( 1 ) можно оптимизировать по и выбрать оптимальный размер шага и направление. Проблема в том, что оценка второго члена в квадратных скобках требует оценки , а дополнительные оценки градиента обычно дороги и нежелательны. Вот несколько способов обойти эту проблему:
Откажитесь от преимуществ умного направления спуска, установив , и используйте линейный поиск для поиска подходящего размера шага , например, удовлетворяющего условиям Вульфа . Более экономичным способом выбора скоростей обучения является линейный поиск с возвратом , метод, который имеет как хорошие теоретические гарантии, так и экспериментальные результаты. Обратите внимание, что не нужно выбирать градиент; любое направление, которое имеет положительный внутренний продукт с градиентом, приведет к уменьшению значения функции (для достаточно малого значения ).
Предполагая, что дважды дифференцируема, используем ее гессиан для оценки Затем выбираем и оптимизируя неравенство ( 1 ).
Предполагая, что является липшицевым , используем его константу Липшица для ограничения. Затем выбираем и оптимизируем неравенство ( 1 ).
Постройте пользовательскую модель для . Затем выберите и оптимизировав неравенство ( 1 ).
При более сильных предположениях относительно функции , таких как выпуклость , могут быть возможны более продвинутые методы.
Обычно, следуя одному из рецептов выше, можно гарантировать сходимость к локальному минимуму. Когда функция выпукла , все локальные минимумы также являются глобальными минимумами, поэтому в этом случае градиентный спуск может сходиться к глобальному решению.
переформулировать как квадратичную задачу минимизации. Если матрица системы является действительной симметричной и положительно определенной , целевая функция определяется как квадратичная функция с минимизацией
В традиционном линейном методе наименьших квадратов для действительных чисел используется евклидова норма, в этом случае
Минимизация линейного поиска , нахождение локально оптимального размера шага на каждой итерации, может быть выполнена аналитически для квадратичных функций, и известны явные формулы для локально оптимального . [6] [13]
Чтобы избежать умножения на дважды за итерацию, заметим, что подразумевает , что дает традиционный алгоритм, [14]
Метод редко используется для решения линейных уравнений, причем метод сопряженного градиента является одной из самых популярных альтернатив. Количество итераций градиентного спуска обычно пропорционально спектральному числу обусловленности системной матрицы (отношение максимального к минимальному собственному значению ) , в то время как сходимость метода сопряженного градиента обычно определяется квадратным корнем числа обусловленности, т. е. намного быстрее. Оба метода могут выиграть от предварительной обусловленности , где градиентный спуск может потребовать меньше предположений о предварительном обуславливателе. [14]
Решение нелинейной системы
Градиентный спуск также может быть использован для решения системы нелинейных уравнений . Ниже приведен пример, показывающий, как использовать градиентный спуск для решения для трех неизвестных переменных x 1 , x 2 и x 3 . Этот пример показывает одну итерацию градиентного спуска.
Рассмотрим нелинейную систему уравнений
Введем ассоциированную функцию
где
Теперь можно определить целевую функцию
которые мы попытаемся минимизировать. В качестве первоначальной догадки давайте используем
Это можно сделать с помощью любого из множества алгоритмов поиска по строке . Можно также просто угадать, что дает
Оценка целевой функции при этом значении дает
Уменьшение от до значения следующего шага
значительное уменьшение целевой функции. Дальнейшие шаги еще больше уменьшат ее значение, пока не будет найдено приближенное решение системы.
Комментарии
Градиентный спуск работает в пространствах любого количества измерений, даже в бесконечномерных. В последнем случае пространство поиска обычно является функциональным пространством , и вычисляется производная Фреше минимизируемого функционала для определения направления спуска. [7]
То, что градиентный спуск работает в любом количестве измерений (по крайней мере, конечном), можно рассматривать как следствие неравенства Коши-Шварца , то есть величина внутреннего (скалярного) произведения двух векторов любого измерения максимальна, когда они коллинеарны . В случае градиентного спуска это будет тогда, когда вектор независимых переменных корректировок пропорционален градиентному вектору частных производных.
Градиентный спуск может потребовать много итераций для вычисления локального минимума с требуемой точностью , если кривизна в разных направлениях сильно отличается для данной функции. Для таких функций предобуславливание , которое изменяет геометрию пространства, формируя множества уровня функции как концентрические окружности , устраняет медленную сходимость. Однако построение и применение предобуславливания может быть вычислительно затратным.
Градиентный спуск может быть модифицирован с помощью импульсов [15] ( Нестеров , Поляк, [16] и Франк-Вульф [17] ) и параметров тяжелого шара (экспоненциальные скользящие средние [18] и положительно-отрицательный импульс [19] ). Основными примерами таких оптимизаторов являются Adam, DiffGrad, Yogi, AdaBelief и т. д.
Методы, основанные на методе Ньютона и инверсии гессиана с использованием методов сопряженных градиентов , могут быть лучшими альтернативами. [20] [21] Как правило, такие методы сходятся за меньшее количество итераций, но стоимость каждой итерации выше. Примером является метод BFGS , который заключается в вычислении на каждом шаге матрицы, на которую умножается вектор градиента, чтобы перейти в «лучшее» направление, в сочетании с более сложным алгоритмом линейного поиска , чтобы найти «лучшее» значение Для чрезвычайно больших задач, где доминируют проблемы с памятью компьютера, вместо BFGS или самого крутого спуска следует использовать метод с ограниченной памятью, такой как L-BFGS .
Градиентный спуск может сходиться к локальному минимуму и замедляться в окрестности седловой точки . Даже для неограниченной квадратичной минимизации градиентный спуск развивает зигзагообразный узор последующих итераций по мере продвижения итераций, что приводит к медленной сходимости. Для устранения этих недостатков было предложено несколько модификаций градиентного спуска.
Быстрые градиентные методы
Юрий Нестеров предложил [23] простую модификацию, которая обеспечивает более быструю сходимость для выпуклых задач, и с тех пор она была дополнительно обобщена. Для гладких задач без ограничений метод называется быстрым градиентным методом (FGM) или ускоренным градиентным методом (AGM). В частности, если дифференцируемая функция выпукла и является липшицевой , и не предполагается, что является сильно выпуклой , то ошибка в целевом значении, генерируемая на каждом шаге методом градиентного спуска, будет ограничена . При использовании метода ускорения Нестерова ошибка уменьшается на . [24] [25] Известно, что скорость убывания функции стоимости является оптимальной для методов оптимизации первого порядка. Тем не менее, есть возможность улучшить алгоритм, уменьшив постоянный множитель. Оптимизированный градиентный метод (OGM) [26] уменьшает эту константу в два раза и является оптимальным методом первого порядка для крупномасштабных задач. [27]
Для задач с ограничениями или негладких задач метод FGM Нестерова называется методом быстрого проксимального градиента (FPGM), ускорением метода проксимального градиента .
Импульс илитяжелый мячметод
Пытаясь сломать зигзагообразный узор градиентного спуска, метод импульса или тяжелого шара использует член импульса по аналогии с тяжелым шаром, скользящим по поверхности значений минимизируемой функции, [6] или с движением массы в ньютоновской динамике через вязкую среду в консервативном силовом поле. [28] Градиентный спуск с импульсом запоминает обновление решения на каждой итерации и определяет следующее обновление как линейную комбинацию градиента и предыдущего обновления. Для безусловной квадратичной минимизации теоретическая граница скорости сходимости метода тяжелого шара асимптотически такая же, как и для оптимального метода сопряженных градиентов . [6]
Градиентный спуск может быть расширен для обработки ограничений путем включения проекции на набор ограничений. Этот метод осуществим только тогда, когда проекция эффективно вычисляется на компьютере. При соответствующих предположениях этот метод сходится. Этот метод является частным случаем алгоритма вперед-назад для монотонных включений (который включает выпуклое программирование и вариационные неравенства ). [31]
^ ab Boyd, Stephen; Vandenberghe, Lieven (2004-03-08). Выпуклая оптимизация. Cambridge University Press. doi :10.1017/cbo9780511804441. ISBN 978-0-521-83378-3.
^ Lemaréchal, C. (2012). «Коши и градиентный метод» (PDF) . Doc Math Extra : 251–254. Архивировано из оригинала (PDF) 29-12-2018 . Получено 26-01-2020 .
^ Адамар, Жак (1908). «Мемуар о проблеме анализа, связанной с равновесием эластичных бляшек». Мемуары представлены дайверами и иностранцами в Академии наук Института Франции . 33 .
^ Курант, Р. (1943). «Вариационные методы решения задач равновесия и колебаний». Бюллетень Американского математического общества . 49 (1): 1–23. doi : 10.1090/S0002-9904-1943-07818-4 .
^ Карри, Хаскелл Б. (1944). «Метод наискорейшего спуска для нелинейных задач минимизации». Quart. Appl. Math . 2 (3): 258–261. doi : 10.1090/qam/10667 .
^ abcde Поляк, Борис (1987). Введение в оптимизацию.
^ Барзилай, Джонатан; Борвейн, Джонатан М. (1988). «Двухточечные методы градиента с шагом». Журнал численного анализа IMA . 8 (1): 141–148. doi :10.1093/imanum/8.1.141.
^ Флетчер, Р. (2005). «О методе Барзилая–Борвейна». В Qi, L.; Teo, K.; Yang, X. (ред.). Оптимизация и управление с приложениями . Прикладная оптимизация. Т. 96. Бостон: Springer. С. 235–256. ISBN0-387-24254-6.
^ Вулф, Филипп (апрель 1969). «Условия сходимости для методов восхождения». Обзор SIAM . 11 (2): 226–235. doi :10.1137/1011036.
^ Бернстайн, Джереми; Вахдат, Араш; Юэ, Исонг; Лю, Мин-Ю (2020-06-12). «О расстоянии между двумя нейронными сетями и стабильности обучения». arXiv : 2002.03432 [cs.LG].
^ Хайкин, Саймон С. Теория адаптивного фильтра. Pearson Education India, 2008. - стр. 108-142, 217-242
^ Саад, Юсеф (2003). Итерационные методы для разреженных линейных систем (2-е изд.). Филадельфия, Пенсильвания: Общество промышленной и прикладной математики. С. 195. ISBN978-0-89871-534-7.
^ ab Bouwmeester, Henricus; Dougherty, Andrew; Knyazev, Andrew V. (2015). «Несимметричное предварительное обусловливание для методов сопряженного градиента и наискорейшего спуска». Procedia Computer Science . 51 : 276–285. arXiv : 1212.6680 . doi : 10.1016/j.procs.2015.05.241 .
^ Абдулкадыров, Руслан; Ляхов, Павел; Нагорнов, Николай (январь 2023 г.). «Обзор алгоритмов оптимизации в современных нейронных сетях». Математика . 11 (11): 2466. doi : 10.3390/math11112466 . ISSN 2227-7390.
^ Диакониколас, Елена; Джордан, Майкл И. (январь 2021 г.). «Обобщенные методы на основе импульса: гамильтоновская перспектива». SIAM Journal on Optimization . 31 (1): 915–944. arXiv : 1906.00436 . doi : 10.1137/20M1322716. ISSN 1052-6234.
^ Мейер, Джерард GL (ноябрь 1974 г.). «Ускоренные алгоритмы Франка–Вульфа». Журнал SIAM по управлению . 12 (4): 655–663. doi :10.1137/0312050. ISSN 0036-1402.
^ Страц, Т. (2016). Подгонка данных и неопределенность: практическое введение в метод взвешенных наименьших квадратов и далее (2-е изд.). Springer Vieweg. ISBN978-3-658-11455-8.
^ Росс, ИМ (июль 2019 г.). «Оптимальная теория управления для нелинейной оптимизации». Журнал вычислительной и прикладной математики . 354 : 39–51. doi : 10.1016/j.cam.2018.12.044 . S2CID 127649426.
^ Нестеров, Юрий (2004). Вводные лекции по выпуклой оптимизации: базовый курс . Springer. ISBN1-4020-7553-7.
^ Ванденберге, Ливен (2019). «Методы быстрого градиента» (PDF) . Конспекты лекций по EE236C в Калифорнийском университете в Лос-Анджелесе .
^ Walkington, Noel J. (2023). «Метод Нестерова для выпуклой оптимизации». Обзор SIAM . 65 (2): 539–562. doi :10.1137/21M1390037. ISSN 0036-1445.
^ Ким, Д.; Фесслер, Дж . А. (2016). «Оптимизированные методы первого порядка для гладкой выпуклой минимизации». Математическое программирование . 151 (1–2): 81–107. arXiv : 1406.5468 . doi :10.1007/s10107-015-0949-3. PMC 5067109. PMID 27765996. S2CID 207055414.
^ Дрори, Йоэль (2017). «Точная информационная сложность гладкой выпуклой минимизации». Журнал сложности . 39 : 1–16. arXiv : 1606.01424 . doi : 10.1016/j.jco.2016.11.001. S2CID 205861966.
^ Цянь, Нин (январь 1999). «О члене импульса в алгоритмах обучения градиентного спуска». Нейронные сети . 12 (1): 145–151. CiteSeerX 10.1.1.57.5612 . doi :10.1016/S0893-6080(98)00116-6. PMID 12662723. S2CID 2783597.
^ "Momentum and Learning Rate Adaptation". Willamette University . Получено 17 октября 2014 г.
^ Джеффри Хинтон ; Нитиш Шривастава; Кевин Сверски. «Метод импульса». Coursera . Получено 2 октября 2018 г.Часть цикла лекций для онлайн-курса Coursera «Нейронные сети для машинного обучения». Архивировано 31 декабря 2016 г. на Wayback Machine .
^ Combettes, PL; Pesquet, J.-C. (2011). «Методы проксимального расщепления в обработке сигналов». В Bauschke, HH; Burachik, RS ; Combettes, PL; Elser, V.; Luke, DR; Wolkowicz, H. (ред.). Алгоритмы с фиксированной точкой для обратных задач в науке и технике . Нью-Йорк: Springer. стр. 185–212. arXiv : 0912.3522 . ISBN978-1-4419-9568-1.
^ «Алгоритм зеркального спуска».
^ ab Bubeck, S. (2014). Теория выпуклой оптимизации для машинного обучения. ArXiv, abs/1405.4980.
Дальнейшее чтение
Бойд, Стивен ; Ванденберг, Ливен (2004). "Безусловная минимизация" (PDF) . Выпуклая оптимизация . Нью-Йорк: Cambridge University Press. С. 457–520. ISBN 0-521-83378-7.
Чонг, Эдвин КП; Зак, Станислав Х. (2013). «Градиентные методы». Введение в оптимизацию (четвертое изд.). Hoboken: Wiley. стр. 131–160. ISBN 978-1-118-27901-4.
Химмельблау, Дэвид М. (1972). «Процедуры без ограничений минимизации с использованием производных». Прикладное нелинейное программирование . Нью-Йорк: McGraw-Hill. С. 63–132. ISBN 0-07-028921-2.
Внешние ссылки
На Викискладе есть медиафайлы по теме «Градиентный спуск» .
Использование градиентного спуска в C++, Boost, Ublas для линейной регрессии
Серия видеороликов Академии Хана, посвященная градиентному подъему
Онлайн-книга по градиентному спуску в контексте глубоких нейронных сетей
Архивировано в Ghostarchive и Wayback Machine: «Градиентный спуск, как обучаются нейронные сети». 3Blue1Brown . 16 октября 2017 г. – через YouTube .
Справочник по теоремам сходимости для (стохастических) градиентных методов